diff --git a/404.html b/404.html index bea6cfb4f..004e24eed 100644 --- a/404.html +++ b/404.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/FAQ/index.html b/FAQ/index.html index 8e4b4b353..e3955b7d5 100644 --- a/FAQ/index.html +++ b/FAQ/index.html @@ -714,6 +714,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/access-rules/index.html b/access-rules/index.html index 4fa8e1baf..5d0285a9f 100644 --- a/access-rules/index.html +++ b/access-rules/index.html @@ -771,6 +771,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/afterschool-program/index.html b/afterschool-program/index.html index 257b50295..3863df854 100644 --- a/afterschool-program/index.html +++ b/afterschool-program/index.html @@ -746,6 +746,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/ai-assistant/index.html b/ai-assistant/index.html index 01b82487b..caf9d3f7e 100644 --- a/ai-assistant/index.html +++ b/ai-assistant/index.html @@ -714,6 +714,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/api/index.html b/api/index.html index 1dda5087c..018b530cc 100644 --- a/api/index.html +++ b/api/index.html @@ -2980,6 +2980,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/authorship/index.html b/authorship/index.html index d228dee48..0f5c3a3a8 100644 --- a/authorship/index.html +++ b/authorship/index.html @@ -707,6 +707,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/automatic-backups/index.html b/automatic-backups/index.html index 911abe00d..d66ac4459 100644 --- a/automatic-backups/index.html +++ b/automatic-backups/index.html @@ -706,6 +706,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/browser-support/index.html b/browser-support/index.html index a4961f680..de4e86177 100644 --- a/browser-support/index.html +++ b/browser-support/index.html @@ -678,6 +678,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/enums/GristData.GristObjCode/index.html b/code/enums/GristData.GristObjCode/index.html index ad0fcd55a..4bed6101d 100644 --- a/code/enums/GristData.GristObjCode/index.html +++ b/code/enums/GristData.GristObjCode/index.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/index.html b/code/index.html index 233bf328a..5d80fc2da 100644 --- a/code/index.html +++ b/code/index.html @@ -691,6 +691,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.AddOrUpdateRecord/index.html b/code/interfaces/DocApiTypes.AddOrUpdateRecord/index.html index 94a70b53d..77550bb03 100644 --- a/code/interfaces/DocApiTypes.AddOrUpdateRecord/index.html +++ b/code/interfaces/DocApiTypes.AddOrUpdateRecord/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.MinimalRecord/index.html b/code/interfaces/DocApiTypes.MinimalRecord/index.html index 29fb42ef0..3cf488d5b 100644 --- a/code/interfaces/DocApiTypes.MinimalRecord/index.html +++ b/code/interfaces/DocApiTypes.MinimalRecord/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.NewRecord/index.html b/code/interfaces/DocApiTypes.NewRecord/index.html index e96a98675..3d42ab93e 100644 --- a/code/interfaces/DocApiTypes.NewRecord/index.html +++ b/code/interfaces/DocApiTypes.NewRecord/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.Record/index.html b/code/interfaces/DocApiTypes.Record/index.html index 72fbc09d4..99333c81b 100644 --- a/code/interfaces/DocApiTypes.Record/index.html +++ b/code/interfaces/DocApiTypes.Record/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.RecordsPatch/index.html b/code/interfaces/DocApiTypes.RecordsPatch/index.html index 45b7fc472..0647c4ed9 100644 --- a/code/interfaces/DocApiTypes.RecordsPatch/index.html +++ b/code/interfaces/DocApiTypes.RecordsPatch/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.RecordsPost/index.html b/code/interfaces/DocApiTypes.RecordsPost/index.html index 941d94358..5c1a88ba5 100644 --- a/code/interfaces/DocApiTypes.RecordsPost/index.html +++ b/code/interfaces/DocApiTypes.RecordsPost/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.RecordsPut/index.html b/code/interfaces/DocApiTypes.RecordsPut/index.html index afade1fae..dbe60dfe5 100644 --- a/code/interfaces/DocApiTypes.RecordsPut/index.html +++ b/code/interfaces/DocApiTypes.RecordsPut/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.SqlPost/index.html b/code/interfaces/DocApiTypes.SqlPost/index.html index 3cca39a65..97286b36f 100644 --- a/code/interfaces/DocApiTypes.SqlPost/index.html +++ b/code/interfaces/DocApiTypes.SqlPost/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/DocApiTypes.TablePost/index.html b/code/interfaces/DocApiTypes.TablePost/index.html index 65b537e43..ebc9e026a 100644 --- a/code/interfaces/DocApiTypes.TablePost/index.html +++ b/code/interfaces/DocApiTypes.TablePost/index.html @@ -694,6 +694,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/GristData.RowRecord/index.html b/code/interfaces/GristData.RowRecord/index.html index 90ff5dd8d..310c7c5aa 100644 --- a/code/interfaces/GristData.RowRecord/index.html +++ b/code/interfaces/GristData.RowRecord/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/GristData.RowRecords/index.html b/code/interfaces/GristData.RowRecords/index.html index dc46cb195..d0c2d26cb 100644 --- a/code/interfaces/GristData.RowRecords/index.html +++ b/code/interfaces/GristData.RowRecords/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/TableOperations.OpOptions/index.html b/code/interfaces/TableOperations.OpOptions/index.html index bc4ec864c..216eb4f6a 100644 --- a/code/interfaces/TableOperations.OpOptions/index.html +++ b/code/interfaces/TableOperations.OpOptions/index.html @@ -704,6 +704,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/TableOperations.TableOperations/index.html b/code/interfaces/TableOperations.TableOperations/index.html index 120c06d0e..3cdbe2dbb 100644 --- a/code/interfaces/TableOperations.TableOperations/index.html +++ b/code/interfaces/TableOperations.TableOperations/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/TableOperations.UpsertOptions/index.html b/code/interfaces/TableOperations.UpsertOptions/index.html index dd839562d..d7381596a 100644 --- a/code/interfaces/TableOperations.UpsertOptions/index.html +++ b/code/interfaces/TableOperations.UpsertOptions/index.html @@ -704,6 +704,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.AccessTokenOptions/index.html b/code/interfaces/grist_plugin_api.AccessTokenOptions/index.html index 840212873..cc74bb41c 100644 --- a/code/interfaces/grist_plugin_api.AccessTokenOptions/index.html +++ b/code/interfaces/grist_plugin_api.AccessTokenOptions/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.AccessTokenResult/index.html b/code/interfaces/grist_plugin_api.AccessTokenResult/index.html index 926d1bc45..25db2a0d2 100644 --- a/code/interfaces/grist_plugin_api.AccessTokenResult/index.html +++ b/code/interfaces/grist_plugin_api.AccessTokenResult/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.ColumnToMap/index.html b/code/interfaces/grist_plugin_api.ColumnToMap/index.html index 86b0f20c2..bb7bc349a 100644 --- a/code/interfaces/grist_plugin_api.ColumnToMap/index.html +++ b/code/interfaces/grist_plugin_api.ColumnToMap/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.CursorPos/index.html b/code/interfaces/grist_plugin_api.CursorPos/index.html index e5d1addc1..b4510976a 100644 --- a/code/interfaces/grist_plugin_api.CursorPos/index.html +++ b/code/interfaces/grist_plugin_api.CursorPos/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.CustomSectionAPI/index.html b/code/interfaces/grist_plugin_api.CustomSectionAPI/index.html index 79b62da72..f74818b18 100644 --- a/code/interfaces/grist_plugin_api.CustomSectionAPI/index.html +++ b/code/interfaces/grist_plugin_api.CustomSectionAPI/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.FetchSelectedOptions/index.html b/code/interfaces/grist_plugin_api.FetchSelectedOptions/index.html index 3d6e3de91..2f5e94144 100644 --- a/code/interfaces/grist_plugin_api.FetchSelectedOptions/index.html +++ b/code/interfaces/grist_plugin_api.FetchSelectedOptions/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.GristColumn/index.html b/code/interfaces/grist_plugin_api.GristColumn/index.html index 7d5528dd1..fcde1663d 100644 --- a/code/interfaces/grist_plugin_api.GristColumn/index.html +++ b/code/interfaces/grist_plugin_api.GristColumn/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.GristDocAPI/index.html b/code/interfaces/grist_plugin_api.GristDocAPI/index.html index 273660426..4650fad8e 100644 --- a/code/interfaces/grist_plugin_api.GristDocAPI/index.html +++ b/code/interfaces/grist_plugin_api.GristDocAPI/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.GristTable/index.html b/code/interfaces/grist_plugin_api.GristTable/index.html index 23cda060c..adfef8528 100644 --- a/code/interfaces/grist_plugin_api.GristTable/index.html +++ b/code/interfaces/grist_plugin_api.GristTable/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.GristView/index.html b/code/interfaces/grist_plugin_api.GristView/index.html index 7cc6d83c4..4f69f6c6c 100644 --- a/code/interfaces/grist_plugin_api.GristView/index.html +++ b/code/interfaces/grist_plugin_api.GristView/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.InteractionOptions/index.html b/code/interfaces/grist_plugin_api.InteractionOptions/index.html index d52a7cd4c..ac47e59dd 100644 --- a/code/interfaces/grist_plugin_api.InteractionOptions/index.html +++ b/code/interfaces/grist_plugin_api.InteractionOptions/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.InteractionOptionsRequest/index.html b/code/interfaces/grist_plugin_api.InteractionOptionsRequest/index.html index 82e3a2887..ad0c4be94 100644 --- a/code/interfaces/grist_plugin_api.InteractionOptionsRequest/index.html +++ b/code/interfaces/grist_plugin_api.InteractionOptionsRequest/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.ParseOptionSchema/index.html b/code/interfaces/grist_plugin_api.ParseOptionSchema/index.html index a606a0796..fa340d509 100644 --- a/code/interfaces/grist_plugin_api.ParseOptionSchema/index.html +++ b/code/interfaces/grist_plugin_api.ParseOptionSchema/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.ParseOptions/index.html b/code/interfaces/grist_plugin_api.ParseOptions/index.html index 670816db0..8854f5f93 100644 --- a/code/interfaces/grist_plugin_api.ParseOptions/index.html +++ b/code/interfaces/grist_plugin_api.ParseOptions/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.ReadyPayload/index.html b/code/interfaces/grist_plugin_api.ReadyPayload/index.html index ea71fae2d..94e30e212 100644 --- a/code/interfaces/grist_plugin_api.ReadyPayload/index.html +++ b/code/interfaces/grist_plugin_api.ReadyPayload/index.html @@ -704,6 +704,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.RenderOptions/index.html b/code/interfaces/grist_plugin_api.RenderOptions/index.html index 0632dd118..a3cf8aae6 100644 --- a/code/interfaces/grist_plugin_api.RenderOptions/index.html +++ b/code/interfaces/grist_plugin_api.RenderOptions/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.WidgetAPI/index.html b/code/interfaces/grist_plugin_api.WidgetAPI/index.html index 28930e8c7..9dd8d967d 100644 --- a/code/interfaces/grist_plugin_api.WidgetAPI/index.html +++ b/code/interfaces/grist_plugin_api.WidgetAPI/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/interfaces/grist_plugin_api.WidgetColumnMap/index.html b/code/interfaces/grist_plugin_api.WidgetColumnMap/index.html index 04cc0547f..085b21d9a 100644 --- a/code/interfaces/grist_plugin_api.WidgetColumnMap/index.html +++ b/code/interfaces/grist_plugin_api.WidgetColumnMap/index.html @@ -689,6 +689,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/modules/DocApiTypes/index.html b/code/modules/DocApiTypes/index.html index 42fd3d757..51bbba106 100644 --- a/code/modules/DocApiTypes/index.html +++ b/code/modules/DocApiTypes/index.html @@ -694,6 +694,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/modules/GristData/index.html b/code/modules/GristData/index.html index 8e2642cdf..8c958ec80 100644 --- a/code/modules/GristData/index.html +++ b/code/modules/GristData/index.html @@ -699,6 +699,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/modules/TableOperations/index.html b/code/modules/TableOperations/index.html index 2e1ffa28d..f0e825352 100644 --- a/code/modules/TableOperations/index.html +++ b/code/modules/TableOperations/index.html @@ -694,6 +694,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/code/modules/grist_plugin_api/index.html b/code/modules/grist_plugin_api/index.html index 2f86dca3a..38e5c8236 100644 --- a/code/modules/grist_plugin_api/index.html +++ b/code/modules/grist_plugin_api/index.html @@ -709,6 +709,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/col-refs/index.html b/col-refs/index.html index ef9005b5d..5f38cc1bc 100644 --- a/col-refs/index.html +++ b/col-refs/index.html @@ -739,6 +739,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/col-transform/index.html b/col-transform/index.html index 84a28344c..287055ffe 100644 --- a/col-transform/index.html +++ b/col-transform/index.html @@ -701,6 +701,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/col-types/index.html b/col-types/index.html index 3c977d954..a3e3c825c 100644 --- a/col-types/index.html +++ b/col-types/index.html @@ -774,6 +774,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/conditional-formatting/index.html b/conditional-formatting/index.html index 77b660c36..7b88fcbb5 100644 --- a/conditional-formatting/index.html +++ b/conditional-formatting/index.html @@ -694,6 +694,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/copying-docs/index.html b/copying-docs/index.html index 1f7dde013..e96d3236b 100644 --- a/copying-docs/index.html +++ b/copying-docs/index.html @@ -706,6 +706,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/creating-doc/index.html b/creating-doc/index.html index 933f6a9e4..927c31a53 100644 --- a/creating-doc/index.html +++ b/creating-doc/index.html @@ -707,6 +707,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/custom-layouts/index.html b/custom-layouts/index.html index e1b94a5b9..1fcaa0a6f 100644 --- a/custom-layouts/index.html +++ b/custom-layouts/index.html @@ -718,6 +718,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/data-security/index.html b/data-security/index.html index 6fc675be0..a7daa7e41 100644 --- a/data-security/index.html +++ b/data-security/index.html @@ -682,6 +682,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/dates/index.html b/dates/index.html index 136bcc554..cc959f622 100644 --- a/dates/index.html +++ b/dates/index.html @@ -731,6 +731,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/document-history/index.html b/document-history/index.html index b9ef01589..90c437e48 100644 --- a/document-history/index.html +++ b/document-history/index.html @@ -701,6 +701,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/embedding/index.html b/embedding/index.html index fbab53fdc..38784dc84 100644 --- a/embedding/index.html +++ b/embedding/index.html @@ -705,6 +705,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/enter-data/index.html b/enter-data/index.html index 93f801bb8..9cf13633a 100644 --- a/enter-data/index.html +++ b/enter-data/index.html @@ -711,6 +711,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2020-06-book-club/index.html b/examples/2020-06-book-club/index.html index 3fdd88575..7100ba453 100644 --- a/examples/2020-06-book-club/index.html +++ b/examples/2020-06-book-club/index.html @@ -682,6 +682,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2020-06-credit-card/index.html b/examples/2020-06-credit-card/index.html index dba75d1bb..239d9d385 100644 --- a/examples/2020-06-credit-card/index.html +++ b/examples/2020-06-credit-card/index.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2020-07-email-compose/index.html b/examples/2020-07-email-compose/index.html index cbc081b47..7a6c3076f 100644 --- a/examples/2020-07-email-compose/index.html +++ b/examples/2020-07-email-compose/index.html @@ -678,6 +678,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2020-08-invoices/index.html b/examples/2020-08-invoices/index.html index 72c3e1152..509f53095 100644 --- a/examples/2020-08-invoices/index.html +++ b/examples/2020-08-invoices/index.html @@ -680,6 +680,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2020-09-payroll/index.html b/examples/2020-09-payroll/index.html index ff8b599aa..0806d6709 100644 --- a/examples/2020-09-payroll/index.html +++ b/examples/2020-09-payroll/index.html @@ -678,6 +678,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2020-10-print-labels/index.html b/examples/2020-10-print-labels/index.html index c2f9e3c7d..513144210 100644 --- a/examples/2020-10-print-labels/index.html +++ b/examples/2020-10-print-labels/index.html @@ -680,6 +680,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2020-11-treasure-hunt/index.html b/examples/2020-11-treasure-hunt/index.html index 72e641535..8bc8c920b 100644 --- a/examples/2020-11-treasure-hunt/index.html +++ b/examples/2020-11-treasure-hunt/index.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2020-12-map/index.html b/examples/2020-12-map/index.html index dd5f3522f..6a8a17c5e 100644 --- a/examples/2020-12-map/index.html +++ b/examples/2020-12-map/index.html @@ -680,6 +680,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2021-01-tasks/index.html b/examples/2021-01-tasks/index.html index b94f70228..204508dc3 100644 --- a/examples/2021-01-tasks/index.html +++ b/examples/2021-01-tasks/index.html @@ -682,6 +682,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2021-03-leads/index.html b/examples/2021-03-leads/index.html index 2b7756ed1..8ac95124d 100644 --- a/examples/2021-03-leads/index.html +++ b/examples/2021-03-leads/index.html @@ -680,6 +680,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2021-04-link-keys/index.html b/examples/2021-04-link-keys/index.html index b834fb1d4..4af75a8d3 100644 --- a/examples/2021-04-link-keys/index.html +++ b/examples/2021-04-link-keys/index.html @@ -678,6 +678,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2021-05-reference-columns/index.html b/examples/2021-05-reference-columns/index.html index c6ca28bf7..361215cd4 100644 --- a/examples/2021-05-reference-columns/index.html +++ b/examples/2021-05-reference-columns/index.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2021-06-timesheets/index.html b/examples/2021-06-timesheets/index.html index d25ffd1ef..2c6a53474 100644 --- a/examples/2021-06-timesheets/index.html +++ b/examples/2021-06-timesheets/index.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2021-07-auto-stamps/index.html b/examples/2021-07-auto-stamps/index.html index 8761857e3..c5cf4acfd 100644 --- a/examples/2021-07-auto-stamps/index.html +++ b/examples/2021-07-auto-stamps/index.html @@ -682,6 +682,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2023-01-acl-memo/index.html b/examples/2023-01-acl-memo/index.html index 732205324..19e400c5e 100644 --- a/examples/2023-01-acl-memo/index.html +++ b/examples/2023-01-acl-memo/index.html @@ -682,6 +682,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/2023-07-proposals-contracts/index.html b/examples/2023-07-proposals-contracts/index.html index eba6f47f6..580b7d9c5 100644 --- a/examples/2023-07-proposals-contracts/index.html +++ b/examples/2023-07-proposals-contracts/index.html @@ -678,6 +678,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/examples/index.html b/examples/index.html index 1cd18e2fc..0de4e2a81 100644 --- a/examples/index.html +++ b/examples/index.html @@ -678,6 +678,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/exports/index.html b/exports/index.html index 4e6a6b1c0..7602803af 100644 --- a/exports/index.html +++ b/exports/index.html @@ -714,6 +714,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/formula-cheat-sheet/index.html b/formula-cheat-sheet/index.html index d599353c2..ca92d1817 100644 --- a/formula-cheat-sheet/index.html +++ b/formula-cheat-sheet/index.html @@ -706,6 +706,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/formula-timer/index.html b/formula-timer/index.html index a0f87dc15..f1cb04e2d 100644 --- a/formula-timer/index.html +++ b/formula-timer/index.html @@ -694,6 +694,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/formulas/index.html b/formulas/index.html index fcbea1507..0174d570c 100644 --- a/formulas/index.html +++ b/formulas/index.html @@ -745,6 +745,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/404.html b/fr/404.html index afe99df42..e4f173ced 100644 --- a/fr/404.html +++ b/fr/404.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/FAQ/index.html b/fr/FAQ/index.html index ad6e0e6a2..cf6be7537 100644 --- a/fr/FAQ/index.html +++ b/fr/FAQ/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/access-rules/index.html b/fr/access-rules/index.html index 742a30463..fe8457532 100644 --- a/fr/access-rules/index.html +++ b/fr/access-rules/index.html @@ -635,6 +635,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/afterschool-program/index.html b/fr/afterschool-program/index.html index 747fa1fe7..63d30bfa3 100644 --- a/fr/afterschool-program/index.html +++ b/fr/afterschool-program/index.html @@ -608,6 +608,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/ai-assistant/index.html b/fr/ai-assistant/index.html index 82fc3706a..98ba9bed0 100644 --- a/fr/ai-assistant/index.html +++ b/fr/ai-assistant/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/api/index.html b/fr/api/index.html index f4c7372b7..0f7c48614 100644 --- a/fr/api/index.html +++ b/fr/api/index.html @@ -2844,6 +2844,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/authorship/index.html b/fr/authorship/index.html index 3a7c0a8af..f91cd265c 100644 --- a/fr/authorship/index.html +++ b/fr/authorship/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/automatic-backups/index.html b/fr/automatic-backups/index.html index db53b8099..c906d8705 100644 --- a/fr/automatic-backups/index.html +++ b/fr/automatic-backups/index.html @@ -568,6 +568,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/browser-support/index.html b/fr/browser-support/index.html index 879f047dc..6dea3b66d 100644 --- a/fr/browser-support/index.html +++ b/fr/browser-support/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/code/index.html b/fr/code/index.html index 6aa14784d..d1f37289d 100644 --- a/fr/code/index.html +++ b/fr/code/index.html @@ -555,6 +555,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/code/modules/grist_plugin_api/index.html b/fr/code/modules/grist_plugin_api/index.html index 6a903770d..eaf3c0ed1 100644 --- a/fr/code/modules/grist_plugin_api/index.html +++ b/fr/code/modules/grist_plugin_api/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/col-refs/index.html b/fr/col-refs/index.html index a211da407..6661c0254 100644 --- a/fr/col-refs/index.html +++ b/fr/col-refs/index.html @@ -598,6 +598,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/col-transform/index.html b/fr/col-transform/index.html index a8a68a0cd..a39bcd8ec 100644 --- a/fr/col-transform/index.html +++ b/fr/col-transform/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/col-types/index.html b/fr/col-types/index.html index a4864cdc9..4dde1f116 100644 --- a/fr/col-types/index.html +++ b/fr/col-types/index.html @@ -638,6 +638,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/conditional-formatting/index.html b/fr/conditional-formatting/index.html index 4ad244011..3485606ed 100644 --- a/fr/conditional-formatting/index.html +++ b/fr/conditional-formatting/index.html @@ -558,6 +558,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/copying-docs/index.html b/fr/copying-docs/index.html index 6e9ab28c5..7ddef3cca 100644 --- a/fr/copying-docs/index.html +++ b/fr/copying-docs/index.html @@ -568,6 +568,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/creating-doc/index.html b/fr/creating-doc/index.html index fbfb73354..279bbc025 100644 --- a/fr/creating-doc/index.html +++ b/fr/creating-doc/index.html @@ -571,6 +571,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/custom-layouts/index.html b/fr/custom-layouts/index.html index 8fe845b4e..eb2a1f1e3 100644 --- a/fr/custom-layouts/index.html +++ b/fr/custom-layouts/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/data-security/index.html b/fr/data-security/index.html index f25fa356f..56c3f28a0 100644 --- a/fr/data-security/index.html +++ b/fr/data-security/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/dates/index.html b/fr/dates/index.html index 59dd8eda5..1e650c661 100644 --- a/fr/dates/index.html +++ b/fr/dates/index.html @@ -595,6 +595,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/document-history/index.html b/fr/document-history/index.html index 4c069acbf..76b801ee6 100644 --- a/fr/document-history/index.html +++ b/fr/document-history/index.html @@ -565,6 +565,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/embedding/index.html b/fr/embedding/index.html index df2eb32ff..6ffc04a5e 100644 --- a/fr/embedding/index.html +++ b/fr/embedding/index.html @@ -569,6 +569,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/enter-data/index.html b/fr/enter-data/index.html index ba486f0ce..565d392f8 100644 --- a/fr/enter-data/index.html +++ b/fr/enter-data/index.html @@ -575,6 +575,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2020-06-book-club/index.html b/fr/examples/2020-06-book-club/index.html index f94d38a84..e6f3e71b1 100644 --- a/fr/examples/2020-06-book-club/index.html +++ b/fr/examples/2020-06-book-club/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2020-06-credit-card/index.html b/fr/examples/2020-06-credit-card/index.html index 4ab922ff3..827c133e0 100644 --- a/fr/examples/2020-06-credit-card/index.html +++ b/fr/examples/2020-06-credit-card/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2020-07-email-compose/index.html b/fr/examples/2020-07-email-compose/index.html index 100f429f7..1600c020f 100644 --- a/fr/examples/2020-07-email-compose/index.html +++ b/fr/examples/2020-07-email-compose/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2020-08-invoices/index.html b/fr/examples/2020-08-invoices/index.html index b8e4140ac..e894f1844 100644 --- a/fr/examples/2020-08-invoices/index.html +++ b/fr/examples/2020-08-invoices/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2020-09-payroll/index.html b/fr/examples/2020-09-payroll/index.html index 23dffc317..2603774b1 100644 --- a/fr/examples/2020-09-payroll/index.html +++ b/fr/examples/2020-09-payroll/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2020-10-print-labels/index.html b/fr/examples/2020-10-print-labels/index.html index 89d47396f..c1440e875 100644 --- a/fr/examples/2020-10-print-labels/index.html +++ b/fr/examples/2020-10-print-labels/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2020-11-treasure-hunt/index.html b/fr/examples/2020-11-treasure-hunt/index.html index 09e1a797d..d13f61362 100644 --- a/fr/examples/2020-11-treasure-hunt/index.html +++ b/fr/examples/2020-11-treasure-hunt/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2020-12-map/index.html b/fr/examples/2020-12-map/index.html index 26be051a3..58f3227eb 100644 --- a/fr/examples/2020-12-map/index.html +++ b/fr/examples/2020-12-map/index.html @@ -544,6 +544,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2021-01-tasks/index.html b/fr/examples/2021-01-tasks/index.html index c51d71a1d..096ca8280 100644 --- a/fr/examples/2021-01-tasks/index.html +++ b/fr/examples/2021-01-tasks/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2021-03-leads/index.html b/fr/examples/2021-03-leads/index.html index f9ac15d23..0c86e374e 100644 --- a/fr/examples/2021-03-leads/index.html +++ b/fr/examples/2021-03-leads/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2021-04-link-keys/index.html b/fr/examples/2021-04-link-keys/index.html index 41727aebd..e239245a2 100644 --- a/fr/examples/2021-04-link-keys/index.html +++ b/fr/examples/2021-04-link-keys/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2021-05-reference-columns/index.html b/fr/examples/2021-05-reference-columns/index.html index d4349bd21..3e94dbfb2 100644 --- a/fr/examples/2021-05-reference-columns/index.html +++ b/fr/examples/2021-05-reference-columns/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2021-06-timesheets/index.html b/fr/examples/2021-06-timesheets/index.html index d20bdebef..881ea303c 100644 --- a/fr/examples/2021-06-timesheets/index.html +++ b/fr/examples/2021-06-timesheets/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2021-07-auto-stamps/index.html b/fr/examples/2021-07-auto-stamps/index.html index 8232e5f15..4ff4bfbaf 100644 --- a/fr/examples/2021-07-auto-stamps/index.html +++ b/fr/examples/2021-07-auto-stamps/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2023-01-acl-memo/index.html b/fr/examples/2023-01-acl-memo/index.html index 050ccf278..119745fdc 100644 --- a/fr/examples/2023-01-acl-memo/index.html +++ b/fr/examples/2023-01-acl-memo/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/2023-07-proposals-contracts/index.html b/fr/examples/2023-07-proposals-contracts/index.html index c8ee40269..55dc42786 100644 --- a/fr/examples/2023-07-proposals-contracts/index.html +++ b/fr/examples/2023-07-proposals-contracts/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/examples/index.html b/fr/examples/index.html index e331f71d3..e7eb4cdda 100644 --- a/fr/examples/index.html +++ b/fr/examples/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/exports/index.html b/fr/exports/index.html index 1abcba849..065b67526 100644 --- a/fr/exports/index.html +++ b/fr/exports/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/formula-cheat-sheet/index.html b/fr/formula-cheat-sheet/index.html index e5bae7817..b47c2e123 100644 --- a/fr/formula-cheat-sheet/index.html +++ b/fr/formula-cheat-sheet/index.html @@ -568,6 +568,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/formula-timer/index.html b/fr/formula-timer/index.html index 841026ff3..a77d5c519 100644 --- a/fr/formula-timer/index.html +++ b/fr/formula-timer/index.html @@ -558,6 +558,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/formulas/index.html b/fr/formulas/index.html index 50b65de2e..81bcfd463 100644 --- a/fr/formulas/index.html +++ b/fr/formulas/index.html @@ -609,6 +609,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/functions/index.html b/fr/functions/index.html index 4180569d7..428c668c6 100644 --- a/fr/functions/index.html +++ b/fr/functions/index.html @@ -603,6 +603,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/glossary/index.html b/fr/glossary/index.html index 791d69fd6..0c1e2ce00 100644 --- a/fr/glossary/index.html +++ b/fr/glossary/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/images/newsletters/2024-11/agenda.png b/fr/images/newsletters/2024-11/agenda.png new file mode 100644 index 000000000..4b3a3a70f Binary files /dev/null and b/fr/images/newsletters/2024-11/agenda.png differ diff --git a/fr/images/newsletters/2024-11/audit-logs.png b/fr/images/newsletters/2024-11/audit-logs.png new file mode 100644 index 000000000..283232a37 Binary files /dev/null and b/fr/images/newsletters/2024-11/audit-logs.png differ diff --git a/fr/images/newsletters/2024-11/aws.png b/fr/images/newsletters/2024-11/aws.png new file mode 100644 index 000000000..3b42b725e Binary files /dev/null and b/fr/images/newsletters/2024-11/aws.png differ diff --git a/fr/images/newsletters/2024-11/blog-translate.png b/fr/images/newsletters/2024-11/blog-translate.png new file mode 100644 index 000000000..59b82112e Binary files /dev/null and b/fr/images/newsletters/2024-11/blog-translate.png differ diff --git a/fr/images/newsletters/2024-11/document-type.png b/fr/images/newsletters/2024-11/document-type.png new file mode 100644 index 000000000..aa884f84e Binary files /dev/null and b/fr/images/newsletters/2024-11/document-type.png differ diff --git a/fr/images/newsletters/2024-11/gristimagemap.png b/fr/images/newsletters/2024-11/gristimagemap.png new file mode 100644 index 000000000..f86ada45f Binary files /dev/null and b/fr/images/newsletters/2024-11/gristimagemap.png differ diff --git a/fr/images/newsletters/2024-11/labsv2.png b/fr/images/newsletters/2024-11/labsv2.png new file mode 100644 index 000000000..f3ad61419 Binary files /dev/null and b/fr/images/newsletters/2024-11/labsv2.png differ diff --git a/fr/images/newsletters/2024-11/node-red.png b/fr/images/newsletters/2024-11/node-red.png new file mode 100644 index 000000000..bf2d83c92 Binary files /dev/null and b/fr/images/newsletters/2024-11/node-red.png differ diff --git a/fr/images/newsletters/2024-11/webinar.png b/fr/images/newsletters/2024-11/webinar.png new file mode 100644 index 000000000..f256fcdc7 Binary files /dev/null and b/fr/images/newsletters/2024-11/webinar.png differ diff --git a/fr/imports/index.html b/fr/imports/index.html index 1c02d1dcf..089c9dceb 100644 --- a/fr/imports/index.html +++ b/fr/imports/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/index.html b/fr/index.html index 799d38ecc..7e66e8023 100644 --- a/fr/index.html +++ b/fr/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 @@ -1110,5 +1114,5 @@

    Contactez-nousNewsletters +

  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/audit-log-overview/index.html b/fr/install/audit-log-overview/index.html index 8a7bfff9d..c541e8a4b 100644 --- a/fr/install/audit-log-overview/index.html +++ b/fr/install/audit-log-overview/index.html @@ -572,6 +572,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/audit-log-streaming/index.html b/fr/install/audit-log-streaming/index.html index 4ebb4d7cd..d59854794 100644 --- a/fr/install/audit-log-streaming/index.html +++ b/fr/install/audit-log-streaming/index.html @@ -570,6 +570,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/aws-marketplace/index.html b/fr/install/aws-marketplace/index.html index b51463a17..c5948213e 100644 --- a/fr/install/aws-marketplace/index.html +++ b/fr/install/aws-marketplace/index.html @@ -583,6 +583,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/cloud-storage/index.html b/fr/install/cloud-storage/index.html index a24c6838f..a778bfc95 100644 --- a/fr/install/cloud-storage/index.html +++ b/fr/install/cloud-storage/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/example-docker-nginx/index.html b/fr/install/example-docker-nginx/index.html index 1b869b44d..4fca7bf24 100644 --- a/fr/install/example-docker-nginx/index.html +++ b/fr/install/example-docker-nginx/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/forwarded-headers/index.html b/fr/install/forwarded-headers/index.html index 438e6e607..6b00170c3 100644 --- a/fr/install/forwarded-headers/index.html +++ b/fr/install/forwarded-headers/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/grist-connect/index.html b/fr/install/grist-connect/index.html index e5c4c0b39..779052838 100644 --- a/fr/install/grist-connect/index.html +++ b/fr/install/grist-connect/index.html @@ -553,6 +553,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/oidc/index.html b/fr/install/oidc/index.html index 2aa9d9bce..b5d678efc 100644 --- a/fr/install/oidc/index.html +++ b/fr/install/oidc/index.html @@ -570,6 +570,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/install/saml/index.html b/fr/install/saml/index.html index 12ba1c78b..b47fc164c 100644 --- a/fr/install/saml/index.html +++ b/fr/install/saml/index.html @@ -575,6 +575,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/integrators/index.html b/fr/integrators/index.html index 477f34c6a..b9efc1732 100644 --- a/fr/integrators/index.html +++ b/fr/integrators/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/investment-research/index.html b/fr/investment-research/index.html index 3c494bf52..2f389fbd5 100644 --- a/fr/investment-research/index.html +++ b/fr/investment-research/index.html @@ -593,6 +593,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/keyboard-shortcuts/index.html b/fr/keyboard-shortcuts/index.html index 28a1eef28..0319b64b3 100644 --- a/fr/keyboard-shortcuts/index.html +++ b/fr/keyboard-shortcuts/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/lightweight-crm/index.html b/fr/lightweight-crm/index.html index e72de2bbc..6b0e4cbb0 100644 --- a/fr/lightweight-crm/index.html +++ b/fr/lightweight-crm/index.html @@ -608,6 +608,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/limits/index.html b/fr/limits/index.html index 2eb75147d..4c057ae32 100644 --- a/fr/limits/index.html +++ b/fr/limits/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/linking-widgets/index.html b/fr/linking-widgets/index.html index 38390ed66..4b7747483 100644 --- a/fr/linking-widgets/index.html +++ b/fr/linking-widgets/index.html @@ -595,6 +595,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2020-05/index.html b/fr/newsletters/2020-05/index.html index 557cc6d7d..db73ea9b5 100644 --- a/fr/newsletters/2020-05/index.html +++ b/fr/newsletters/2020-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2020-06/index.html b/fr/newsletters/2020-06/index.html index c51eef842..214b91ab0 100644 --- a/fr/newsletters/2020-06/index.html +++ b/fr/newsletters/2020-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2020-07/index.html b/fr/newsletters/2020-07/index.html index 1ef5986e8..6049b3a93 100644 --- a/fr/newsletters/2020-07/index.html +++ b/fr/newsletters/2020-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2020-08/index.html b/fr/newsletters/2020-08/index.html index 07b82101f..e02ef480c 100644 --- a/fr/newsletters/2020-08/index.html +++ b/fr/newsletters/2020-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2020-09/index.html b/fr/newsletters/2020-09/index.html index 7be337847..7caf3b65e 100644 --- a/fr/newsletters/2020-09/index.html +++ b/fr/newsletters/2020-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2020-10/index.html b/fr/newsletters/2020-10/index.html index 676780a39..737e4ce15 100644 --- a/fr/newsletters/2020-10/index.html +++ b/fr/newsletters/2020-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2020-11/index.html b/fr/newsletters/2020-11/index.html index 84dfc640e..c10be45d5 100644 --- a/fr/newsletters/2020-11/index.html +++ b/fr/newsletters/2020-11/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2020-12/index.html b/fr/newsletters/2020-12/index.html index a2aa22792..8e28272e1 100644 --- a/fr/newsletters/2020-12/index.html +++ b/fr/newsletters/2020-12/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-01/index.html b/fr/newsletters/2021-01/index.html index 5baf7d52e..958741f5b 100644 --- a/fr/newsletters/2021-01/index.html +++ b/fr/newsletters/2021-01/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-02/index.html b/fr/newsletters/2021-02/index.html index e1f7d7fd7..2ea9ccdf7 100644 --- a/fr/newsletters/2021-02/index.html +++ b/fr/newsletters/2021-02/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-03/index.html b/fr/newsletters/2021-03/index.html index 4d07d006c..be836ea88 100644 --- a/fr/newsletters/2021-03/index.html +++ b/fr/newsletters/2021-03/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-04/index.html b/fr/newsletters/2021-04/index.html index 38ec82b87..335c858d0 100644 --- a/fr/newsletters/2021-04/index.html +++ b/fr/newsletters/2021-04/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-05/index.html b/fr/newsletters/2021-05/index.html index 9756ecfd3..0809391d5 100644 --- a/fr/newsletters/2021-05/index.html +++ b/fr/newsletters/2021-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-06/index.html b/fr/newsletters/2021-06/index.html index c18942dc4..4fbe4ed83 100644 --- a/fr/newsletters/2021-06/index.html +++ b/fr/newsletters/2021-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-07/index.html b/fr/newsletters/2021-07/index.html index 98f0c31e0..93c5cb606 100644 --- a/fr/newsletters/2021-07/index.html +++ b/fr/newsletters/2021-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-08/index.html b/fr/newsletters/2021-08/index.html index 060e5bf56..62b99709d 100644 --- a/fr/newsletters/2021-08/index.html +++ b/fr/newsletters/2021-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-09/index.html b/fr/newsletters/2021-09/index.html index aa57e8daa..df40c4555 100644 --- a/fr/newsletters/2021-09/index.html +++ b/fr/newsletters/2021-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-10/index.html b/fr/newsletters/2021-10/index.html index 05d6519f5..8a9a5c4fd 100644 --- a/fr/newsletters/2021-10/index.html +++ b/fr/newsletters/2021-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-11/index.html b/fr/newsletters/2021-11/index.html index e37337a70..095eacd6c 100644 --- a/fr/newsletters/2021-11/index.html +++ b/fr/newsletters/2021-11/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2021-12/index.html b/fr/newsletters/2021-12/index.html index 474c1993c..7cb496142 100644 --- a/fr/newsletters/2021-12/index.html +++ b/fr/newsletters/2021-12/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-01/index.html b/fr/newsletters/2022-01/index.html index 9df205d36..e977b879c 100644 --- a/fr/newsletters/2022-01/index.html +++ b/fr/newsletters/2022-01/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-02/index.html b/fr/newsletters/2022-02/index.html index b0572cd1e..8352e93cf 100644 --- a/fr/newsletters/2022-02/index.html +++ b/fr/newsletters/2022-02/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-03/index.html b/fr/newsletters/2022-03/index.html index 3071c103e..59e581f1e 100644 --- a/fr/newsletters/2022-03/index.html +++ b/fr/newsletters/2022-03/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-04/index.html b/fr/newsletters/2022-04/index.html index 05a3c3c5f..cb12d1f22 100644 --- a/fr/newsletters/2022-04/index.html +++ b/fr/newsletters/2022-04/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-05/index.html b/fr/newsletters/2022-05/index.html index f279919d7..dca7ce39f 100644 --- a/fr/newsletters/2022-05/index.html +++ b/fr/newsletters/2022-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-06/index.html b/fr/newsletters/2022-06/index.html index 82b72b170..196942cbc 100644 --- a/fr/newsletters/2022-06/index.html +++ b/fr/newsletters/2022-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-07/index.html b/fr/newsletters/2022-07/index.html index df08b720e..96949ef44 100644 --- a/fr/newsletters/2022-07/index.html +++ b/fr/newsletters/2022-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-08/index.html b/fr/newsletters/2022-08/index.html index f54d6ddfb..20a24fea0 100644 --- a/fr/newsletters/2022-08/index.html +++ b/fr/newsletters/2022-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-09/index.html b/fr/newsletters/2022-09/index.html index 479b3206f..cee02d5ff 100644 --- a/fr/newsletters/2022-09/index.html +++ b/fr/newsletters/2022-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-10/index.html b/fr/newsletters/2022-10/index.html index a10146b8e..6f3d1da67 100644 --- a/fr/newsletters/2022-10/index.html +++ b/fr/newsletters/2022-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-11/index.html b/fr/newsletters/2022-11/index.html index 16fc060cb..7e075efd1 100644 --- a/fr/newsletters/2022-11/index.html +++ b/fr/newsletters/2022-11/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2022-12/index.html b/fr/newsletters/2022-12/index.html index 372363ea0..c56cc983f 100644 --- a/fr/newsletters/2022-12/index.html +++ b/fr/newsletters/2022-12/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-01/index.html b/fr/newsletters/2023-01/index.html index d20a26d16..567c961df 100644 --- a/fr/newsletters/2023-01/index.html +++ b/fr/newsletters/2023-01/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-02/index.html b/fr/newsletters/2023-02/index.html index f553b7d77..600f17da0 100644 --- a/fr/newsletters/2023-02/index.html +++ b/fr/newsletters/2023-02/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-03/index.html b/fr/newsletters/2023-03/index.html index 5a0884530..9d20bd10b 100644 --- a/fr/newsletters/2023-03/index.html +++ b/fr/newsletters/2023-03/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-04/index.html b/fr/newsletters/2023-04/index.html index 82ebf067b..5c62cbdc9 100644 --- a/fr/newsletters/2023-04/index.html +++ b/fr/newsletters/2023-04/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-05/index.html b/fr/newsletters/2023-05/index.html index f8d634df4..4ff1f60d0 100644 --- a/fr/newsletters/2023-05/index.html +++ b/fr/newsletters/2023-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-06/index.html b/fr/newsletters/2023-06/index.html index 99ded486b..dd58911ce 100644 --- a/fr/newsletters/2023-06/index.html +++ b/fr/newsletters/2023-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-07/index.html b/fr/newsletters/2023-07/index.html index 911213db0..c0db5a28c 100644 --- a/fr/newsletters/2023-07/index.html +++ b/fr/newsletters/2023-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-08/index.html b/fr/newsletters/2023-08/index.html index 4d13d008e..606aea311 100644 --- a/fr/newsletters/2023-08/index.html +++ b/fr/newsletters/2023-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-09/index.html b/fr/newsletters/2023-09/index.html index f514021ea..8870180ed 100644 --- a/fr/newsletters/2023-09/index.html +++ b/fr/newsletters/2023-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-10/index.html b/fr/newsletters/2023-10/index.html index 7fa5b968c..303261330 100644 --- a/fr/newsletters/2023-10/index.html +++ b/fr/newsletters/2023-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-11/index.html b/fr/newsletters/2023-11/index.html index 40871de79..0184b6753 100644 --- a/fr/newsletters/2023-11/index.html +++ b/fr/newsletters/2023-11/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2023-12/index.html b/fr/newsletters/2023-12/index.html index 4d3d7f52c..fd31c8942 100644 --- a/fr/newsletters/2023-12/index.html +++ b/fr/newsletters/2023-12/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-01/index.html b/fr/newsletters/2024-01/index.html index 0f58e78e9..b6b502ad4 100644 --- a/fr/newsletters/2024-01/index.html +++ b/fr/newsletters/2024-01/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-02/index.html b/fr/newsletters/2024-02/index.html index 8fce91494..0c4e20e60 100644 --- a/fr/newsletters/2024-02/index.html +++ b/fr/newsletters/2024-02/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-03/index.html b/fr/newsletters/2024-03/index.html index e00954ed0..9bf5447b1 100644 --- a/fr/newsletters/2024-03/index.html +++ b/fr/newsletters/2024-03/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-04/index.html b/fr/newsletters/2024-04/index.html index 7405673ff..75045ee4d 100644 --- a/fr/newsletters/2024-04/index.html +++ b/fr/newsletters/2024-04/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-05/index.html b/fr/newsletters/2024-05/index.html index c4ca0d532..929dd2773 100644 --- a/fr/newsletters/2024-05/index.html +++ b/fr/newsletters/2024-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-06/index.html b/fr/newsletters/2024-06/index.html index 87cf47f44..ba5572ee5 100644 --- a/fr/newsletters/2024-06/index.html +++ b/fr/newsletters/2024-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-07/index.html b/fr/newsletters/2024-07/index.html index a1dcb51c3..61ade3572 100644 --- a/fr/newsletters/2024-07/index.html +++ b/fr/newsletters/2024-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-08/index.html b/fr/newsletters/2024-08/index.html index 8b6fa7c88..c2485b0a2 100644 --- a/fr/newsletters/2024-08/index.html +++ b/fr/newsletters/2024-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-09/index.html b/fr/newsletters/2024-09/index.html index 8ce075f9e..7832f14c2 100644 --- a/fr/newsletters/2024-09/index.html +++ b/fr/newsletters/2024-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/newsletters/2024-10/index.html b/fr/newsletters/2024-10/index.html index a0f4fd59e..05afc18f1 100644 --- a/fr/newsletters/2024-10/index.html +++ b/fr/newsletters/2024-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 @@ -974,10 +978,10 @@
    - + - Previous - Newsletters + Previous + 2024/11
    diff --git a/fr/newsletters/2024-11/index.html b/fr/newsletters/2024-11/index.html new file mode 100644 index 000000000..087f7aca5 --- /dev/null +++ b/fr/newsletters/2024-11/index.html @@ -0,0 +1,1240 @@ + + + + + + + + + + + + + + + + + + + + 2024/11 - Grist Help Center + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    + +
    + + + + + + + + + + + + +
    +

    Warning

    +

    Nous commençons tout juste à traduire la documentation pour cette langue, désolé !

    +

    Nous affichons des pages traduites partiellement afin de suivre l’avancement.

    +

    Cette page n’est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communauté de traduction pour nous aider 👋.

    +
    +

    November 2024 Newsletter#

    + + + +

    Call for testers#

    +

    Have you used Grist? Have you not used Grist? Do you just like clicking around on the computer? We need you. 🫵

    +

    We’re looking for volunteers to test upcoming features/changes for 30-45 minute sessions. Fill out this Grist form to sign up!

    +

    Grist Paris Summit full schedule posted#

    +

    Grist summit schedule

    +

    The first ever Grist Summit is next week! And just in time, we have the full schedule over at La Suite’s site.

    +

    Unable to join us in France? The main stage events will be recorded and shared after the fact, so keep an eye out for those. Otherwise, we can’t wait to see you in Paris!

    +

    What’s new#

    +

    New on the blog: Translating Grist into 20+ languages#

    +

    Grist translation overview

    +

    We’re constantly impressed with the contributions of Grist’s community translators. To mark an arbitrary milestone of 20 languages in less than two years, we’ve written up a timeline of the localization process. See how volunteer contributors, ANCT and open source tools combine to let billions use Grist in their native language.

    +

    Grist Labs Labs: Displaying 1M+ rows with better-sqlite3#

    +

    Grist + better-sqlite3

    +

    Dmitry shared a peek at the (very) experimental side of spreadsheet development, with a nifty prototype using better-sqlite3 that has Grist zipping around a document with >1M rows. It works just as you’d expect, assuming you don’t expect the following features to function: importing and exporting, formulas, access rules, filtering, summary tables, search, snapshots/history…

    +

    We hope to show you more experiments as we’re able! 👩‍🔬

    +

    Run Grist on the AWS cloud#

    +

    Grist on AWS Marketplace

    +

    Grist is now available on the AWS Marketplace, giving you a simple way of self-hosting Grist (with authentication) in your own cloud. If you need to run Grist on servers in Europe, this is the easiest way to do it. We’re also looking at placing Grist on other cloud marketplaces – if you have a favorite, let us know!

    +

    Thanks to users of the beta product for their feedback. Users can migrate from the beta (now legacy) version by following these steps.

    +

    Grist Business - Audit Logs#

    +

    Audit logs

    +

    Self-hosting Grist Business plan users can now enable audit logging. Audit logs can help maintain compliance and identify misuse by helping answer questions like “when was a workspace removed?” or “who invited a collaborator to a document?”.

    +

    Currently, audit log streaming supports HEC endpoints (like Splunk or Vector), or other destinations via HTTP. Full documentation can be found in our Help Center.

    +

    Editing document types#

    +

    Document types

    +

    Did you know there are distinct Grist document types? Well, now you can specifically set them in Document Settings! If you need to create templates or tutorials to be shared with other users, these types align the open behavior to those formats.

    +

    Community highlights#

    + +

    Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel!

    +

    Learning Grist#

    +

    Webinar - Custom Widget Builder#

    +

    Couldn’t make it to the Grist Summit in Paris? No worries! Join Grist Labs’ very own CTO Paul and developer Jarek as they present their talk on Grist’s custom widget builder. Learn from the devs themselves how to create your own custom widget, step-by-step!

    +

    Thursday December 19 at 3:00pm US Eastern Time.

    +

    Custom Widget Builder webinar

    +

    SIGN UP FOR DECEMBER’S WEBINAR

    +

    Grist 101#

    +

    In November, Natalie hosted an introductory webinar designed to help new users navigate the basics of Grist. This session provided users with the essential tools and knowledge to get started. We covered key features and best practices to maximize your productivity. Perfect for beginners!

    +

    WATCH NOVEMBER’S RECORDING

    +

    Help spread the word#

    +

    If you’re interested in helping Grist grow, consider leaving a review on product review sites. Here’s a short list where your review could make a big impact. Thank you! 🙏

    + +

    We are here to support you#

    +

    Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more.

    +

    Have questions, feedback, or need help? Search our Help Center, watch video +tutorials, share ideas in our +Community Forum, or contact us at support@getgrist.com.

    + +
    +
    + + + + + +
    +
    +
    + + + + + \ No newline at end of file diff --git a/fr/newsletters/index.html b/fr/newsletters/index.html index 24cd80233..81c7bda6c 100644 --- a/fr/newsletters/index.html +++ b/fr/newsletters/index.html @@ -553,6 +553,10 @@
  • + +
  • 2024/11 + +
  • 2024/10 @@ -929,12 +933,12 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/page-widgets/index.html b/fr/page-widgets/index.html index 6c7c0ccb2..6d4d95b57 100644 --- a/fr/page-widgets/index.html +++ b/fr/page-widgets/index.html @@ -589,6 +589,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/python/index.html b/fr/python/index.html index ee275f723..8d7b5c413 100644 --- a/fr/python/index.html +++ b/fr/python/index.html @@ -591,6 +591,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/raw-data/index.html b/fr/raw-data/index.html index b7c0dfaf1..92c22ff63 100644 --- a/fr/raw-data/index.html +++ b/fr/raw-data/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/record-cards/index.html b/fr/record-cards/index.html index 8c18b0aa7..36723caf8 100644 --- a/fr/record-cards/index.html +++ b/fr/record-cards/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/references-lookups/index.html b/fr/references-lookups/index.html index 88544a7a5..00c1b0eab 100644 --- a/fr/references-lookups/index.html +++ b/fr/references-lookups/index.html @@ -603,6 +603,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/register-as-consultant/index.html b/fr/register-as-consultant/index.html index 3a08b50f5..3bdabdd54 100644 --- a/fr/register-as-consultant/index.html +++ b/fr/register-as-consultant/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/rest-api/index.html b/fr/rest-api/index.html index 19efa0edf..d9608d231 100644 --- a/fr/rest-api/index.html +++ b/fr/rest-api/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/search-sort-filter/index.html b/fr/search-sort-filter/index.html index 2699d4d62..17285b522 100644 --- a/fr/search-sort-filter/index.html +++ b/fr/search-sort-filter/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/search.html b/fr/search.html index c7903ca6d..0a34b9513 100644 --- a/fr/search.html +++ b/fr/search.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/search/search_index.json b/fr/search/search_index.json index 941da8e8d..7c40d4599 100644 --- a/fr/search/search_index.json +++ b/fr/search/search_index.json @@ -1 +1 @@ -{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bienvenue sur Grist! # Grist est un logiciel permettant d\u2019organiser, d\u2019analyser et de partager des donn\u00e9es. D\u00e9monstration de Grist Grist combine le meilleur des tableurs et des bases de donn\u00e9es. Grist vous permet de travailler avec des grilles et des listes simples, et est \u00e0 son meilleur lorsque les donn\u00e9es deviennent plus complexes. Pour vous inscrire et commencer \u00e0 utiliser Grist, visitez https://docs.getgrist.com . Pour apprendre \u00e0 utiliser Grist, nous vous recommandons de commencer par nos tutoriels pratiques ou nos vid\u00e9os d\u2019introduction. Tutoriels pratiques # Cr\u00e9er un CRM personnalis\u00e9 . En utilisant l\u2019exemple \u201cCRM l\u00e9ger\u201d, apprenez \u00e0 lier des donn\u00e9es et \u00e0 cr\u00e9er des mises en page \u00e0 haute productivit\u00e9. Analyser et visualiser des donn\u00e9es . En utilisant l\u2019exemple \u201cRecherche d\u2019investissement\u201d, apprenez \u00e0 cr\u00e9er des tableaux r\u00e9capitulatifs et des graphiques, et \u00e0 lier les graphiques de mani\u00e8re dynamique. Gestion des donn\u00e9es commerciales . En utilisant l\u2019exemple \u201cProgramme parascolaire\u201d, apprenez \u00e0 mod\u00e9liser des donn\u00e9es commerciales, \u00e0 utiliser des formules et \u00e0 g\u00e9rer la complexit\u00e9. Vid\u00e9os d\u2019introduction # Cr\u00e9er un document Pages & vues Colonnes & types Colonnes de r\u00e9f\u00e9rence Lier les vues Partager un document Raccourcis populaires # Questions fr\u00e9quemment pos\u00e9es R\u00e9f\u00e9rence des fonctions Raccourcis clavier Contactez-nous # Si vous avez des questions non r\u00e9pondues ici, des rapports de probl\u00e8mes ou d\u2019autres commentaires, veuillez nous contacter ! Email: support@getgrist.com","title":"Welcome to Grist"},{"location":"#bienvenue-sur-grist","text":"Grist est un logiciel permettant d\u2019organiser, d\u2019analyser et de partager des donn\u00e9es. D\u00e9monstration de Grist Grist combine le meilleur des tableurs et des bases de donn\u00e9es. Grist vous permet de travailler avec des grilles et des listes simples, et est \u00e0 son meilleur lorsque les donn\u00e9es deviennent plus complexes. Pour vous inscrire et commencer \u00e0 utiliser Grist, visitez https://docs.getgrist.com . Pour apprendre \u00e0 utiliser Grist, nous vous recommandons de commencer par nos tutoriels pratiques ou nos vid\u00e9os d\u2019introduction.","title":""},{"location":"#tutoriels-pratiques","text":"Cr\u00e9er un CRM personnalis\u00e9 . En utilisant l\u2019exemple \u201cCRM l\u00e9ger\u201d, apprenez \u00e0 lier des donn\u00e9es et \u00e0 cr\u00e9er des mises en page \u00e0 haute productivit\u00e9. Analyser et visualiser des donn\u00e9es . En utilisant l\u2019exemple \u201cRecherche d\u2019investissement\u201d, apprenez \u00e0 cr\u00e9er des tableaux r\u00e9capitulatifs et des graphiques, et \u00e0 lier les graphiques de mani\u00e8re dynamique. Gestion des donn\u00e9es commerciales . En utilisant l\u2019exemple \u201cProgramme parascolaire\u201d, apprenez \u00e0 mod\u00e9liser des donn\u00e9es commerciales, \u00e0 utiliser des formules et \u00e0 g\u00e9rer la complexit\u00e9.","title":"Tutoriels pratiques"},{"location":"#videos-dintroduction","text":"Cr\u00e9er un document Pages & vues Colonnes & types Colonnes de r\u00e9f\u00e9rence Lier les vues Partager un document","title":"Vid\u00e9os d’introduction"},{"location":"#raccourcis-populaires","text":"Questions fr\u00e9quemment pos\u00e9es R\u00e9f\u00e9rence des fonctions Raccourcis clavier","title":"Raccourcis populaires"},{"location":"#contactez-nous","text":"Si vous avez des questions non r\u00e9pondues ici, des rapports de probl\u00e8mes ou d\u2019autres commentaires, veuillez nous contacter ! Email: support@getgrist.com","title":"Contactez-nous"},{"location":"FAQ/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Questions Fr\u00e9quemment Pos\u00e9es # Questions Fr\u00e9quemment Pos\u00e9es Comptes Puis-je ajouter plusieurs \u00e9quipes au m\u00eame compte de connexion Grist ? Puis-je ajouter plusieurs comptes de connexion \u00e0 Grist ? Comment puis-je mettre \u00e0 jour les param\u00e8tres de mon profil ? Comment puis-je changer l\u2019adresse e-mail que j\u2019utilise pour Grist ? Comment puis-je supprimer mon compte ? Plans Pourquoi ai-je plusieurs sites ? Comment g\u00e9rer la propri\u00e9t\u00e9 de mon espace d\u2019\u00e9quipe ? Puis-je modifier le nom et le sous-domaine de mon \u00e9quipe ? Documents et donn\u00e9es Puis-je d\u00e9placer des documents entre les sites ? Combien de lignes puis-je avoir ? Grist accepte-t-il les caract\u00e8res non anglais ? Comment puis-je additionner le total d\u2019une colonne ? Partage Quelle est la diff\u00e9rence entre un membre de l\u2019\u00e9quipe et un invit\u00e9 ? Puis-je uniquement partager des documents Grist avec mon \u00e9quipe ? Grist et votre site Web/application Puis-je int\u00e9grer Grist dans mon site Web ? Puis-je utiliser Grist comme backend de mon application Web ? Comptes # Puis-je ajouter plusieurs \u00e9quipes au m\u00eame compte de connexion Grist ? # Oui ! Vous pouvez cr\u00e9er plusieurs espaces d\u2019\u00e9quipe. Chaque espace d\u2019\u00e9quipe peut \u00eatre sur le plan gratuit ou un plan payant. Chaque espace d\u2019\u00e9quipe sur un plan payant est associ\u00e9 \u00e0 son propre abonnement et est factur\u00e9 s\u00e9par\u00e9ment. Nouvel espace d\u2019\u00e9quipe. Si vous souhaitez cr\u00e9er un nouvel espace d\u2019\u00e9quipe, naviguez vers votre espace personnel \u00e0 docs.getgrist.com , puis cliquez sur le nom du site en haut \u00e0 gauche (@votre-nom) pour ouvrir une liste de sites. Cliquez sur \u2018+ Cr\u00e9er un nouvel espace d\u2019\u00e9quipe\u2019. Dans la fen\u00eatre contextuelle, s\u00e9lectionnez le plan \u00e0 utiliser. Ajouter un compte \u00e0 un espace d\u2019\u00e9quipe. Vous pouvez poss\u00e9der ou \u00eatre membre de plusieurs espaces d\u2019\u00e9quipe. Si vous avez plusieurs comptes de connexion Grist, vous pouvez \u00e9galement ajouter votre deuxi\u00e8me compte en tant que membre de l\u2019\u00e9quipe. Lorsque vous \u00eates dans l\u2019espace d\u2019\u00e9quipe que vous poss\u00e9dez, ouvrez le menu utilisateur et cliquez sur \u2018G\u00e9rer les utilisateurs\u2019. Le saviez-vous ? Un seul espace d\u2019\u00e9quipe peut bien fonctionner pour une organisation avec plusieurs \u00e9quipes (ou sous-\u00e9quipes). Vous pouvez utiliser des espaces de travail au sein d\u2019un espace d\u2019\u00e9quipe, et g\u00e9rer l\u2019acc\u00e8s \u00e0 ceux-ci pour cr\u00e9er des zones s\u00e9par\u00e9es pour diff\u00e9rentes \u00e9quipes. Puis-je ajouter plusieurs comptes de connexion \u00e0 Grist ? # Oui ! Pour ajouter plusieurs comptes \u00e0 Grist, ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur. Comment puis-je mettre \u00e0 jour les param\u00e8tres de mon profil ? # Ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis s\u00e9lectionnez \u2018Param\u00e8tres du profil\u2019. \u00c0 partir de l\u00e0, vous pouvez g\u00e9rer le nom associ\u00e9 \u00e0 votre compte, mettre \u00e0 jour le th\u00e8me de Grist en mode clair ou sombre, d\u00e9finir une langue et cr\u00e9er et g\u00e9rer une cl\u00e9 API. Pour en savoir plus sur notre API, consultez Grist API . Souhaitez-vous aider \u00e0 traduire Grist ? Nous utilisons Weblate pour g\u00e9rer les traductions et accueillons les traducteurs b\u00e9n\u00e9voles ! Si vous souhaitez traduire Grist dans une nouvelle langue (merci !), faites-nous savoir quelle langue dans ce fil de discussion de la communaut\u00e9 , et nous ajouterons la langue sur Weblate. Comment puis-je changer l\u2019adresse e-mail que j\u2019utilise pour Grist ? # Il n\u2019est pas possible de changer l\u2019e-mail associ\u00e9 \u00e0 votre compte Grist. Cependant, il est possible de transf\u00e9rer la propri\u00e9t\u00e9 des documents et des espaces d\u2019\u00e9quipe entre deux comptes e-mail Grist que vous poss\u00e9dez. Cela changerait effectivement votre e-mail Grist. Apprenez comment . Il est possible de g\u00e9rer plusieurs comptes dans Grist. Pour ajouter un autre compte, ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur. Comment puis-je supprimer mon compte ? # Vous pouvez supprimer votre compte dans \u2018Param\u00e8tres du profil\u2019 en s\u00e9lectionnant \u2018Supprimer le compte\u2019 sous \u2018Confidentialit\u00e9 & Donn\u00e9es\u2019. Veuillez noter que cette action est permanente. Besoin de supprimer un espace d\u2019\u00e9quipe ? En savoir plus ici . Plans # Pourquoi ai-je plusieurs sites ? # Tous les utilisateurs de Grist ont acc\u00e8s \u00e0 un espace personnel gratuit. L\u2019espace personnel est toujours nomm\u00e9 en commen\u00e7ant par \u2018@\u2019 et est toujours situ\u00e9 \u00e0 docs.getgrist.com . Chaque document dans cet espace peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 deux invit\u00e9s gratuitement. En savoir plus sur les plans gratuits sur notre page de tarification . Les documents partag\u00e9s avec vous depuis d\u2019autres comptes personnels seront affich\u00e9s dans votre espace personnel dans des espaces de travail nomm\u00e9s avec \u2018@Nom\u2019 pour indiquer le propri\u00e9taire de ce document. Vous pouvez naviguer entre votre espace personnel et espaces d\u2019\u00e9quipe en cliquant dans le coin sup\u00e9rieur gauche pour ouvrir un menu d\u00e9roulant des sites auxquels vous avez acc\u00e8s. Comment g\u00e9rer la propri\u00e9t\u00e9 de mon espace d\u2019\u00e9quipe ? # Ajouter un deuxi\u00e8me propri\u00e9taire Ouvrez l\u2019espace d\u2019\u00e9quipe auquel vous souhaitez ajouter un deuxi\u00e8me propri\u00e9taire. Cliquez sur \u2018G\u00e9rer les utilisateurs\u2019 sous le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist. Ajoutez la nouvelle adresse e-mail en tant que Propri\u00e9taire, et cliquez sur Confirmer. Vous pouvez \u00e9galement aller \u00e0 \u2018Compte de facturation\u2019 (\u00e9galement sous le menu utilisateur) et ajouter le nouveau propri\u00e9taire en tant que Gestionnaire de facturation. Transf\u00e9rer la propri\u00e9t\u00e9 Suivez les \u00e9tapes 1 \u00e0 3 ci-dessus pour ajouter un deuxi\u00e8me propri\u00e9taire. Allez \u00e0 \u2018Compte de facturation\u2019 (\u00e9galement sous le menu utilisateur) et ajoutez le nouveau Propri\u00e9taire en tant que Gestionnaire de facturation . Le nouveau Propri\u00e9taire doit se connecter, ouvrir l\u2019espace d\u2019\u00e9quipe, et visiter \u00e0 nouveau les pages \u2018G\u00e9rer les utilisateurs\u2019 et \u2018Compte de facturation\u2019 pour supprimer le propri\u00e9taire d\u2019origine. Cela transf\u00e9rera essentiellement la propri\u00e9t\u00e9 de l\u2019espace d\u2019\u00e9quipe au nouveau compte. Il n\u2019est pas possible d\u2019ajouter un deuxi\u00e8me propri\u00e9taire \u00e0, ou de transf\u00e9rer la propri\u00e9t\u00e9 d\u2019un compte personnel . Le saviez-vous ? Si vous transf\u00e9rez la propri\u00e9t\u00e9 d\u2019un espace d\u2019\u00e9quipe entre deux comptes e-mail Grist que vous poss\u00e9dez, vous pouvez plus facilement transf\u00e9rer la propri\u00e9t\u00e9 en vous connectant avec plusieurs comptes. Pour vous connecter avec un autre compte, ouvrez le menu utilisateur et cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur. Suivez les \u00e9tapes ci-dessus pour transf\u00e9rer la propri\u00e9t\u00e9 d\u2019un compte \u00e0 l\u2019autre. Puis-je modifier le nom et le sous-domaine de mon \u00e9quipe ? # Vous pouvez modifier le nom de votre site et le sous-domaine depuis la page de facturation. Ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Compte de facturation\u2019 . Documents et donn\u00e9es # Puis-je d\u00e9placer des documents entre les sites ? # Oui ! Suivez ces \u00e9tapes pour d\u00e9placer des documents entre les sites. Ouvrez le document que vous souhaitez d\u00e9placer et cliquez sur l\u2019ic\u00f4ne de partage ( ), puis cliquez sur \u2018Dupliquer le document\u2019 dans le menu. S\u00e9lectionnez le site (organisation) vers lequel vous souhaitez transf\u00e9rer le document. Cela cr\u00e9era une copie, vous aurez donc toujours le document original dans votre site d\u2019origine. Vous pouvez toujours le supprimer. En savoir plus sur la copie de documents . Combien de lignes puis-je avoir ? # En r\u00e8gle g\u00e9n\u00e9rale, Grist fonctionne mieux pour les documents de moins de 100 000 lignes. La limite r\u00e9elle d\u00e9pend \u00e9galement du nombre de tables, de colonnes et de la taille moyenne des donn\u00e9es dans chaque cellule. Une fa\u00e7on de l\u2019estimer est de mesurer la taille des donn\u00e9es lorsqu\u2019elles sont au format CSV : la limite est d\u2019environ 20 Mo dans ce format. Par exemple, un document avec 200 000 lignes et 12 colonnes num\u00e9riques atteindrait cette limite. Les pi\u00e8ces jointes sont compt\u00e9es s\u00e9par\u00e9ment. Les pi\u00e8ces jointes plus les donn\u00e9es dans un seul document sont limit\u00e9es \u00e0 1 Go. En savoir plus sur les limites . Grist accepte-t-il les caract\u00e8res non anglais ? # Les caract\u00e8res non anglais sont pris en charge dans les \u00e9tiquettes de colonnes, mais pas dans les identifiants de colonnes, qui sont le nom Python de la colonne utilis\u00e9 dans les formules. Lors de l\u2019importation d\u2019un fichier dans Grist, les caract\u00e8res non anglais sont import\u00e9s en tant que valeurs dans les cellules, mais ne sont pas import\u00e9s dans les \u00e9tiquettes de colonnes (alias en-t\u00eates). Les \u00e9tiquettes de colonnes sont approxim\u00e9es avec des caract\u00e8res anglais. Vous pouvez renommer les \u00e9tiquettes de colonnes pour inclure des caract\u00e8res non anglais apr\u00e8s l\u2019importation. Pour modifier les \u00e9tiquettes et les identifiants de colonnes s\u00e9par\u00e9ment, ouvrez le panneau de cr\u00e9ation et s\u00e9lectionnez le menu de la colonne. Cliquez sur l\u2019ic\u00f4ne de lien qui joint l\u2019\u00e9tiquette \u00e0 l\u2019identifiant pour activer la modification de l\u2019identifiant de la colonne. Bien que les caract\u00e8res non anglais ne soient pas pris en charge, il est possible de modifier les identifiants pour les rendre plus clairs et conviviaux \u00e0 utiliser dans les formules. Comment puis-je additionner le total d\u2019une colonne ? # Pour r\u00e9sumer plusieurs enregistrements, vous avez besoin de tables de synth\u00e8se . La principale diff\u00e9rence entre Grist et les tableurs comme Excel ou Google Sheets est que Grist est une base de donn\u00e9es, donc chaque ligne dans une grille repr\u00e9sente un enregistrement (par exemple, une personne, une transaction bancaire, etc.). Puisqu\u2019une somme sur plusieurs enregistrements n\u2019est pas le m\u00eame type d\u2019enregistrement, Grist propose de r\u00e9sumer les donn\u00e9es sous forme de vue s\u00e9par\u00e9e, qui peut \u00eatre modifi\u00e9e pour calculer des donn\u00e9es de synth\u00e8se encore plus puissantes. Par exemple, supposons que vous ayez une table de commandes de boutique en ligne appel\u00e9e Commandes et que vous souhaitiez additionner les revenus des ventes de toutes les commandes. En haut du menu de gauche, cliquez sur le bouton \u2018Ajouter nouveau\u2019 et s\u00e9lectionnez \u2018Ajouter une page\u2019 ou \u2018Ajouter une vue \u00e0 la page\u2019. Dans le s\u00e9lecteur de vue, s\u00e9lectionnez la table Commandes puis cliquez sur l\u2019ic\u00f4ne de somme ( ) \u00e0 c\u00f4t\u00e9. Ajoutez la page ou la vue \u00e0 votre document. Fait ! Vous avez maintenant cr\u00e9\u00e9 une table de synth\u00e8se qui, par d\u00e9faut, compte tous les enregistrements dans la table Commandes et additionne toutes les colonnes num\u00e9riques et entiers , telles que le montant vendu dans chaque commande. Les tables de synth\u00e8se peuvent faire plus qu\u2019une simple somme des colonnes d\u2019une table. En quelques clics, vous pouvez r\u00e9sumer les commandes par mois pour calculer le nombre de commandes et le revenu total des ventes dans chaque mois pour lequel vous avez des donn\u00e9es. Allez plus loin et supposons que vous ayez plusieurs boutiques en ligne. Avec Grist, vous pouvez enregistrer toutes les commandes de vente de toutes les boutiques et mois dans la m\u00eame table. Ensuite, vous pouvez r\u00e9sumer par mois et par boutique. Lorsque vous ajoutez plus de mois (ou de boutiques !) \u00e0 la table des commandes, la table de synth\u00e8se se mettra automatiquement \u00e0 jour, ce qui est une autre diff\u00e9rence cl\u00e9 avec les tableurs. Dans Excel, vous devriez \u00e9tendre la plage de votre formule, ou ajouter plus de feuilles et modifier les formules chaque fois que vous ajoutez plus de commandes de vente, de mois ou de boutiques. Dans Grist, vous cr\u00e9ez la table de synth\u00e8se une fois, et laissez Grist faire le travail futur pour vous. En plus de notre article sur les tables de synth\u00e8se , nous avons un tutoriel vid\u00e9o et un guide de suivi qui fournit un exemple de cr\u00e9ation d\u2019un tableau de bord avec des tables de synth\u00e8se. Partage # Quelle est la diff\u00e9rence entre un membre de l\u2019\u00e9quipe et un invit\u00e9 ? # Les membres de l\u2019\u00e9quipe ont tous acc\u00e8s \u00e0 un espace d\u2019\u00e9quipe , qui est situ\u00e9 \u00e0 une URL avec un sous-domaine personnalis\u00e9, tel que votre-\u00e9quipe.getgrist.com . Sur les plans payants, le nombre de membres de l\u2019\u00e9quipe d\u00e9termine le prix. Par d\u00e9faut, les documents au sein d\u2019un espace d\u2019\u00e9quipe peuvent \u00eatre accessibles par tous les membres de l\u2019\u00e9quipe. Ce d\u00e9faut peut \u00eatre modifi\u00e9 pour ne partager que certains documents ou certains espaces de travail avec des membres sp\u00e9cifiques de l\u2019\u00e9quipe. Les invit\u00e9s, en revanche, sont invit\u00e9s \u00e0 des documents particuliers, mais ne sont pas ajout\u00e9s \u00e0 votre \u00e9quipe. Tous les documents dans Grist, y compris ceux sur les espaces personnels, sont autoris\u00e9s jusqu\u2019\u00e0 2 invit\u00e9s gratuits, et n\u2019affectent pas le prix du plan. Puis-je uniquement partager des documents Grist avec mon \u00e9quipe ? # Il existe de nombreuses fa\u00e7ons de partager des donn\u00e9es Grist avec des non-membres de l\u2019\u00e9quipe. Invit\u00e9s. Chaque document peut \u00eatre partag\u00e9 avec 2 invit\u00e9s (non-membres de l\u2019\u00e9quipe) sans frais suppl\u00e9mentaires. Partage de lien. Dans les param\u00e8tres de partage, il y a une option pour activer l\u2019acc\u00e8s public . Le r\u00f4le d\u2019acc\u00e8s public peut \u00eatre d\u00e9fini sur visualiseur ou \u00e9diteur. Toute personne ayant un lien peut voir (ou modifier) vos donn\u00e9es. Ces vues ne seraient pas compt\u00e9es dans le nombre d\u2019utilisateurs de votre plan. Le document est visible par toute personne ayant le lien, donc faites preuve de prudence lorsque vous travaillez avec des donn\u00e9es sensibles. Partage de lien en lecture seule restreint. Avec le partage de lien en lecture seule, il est possible de restreindre davantage ce que les gens peuvent voir en utilisant les permissions avanc\u00e9es de Grist pour d\u00e9finir des param\u00e8tres d\u2019URL sp\u00e9cifiques appel\u00e9s cl\u00e9s de lien qui d\u00e9terminent quelles tables, colonnes ou lignes sont affich\u00e9es lorsqu\u2019un lien sp\u00e9cifique est partag\u00e9. Int\u00e9gration en lecture seule. Les pages Grist peuvent \u00eatre int\u00e9gr\u00e9es dans des sites Web dans une iframe. Apprenez comment . Grist et votre site Web/application # Puis-je int\u00e9grer Grist dans mon site Web ? # Oui, il est possible d\u2019int\u00e9grer des pages Grist en tant que donn\u00e9es en lecture seule dans un site Web dans une iframe. Remplacez l\u2019URL \u00e9crite dans le code ci-dessus par l\u2019URL de la page Grist que vous souhaitez int\u00e9grer, suivie de ?embed=true \u00e0 la fin de l\u2019URL. En savoir plus sur l\u2019int\u00e9gration de Grist . Puis-je utiliser Grist comme backend de mon application Web ? # L\u2019utilisation de Grist comme solution backend directement pour un site Web ou une application Web n\u2019est pas encore prise en charge. Nous n\u2019avons pas encore de m\u00e9thode d\u2019authentification pour ce cas d\u2019utilisation. La m\u00e9thode de cl\u00e9 API n\u2019est g\u00e9n\u00e9ralement pas appropri\u00e9e pour une utilisation Web, car la cl\u00e9 serait accessible \u00e0 tout spectateur de la page Web, ce qui est g\u00e9n\u00e9ralement ind\u00e9sirable. Nous sommes int\u00e9ress\u00e9s \u00e0 prendre en charge cela \u00e0 l\u2019avenir et accueillons les id\u00e9es et les commentaires dans notre forum communautaire .","title":"FAQ"},{"location":"FAQ/#questions-frequemment-posees","text":"Questions Fr\u00e9quemment Pos\u00e9es Comptes Puis-je ajouter plusieurs \u00e9quipes au m\u00eame compte de connexion Grist ? Puis-je ajouter plusieurs comptes de connexion \u00e0 Grist ? Comment puis-je mettre \u00e0 jour les param\u00e8tres de mon profil ? Comment puis-je changer l\u2019adresse e-mail que j\u2019utilise pour Grist ? Comment puis-je supprimer mon compte ? Plans Pourquoi ai-je plusieurs sites ? Comment g\u00e9rer la propri\u00e9t\u00e9 de mon espace d\u2019\u00e9quipe ? Puis-je modifier le nom et le sous-domaine de mon \u00e9quipe ? Documents et donn\u00e9es Puis-je d\u00e9placer des documents entre les sites ? Combien de lignes puis-je avoir ? Grist accepte-t-il les caract\u00e8res non anglais ? Comment puis-je additionner le total d\u2019une colonne ? Partage Quelle est la diff\u00e9rence entre un membre de l\u2019\u00e9quipe et un invit\u00e9 ? Puis-je uniquement partager des documents Grist avec mon \u00e9quipe ? Grist et votre site Web/application Puis-je int\u00e9grer Grist dans mon site Web ? Puis-je utiliser Grist comme backend de mon application Web ?","title":"Questions Fr\u00e9quemment Pos\u00e9es"},{"location":"FAQ/#comptes","text":"","title":"Comptes"},{"location":"FAQ/#puis-je-ajouter-plusieurs-equipes-au-meme-compte-de-connexion-grist","text":"Oui ! Vous pouvez cr\u00e9er plusieurs espaces d\u2019\u00e9quipe. Chaque espace d\u2019\u00e9quipe peut \u00eatre sur le plan gratuit ou un plan payant. Chaque espace d\u2019\u00e9quipe sur un plan payant est associ\u00e9 \u00e0 son propre abonnement et est factur\u00e9 s\u00e9par\u00e9ment. Nouvel espace d\u2019\u00e9quipe. Si vous souhaitez cr\u00e9er un nouvel espace d\u2019\u00e9quipe, naviguez vers votre espace personnel \u00e0 docs.getgrist.com , puis cliquez sur le nom du site en haut \u00e0 gauche (@votre-nom) pour ouvrir une liste de sites. Cliquez sur \u2018+ Cr\u00e9er un nouvel espace d\u2019\u00e9quipe\u2019. Dans la fen\u00eatre contextuelle, s\u00e9lectionnez le plan \u00e0 utiliser. Ajouter un compte \u00e0 un espace d\u2019\u00e9quipe. Vous pouvez poss\u00e9der ou \u00eatre membre de plusieurs espaces d\u2019\u00e9quipe. Si vous avez plusieurs comptes de connexion Grist, vous pouvez \u00e9galement ajouter votre deuxi\u00e8me compte en tant que membre de l\u2019\u00e9quipe. Lorsque vous \u00eates dans l\u2019espace d\u2019\u00e9quipe que vous poss\u00e9dez, ouvrez le menu utilisateur et cliquez sur \u2018G\u00e9rer les utilisateurs\u2019. Le saviez-vous ? Un seul espace d\u2019\u00e9quipe peut bien fonctionner pour une organisation avec plusieurs \u00e9quipes (ou sous-\u00e9quipes). Vous pouvez utiliser des espaces de travail au sein d\u2019un espace d\u2019\u00e9quipe, et g\u00e9rer l\u2019acc\u00e8s \u00e0 ceux-ci pour cr\u00e9er des zones s\u00e9par\u00e9es pour diff\u00e9rentes \u00e9quipes.","title":"Puis-je ajouter plusieurs \u00e9quipes au m\u00eame compte de connexion Grist ?"},{"location":"FAQ/#puis-je-ajouter-plusieurs-comptes-de-connexion-a-grist","text":"Oui ! Pour ajouter plusieurs comptes \u00e0 Grist, ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur.","title":"Puis-je ajouter plusieurs comptes de connexion \u00e0 Grist ?"},{"location":"FAQ/#comment-puis-je-mettre-a-jour-les-parametres-de-mon-profil","text":"Ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis s\u00e9lectionnez \u2018Param\u00e8tres du profil\u2019. \u00c0 partir de l\u00e0, vous pouvez g\u00e9rer le nom associ\u00e9 \u00e0 votre compte, mettre \u00e0 jour le th\u00e8me de Grist en mode clair ou sombre, d\u00e9finir une langue et cr\u00e9er et g\u00e9rer une cl\u00e9 API. Pour en savoir plus sur notre API, consultez Grist API . Souhaitez-vous aider \u00e0 traduire Grist ? Nous utilisons Weblate pour g\u00e9rer les traductions et accueillons les traducteurs b\u00e9n\u00e9voles ! Si vous souhaitez traduire Grist dans une nouvelle langue (merci !), faites-nous savoir quelle langue dans ce fil de discussion de la communaut\u00e9 , et nous ajouterons la langue sur Weblate.","title":"Comment puis-je mettre \u00e0 jour les param\u00e8tres de mon profil ?"},{"location":"FAQ/#comment-puis-je-changer-ladresse-e-mail-que-jutilise-pour-grist","text":"Il n\u2019est pas possible de changer l\u2019e-mail associ\u00e9 \u00e0 votre compte Grist. Cependant, il est possible de transf\u00e9rer la propri\u00e9t\u00e9 des documents et des espaces d\u2019\u00e9quipe entre deux comptes e-mail Grist que vous poss\u00e9dez. Cela changerait effectivement votre e-mail Grist. Apprenez comment . Il est possible de g\u00e9rer plusieurs comptes dans Grist. Pour ajouter un autre compte, ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur.","title":"Comment puis-je changer l’adresse e-mail que j’utilise pour Grist ?"},{"location":"FAQ/#comment-puis-je-supprimer-mon-compte","text":"Vous pouvez supprimer votre compte dans \u2018Param\u00e8tres du profil\u2019 en s\u00e9lectionnant \u2018Supprimer le compte\u2019 sous \u2018Confidentialit\u00e9 & Donn\u00e9es\u2019. Veuillez noter que cette action est permanente. Besoin de supprimer un espace d\u2019\u00e9quipe ? En savoir plus ici .","title":"Comment puis-je supprimer mon compte ?"},{"location":"FAQ/#plans","text":"","title":"Plans"},{"location":"FAQ/#pourquoi-ai-je-plusieurs-sites","text":"Tous les utilisateurs de Grist ont acc\u00e8s \u00e0 un espace personnel gratuit. L\u2019espace personnel est toujours nomm\u00e9 en commen\u00e7ant par \u2018@\u2019 et est toujours situ\u00e9 \u00e0 docs.getgrist.com . Chaque document dans cet espace peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 deux invit\u00e9s gratuitement. En savoir plus sur les plans gratuits sur notre page de tarification . Les documents partag\u00e9s avec vous depuis d\u2019autres comptes personnels seront affich\u00e9s dans votre espace personnel dans des espaces de travail nomm\u00e9s avec \u2018@Nom\u2019 pour indiquer le propri\u00e9taire de ce document. Vous pouvez naviguer entre votre espace personnel et espaces d\u2019\u00e9quipe en cliquant dans le coin sup\u00e9rieur gauche pour ouvrir un menu d\u00e9roulant des sites auxquels vous avez acc\u00e8s.","title":"Pourquoi ai-je plusieurs sites ?"},{"location":"FAQ/#comment-gerer-la-propriete-de-mon-espace-dequipe","text":"Ajouter un deuxi\u00e8me propri\u00e9taire Ouvrez l\u2019espace d\u2019\u00e9quipe auquel vous souhaitez ajouter un deuxi\u00e8me propri\u00e9taire. Cliquez sur \u2018G\u00e9rer les utilisateurs\u2019 sous le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist. Ajoutez la nouvelle adresse e-mail en tant que Propri\u00e9taire, et cliquez sur Confirmer. Vous pouvez \u00e9galement aller \u00e0 \u2018Compte de facturation\u2019 (\u00e9galement sous le menu utilisateur) et ajouter le nouveau propri\u00e9taire en tant que Gestionnaire de facturation. Transf\u00e9rer la propri\u00e9t\u00e9 Suivez les \u00e9tapes 1 \u00e0 3 ci-dessus pour ajouter un deuxi\u00e8me propri\u00e9taire. Allez \u00e0 \u2018Compte de facturation\u2019 (\u00e9galement sous le menu utilisateur) et ajoutez le nouveau Propri\u00e9taire en tant que Gestionnaire de facturation . Le nouveau Propri\u00e9taire doit se connecter, ouvrir l\u2019espace d\u2019\u00e9quipe, et visiter \u00e0 nouveau les pages \u2018G\u00e9rer les utilisateurs\u2019 et \u2018Compte de facturation\u2019 pour supprimer le propri\u00e9taire d\u2019origine. Cela transf\u00e9rera essentiellement la propri\u00e9t\u00e9 de l\u2019espace d\u2019\u00e9quipe au nouveau compte. Il n\u2019est pas possible d\u2019ajouter un deuxi\u00e8me propri\u00e9taire \u00e0, ou de transf\u00e9rer la propri\u00e9t\u00e9 d\u2019un compte personnel . Le saviez-vous ? Si vous transf\u00e9rez la propri\u00e9t\u00e9 d\u2019un espace d\u2019\u00e9quipe entre deux comptes e-mail Grist que vous poss\u00e9dez, vous pouvez plus facilement transf\u00e9rer la propri\u00e9t\u00e9 en vous connectant avec plusieurs comptes. Pour vous connecter avec un autre compte, ouvrez le menu utilisateur et cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur. Suivez les \u00e9tapes ci-dessus pour transf\u00e9rer la propri\u00e9t\u00e9 d\u2019un compte \u00e0 l\u2019autre.","title":"Comment g\u00e9rer la propri\u00e9t\u00e9 de mon espace d’\u00e9quipe ?"},{"location":"FAQ/#puis-je-modifier-le-nom-et-le-sous-domaine-de-mon-equipe","text":"Vous pouvez modifier le nom de votre site et le sous-domaine depuis la page de facturation. Ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Compte de facturation\u2019 .","title":"Puis-je modifier le nom et le sous-domaine de mon \u00e9quipe ?"},{"location":"FAQ/#documents-et-donnees","text":"","title":"Documents et donn\u00e9es"},{"location":"FAQ/#puis-je-deplacer-des-documents-entre-les-sites","text":"Oui ! Suivez ces \u00e9tapes pour d\u00e9placer des documents entre les sites. Ouvrez le document que vous souhaitez d\u00e9placer et cliquez sur l\u2019ic\u00f4ne de partage ( ), puis cliquez sur \u2018Dupliquer le document\u2019 dans le menu. S\u00e9lectionnez le site (organisation) vers lequel vous souhaitez transf\u00e9rer le document. Cela cr\u00e9era une copie, vous aurez donc toujours le document original dans votre site d\u2019origine. Vous pouvez toujours le supprimer. En savoir plus sur la copie de documents .","title":"Puis-je d\u00e9placer des documents entre les sites ?"},{"location":"FAQ/#combien-de-lignes-puis-je-avoir","text":"En r\u00e8gle g\u00e9n\u00e9rale, Grist fonctionne mieux pour les documents de moins de 100 000 lignes. La limite r\u00e9elle d\u00e9pend \u00e9galement du nombre de tables, de colonnes et de la taille moyenne des donn\u00e9es dans chaque cellule. Une fa\u00e7on de l\u2019estimer est de mesurer la taille des donn\u00e9es lorsqu\u2019elles sont au format CSV : la limite est d\u2019environ 20 Mo dans ce format. Par exemple, un document avec 200 000 lignes et 12 colonnes num\u00e9riques atteindrait cette limite. Les pi\u00e8ces jointes sont compt\u00e9es s\u00e9par\u00e9ment. Les pi\u00e8ces jointes plus les donn\u00e9es dans un seul document sont limit\u00e9es \u00e0 1 Go. En savoir plus sur les limites .","title":"Combien de lignes puis-je avoir ?"},{"location":"FAQ/#grist-accepte-t-il-les-caracteres-non-anglais","text":"Les caract\u00e8res non anglais sont pris en charge dans les \u00e9tiquettes de colonnes, mais pas dans les identifiants de colonnes, qui sont le nom Python de la colonne utilis\u00e9 dans les formules. Lors de l\u2019importation d\u2019un fichier dans Grist, les caract\u00e8res non anglais sont import\u00e9s en tant que valeurs dans les cellules, mais ne sont pas import\u00e9s dans les \u00e9tiquettes de colonnes (alias en-t\u00eates). Les \u00e9tiquettes de colonnes sont approxim\u00e9es avec des caract\u00e8res anglais. Vous pouvez renommer les \u00e9tiquettes de colonnes pour inclure des caract\u00e8res non anglais apr\u00e8s l\u2019importation. Pour modifier les \u00e9tiquettes et les identifiants de colonnes s\u00e9par\u00e9ment, ouvrez le panneau de cr\u00e9ation et s\u00e9lectionnez le menu de la colonne. Cliquez sur l\u2019ic\u00f4ne de lien qui joint l\u2019\u00e9tiquette \u00e0 l\u2019identifiant pour activer la modification de l\u2019identifiant de la colonne. Bien que les caract\u00e8res non anglais ne soient pas pris en charge, il est possible de modifier les identifiants pour les rendre plus clairs et conviviaux \u00e0 utiliser dans les formules.","title":"Grist accepte-t-il les caract\u00e8res non anglais ?"},{"location":"FAQ/#comment-puis-je-additionner-le-total-dune-colonne","text":"Pour r\u00e9sumer plusieurs enregistrements, vous avez besoin de tables de synth\u00e8se . La principale diff\u00e9rence entre Grist et les tableurs comme Excel ou Google Sheets est que Grist est une base de donn\u00e9es, donc chaque ligne dans une grille repr\u00e9sente un enregistrement (par exemple, une personne, une transaction bancaire, etc.). Puisqu\u2019une somme sur plusieurs enregistrements n\u2019est pas le m\u00eame type d\u2019enregistrement, Grist propose de r\u00e9sumer les donn\u00e9es sous forme de vue s\u00e9par\u00e9e, qui peut \u00eatre modifi\u00e9e pour calculer des donn\u00e9es de synth\u00e8se encore plus puissantes. Par exemple, supposons que vous ayez une table de commandes de boutique en ligne appel\u00e9e Commandes et que vous souhaitiez additionner les revenus des ventes de toutes les commandes. En haut du menu de gauche, cliquez sur le bouton \u2018Ajouter nouveau\u2019 et s\u00e9lectionnez \u2018Ajouter une page\u2019 ou \u2018Ajouter une vue \u00e0 la page\u2019. Dans le s\u00e9lecteur de vue, s\u00e9lectionnez la table Commandes puis cliquez sur l\u2019ic\u00f4ne de somme ( ) \u00e0 c\u00f4t\u00e9. Ajoutez la page ou la vue \u00e0 votre document. Fait ! Vous avez maintenant cr\u00e9\u00e9 une table de synth\u00e8se qui, par d\u00e9faut, compte tous les enregistrements dans la table Commandes et additionne toutes les colonnes num\u00e9riques et entiers , telles que le montant vendu dans chaque commande. Les tables de synth\u00e8se peuvent faire plus qu\u2019une simple somme des colonnes d\u2019une table. En quelques clics, vous pouvez r\u00e9sumer les commandes par mois pour calculer le nombre de commandes et le revenu total des ventes dans chaque mois pour lequel vous avez des donn\u00e9es. Allez plus loin et supposons que vous ayez plusieurs boutiques en ligne. Avec Grist, vous pouvez enregistrer toutes les commandes de vente de toutes les boutiques et mois dans la m\u00eame table. Ensuite, vous pouvez r\u00e9sumer par mois et par boutique. Lorsque vous ajoutez plus de mois (ou de boutiques !) \u00e0 la table des commandes, la table de synth\u00e8se se mettra automatiquement \u00e0 jour, ce qui est une autre diff\u00e9rence cl\u00e9 avec les tableurs. Dans Excel, vous devriez \u00e9tendre la plage de votre formule, ou ajouter plus de feuilles et modifier les formules chaque fois que vous ajoutez plus de commandes de vente, de mois ou de boutiques. Dans Grist, vous cr\u00e9ez la table de synth\u00e8se une fois, et laissez Grist faire le travail futur pour vous. En plus de notre article sur les tables de synth\u00e8se , nous avons un tutoriel vid\u00e9o et un guide de suivi qui fournit un exemple de cr\u00e9ation d\u2019un tableau de bord avec des tables de synth\u00e8se.","title":"Comment puis-je additionner le total d’une colonne ?"},{"location":"FAQ/#partage","text":"","title":"Partage"},{"location":"FAQ/#quelle-est-la-difference-entre-un-membre-de-lequipe-et-un-invite","text":"Les membres de l\u2019\u00e9quipe ont tous acc\u00e8s \u00e0 un espace d\u2019\u00e9quipe , qui est situ\u00e9 \u00e0 une URL avec un sous-domaine personnalis\u00e9, tel que votre-\u00e9quipe.getgrist.com . Sur les plans payants, le nombre de membres de l\u2019\u00e9quipe d\u00e9termine le prix. Par d\u00e9faut, les documents au sein d\u2019un espace d\u2019\u00e9quipe peuvent \u00eatre accessibles par tous les membres de l\u2019\u00e9quipe. Ce d\u00e9faut peut \u00eatre modifi\u00e9 pour ne partager que certains documents ou certains espaces de travail avec des membres sp\u00e9cifiques de l\u2019\u00e9quipe. Les invit\u00e9s, en revanche, sont invit\u00e9s \u00e0 des documents particuliers, mais ne sont pas ajout\u00e9s \u00e0 votre \u00e9quipe. Tous les documents dans Grist, y compris ceux sur les espaces personnels, sont autoris\u00e9s jusqu\u2019\u00e0 2 invit\u00e9s gratuits, et n\u2019affectent pas le prix du plan.","title":"Quelle est la diff\u00e9rence entre un membre de l’\u00e9quipe et un invit\u00e9 ?"},{"location":"FAQ/#puis-je-uniquement-partager-des-documents-grist-avec-mon-equipe","text":"Il existe de nombreuses fa\u00e7ons de partager des donn\u00e9es Grist avec des non-membres de l\u2019\u00e9quipe. Invit\u00e9s. Chaque document peut \u00eatre partag\u00e9 avec 2 invit\u00e9s (non-membres de l\u2019\u00e9quipe) sans frais suppl\u00e9mentaires. Partage de lien. Dans les param\u00e8tres de partage, il y a une option pour activer l\u2019acc\u00e8s public . Le r\u00f4le d\u2019acc\u00e8s public peut \u00eatre d\u00e9fini sur visualiseur ou \u00e9diteur. Toute personne ayant un lien peut voir (ou modifier) vos donn\u00e9es. Ces vues ne seraient pas compt\u00e9es dans le nombre d\u2019utilisateurs de votre plan. Le document est visible par toute personne ayant le lien, donc faites preuve de prudence lorsque vous travaillez avec des donn\u00e9es sensibles. Partage de lien en lecture seule restreint. Avec le partage de lien en lecture seule, il est possible de restreindre davantage ce que les gens peuvent voir en utilisant les permissions avanc\u00e9es de Grist pour d\u00e9finir des param\u00e8tres d\u2019URL sp\u00e9cifiques appel\u00e9s cl\u00e9s de lien qui d\u00e9terminent quelles tables, colonnes ou lignes sont affich\u00e9es lorsqu\u2019un lien sp\u00e9cifique est partag\u00e9. Int\u00e9gration en lecture seule. Les pages Grist peuvent \u00eatre int\u00e9gr\u00e9es dans des sites Web dans une iframe. Apprenez comment .","title":"Puis-je uniquement partager des documents Grist avec mon \u00e9quipe ?"},{"location":"FAQ/#grist-et-votre-site-webapplication","text":"","title":"Grist et votre site Web/application"},{"location":"FAQ/#puis-je-integrer-grist-dans-mon-site-web","text":"Oui, il est possible d\u2019int\u00e9grer des pages Grist en tant que donn\u00e9es en lecture seule dans un site Web dans une iframe. Remplacez l\u2019URL \u00e9crite dans le code ci-dessus par l\u2019URL de la page Grist que vous souhaitez int\u00e9grer, suivie de ?embed=true \u00e0 la fin de l\u2019URL. En savoir plus sur l\u2019int\u00e9gration de Grist .","title":"Puis-je int\u00e9grer Grist dans mon site Web ?"},{"location":"FAQ/#puis-je-utiliser-grist-comme-backend-de-mon-application-web","text":"L\u2019utilisation de Grist comme solution backend directement pour un site Web ou une application Web n\u2019est pas encore prise en charge. Nous n\u2019avons pas encore de m\u00e9thode d\u2019authentification pour ce cas d\u2019utilisation. La m\u00e9thode de cl\u00e9 API n\u2019est g\u00e9n\u00e9ralement pas appropri\u00e9e pour une utilisation Web, car la cl\u00e9 serait accessible \u00e0 tout spectateur de la page Web, ce qui est g\u00e9n\u00e9ralement ind\u00e9sirable. Nous sommes int\u00e9ress\u00e9s \u00e0 prendre en charge cela \u00e0 l\u2019avenir et accueillons les id\u00e9es et les commentaires dans notre forum communautaire .","title":"Puis-je utiliser Grist comme backend de mon application Web ?"},{"location":"access-rules/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . R\u00e8gles d\u2019acc\u00e8s # Chaque document Grist peut \u00eatre partag\u00e9 avec d\u2019autres en utilisant l\u2019option G\u00e9rer les utilisateurs dans le menu de partage ( ). Les utilisateurs peuvent \u00eatre invit\u00e9s en tant que Visiteurs, \u00c9diteurs ou Propri\u00e9taires (voir Partage d\u2019un document pour un rappel sur ces r\u00f4les), ou un document peut \u00eatre partag\u00e9 publiquement avec des permissions de lecture ou d\u2019\u00e9dition. Parfois, vous avez besoin de plus de nuances sur qui peut voir ou \u00e9diter des parties individuelles d\u2019un document. Les r\u00e8gles d\u2019acc\u00e8s nous donnent ce pouvoir. Seuls les propri\u00e9taires d\u2019un document peuvent modifier ses r\u00e8gles d\u2019acc\u00e8s. Lorsqu\u2019un document est charg\u00e9, les propri\u00e9taires voient un outil appel\u00e9 R\u00e8gles d\u2019acc\u00e8s dans la barre lat\u00e9rale gauche. Cliquez dessus pour voir et modifier les r\u00e8gles d\u2019acc\u00e8s. Les r\u00e8gles sont \u00e9galement accessibles via l\u2019option G\u00e9rer les utilisateurs du menu de partage avec le bouton Ouvrir les r\u00e8gles d'acc\u00e8s (disponible uniquement pour les Propri\u00e9taires du document). Supposons que nous g\u00e9rons une petite entreprise de sourcing et de livraison d\u2019objets inhabituels, organis\u00e9e \u00e0 l\u2019aide d\u2019un document avec deux tables, Commandes et Finances . Nous prenons maintenant plus d\u2019employ\u00e9s et voulons partager le document avec eux tout en limitant leur acc\u00e8s \u00e0 ce dont ils ont besoin. R\u00e8gles par d\u00e9faut # Pour voir les r\u00e8gles d\u2019acc\u00e8s d\u2019un document, visitez sa page de r\u00e8gles d\u2019acc\u00e8s en cliquant sur R\u00e8gles d\u2019acc\u00e8s dans la barre lat\u00e9rale gauche. Lorsque aucune r\u00e8gle personnalis\u00e9e n\u2019a encore \u00e9t\u00e9 cr\u00e9\u00e9e, la page des r\u00e8gles d\u2019acc\u00e8s contient les R\u00e8gles par d\u00e9faut pour notre document : Ces r\u00e8gles disent, en r\u00e9sum\u00e9, que les Propri\u00e9taires et \u00c9diteurs peuvent faire tout ce qu\u2019ils veulent dans le document, que les Visiteurs ne peuvent que lire le document, et que tout le monde d\u2019autre est interdit d\u2019acc\u00e8s. Ces r\u00e8gles ne peuvent pas \u00eatre modifi\u00e9es, mais elles peuvent \u00eatre remplac\u00e9es. Pour comprendre si un groupe de r\u00e8gles permet une certaines permissions ( Lire, Mettre \u00e0 jour, Cr\u00e9er, Supprimer ou Structure ), lisez les r\u00e8gles de haut en bas, et trouvez la premi\u00e8re r\u00e8gle applicable qui permet (vert) ou refuse (rouge) cette permission. Nous verrons de nombreux exemples au fur et \u00e0 mesure. Verrouiller la structure # Par d\u00e9faut, les Propri\u00e9taires et \u00c9diteurs ont le m\u00eame pouvoir dans un document, avec la capacit\u00e9 de cr\u00e9er ou de supprimer des tables ou des colonnes, d\u2019\u00e9crire des formules, de r\u00e9organiser des pages, et ainsi de suite. Supposons que nous voulons que seuls les Propri\u00e9taires d\u2019origine du document soient autoris\u00e9s \u00e0 modifier sa structure, car nous pr\u00e9voyons d\u2019inviter d\u2019autres collaborateurs sp\u00e9cialis\u00e9s en tant qu\u2019\u00c9diteurs. Pour ce faire, d\u00e9cochez la case de la premi\u00e8re r\u00e8gle list\u00e9e sous \u2018R\u00e8gles avanc\u00e9es\u2019 pour interdire aux \u00e9diteurs de modifier la structure. Une fois que nous avons apport\u00e9 des modifications, le bouton ENREGISTRER devient vert et invitant. Nous cliquons sur ENREGISTRER pour que la r\u00e8gle prenne effet. Important. C\u2019est une premi\u00e8re \u00e9tape importante pour tout document o\u00f9 vous avez l\u2019intention de bloquer tout acc\u00e8s aux \u00c9diteurs. Sans leur refuser la permission de structure ( S ), quiconque ayant acc\u00e8s \u00e0 l\u2019\u00e9dition pourra cr\u00e9er ou modifier des formules. \u00c9tant donn\u00e9 que les calculs de formules ne sont pas limit\u00e9s par les r\u00e8gles de contr\u00f4le d\u2019acc\u00e8s, un utilisateur d\u00e9termin\u00e9 pourrait les utiliser pour r\u00e9cup\u00e9rer des donn\u00e9es de n\u2019importe quel document. Pour se prot\u00e9ger contre cela, refusez la permission de structure aux utilisateurs dont l\u2019acc\u00e8s doit \u00eatre limit\u00e9. Cr\u00e9er une table priv\u00e9e # Pour garantir que seuls les Propri\u00e9taires peuvent acc\u00e9der \u00e0 une table, comme la table Finances dans notre exemple, nous cliquons sur Ajouter des r\u00e8gles de table et s\u00e9lectionnons le nom de la table, Finances . Cela cr\u00e9e un nouveau groupe de r\u00e8gles vide appel\u00e9 R\u00e8gles pour la table Finances . Ensuite, nous ajoutons une condition pour tout utilisateur qui n\u2019est pas un Propri\u00e9taire ( user.Access != OWNER ), avec toutes les permissions refus\u00e9es. S\u00e9lectionner Refuser tout dans le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de R U C D est un moyen rapide de d\u00e9finir toutes les permissions sur refus\u00e9es, ou vous pouvez cliquer sur chaque permission individuellement pour les mettre en rouge. R est Lire, U est Mettre \u00e0 jour, C est Cr\u00e9er, et D est Supprimer (voir Permissions de r\u00e8gle d\u2019acc\u00e8s ). Les permissions de structure ( S ) ne sont pas disponibles au niveau de la table. Une fois que vous avez termin\u00e9, cliquez sur ENREGISTRER . Maintenant, nous pourrions aller de l\u2019avant et partager le document avec un membre de l\u2019\u00e9quipe sp\u00e9cialis\u00e9 dans les livraisons, par exemple. Nous partageons le document avec eux en tant qu\u2019\u00c9diteur afin que les restrictions que nous avons mises en place s\u2019appliquent \u00e0 eux. Ils ne verront pas la table Finances dans la barre lat\u00e9rale gauche, et les tentatives de l\u2019ouvrir seront refus\u00e9es : R\u00e8gles par d\u00e9faut # Lors de l\u2019\u00e9criture des r\u00e8gles d\u2019acc\u00e8s pour des tables sp\u00e9cifiques, il est assez courant de r\u00e9p\u00e9ter la m\u00eame r\u00e8gle dans de nombreuses tables \u2014 par exemple, toujours accorder aux propri\u00e9taires des permissions de lecture et d\u2019\u00e9criture compl\u00e8tes. Pour ajouter automatiquement un ensemble de r\u00e8gles \u00e0 toutes les nouvelles r\u00e8gles de table, vous pouvez \u00e9crire des \u201cr\u00e8gles par d\u00e9faut\u201d. Il y a une case \u00e0 cocher au-dessus des r\u00e8gles par d\u00e9faut qui facilite le cas commun avec un seul clic. Cliquez dessus pour \u00e9crire une r\u00e8gle par d\u00e9faut qui accordera automatiquement aux propri\u00e9taires un acc\u00e8s complet chaque fois que des r\u00e8gles de table sont ajout\u00e9es. Cliquez sur l\u2019ic\u00f4ne > pour d\u00e9plier la table des r\u00e8gles par d\u00e9faut afin de modifier les r\u00e8gles par d\u00e9faut. Restreindre l\u2019acc\u00e8s aux colonnes # Nous pouvons restreindre l\u2019acc\u00e8s d\u2019un collaborateur aux colonnes. Dans notre exemple, nous pourrions souhaiter donner \u00e0 un sp\u00e9cialiste des livraisons un acc\u00e8s plus limit\u00e9 \u00e0 la table Commandes . Peut-\u00eatre qu\u2019ils n\u2019ont pas besoin de voir une colonne Email , ou une colonne Pi\u00e8ce avec des d\u00e9tails sur ce qu\u2019il y a dans le colis. Cliquez sur Ajouter des r\u00e8gles de table et s\u00e9lectionnez Commandes pour cr\u00e9er un groupe de r\u00e8gles pour la table Commandes . Maintenant, dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle de colonne : Dans la zone Colonnes , nous avons un nouveau menu d\u00e9roulant [Ajouter une colonne] pour ajouter toutes les colonnes auxquelles nous voulons que la r\u00e8gle s\u2019applique (dans notre cas Email et Pi\u00e8ce ). Pour la condition, nous pourrions utiliser user.Email == 'kiwi@getgrist.com' . Cela v\u00e9rifie l\u2019adresse e-mail de Kimberly, notre sp\u00e9cialiste des livraisons fictif ; nous pourrions \u00e9galement v\u00e9rifier par nom ou par un ID num\u00e9rique. Nous d\u00e9sactivons toutes les permissions disponibles pour cet utilisateur sur ces colonnes : Maintenant que les r\u00e8gles sont pr\u00eates, cliquez sur Enregistrer . Si nous avons un autre employ\u00e9 qui se sp\u00e9cialise dans le sourcing d\u2019objets, et qui a besoin de voir un ensemble diff\u00e9rent de colonnes, nous pouvons le faire. Par exemple ici, nous ajoutons une r\u00e8gle pour retirer les colonnes Adresse et T\u00e9l\u00e9phone de l\u2019utilisateur Charon : Voir en tant qu\u2019autre utilisateur # Un moyen pratique de v\u00e9rifier si les r\u00e8gles d\u2019acc\u00e8s fonctionnent comme pr\u00e9vu est la fonction Voir en tant que , disponible dans le menu d\u00e9roulant Voir en tant que . Cela permet \u00e0 un Propri\u00e9taire d\u2019ouvrir le document comme s\u2019il \u00e9tait l\u2019une des personnes avec qui il est partag\u00e9, pour voir ce que son coll\u00e8gue verrait. Le Propri\u00e9taire ne \u201cdeviendra\u201d pas ce coll\u00e8gue - tout changement qu\u2019il effectue sera enregistr\u00e9 comme provenant de lui-m\u00eame et non du coll\u00e8gue - mais il voit le document du point de vue du coll\u00e8gue. Dans notre exemple, nous pourrions s\u00e9lectionner Kiwi, et le document se rouvre, avec une grande banni\u00e8re indiquant que nous le visualisons comme Kiwi. Les colonnes Pi\u00e8ce et Email sont manquantes, et la table Finances est supprim\u00e9e : Vous pouvez \u00e9galement v\u00e9rifier dans les Donn\u00e9es sources pour confirmer que seules les tables, colonnes et lignes attendues sont expos\u00e9es. Lorsque vous \u00eates satisfait que tout semble comme pr\u00e9vu, cliquez sur le bouton vert Voir en tant que vous-m\u00eame pour fermer cet aper\u00e7u, et le document se rechargera. Tables d\u2019attributs d\u2019utilisateur # Si nous r\u00e9ussissons et embauchons de nombreuses personnes pour le sourcing et la livraison, ajouter chacune d\u2019elles une par une aux r\u00e8gles serait fastidieux. Une solution est d\u2019utiliser des \u201ctables d\u2019attributs d\u2019utilisateur.\u201d Vous pouvez ajouter une table \u00e0 votre document qui classe les utilisateurs comme vous le souhaitez, puis utiliser ces classes dans vos r\u00e8gles d\u2019acc\u00e8s. Par exemple, nous pouvons cr\u00e9er une table appel\u00e9e \u00c9quipe , et lui donner deux colonnes, Email et R\u00f4le , o\u00f9 R\u00f4le est un choix entre Sourcing et Livraison . Maintenant, nous pouvons dire \u00e0 Grist de rendre les informations de cette table disponibles pour les r\u00e8gles d\u2019acc\u00e8s, en cliquant sur Ajouter des attributs d'utilisateur . Donnez \u00e0 l\u2019attribut n\u2019importe quel nom que vous aimez (c\u2019est ainsi que nous nous y r\u00e9f\u00e9rerons dans les formules), comme \u00c9quipe . Choisissez la table \u00e0 lire ( \u00c9quipe \u00e9galement dans ce cas). Donnez une propri\u00e9t\u00e9 utilisateur \u00e0 comparer avec les lignes de cette table - dans notre cas, nous utiliserons user.Email . Et la colonne \u00e0 comparer, Email . Enregistrez cela. Maintenant, nous pouvons mettre \u00e0 jour nos r\u00e8gles pour \u00eatre plus g\u00e9n\u00e9rales. Nous d\u00e9couvrons avec l\u2019autocompl\u00e9tion que nous avons une nouvelle variable user.Team disponible dans les conditions. Cela rend les colonnes de l\u2019 \u00c9quipe disponibles, comme user.Team.Role . Maintenant, nous pouvons v\u00e9rifier si l\u2019utilisateur a un r\u00f4le particulier et appliquer les permissions qui y sont associ\u00e9es : Super ! En faisant un contr\u00f4le al\u00e9atoire, Charon voit les colonnes attendues pour quelqu\u2019un dans le Sourcing. Et si nous recrutons quelqu\u2019un d\u2019autre pour travailler avec eux, nous pouvons simplement les ajouter dans la table \u00c9quipe , sans besoin de modifier les r\u00e8gles. Contr\u00f4le d\u2019acc\u00e8s au niveau des lignes # Dans notre exemple, \u00e0 mesure que les commandes sont trait\u00e9es, elles passent des phases de sourcing aux phases de livraison. Il n\u2019est donc vraiment pas n\u00e9cessaire que les deux groupes voient toutes les commandes en m\u00eame temps. Ajoutons une colonne appel\u00e9e \u00c9tape qui peut \u00eatre d\u00e9finie sur Sourcing ou Livraison , afin que nous puissions mettre \u00e0 jour les r\u00e8gles d\u2019acc\u00e8s pour ne montrer que les commandes pertinentes. Dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle \u00e0 l'\u00e9chelle de la table pour ajouter une r\u00e8gle qui n\u2019est pas limit\u00e9e \u00e0 des colonnes sp\u00e9cifiques. Commen\u00e7ons par refuser l\u2019acc\u00e8s \u00e0 toutes les lignes pour les non-Propri\u00e9taires, puis ajoutons \u00e0 nouveau celles que nous voulons. Nous pouvons le faire avec la condition user.Access != OWNER avec des permissions Refuser tout . Ensuite, nous ajoutons une autre r\u00e8gle par d\u00e9faut en cliquant sur + , et ajoutons la condition user.Team.Role == rec.Stage . La variable rec nous permet d\u2019exprimer des r\u00e8gles qui d\u00e9pendent du contenu d\u2019un enregistrement particulier. Ici, nous v\u00e9rifions si la colonne \u00c9tape d\u2019un enregistrement correspond au r\u00f4le de l\u2019utilisateur. Si c\u2019est le cas, nous autorisons l\u2019acc\u00e8s R Lecture : Voici \u00e0 quoi ressemble la table maintenant pour Kimberly (effectuant des livraisons) : Et voici \u00e0 quoi ressemble la table pour Charon (effectuant du sourcing) : Kimberly et Charon ont maintenant un acc\u00e8s en lecture seule \u00e0 la table. Les Propri\u00e9taires ont toujours un acc\u00e8s complet en \u00e9criture \u00e0 toutes les lignes et colonnes. Comprendre les colonnes de r\u00e9f\u00e9rence dans les r\u00e8gles d\u2019acc\u00e8s Vous pouvez limiter les donn\u00e9es auxquelles les membres de l\u2019\u00e9quipe ont acc\u00e8s \u00e0 juste les lignes pertinentes pour leur travail. Une fa\u00e7on de le faire est de relier tous les enregistrements dans toutes les tables \u00e0 leurs membres d\u2019\u00e9quipe respectifs. Par exemple, les pistes et les enregistrements de ventes peuvent faire r\u00e9f\u00e9rence au repr\u00e9sentant commercial responsable de ces enregistrements. Cette vid\u00e9o rapide explique comment. V\u00e9rification des nouvelles valeurs # Les r\u00e8gles d\u2019acc\u00e8s peuvent \u00eatre utilis\u00e9es pour permettre uniquement certains changements au document. Supposons que nous voulons que les personnes de Livraison puissent changer \u00c9tape de Livraison \u00e0 Fait , sans leur donner les droits arbitraires d\u2019\u00e9diter cette colonne. Nous pouvons leur accorder ce droit exceptionnel comme suit. Dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle de colonne . R\u00e9glez [Ajouter une colonne] sur \u00c9tape , et marquez la permission U/Mise \u00e0 jour pour \u00eatre accord\u00e9e. Pour la condition, utilisez ceci : (user.Team.Role == 'Livraison' and rec.Stage == 'Livraison' and newRec.Stage == 'Fait') Cela v\u00e9rifie si l\u2019utilisateur a le r\u00f4le de Livraison, que l\u2019enregistrement est \u00e0 l\u2019\u00e9tape de Livraison, et que l\u2019utilisateur essaie de changer l\u2019\u00c9tape en Fait . La variable newRec est une variante de rec disponible lorsque l\u2019utilisateur propose de changer un enregistrement, avec rec contenant son \u00e9tat avant le changement, et newRec son \u00e9tat apr\u00e8s le changement propos\u00e9. Maintenant, si nous voyons la table comme Kiwi, et essayons de changer une \u00c9tape en Sourcing , nous sommes refus\u00e9s : Si nous changeons une \u00c9tape en Fait , cela fonctionne, et l\u2019enregistrement dispara\u00eet de la vue puisqu\u2019il n\u2019est plus dans l\u2019\u00e9tape de Livraison : Cl\u00e9s de lien # Parfois, il est utile de donner acc\u00e8s \u00e0 une petite partie sp\u00e9cifique du document, par exemple une seule ligne d\u2019une table. Grist offre une fonctionnalit\u00e9 appel\u00e9e \u201ccl\u00e9s de lien\u201d qui peut aider avec cela. Tous les param\u00e8tres dans une URL de document Grist qui se terminent par un underscore sont disponibles pour les r\u00e8gles d\u2019acc\u00e8s dans une variable user.LinkKey . Par exemple, si une URL de document se termine par ....?Token_=xx-xx-xx-xx&Flavor_=vanilla , alors user.LinkKey.Token sera d\u00e9fini sur xx-xx-xx-xx et user.LinkKey.Flavor sur vanilla . Voyons un exemple pour voir comment cela peut \u00eatre utile. Supposons que nous avons une table de Commandes et que nous aimerions occasionnellement partager des informations sur une seule commande avec quelqu\u2019un. Pour ce faire avec des cl\u00e9s de lien, nous avons besoin d\u2019un code difficile \u00e0 deviner pour chaque commande, qui peut \u00eatre utilis\u00e9 pour y acc\u00e9der. Grist a une fonction UUID() qui donne un identifiant unique, al\u00e9atoire et difficile \u00e0 deviner, donc ajoutons une colonne UUID avec la formule =UUID() : En fait, nous voulons que UUID() soit appel\u00e9 une seule fois par commande, lorsque nous la cr\u00e9ons, et jamais recalcul\u00e9 (car sinon, elle changerait). Donc dans la barre lat\u00e9rale droite, nous convertissons la colonne de formule en colonne de donn\u00e9es, figeant ses valeurs : Cela convertit notre formule en une formule d\u2019initialisation. Nous d\u00e9finissons la formule pour s\u2019appliquer aux nouveaux enregistrements : \u00c0 ce stade, nous avons un code solide et difficile \u00e0 deviner pour chaque commande dans la colonne UUID , qui sera cr\u00e9\u00e9 \u00e0 mesure que nous ajoutons de nouvelles commandes. Il peut \u00eatre pratique \u00e0 ce stade de construire des liens vers le document avec ce code int\u00e9gr\u00e9. Grist a un helper pour cela appel\u00e9 SELF_HYPERLINK . Pour ajouter une cl\u00e9 de lien appel\u00e9e , utilisez simplement cette fonction avec un argument LinkKey_ . Dans notre cas, nous passons LinkKey_UUID=$UUID pour int\u00e9grer la valeur de la colonne UUID dans l\u2019URL. Nous d\u00e9finissons \u00e9galement label=$Ref pour contr\u00f4ler le texte du lien dans la feuille de calcul. Pour afficher le lien, nous d\u00e9finissons le type de colonne sur Texte et activons l\u2019option HyperLink : Une fois que nous avons ces liens, nous pouvons faire un peu de m\u00e9nage en cachant les colonnes UUID et Ref (voir Op\u00e9rations sur les colonnes pour un rappel sur la fa\u00e7on de le faire) : Les liens ne font encore rien de sp\u00e9cial, mais nous avons maintenant tout ce dont nous avons besoin pour que cela se produise. Voici un exemple de r\u00e8gles d\u2019acc\u00e8s pour permettre \u00e0 quiconque ayant un UUID dans son URL de lire toute commande avec un UUID correspondant (sinon, seuls les propri\u00e9taires peuvent lire les commandes dans ce cas) : Et voici ce qu\u2019un non-propri\u00e9taire voit maintenant, avec l\u2019UUID de la premi\u00e8re commande dans son URL : Ce n\u2019est que le d\u00e9but des possibilit\u00e9s. Les cl\u00e9s de lien peuvent donner acc\u00e8s \u00e0 plusieurs lignes \u00e0 travers de nombreuses tables. Elles peuvent \u00eatre utilis\u00e9es dans Tables d\u2019attributs d\u2019utilisateur . Et les donn\u00e9es auxquelles elles donnent acc\u00e8s peuvent \u00eatre dans des tables, des fiches, des listes de fiches, des graphiques et des widgets personnalis\u00e9s. Consultez un autre exemple pour approfondir votre compr\u00e9hension des cl\u00e9s de lien. Conditions des r\u00e8gles d\u2019acc\u00e8s # Les conditions des r\u00e8gles d\u2019acc\u00e8s contiennent une formule exprimant quand la r\u00e8gle doit s\u2019appliquer. Une condition vide s\u2019appliquera toujours. Lorsqu\u2019une condition s\u2019applique \u00e0 une action, les permissions associ\u00e9es \u00e0 la condition sont d\u00e9finies comme autoris\u00e9es ou refus\u00e9es pour cette action si aucune r\u00e8gle ant\u00e9rieure dans le m\u00eame groupe ne les a encore d\u00e9finies. Lorsqu\u2019une condition ne s\u2019applique pas, aucune permission n\u2019est d\u00e9finie par cette r\u00e8gle, mais d\u2019autres r\u00e8gles pourraient les d\u00e9finir. Les formules sont \u00e9crites dans un sous-ensemble restreint de Python. Les variables qui peuvent \u00eatre disponibles dans les r\u00e8gles d\u2019acc\u00e8s sont user , rec et newRec . La variable user contient les membres suivants : user.Access : l\u2019un de owners , editors ou viewers , indiquant comment le document a \u00e9t\u00e9 partag\u00e9 avec l\u2019utilisateur (voir Partage d\u2019un document ). user.Email : l\u2019adresse e-mail de l\u2019utilisateur (ou anon@getgrist.com pour les utilisateurs qui ne sont pas connect\u00e9s). user.UserID : un ID num\u00e9rique associ\u00e9 \u00e0 l\u2019utilisateur. user.Name : le nom de l\u2019utilisateur (ou Anonyme si indisponible). user.LinkKey : un objet avec tous les param\u00e8tres d\u2019URL de contr\u00f4le d\u2019acc\u00e8s. Les param\u00e8tres d\u2019URL de contr\u00f4le d\u2019acc\u00e8s se terminent par un underscore (qui est ensuite supprim\u00e9). Disponible uniquement dans le client web, pas dans l\u2019API. user.SessionID : une cha\u00eene unique attribu\u00e9e aux utilisateurs anonymes pendant la dur\u00e9e de la session de cet utilisateur. Pour les utilisateurs connect\u00e9s, user.SessionID est toujours \"u\" + l\u2019ID num\u00e9rique de l\u2019utilisateur. Pour un exemple d\u2019utilisation de la variable user , lisez R\u00e8gles par d\u00e9faut . La variable rec contient l\u2019\u00e9tat d\u2019un enregistrement/ligne individuel, pour les conditions qui doivent en tenir compte. Lorsqu\u2019elle est utilis\u00e9e, cette r\u00e8gle devient sp\u00e9cifique \u00e0 la ligne. Cela permet, par exemple, de rendre certaines lignes visibles uniquement pour certains utilisateurs, ou d\u2019interdire la modification de certaines lignes par certains utilisateurs. Pour un exemple d\u2019utilisation de la variable rec , lisez Contr\u00f4le d\u2019acc\u00e8s au niveau des lignes . La variable newRec est disponible pour la cr\u00e9ation et la mise \u00e0 jour d\u2019enregistrements/ligne, et contient l\u2019\u00e9tat d\u2019une ligne apr\u00e8s un changement propos\u00e9, vous permettant d\u2019autoriser ou de refuser s\u00e9lectivement certains changements. Pour un exemple d\u2019utilisation de la variable newRec , lisez V\u00e9rification des nouvelles valeurs . Les op\u00e9rations prises en charge dans les formules de condition sont actuellement : and , or , + , - , * , / , % , == , != , < , <= , > , >= , is , is not , in , not in . Les variables prises en charge sont : user , rec , newRec avec leurs membres accessibles avec . . Les cha\u00eenes, les nombres et les listes sont \u00e9galement pris en charge. Si une op\u00e9ration dont vous avez besoin n\u2019est pas disponible, consid\u00e9rez si vous pouvez faire une partie du travail dans une formule dans la table elle-m\u00eame (voir M\u00e9mos de r\u00e8gle d\u2019acc\u00e8s pour un exemple). Les commentaires sont autoris\u00e9s, en utilisant # ou \"\"\" . S\u2019il y a un commentaire dans une r\u00e8gle, alors le premier commentaire dans une r\u00e8gle qui entra\u00eene un refus d\u2019une action sera signal\u00e9 \u00e0 l\u2019utilisateur comme un conseil sur la raison pour laquelle l\u2019action n\u2019a pas \u00e9t\u00e9 permise. Voir M\u00e9mos de r\u00e8gle d\u2019acc\u00e8s pour un exemple. Permissions des r\u00e8gles d\u2019acc\u00e8s # Une permission contr\u00f4le si un utilisateur peut effectuer un type d\u2019action particulier. Les r\u00e8gles d\u2019acc\u00e8s Grist traitent actuellement 5 types d\u2019actions, qui sont donn\u00e9es par des acronymes \u00e0 une lettre pour plus de commodit\u00e9 : R - permission de lire des cellules. U - permission de mettre \u00e0 jour des cellules. C - permission de cr\u00e9er des lignes. D - permission de supprimer des lignes. S - permission de modifier la structure de la table. La permission de structure S est disponible dans le groupe de r\u00e8gles d\u2019acc\u00e8s par d\u00e9faut. Les r\u00e8gles de colonne n\u2019ont pas les permissions C de cr\u00e9ation et D de suppression, qui doivent \u00eatre g\u00e9r\u00e9es dans les r\u00e8gles de table par d\u00e9faut. Remarque : La permission S est tr\u00e8s puissante. Elle permet d\u2019\u00e9crire des formules, qui peuvent acc\u00e9der \u00e0 toutes les donn\u00e9es dans le document, ind\u00e9pendamment des r\u00e8gles. \u00c9tant donn\u00e9 que la permission S est activ\u00e9e par d\u00e9faut pour les \u00c9diteurs et les Propri\u00e9taires, tout utilisateur de ce type pourrait \u00e9diter une formule et ainsi r\u00e9cup\u00e9rer n\u2019importe quelle donn\u00e9e. En d\u2019autres termes, avoir la permission S rend possible de contourner d\u2019autres r\u00e8gles qui emp\u00eachent l\u2019acc\u00e8s aux donn\u00e9es. Pour cette raison, la d\u00e9sactiver \u2013 comme d\u00e9crit ci-dessus dans Verrouiller la structure \u2013 est une premi\u00e8re \u00e9tape importante pour limiter l\u2019acc\u00e8s aux donn\u00e9es. M\u00e9mos des r\u00e8gles d\u2019acc\u00e8s # Lorsqu\u2019un utilisateur re\u00e7oit un message d\u2019erreur lui refusant l\u2019acc\u00e8s en raison d\u2019une r\u00e8gle, il peut \u00eatre utile de donner des d\u00e9tails sp\u00e9cifiques qui l\u2019aideront \u00e0 comprendre le probl\u00e8me. Vous pouvez le faire en ajoutant un m\u00e9mo pour la condition. Tout d\u2019abord, cliquez sur l\u2019ic\u00f4ne de m\u00e9mo \u00e0 droite de votre condition. Tapez le message d\u2019erreur que vous souhaitez afficher dans la zone de saisie. Assurez-vous d\u2019enregistrer vos modifications. Lorsque la r\u00e8gle bloque un utilisateur d\u2019effectuer une action, le m\u00e9mo appara\u00eetra comme une notification. Pour une explication de la fa\u00e7on dont cette r\u00e8gle d\u2019acc\u00e8s particuli\u00e8re fonctionne, voir R\u00e8gles d\u2019acc\u00e8s pour restreindre les enregistrements en double Exemples de r\u00e8gles d\u2019acc\u00e8s # Avec l\u2019exemple \u00e9tendu d\u2019utilisation des r\u00e8gles d\u2019acc\u00e8s dans cette section, nous allons collecter des exemples complets de mod\u00e8les de r\u00e8gles d\u2019acc\u00e8s et de guides ici. Listes de leads : Une liste tr\u00e8s simple de leads, assign\u00e9s \u00e0 des individus pour un suivi, avec le contr\u00f4le des attributions r\u00e9serv\u00e9 aux propri\u00e9taires du document. \u00c9quipe de vente bas\u00e9e sur les comptes : CRM de vente avec des affaires et des contacts assign\u00e9s \u00e0 des repr\u00e9sentants commerciaux. Les repr\u00e9sentants ne peuvent voir que leurs propres contacts et affaires, mais les managers peuvent tout voir. Tirage au sort public : Un organisateur de tirage au sort public qui utilise des r\u00e8gles d\u2019acc\u00e8s pour faire respecter les r\u00e8gles du tirage au sort sans exiger que les demandeurs se connectent \u00e0 Grist. Sondage simple : Un sondage simple g\u00e9r\u00e9 dans Grist avec des r\u00e8gles d\u2019acc\u00e8s pour limiter une r\u00e9ponse par visiteur. Liste crowdsourc\u00e9e : Liste crowdsourc\u00e9e publique avec des r\u00e8gles d\u2019acc\u00e8s pour permettre aux mod\u00e9rateurs de modifier presque tout, mais limiter les visiteurs \u00e0 ne faire et modifier que leurs propres contributions. Feuilles de temps : Mod\u00e8le pour capturer les feuilles de temps des entrepreneurs. Les r\u00e8gles d\u2019acc\u00e8s permettent aux entrepreneurs de voir uniquement leurs feuilles de temps historiques et de modifier uniquement le mois actif. Gestion de projet : Suivre les t\u00e2ches par \u00e9v\u00e9nement et signaler les t\u00e2ches \u00e0 risque. Les r\u00e8gles d\u2019acc\u00e8s limitent les permissions par d\u00e9partement et \u00e9largissent les permissions des managers.","title":"Intro to access rules"},{"location":"access-rules/#regles-dacces","text":"Chaque document Grist peut \u00eatre partag\u00e9 avec d\u2019autres en utilisant l\u2019option G\u00e9rer les utilisateurs dans le menu de partage ( ). Les utilisateurs peuvent \u00eatre invit\u00e9s en tant que Visiteurs, \u00c9diteurs ou Propri\u00e9taires (voir Partage d\u2019un document pour un rappel sur ces r\u00f4les), ou un document peut \u00eatre partag\u00e9 publiquement avec des permissions de lecture ou d\u2019\u00e9dition. Parfois, vous avez besoin de plus de nuances sur qui peut voir ou \u00e9diter des parties individuelles d\u2019un document. Les r\u00e8gles d\u2019acc\u00e8s nous donnent ce pouvoir. Seuls les propri\u00e9taires d\u2019un document peuvent modifier ses r\u00e8gles d\u2019acc\u00e8s. Lorsqu\u2019un document est charg\u00e9, les propri\u00e9taires voient un outil appel\u00e9 R\u00e8gles d\u2019acc\u00e8s dans la barre lat\u00e9rale gauche. Cliquez dessus pour voir et modifier les r\u00e8gles d\u2019acc\u00e8s. Les r\u00e8gles sont \u00e9galement accessibles via l\u2019option G\u00e9rer les utilisateurs du menu de partage avec le bouton Ouvrir les r\u00e8gles d'acc\u00e8s (disponible uniquement pour les Propri\u00e9taires du document). Supposons que nous g\u00e9rons une petite entreprise de sourcing et de livraison d\u2019objets inhabituels, organis\u00e9e \u00e0 l\u2019aide d\u2019un document avec deux tables, Commandes et Finances . Nous prenons maintenant plus d\u2019employ\u00e9s et voulons partager le document avec eux tout en limitant leur acc\u00e8s \u00e0 ce dont ils ont besoin.","title":"R\u00e8gles d’acc\u00e8s"},{"location":"access-rules/#regles-par-defaut","text":"Pour voir les r\u00e8gles d\u2019acc\u00e8s d\u2019un document, visitez sa page de r\u00e8gles d\u2019acc\u00e8s en cliquant sur R\u00e8gles d\u2019acc\u00e8s dans la barre lat\u00e9rale gauche. Lorsque aucune r\u00e8gle personnalis\u00e9e n\u2019a encore \u00e9t\u00e9 cr\u00e9\u00e9e, la page des r\u00e8gles d\u2019acc\u00e8s contient les R\u00e8gles par d\u00e9faut pour notre document : Ces r\u00e8gles disent, en r\u00e9sum\u00e9, que les Propri\u00e9taires et \u00c9diteurs peuvent faire tout ce qu\u2019ils veulent dans le document, que les Visiteurs ne peuvent que lire le document, et que tout le monde d\u2019autre est interdit d\u2019acc\u00e8s. Ces r\u00e8gles ne peuvent pas \u00eatre modifi\u00e9es, mais elles peuvent \u00eatre remplac\u00e9es. Pour comprendre si un groupe de r\u00e8gles permet une certaines permissions ( Lire, Mettre \u00e0 jour, Cr\u00e9er, Supprimer ou Structure ), lisez les r\u00e8gles de haut en bas, et trouvez la premi\u00e8re r\u00e8gle applicable qui permet (vert) ou refuse (rouge) cette permission. Nous verrons de nombreux exemples au fur et \u00e0 mesure.","title":"R\u00e8gles par d\u00e9faut"},{"location":"access-rules/#verrouiller-la-structure","text":"Par d\u00e9faut, les Propri\u00e9taires et \u00c9diteurs ont le m\u00eame pouvoir dans un document, avec la capacit\u00e9 de cr\u00e9er ou de supprimer des tables ou des colonnes, d\u2019\u00e9crire des formules, de r\u00e9organiser des pages, et ainsi de suite. Supposons que nous voulons que seuls les Propri\u00e9taires d\u2019origine du document soient autoris\u00e9s \u00e0 modifier sa structure, car nous pr\u00e9voyons d\u2019inviter d\u2019autres collaborateurs sp\u00e9cialis\u00e9s en tant qu\u2019\u00c9diteurs. Pour ce faire, d\u00e9cochez la case de la premi\u00e8re r\u00e8gle list\u00e9e sous \u2018R\u00e8gles avanc\u00e9es\u2019 pour interdire aux \u00e9diteurs de modifier la structure. Une fois que nous avons apport\u00e9 des modifications, le bouton ENREGISTRER devient vert et invitant. Nous cliquons sur ENREGISTRER pour que la r\u00e8gle prenne effet. Important. C\u2019est une premi\u00e8re \u00e9tape importante pour tout document o\u00f9 vous avez l\u2019intention de bloquer tout acc\u00e8s aux \u00c9diteurs. Sans leur refuser la permission de structure ( S ), quiconque ayant acc\u00e8s \u00e0 l\u2019\u00e9dition pourra cr\u00e9er ou modifier des formules. \u00c9tant donn\u00e9 que les calculs de formules ne sont pas limit\u00e9s par les r\u00e8gles de contr\u00f4le d\u2019acc\u00e8s, un utilisateur d\u00e9termin\u00e9 pourrait les utiliser pour r\u00e9cup\u00e9rer des donn\u00e9es de n\u2019importe quel document. Pour se prot\u00e9ger contre cela, refusez la permission de structure aux utilisateurs dont l\u2019acc\u00e8s doit \u00eatre limit\u00e9.","title":"Verrouiller la structure"},{"location":"access-rules/#creer-une-table-privee","text":"Pour garantir que seuls les Propri\u00e9taires peuvent acc\u00e9der \u00e0 une table, comme la table Finances dans notre exemple, nous cliquons sur Ajouter des r\u00e8gles de table et s\u00e9lectionnons le nom de la table, Finances . Cela cr\u00e9e un nouveau groupe de r\u00e8gles vide appel\u00e9 R\u00e8gles pour la table Finances . Ensuite, nous ajoutons une condition pour tout utilisateur qui n\u2019est pas un Propri\u00e9taire ( user.Access != OWNER ), avec toutes les permissions refus\u00e9es. S\u00e9lectionner Refuser tout dans le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de R U C D est un moyen rapide de d\u00e9finir toutes les permissions sur refus\u00e9es, ou vous pouvez cliquer sur chaque permission individuellement pour les mettre en rouge. R est Lire, U est Mettre \u00e0 jour, C est Cr\u00e9er, et D est Supprimer (voir Permissions de r\u00e8gle d\u2019acc\u00e8s ). Les permissions de structure ( S ) ne sont pas disponibles au niveau de la table. Une fois que vous avez termin\u00e9, cliquez sur ENREGISTRER . Maintenant, nous pourrions aller de l\u2019avant et partager le document avec un membre de l\u2019\u00e9quipe sp\u00e9cialis\u00e9 dans les livraisons, par exemple. Nous partageons le document avec eux en tant qu\u2019\u00c9diteur afin que les restrictions que nous avons mises en place s\u2019appliquent \u00e0 eux. Ils ne verront pas la table Finances dans la barre lat\u00e9rale gauche, et les tentatives de l\u2019ouvrir seront refus\u00e9es :","title":"Cr\u00e9er une table priv\u00e9e"},{"location":"access-rules/#regles-par-defaut_1","text":"Lors de l\u2019\u00e9criture des r\u00e8gles d\u2019acc\u00e8s pour des tables sp\u00e9cifiques, il est assez courant de r\u00e9p\u00e9ter la m\u00eame r\u00e8gle dans de nombreuses tables \u2014 par exemple, toujours accorder aux propri\u00e9taires des permissions de lecture et d\u2019\u00e9criture compl\u00e8tes. Pour ajouter automatiquement un ensemble de r\u00e8gles \u00e0 toutes les nouvelles r\u00e8gles de table, vous pouvez \u00e9crire des \u201cr\u00e8gles par d\u00e9faut\u201d. Il y a une case \u00e0 cocher au-dessus des r\u00e8gles par d\u00e9faut qui facilite le cas commun avec un seul clic. Cliquez dessus pour \u00e9crire une r\u00e8gle par d\u00e9faut qui accordera automatiquement aux propri\u00e9taires un acc\u00e8s complet chaque fois que des r\u00e8gles de table sont ajout\u00e9es. Cliquez sur l\u2019ic\u00f4ne > pour d\u00e9plier la table des r\u00e8gles par d\u00e9faut afin de modifier les r\u00e8gles par d\u00e9faut.","title":"R\u00e8gles par d\u00e9faut"},{"location":"access-rules/#restreindre-lacces-aux-colonnes","text":"Nous pouvons restreindre l\u2019acc\u00e8s d\u2019un collaborateur aux colonnes. Dans notre exemple, nous pourrions souhaiter donner \u00e0 un sp\u00e9cialiste des livraisons un acc\u00e8s plus limit\u00e9 \u00e0 la table Commandes . Peut-\u00eatre qu\u2019ils n\u2019ont pas besoin de voir une colonne Email , ou une colonne Pi\u00e8ce avec des d\u00e9tails sur ce qu\u2019il y a dans le colis. Cliquez sur Ajouter des r\u00e8gles de table et s\u00e9lectionnez Commandes pour cr\u00e9er un groupe de r\u00e8gles pour la table Commandes . Maintenant, dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle de colonne : Dans la zone Colonnes , nous avons un nouveau menu d\u00e9roulant [Ajouter une colonne] pour ajouter toutes les colonnes auxquelles nous voulons que la r\u00e8gle s\u2019applique (dans notre cas Email et Pi\u00e8ce ). Pour la condition, nous pourrions utiliser user.Email == 'kiwi@getgrist.com' . Cela v\u00e9rifie l\u2019adresse e-mail de Kimberly, notre sp\u00e9cialiste des livraisons fictif ; nous pourrions \u00e9galement v\u00e9rifier par nom ou par un ID num\u00e9rique. Nous d\u00e9sactivons toutes les permissions disponibles pour cet utilisateur sur ces colonnes : Maintenant que les r\u00e8gles sont pr\u00eates, cliquez sur Enregistrer . Si nous avons un autre employ\u00e9 qui se sp\u00e9cialise dans le sourcing d\u2019objets, et qui a besoin de voir un ensemble diff\u00e9rent de colonnes, nous pouvons le faire. Par exemple ici, nous ajoutons une r\u00e8gle pour retirer les colonnes Adresse et T\u00e9l\u00e9phone de l\u2019utilisateur Charon :","title":"Restreindre l’acc\u00e8s aux colonnes"},{"location":"access-rules/#voir-en-tant-quautre-utilisateur","text":"Un moyen pratique de v\u00e9rifier si les r\u00e8gles d\u2019acc\u00e8s fonctionnent comme pr\u00e9vu est la fonction Voir en tant que , disponible dans le menu d\u00e9roulant Voir en tant que . Cela permet \u00e0 un Propri\u00e9taire d\u2019ouvrir le document comme s\u2019il \u00e9tait l\u2019une des personnes avec qui il est partag\u00e9, pour voir ce que son coll\u00e8gue verrait. Le Propri\u00e9taire ne \u201cdeviendra\u201d pas ce coll\u00e8gue - tout changement qu\u2019il effectue sera enregistr\u00e9 comme provenant de lui-m\u00eame et non du coll\u00e8gue - mais il voit le document du point de vue du coll\u00e8gue. Dans notre exemple, nous pourrions s\u00e9lectionner Kiwi, et le document se rouvre, avec une grande banni\u00e8re indiquant que nous le visualisons comme Kiwi. Les colonnes Pi\u00e8ce et Email sont manquantes, et la table Finances est supprim\u00e9e : Vous pouvez \u00e9galement v\u00e9rifier dans les Donn\u00e9es sources pour confirmer que seules les tables, colonnes et lignes attendues sont expos\u00e9es. Lorsque vous \u00eates satisfait que tout semble comme pr\u00e9vu, cliquez sur le bouton vert Voir en tant que vous-m\u00eame pour fermer cet aper\u00e7u, et le document se rechargera.","title":"Voir en tant qu’autre utilisateur"},{"location":"access-rules/#tables-dattributs-dutilisateur","text":"Si nous r\u00e9ussissons et embauchons de nombreuses personnes pour le sourcing et la livraison, ajouter chacune d\u2019elles une par une aux r\u00e8gles serait fastidieux. Une solution est d\u2019utiliser des \u201ctables d\u2019attributs d\u2019utilisateur.\u201d Vous pouvez ajouter une table \u00e0 votre document qui classe les utilisateurs comme vous le souhaitez, puis utiliser ces classes dans vos r\u00e8gles d\u2019acc\u00e8s. Par exemple, nous pouvons cr\u00e9er une table appel\u00e9e \u00c9quipe , et lui donner deux colonnes, Email et R\u00f4le , o\u00f9 R\u00f4le est un choix entre Sourcing et Livraison . Maintenant, nous pouvons dire \u00e0 Grist de rendre les informations de cette table disponibles pour les r\u00e8gles d\u2019acc\u00e8s, en cliquant sur Ajouter des attributs d'utilisateur . Donnez \u00e0 l\u2019attribut n\u2019importe quel nom que vous aimez (c\u2019est ainsi que nous nous y r\u00e9f\u00e9rerons dans les formules), comme \u00c9quipe . Choisissez la table \u00e0 lire ( \u00c9quipe \u00e9galement dans ce cas). Donnez une propri\u00e9t\u00e9 utilisateur \u00e0 comparer avec les lignes de cette table - dans notre cas, nous utiliserons user.Email . Et la colonne \u00e0 comparer, Email . Enregistrez cela. Maintenant, nous pouvons mettre \u00e0 jour nos r\u00e8gles pour \u00eatre plus g\u00e9n\u00e9rales. Nous d\u00e9couvrons avec l\u2019autocompl\u00e9tion que nous avons une nouvelle variable user.Team disponible dans les conditions. Cela rend les colonnes de l\u2019 \u00c9quipe disponibles, comme user.Team.Role . Maintenant, nous pouvons v\u00e9rifier si l\u2019utilisateur a un r\u00f4le particulier et appliquer les permissions qui y sont associ\u00e9es : Super ! En faisant un contr\u00f4le al\u00e9atoire, Charon voit les colonnes attendues pour quelqu\u2019un dans le Sourcing. Et si nous recrutons quelqu\u2019un d\u2019autre pour travailler avec eux, nous pouvons simplement les ajouter dans la table \u00c9quipe , sans besoin de modifier les r\u00e8gles.","title":"Tables d’attributs d’utilisateur"},{"location":"access-rules/#controle-dacces-au-niveau-des-lignes","text":"Dans notre exemple, \u00e0 mesure que les commandes sont trait\u00e9es, elles passent des phases de sourcing aux phases de livraison. Il n\u2019est donc vraiment pas n\u00e9cessaire que les deux groupes voient toutes les commandes en m\u00eame temps. Ajoutons une colonne appel\u00e9e \u00c9tape qui peut \u00eatre d\u00e9finie sur Sourcing ou Livraison , afin que nous puissions mettre \u00e0 jour les r\u00e8gles d\u2019acc\u00e8s pour ne montrer que les commandes pertinentes. Dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle \u00e0 l'\u00e9chelle de la table pour ajouter une r\u00e8gle qui n\u2019est pas limit\u00e9e \u00e0 des colonnes sp\u00e9cifiques. Commen\u00e7ons par refuser l\u2019acc\u00e8s \u00e0 toutes les lignes pour les non-Propri\u00e9taires, puis ajoutons \u00e0 nouveau celles que nous voulons. Nous pouvons le faire avec la condition user.Access != OWNER avec des permissions Refuser tout . Ensuite, nous ajoutons une autre r\u00e8gle par d\u00e9faut en cliquant sur + , et ajoutons la condition user.Team.Role == rec.Stage . La variable rec nous permet d\u2019exprimer des r\u00e8gles qui d\u00e9pendent du contenu d\u2019un enregistrement particulier. Ici, nous v\u00e9rifions si la colonne \u00c9tape d\u2019un enregistrement correspond au r\u00f4le de l\u2019utilisateur. Si c\u2019est le cas, nous autorisons l\u2019acc\u00e8s R Lecture : Voici \u00e0 quoi ressemble la table maintenant pour Kimberly (effectuant des livraisons) : Et voici \u00e0 quoi ressemble la table pour Charon (effectuant du sourcing) : Kimberly et Charon ont maintenant un acc\u00e8s en lecture seule \u00e0 la table. Les Propri\u00e9taires ont toujours un acc\u00e8s complet en \u00e9criture \u00e0 toutes les lignes et colonnes. Comprendre les colonnes de r\u00e9f\u00e9rence dans les r\u00e8gles d\u2019acc\u00e8s Vous pouvez limiter les donn\u00e9es auxquelles les membres de l\u2019\u00e9quipe ont acc\u00e8s \u00e0 juste les lignes pertinentes pour leur travail. Une fa\u00e7on de le faire est de relier tous les enregistrements dans toutes les tables \u00e0 leurs membres d\u2019\u00e9quipe respectifs. Par exemple, les pistes et les enregistrements de ventes peuvent faire r\u00e9f\u00e9rence au repr\u00e9sentant commercial responsable de ces enregistrements. Cette vid\u00e9o rapide explique comment.","title":"Contr\u00f4le d’acc\u00e8s au niveau des lignes"},{"location":"access-rules/#verification-des-nouvelles-valeurs","text":"Les r\u00e8gles d\u2019acc\u00e8s peuvent \u00eatre utilis\u00e9es pour permettre uniquement certains changements au document. Supposons que nous voulons que les personnes de Livraison puissent changer \u00c9tape de Livraison \u00e0 Fait , sans leur donner les droits arbitraires d\u2019\u00e9diter cette colonne. Nous pouvons leur accorder ce droit exceptionnel comme suit. Dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle de colonne . R\u00e9glez [Ajouter une colonne] sur \u00c9tape , et marquez la permission U/Mise \u00e0 jour pour \u00eatre accord\u00e9e. Pour la condition, utilisez ceci : (user.Team.Role == 'Livraison' and rec.Stage == 'Livraison' and newRec.Stage == 'Fait') Cela v\u00e9rifie si l\u2019utilisateur a le r\u00f4le de Livraison, que l\u2019enregistrement est \u00e0 l\u2019\u00e9tape de Livraison, et que l\u2019utilisateur essaie de changer l\u2019\u00c9tape en Fait . La variable newRec est une variante de rec disponible lorsque l\u2019utilisateur propose de changer un enregistrement, avec rec contenant son \u00e9tat avant le changement, et newRec son \u00e9tat apr\u00e8s le changement propos\u00e9. Maintenant, si nous voyons la table comme Kiwi, et essayons de changer une \u00c9tape en Sourcing , nous sommes refus\u00e9s : Si nous changeons une \u00c9tape en Fait , cela fonctionne, et l\u2019enregistrement dispara\u00eet de la vue puisqu\u2019il n\u2019est plus dans l\u2019\u00e9tape de Livraison :","title":"V\u00e9rification des nouvelles valeurs"},{"location":"access-rules/#cles-de-lien","text":"Parfois, il est utile de donner acc\u00e8s \u00e0 une petite partie sp\u00e9cifique du document, par exemple une seule ligne d\u2019une table. Grist offre une fonctionnalit\u00e9 appel\u00e9e \u201ccl\u00e9s de lien\u201d qui peut aider avec cela. Tous les param\u00e8tres dans une URL de document Grist qui se terminent par un underscore sont disponibles pour les r\u00e8gles d\u2019acc\u00e8s dans une variable user.LinkKey . Par exemple, si une URL de document se termine par ....?Token_=xx-xx-xx-xx&Flavor_=vanilla , alors user.LinkKey.Token sera d\u00e9fini sur xx-xx-xx-xx et user.LinkKey.Flavor sur vanilla . Voyons un exemple pour voir comment cela peut \u00eatre utile. Supposons que nous avons une table de Commandes et que nous aimerions occasionnellement partager des informations sur une seule commande avec quelqu\u2019un. Pour ce faire avec des cl\u00e9s de lien, nous avons besoin d\u2019un code difficile \u00e0 deviner pour chaque commande, qui peut \u00eatre utilis\u00e9 pour y acc\u00e9der. Grist a une fonction UUID() qui donne un identifiant unique, al\u00e9atoire et difficile \u00e0 deviner, donc ajoutons une colonne UUID avec la formule =UUID() : En fait, nous voulons que UUID() soit appel\u00e9 une seule fois par commande, lorsque nous la cr\u00e9ons, et jamais recalcul\u00e9 (car sinon, elle changerait). Donc dans la barre lat\u00e9rale droite, nous convertissons la colonne de formule en colonne de donn\u00e9es, figeant ses valeurs : Cela convertit notre formule en une formule d\u2019initialisation. Nous d\u00e9finissons la formule pour s\u2019appliquer aux nouveaux enregistrements : \u00c0 ce stade, nous avons un code solide et difficile \u00e0 deviner pour chaque commande dans la colonne UUID , qui sera cr\u00e9\u00e9 \u00e0 mesure que nous ajoutons de nouvelles commandes. Il peut \u00eatre pratique \u00e0 ce stade de construire des liens vers le document avec ce code int\u00e9gr\u00e9. Grist a un helper pour cela appel\u00e9 SELF_HYPERLINK . Pour ajouter une cl\u00e9 de lien appel\u00e9e , utilisez simplement cette fonction avec un argument LinkKey_ . Dans notre cas, nous passons LinkKey_UUID=$UUID pour int\u00e9grer la valeur de la colonne UUID dans l\u2019URL. Nous d\u00e9finissons \u00e9galement label=$Ref pour contr\u00f4ler le texte du lien dans la feuille de calcul. Pour afficher le lien, nous d\u00e9finissons le type de colonne sur Texte et activons l\u2019option HyperLink : Une fois que nous avons ces liens, nous pouvons faire un peu de m\u00e9nage en cachant les colonnes UUID et Ref (voir Op\u00e9rations sur les colonnes pour un rappel sur la fa\u00e7on de le faire) : Les liens ne font encore rien de sp\u00e9cial, mais nous avons maintenant tout ce dont nous avons besoin pour que cela se produise. Voici un exemple de r\u00e8gles d\u2019acc\u00e8s pour permettre \u00e0 quiconque ayant un UUID dans son URL de lire toute commande avec un UUID correspondant (sinon, seuls les propri\u00e9taires peuvent lire les commandes dans ce cas) : Et voici ce qu\u2019un non-propri\u00e9taire voit maintenant, avec l\u2019UUID de la premi\u00e8re commande dans son URL : Ce n\u2019est que le d\u00e9but des possibilit\u00e9s. Les cl\u00e9s de lien peuvent donner acc\u00e8s \u00e0 plusieurs lignes \u00e0 travers de nombreuses tables. Elles peuvent \u00eatre utilis\u00e9es dans Tables d\u2019attributs d\u2019utilisateur . Et les donn\u00e9es auxquelles elles donnent acc\u00e8s peuvent \u00eatre dans des tables, des fiches, des listes de fiches, des graphiques et des widgets personnalis\u00e9s. Consultez un autre exemple pour approfondir votre compr\u00e9hension des cl\u00e9s de lien.","title":"Cl\u00e9s de lien"},{"location":"access-rules/#conditions-des-regles-dacces","text":"Les conditions des r\u00e8gles d\u2019acc\u00e8s contiennent une formule exprimant quand la r\u00e8gle doit s\u2019appliquer. Une condition vide s\u2019appliquera toujours. Lorsqu\u2019une condition s\u2019applique \u00e0 une action, les permissions associ\u00e9es \u00e0 la condition sont d\u00e9finies comme autoris\u00e9es ou refus\u00e9es pour cette action si aucune r\u00e8gle ant\u00e9rieure dans le m\u00eame groupe ne les a encore d\u00e9finies. Lorsqu\u2019une condition ne s\u2019applique pas, aucune permission n\u2019est d\u00e9finie par cette r\u00e8gle, mais d\u2019autres r\u00e8gles pourraient les d\u00e9finir. Les formules sont \u00e9crites dans un sous-ensemble restreint de Python. Les variables qui peuvent \u00eatre disponibles dans les r\u00e8gles d\u2019acc\u00e8s sont user , rec et newRec . La variable user contient les membres suivants : user.Access : l\u2019un de owners , editors ou viewers , indiquant comment le document a \u00e9t\u00e9 partag\u00e9 avec l\u2019utilisateur (voir Partage d\u2019un document ). user.Email : l\u2019adresse e-mail de l\u2019utilisateur (ou anon@getgrist.com pour les utilisateurs qui ne sont pas connect\u00e9s). user.UserID : un ID num\u00e9rique associ\u00e9 \u00e0 l\u2019utilisateur. user.Name : le nom de l\u2019utilisateur (ou Anonyme si indisponible). user.LinkKey : un objet avec tous les param\u00e8tres d\u2019URL de contr\u00f4le d\u2019acc\u00e8s. Les param\u00e8tres d\u2019URL de contr\u00f4le d\u2019acc\u00e8s se terminent par un underscore (qui est ensuite supprim\u00e9). Disponible uniquement dans le client web, pas dans l\u2019API. user.SessionID : une cha\u00eene unique attribu\u00e9e aux utilisateurs anonymes pendant la dur\u00e9e de la session de cet utilisateur. Pour les utilisateurs connect\u00e9s, user.SessionID est toujours \"u\" + l\u2019ID num\u00e9rique de l\u2019utilisateur. Pour un exemple d\u2019utilisation de la variable user , lisez R\u00e8gles par d\u00e9faut . La variable rec contient l\u2019\u00e9tat d\u2019un enregistrement/ligne individuel, pour les conditions qui doivent en tenir compte. Lorsqu\u2019elle est utilis\u00e9e, cette r\u00e8gle devient sp\u00e9cifique \u00e0 la ligne. Cela permet, par exemple, de rendre certaines lignes visibles uniquement pour certains utilisateurs, ou d\u2019interdire la modification de certaines lignes par certains utilisateurs. Pour un exemple d\u2019utilisation de la variable rec , lisez Contr\u00f4le d\u2019acc\u00e8s au niveau des lignes . La variable newRec est disponible pour la cr\u00e9ation et la mise \u00e0 jour d\u2019enregistrements/ligne, et contient l\u2019\u00e9tat d\u2019une ligne apr\u00e8s un changement propos\u00e9, vous permettant d\u2019autoriser ou de refuser s\u00e9lectivement certains changements. Pour un exemple d\u2019utilisation de la variable newRec , lisez V\u00e9rification des nouvelles valeurs . Les op\u00e9rations prises en charge dans les formules de condition sont actuellement : and , or , + , - , * , / , % , == , != , < , <= , > , >= , is , is not , in , not in . Les variables prises en charge sont : user , rec , newRec avec leurs membres accessibles avec . . Les cha\u00eenes, les nombres et les listes sont \u00e9galement pris en charge. Si une op\u00e9ration dont vous avez besoin n\u2019est pas disponible, consid\u00e9rez si vous pouvez faire une partie du travail dans une formule dans la table elle-m\u00eame (voir M\u00e9mos de r\u00e8gle d\u2019acc\u00e8s pour un exemple). Les commentaires sont autoris\u00e9s, en utilisant # ou \"\"\" . S\u2019il y a un commentaire dans une r\u00e8gle, alors le premier commentaire dans une r\u00e8gle qui entra\u00eene un refus d\u2019une action sera signal\u00e9 \u00e0 l\u2019utilisateur comme un conseil sur la raison pour laquelle l\u2019action n\u2019a pas \u00e9t\u00e9 permise. Voir M\u00e9mos de r\u00e8gle d\u2019acc\u00e8s pour un exemple.","title":"Conditions des r\u00e8gles d’acc\u00e8s"},{"location":"access-rules/#permissions-des-regles-dacces","text":"Une permission contr\u00f4le si un utilisateur peut effectuer un type d\u2019action particulier. Les r\u00e8gles d\u2019acc\u00e8s Grist traitent actuellement 5 types d\u2019actions, qui sont donn\u00e9es par des acronymes \u00e0 une lettre pour plus de commodit\u00e9 : R - permission de lire des cellules. U - permission de mettre \u00e0 jour des cellules. C - permission de cr\u00e9er des lignes. D - permission de supprimer des lignes. S - permission de modifier la structure de la table. La permission de structure S est disponible dans le groupe de r\u00e8gles d\u2019acc\u00e8s par d\u00e9faut. Les r\u00e8gles de colonne n\u2019ont pas les permissions C de cr\u00e9ation et D de suppression, qui doivent \u00eatre g\u00e9r\u00e9es dans les r\u00e8gles de table par d\u00e9faut. Remarque : La permission S est tr\u00e8s puissante. Elle permet d\u2019\u00e9crire des formules, qui peuvent acc\u00e9der \u00e0 toutes les donn\u00e9es dans le document, ind\u00e9pendamment des r\u00e8gles. \u00c9tant donn\u00e9 que la permission S est activ\u00e9e par d\u00e9faut pour les \u00c9diteurs et les Propri\u00e9taires, tout utilisateur de ce type pourrait \u00e9diter une formule et ainsi r\u00e9cup\u00e9rer n\u2019importe quelle donn\u00e9e. En d\u2019autres termes, avoir la permission S rend possible de contourner d\u2019autres r\u00e8gles qui emp\u00eachent l\u2019acc\u00e8s aux donn\u00e9es. Pour cette raison, la d\u00e9sactiver \u2013 comme d\u00e9crit ci-dessus dans Verrouiller la structure \u2013 est une premi\u00e8re \u00e9tape importante pour limiter l\u2019acc\u00e8s aux donn\u00e9es.","title":"Permissions des r\u00e8gles d’acc\u00e8s"},{"location":"access-rules/#memos-des-regles-dacces","text":"Lorsqu\u2019un utilisateur re\u00e7oit un message d\u2019erreur lui refusant l\u2019acc\u00e8s en raison d\u2019une r\u00e8gle, il peut \u00eatre utile de donner des d\u00e9tails sp\u00e9cifiques qui l\u2019aideront \u00e0 comprendre le probl\u00e8me. Vous pouvez le faire en ajoutant un m\u00e9mo pour la condition. Tout d\u2019abord, cliquez sur l\u2019ic\u00f4ne de m\u00e9mo \u00e0 droite de votre condition. Tapez le message d\u2019erreur que vous souhaitez afficher dans la zone de saisie. Assurez-vous d\u2019enregistrer vos modifications. Lorsque la r\u00e8gle bloque un utilisateur d\u2019effectuer une action, le m\u00e9mo appara\u00eetra comme une notification. Pour une explication de la fa\u00e7on dont cette r\u00e8gle d\u2019acc\u00e8s particuli\u00e8re fonctionne, voir R\u00e8gles d\u2019acc\u00e8s pour restreindre les enregistrements en double","title":"M\u00e9mos des r\u00e8gles d’acc\u00e8s"},{"location":"access-rules/#exemples-de-regles-dacces","text":"Avec l\u2019exemple \u00e9tendu d\u2019utilisation des r\u00e8gles d\u2019acc\u00e8s dans cette section, nous allons collecter des exemples complets de mod\u00e8les de r\u00e8gles d\u2019acc\u00e8s et de guides ici. Listes de leads : Une liste tr\u00e8s simple de leads, assign\u00e9s \u00e0 des individus pour un suivi, avec le contr\u00f4le des attributions r\u00e9serv\u00e9 aux propri\u00e9taires du document. \u00c9quipe de vente bas\u00e9e sur les comptes : CRM de vente avec des affaires et des contacts assign\u00e9s \u00e0 des repr\u00e9sentants commerciaux. Les repr\u00e9sentants ne peuvent voir que leurs propres contacts et affaires, mais les managers peuvent tout voir. Tirage au sort public : Un organisateur de tirage au sort public qui utilise des r\u00e8gles d\u2019acc\u00e8s pour faire respecter les r\u00e8gles du tirage au sort sans exiger que les demandeurs se connectent \u00e0 Grist. Sondage simple : Un sondage simple g\u00e9r\u00e9 dans Grist avec des r\u00e8gles d\u2019acc\u00e8s pour limiter une r\u00e9ponse par visiteur. Liste crowdsourc\u00e9e : Liste crowdsourc\u00e9e publique avec des r\u00e8gles d\u2019acc\u00e8s pour permettre aux mod\u00e9rateurs de modifier presque tout, mais limiter les visiteurs \u00e0 ne faire et modifier que leurs propres contributions. Feuilles de temps : Mod\u00e8le pour capturer les feuilles de temps des entrepreneurs. Les r\u00e8gles d\u2019acc\u00e8s permettent aux entrepreneurs de voir uniquement leurs feuilles de temps historiques et de modifier uniquement le mois actif. Gestion de projet : Suivre les t\u00e2ches par \u00e9v\u00e9nement et signaler les t\u00e2ches \u00e0 risque. Les r\u00e8gles d\u2019acc\u00e8s limitent les permissions par d\u00e9partement et \u00e9largissent les permissions des managers.","title":"Exemples de r\u00e8gles d’acc\u00e8s"},{"location":"afterschool-program/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Comment g\u00e9rer les donn\u00e9es commerciales # Grist brille lorsque vos donn\u00e9es commerciales pr\u00e9sentent une certaine complexit\u00e9. Dans cet exemple, nous allons examiner une organisation qui propose des activit\u00e9s p\u00e9riscolaires pour les enfants. N\u2019h\u00e9sitez pas \u00e0 consulter le document Inscription en classe , que vous trouverez sur notre page Exemples et mod\u00e8les . Dans cet exercice, nous allons montrer comment planifier, concevoir et cr\u00e9er un tel document. Planification # Un peu de planification \u00e0 l\u2019avance vous aidera \u00e0 obtenir une solution plus rapidement. Pensez aux types de donn\u00e9es avec lesquels vous travaillez et aux types de flux de travail dont vous aurez besoin. Vous n\u2019avez pas besoin d\u2019anticiper tout d\u00e8s le d\u00e9part. Vous pouvez facilement ajouter de la complexit\u00e9 plus tard, comme vous le verrez ci-dessous. Notre organisation propose plusieurs cours pour les enfants. Chaque cours a un instructeur et plusieurs \u00e9tudiants. Les \u00e9tudiants peuvent s\u2019inscrire \u00e0 plusieurs cours et peuvent revenir ann\u00e9e apr\u00e8s ann\u00e9e. Pour chaque cours, nous souhaitons voir la liste des \u00e9tudiants inscrits et s\u2019il reste des places disponibles. Lorsque qu\u2019un parent appelle, nous voulons un moyen pratique d\u2019inscrire un nouvel \u00e9tudiant ou de modifier ou annuler l\u2019inscription d\u2019un \u00e9tudiant. Si cela ressemble \u00e0 la construction d\u2019une application, c\u2019est exactement ce que nous faisons. Cependant, comme vous le verrez, ce n\u2019est pas plus difficile que de cr\u00e9er une feuille de calcul. Mod\u00e9lisation des donn\u00e9es # Plus vous mod\u00e9lisez bien vos donn\u00e9es commerciales, plus votre travail sera facile. D\u2019une certaine mani\u00e8re, vous faites \u00e0 la fois la conception de base de donn\u00e9es et la construction d\u2019une application personnalis\u00e9e. Grist rend simplement cela plus facile. Commen\u00e7ons par les cours et leurs instructeurs. Nous avons besoin d\u2019une liste de cours et d\u2019instructeurs. Le m\u00eame instructeur peut enseigner diff\u00e9rents cours, donc les instructeurs et les cours vivront dans des tables diff\u00e9rentes. Appelons-les \u201cCours\u201d et \u201cPersonnel\u201d. Chaque cours a un seul instructeur, donc l\u2019une des propri\u00e9t\u00e9s d\u2019un cours sera l\u2019instructeur de ce cours. Cours et Instructeurs # En partant de z\u00e9ro, vous allez cr\u00e9er un nouveau document vide (voir Cr\u00e9er un document ), renommer la table vide initiale \u201cTable1\u201d en \u201cCours\u201d, ajouter les colonnes n\u00e9cessaires et saisir quelques cours. Pour suivre les \u00e9tapes de ce tutoriel, vous pouvez plut\u00f4t importer Classes.csv (ou simplement vous r\u00e9f\u00e9rer au document exemple \u201cProgramme p\u00e9riscolaire\u201d). Pour la table Personnel, cliquez sur le bouton \u201cAjouter nouveau\u201d et s\u00e9lectionnez \u201cAjouter une table vide\u201d. Renommez-la en \u201cPersonnel\u201d, cr\u00e9ez quelques colonnes et saisissez des donn\u00e9es sur les instructeurs. Ou importez Staff.csv pour utiliser des donn\u00e9es d\u2019exemple et gagner quelques \u00e9tapes. Nous voulons que la colonne Instructeur dans la table Cours soit une r\u00e9f\u00e9rence \u00e0 la table Personnel . Actuellement, la table Personnel n\u2019a pas de colonne qui identifie de mani\u00e8re unique chaque enregistrement. Pour configurer des r\u00e9f\u00e9rences, il est judicieux d\u2019en ajouter une. Dans ce cas, nous allons ajouter une colonne \u201cNom Complet\u201d \u00e0 la table Personnel . Formules # Cliquez sur la page \u201cPersonnel\u201d et ajoutez une colonne \u201cNom Complet\u201d en utilisant le menu des colonnes ou le raccourci Alt + = , puis tapez \u201cNom Complet\u201d dans l\u2019en-t\u00eate de la nouvelle colonne. Cr\u00e9ez une formule en saisissant une valeur dans n\u2019importe quelle cellule de la nouvelle colonne, en commen\u00e7ant par le signe \u00e9gal (\u201c=\u201d). Entrez la formule comme $Last_Name + \", \" + $First_Name . Vous pouvez utiliser une syntaxe similaire \u00e0 Excel pour le m\u00eame effet : CONCAT($Last_Name, \", \", $First_Name) . Dans Grist, une formule s\u2019applique toujours \u00e0 chaque enregistrement de la table. Grist prend en charge Python dans les formules, ainsi que la plupart des fonctions Excel, qui ont des noms en majuscules. Comme les formules s\u2019appliquent \u00e0 chaque ligne, vous devriez voir la colonne Nom Complet remplie automatiquement. R\u00e9f\u00e9rences # Cliquez \u00e0 nouveau sur la page \u201cCours\u201d et ouvrez \u201cOptions de colonne\u201d pour la colonne Instructeur . Nous allons la transformer en r\u00e9f\u00e9rence \u00e0 Personnel . Dans le panneau de droite, d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d (en termes de base de donn\u00e9es, cela est connu sous le nom de \u201ccl\u00e9 \u00e9trang\u00e8re\u201d), et d\u00e9finissez la table r\u00e9f\u00e9renc\u00e9e sur \u201cPersonnel\u201d. Pour le menu d\u00e9roulant \u201cAFFICHER LA COLONNE\u201d, s\u00e9lectionnez \u201cNom Complet\u201d, qui est la nouvelle colonne que nous venons d\u2019ajouter. Cliquez sur le bouton \u201cAppliquer\u201d pour finaliser ce changement de type de colonne (si la colonne est vide, il n\u2019y a pas d\u2019\u00e9tape de confirmation). Vous pouvez maintenant attribuer un instructeur \u00e0 n\u2019importe quel cours. Cliquez sur une cellule dans la colonne Instructeur . Vous pouvez appuyer sur Entr\u00e9e et choisir parmi les instructeurs disponibles dans la table Personnel , ou commencer \u00e0 taper pour utiliser l\u2019auto-compl\u00e9tion. Ensuite, nous allons continuer avec les \u00e9tudiants et leurs inscriptions. \u00c9tudiants # Chaque cours a un certain nombre d\u2019\u00e9tudiants. Nous aurons donc besoin d\u2019une table d\u2019\u00e9tudiants. Encore une fois, ajoutez une nouvelle table vide, renommez-la en \u201c\u00c9tudiants\u201d et remplissez-la avec les noms des \u00e9tudiants, les niveaux de classe, etc. Ou importez Students.csv pour utiliser des donn\u00e9es d\u2019exemple et gagner quelques \u00e9tapes. Ajoutons ici une colonne de formule \u201cNom Complet\u201d, tout comme dans la table Personnel . Cela sera utile. Relations plusieurs-\u00e0-plusieurs # Un \u00e9tudiant peut suivre plus d\u2019un cours. Rappelons \u00e9galement qu\u2019il y a des cours pass\u00e9s et futurs, et qu\u2019il est pr\u00e9cieux de conserver ces donn\u00e9es historiques. Donc, pour chaque \u00e9tudiant, il peut y avoir plusieurs cours, et dans chaque cours, il y a plusieurs \u00e9tudiants. Une bonne fa\u00e7on de mod\u00e9liser une telle relation est d\u2019ajouter le concept d\u2019une \u201cinscription\u201d et une nouvelle table Inscriptions . Une \u201cinscription\u201d repr\u00e9sente un \u00e9tudiant inscrit dans un cours. Elle a quelques propri\u00e9t\u00e9s utiles \u00e0 elle : le statut de l\u2019inscription (Confirm\u00e9, En attente ou Annul\u00e9), si l\u2019\u00e9tudiant a pay\u00e9 pour le cours, et peut-\u00eatre plus. Dans la conception de bases de donn\u00e9es, cela est connu sous le nom de relation \u201cplusieurs-\u00e0-plusieurs\u201d. La table suppl\u00e9mentaire est connue sous le nom de table de \u201cjointure\u201d. Essentiellement, elle ajoute un enregistrement pour chaque connexion \u00e9tudiant-cours, et transforme la relation \u201cplusieurs-\u00e0-plusieurs\u201d en deux relations \u201cun-\u00e0-plusieurs\u201d. Cette relation : deviendra ceci : Alors, ajoutons une nouvelle table, nommons-la \u201cInscriptions\u201d, et ajoutons les colonnes dont nous avons besoin. Ici aussi, pour suivre, vous pouvez importer des donn\u00e9es d\u2019exemple \u00e0 partir de Enrollments.csv . Dans les Options de colonne pour la colonne \u00c9tudiant , d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d, d\u00e9finissez la table r\u00e9f\u00e9renc\u00e9e sur \u00c9tudiants , et s\u00e9lectionnez \u201cNom Complet\u201d comme colonne \u00e0 afficher. Pour la colonne Cours , d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d, la table r\u00e9f\u00e9renc\u00e9e sur Cours , et s\u00e9lectionnez \u201cCode de Cours\u201d comme colonne \u00e0 afficher. Il est possible d\u2019entrer des donn\u00e9es d\u2019inscription en ajoutant des enregistrements \u00e0 cette table et en utilisant l\u2019auto-compl\u00e9tion dans les colonnes \u00c9tudiant et Cours . Ci-dessous, nous allons mettre en place un moyen beaucoup plus pratique d\u2019inscrire les \u00e9tudiants. Vue des Cours # Un de nos objectifs dans la phase de planification \u00e9tait de voir une liste des \u00e9tudiants inscrits pour chaque cours. Maintenant que les tables de donn\u00e9es sont en place, nous pouvons cr\u00e9er une page qui le fait. Cliquez sur \u201cAjouter Nouveau\u201d, puis \u201cAjouter Page\u201d pour ouvrir le s\u00e9lecteur de widget. S\u00e9lectionnez pour afficher une table de Cours , et cliquez sur \u201cAjouter Page\u201d. La nouvelle page affiche une liste de cours. Renommons cette page \u201cVue des Cours\u201d. Ensuite, ajoutez la table Inscriptions li\u00e9e \u00e0 la table des cours. Cliquez \u00e0 nouveau sur \u201cAjouter Nouveau\u201d, puis \u201cAjouter Widget \u00e0 la Page\u201d. Dans le s\u00e9lecteur de widget, s\u00e9lectionnez pour afficher une table de Inscriptions . Pour \u201cS\u00c9LECTIONNER PAR\u201d, choisissez \u201cCOURS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Nous avons deux tables c\u00f4te \u00e0 c\u00f4te. S\u00e9lectionner un cours affiche toutes les inscriptions dans ce cours, chacune d\u2019elles faisant r\u00e9f\u00e9rence \u00e0 un \u00e9tudiant particulier et incluant d\u2019autres informations d\u2019inscription. Nous pouvons aller un peu plus loin pour rendre cette vue pratique pour nous. Ajoutons une carte de Cours \u00e0 cette vue. Cliquez sur \u201cAjouter Nouveau\u201d et \u201cAjouter Widget \u00e0 la Page\u201d. Dans le s\u00e9lecteur de widget, s\u00e9lectionnez le widget \u201cCarte\u201d pour les donn\u00e9es Cours . Pour \u201cS\u00c9LECTIONNER PAR\u201d, choisissez \u00e0 nouveau \u201cCOURS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Nous pouvons \u00e9galement ajouter une carte pour l\u2019instructeur qui dirige ce cours. Encore une fois, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d, et s\u00e9lectionnez \u201cCarte\u201d pour les donn\u00e9es Personnel . Pour \u201cS\u00c9LECTIONNER PAR\u201d, vous pouvez maintenant choisir \u201cCOURS \u2022 Instructeur\u201d. Vous pouvez changer l\u2019apparence des nouvelles cartes. Cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la carte que vous souhaitez modifier, et choisissez \u201cOptions de Widget\u201d. Trouvez le menu d\u00e9roulant \u201cTh\u00e8me\u201d dans le panneau de droite, et s\u00e9lectionnez \u201cCompact\u201d. Voici ce que nous avons maintenant dans la page Vue des Cours : C\u2019est le bon moment pour nettoyer cette page en masquant les colonnes et les champs qui sont dupliqu\u00e9s ou distrayants. Consultez Configurer les listes de champs pour une m\u00e9thode efficace de s\u00e9lection des champs \u00e0 afficher, et Mises en page personnalis\u00e9es pour r\u00e9organiser les widgets sur la page. Vue des Inscriptions # Notre autre objectif d\u00e9clar\u00e9 \u00e9tait de disposer d\u2019un moyen pratique d\u2019inscrire un \u00e9tudiant et de voir ou d\u2019ajuster les inscriptions d\u2019un \u00e9tudiant donn\u00e9. Ajoutons une page pour cela. Cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Page\u201d, et s\u00e9lectionnez une table de \u00c9tudiants . Nous renommerons la nouvelle page en \u201cVue des Inscriptions\u201d. Lorsque nous s\u00e9lectionnons un \u00e9tudiant ici, nous aimerions voir toutes les inscriptions de cet \u00e9tudiant. Donc, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d, et ajoutez une table de Inscriptions . Pour lier le nouveau widget au widget \u00c9tudiants dans la page, d\u00e9finissez le menu d\u00e9roulant \u201cS\u00c9LECTIONNER PAR\u201d sur \u201c\u00c9TUDIANTS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Maintenant, vous pouvez cliquer sur le nom d\u2019un \u00e9tudiant \u00e0 gauche et voir les cours auxquels cet \u00e9tudiant est inscrit \u00e0 droite. Vous pouvez inscrire l\u2019\u00e9tudiant s\u00e9lectionn\u00e9 dans un cours en saisissant simplement un code de cours dans la ligne vide sp\u00e9ciale en bas de la liste des inscriptions. Comme d\u2019habitude, la colonne de r\u00e9f\u00e9rence Cours propose l\u2019auto-compl\u00e9tion. Vous pouvez masquer la colonne \u201c\u00c9tudiant\u201d dans la table \u201cINSCRIPTIONS\u201d, car elle affichera toujours l\u2019\u00e9tudiant s\u00e9lectionn\u00e9 de toute fa\u00e7on. Si vous souhaitez inclure plus d\u2019informations sur les cours dans la table Inscriptions, s\u00e9lectionnez les Options de colonne pour la colonne Cours , et cliquez sur \u201c+ Ajouter une colonne\u201d dans le panneau lat\u00e9ral. Tous les champs associ\u00e9s \u00e0 un cours sont disponibles. Si vous examinez les colonnes que vous ajoutez de cette mani\u00e8re, vous verrez qu\u2019elles sont simplement des formules de la forme $Class.Times . Ajout de Couches # Si vous travaillez avec des enfants, vous parlez \u00e0 leurs parents. Vous devrez avoir les noms et les coordonn\u00e9es des parents, que vous pouvez ajouter en tant que colonnes dans la table des \u00e9tudiants. Vous constaterez probablement que certains parents ont plusieurs enfants qui s\u2019inscrivent ensemble \u00e0 des cours. Reconna\u00eetre la relation parent-enfant dans votre base de donn\u00e9es peut sembler une \u00e9tape complexe, mais cela simplifiera probablement votre flux de travail quotidien. Alors, ajoutons une table de plus : Familles . Nous inclurons le nom et les coordonn\u00e9es des parents, et lierons chaque enfant \u00e0 un enregistrement ici. Vous pouvez importer des donn\u00e9es d\u2019exemple \u00e0 partir de Families.csv . Notez que nous avons ajout\u00e9 une colonne Nom Complet ici comme pour d\u2019autres tables qui listent des personnes. Dans la table des \u00c9tudiants, nous allons ajouter une colonne nomm\u00e9e \u201cFamille\u201d, et en faire une R\u00e9f\u00e9rence \u00e0 Familles . Les donn\u00e9es d\u2019exemple ont d\u00e9j\u00e0 des familles remplies, et la conversion en r\u00e9f\u00e9rence recherche le texte pour d\u00e9finir les r\u00e9f\u00e9rences correctes. Si vous saisissiez de nouvelles donn\u00e9es, vous pourriez lier les \u00e9tudiants aux familles en utilisant l\u2019auto-compl\u00e9tion comme avec d\u2019autres colonnes de r\u00e9f\u00e9rence. Changeons notre \u201cVue des Inscriptions\u201d pour lister les familles en premier. De cette fa\u00e7on, lorsque qu\u2019un parent appelle, vous pouvez choisir le bon enregistrement et voir tous leurs enfants et les inscriptions pour chaque enfant. Dans la page \u201cVue des Inscriptions\u201d, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d. S\u00e9lectionnez pour afficher une table de Familles . R\u00e9organisez les widgets pour avoir les Familles \u00e0 gauche, et les \u00c9tudiants et Inscriptions \u00e0 droite. Maintenant, liez les \u00e9tudiants aux Familles : cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la table \u00c9TUDIANTS, et choisissez \u201cS\u00e9lection de donn\u00e9es\u201d. Dans le panneau lat\u00e9ral, vous pouvez d\u00e9finir le widget \u201cS\u00c9LECTIONNER PAR\u201d sur \u201cFAMILLES\u201d. Enfin, vous pouvez ajouter des widgets de carte pour les d\u00e9tails de la famille s\u00e9lectionn\u00e9e et de l\u2019\u00e9tudiant s\u00e9lectionn\u00e9, et r\u00e9organiser les widgets sur la page pour cr\u00e9er une mise en page parfaite pour parler \u00e0 un parent. Vous s\u00e9lectionnez un parent, voyez leurs enfants, puis s\u00e9lectionnez un enfant pour voir ses inscriptions. Il est facile d\u2019ajouter un enregistrement d\u2019inscription pour un nouveau cours, ou de modifier un enregistrement (par exemple, le marquer comme \u201cannul\u00e9\u201d), d\u2019ajouter un autre enfant ou d\u2019ajouter une nouvelle famille. Document Exemple # Le document exemple \u201cProgramme p\u00e9riscolaire\u201d comprend tout ce qui est d\u00e9crit ci-dessus et un peu plus. En particulier, il ajoute un champ Nombre aux Cours pour calculer le nombre d\u2019\u00e9tudiants inscrits, et un champ Places Disponibles pour montrer le nombre de places restantes, en comparant Nombre \u00e0 Max_Students : La formule pour Nombre est len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) . La formule pour Places Disponibles est max($Max_Students - $Count, 0) or \"Complet\" . Cela rend la page Vue des Cours plus utile, o\u00f9 il est maintenant facile de voir d\u2019un coup d\u2019\u0153il quels cours ont des places restantes.","title":"Manage business data"},{"location":"afterschool-program/#comment-gerer-les-donnees-commerciales","text":"Grist brille lorsque vos donn\u00e9es commerciales pr\u00e9sentent une certaine complexit\u00e9. Dans cet exemple, nous allons examiner une organisation qui propose des activit\u00e9s p\u00e9riscolaires pour les enfants. N\u2019h\u00e9sitez pas \u00e0 consulter le document Inscription en classe , que vous trouverez sur notre page Exemples et mod\u00e8les . Dans cet exercice, nous allons montrer comment planifier, concevoir et cr\u00e9er un tel document.","title":"Intro"},{"location":"afterschool-program/#planification","text":"Un peu de planification \u00e0 l\u2019avance vous aidera \u00e0 obtenir une solution plus rapidement. Pensez aux types de donn\u00e9es avec lesquels vous travaillez et aux types de flux de travail dont vous aurez besoin. Vous n\u2019avez pas besoin d\u2019anticiper tout d\u00e8s le d\u00e9part. Vous pouvez facilement ajouter de la complexit\u00e9 plus tard, comme vous le verrez ci-dessous. Notre organisation propose plusieurs cours pour les enfants. Chaque cours a un instructeur et plusieurs \u00e9tudiants. Les \u00e9tudiants peuvent s\u2019inscrire \u00e0 plusieurs cours et peuvent revenir ann\u00e9e apr\u00e8s ann\u00e9e. Pour chaque cours, nous souhaitons voir la liste des \u00e9tudiants inscrits et s\u2019il reste des places disponibles. Lorsque qu\u2019un parent appelle, nous voulons un moyen pratique d\u2019inscrire un nouvel \u00e9tudiant ou de modifier ou annuler l\u2019inscription d\u2019un \u00e9tudiant. Si cela ressemble \u00e0 la construction d\u2019une application, c\u2019est exactement ce que nous faisons. Cependant, comme vous le verrez, ce n\u2019est pas plus difficile que de cr\u00e9er une feuille de calcul.","title":"Planification"},{"location":"afterschool-program/#modelisation-des-donnees","text":"Plus vous mod\u00e9lisez bien vos donn\u00e9es commerciales, plus votre travail sera facile. D\u2019une certaine mani\u00e8re, vous faites \u00e0 la fois la conception de base de donn\u00e9es et la construction d\u2019une application personnalis\u00e9e. Grist rend simplement cela plus facile. Commen\u00e7ons par les cours et leurs instructeurs. Nous avons besoin d\u2019une liste de cours et d\u2019instructeurs. Le m\u00eame instructeur peut enseigner diff\u00e9rents cours, donc les instructeurs et les cours vivront dans des tables diff\u00e9rentes. Appelons-les \u201cCours\u201d et \u201cPersonnel\u201d. Chaque cours a un seul instructeur, donc l\u2019une des propri\u00e9t\u00e9s d\u2019un cours sera l\u2019instructeur de ce cours.","title":"Mod\u00e9lisation des donn\u00e9es"},{"location":"afterschool-program/#cours-et-instructeurs","text":"En partant de z\u00e9ro, vous allez cr\u00e9er un nouveau document vide (voir Cr\u00e9er un document ), renommer la table vide initiale \u201cTable1\u201d en \u201cCours\u201d, ajouter les colonnes n\u00e9cessaires et saisir quelques cours. Pour suivre les \u00e9tapes de ce tutoriel, vous pouvez plut\u00f4t importer Classes.csv (ou simplement vous r\u00e9f\u00e9rer au document exemple \u201cProgramme p\u00e9riscolaire\u201d). Pour la table Personnel, cliquez sur le bouton \u201cAjouter nouveau\u201d et s\u00e9lectionnez \u201cAjouter une table vide\u201d. Renommez-la en \u201cPersonnel\u201d, cr\u00e9ez quelques colonnes et saisissez des donn\u00e9es sur les instructeurs. Ou importez Staff.csv pour utiliser des donn\u00e9es d\u2019exemple et gagner quelques \u00e9tapes. Nous voulons que la colonne Instructeur dans la table Cours soit une r\u00e9f\u00e9rence \u00e0 la table Personnel . Actuellement, la table Personnel n\u2019a pas de colonne qui identifie de mani\u00e8re unique chaque enregistrement. Pour configurer des r\u00e9f\u00e9rences, il est judicieux d\u2019en ajouter une. Dans ce cas, nous allons ajouter une colonne \u201cNom Complet\u201d \u00e0 la table Personnel .","title":"Cours et Instructeurs"},{"location":"afterschool-program/#formules","text":"Cliquez sur la page \u201cPersonnel\u201d et ajoutez une colonne \u201cNom Complet\u201d en utilisant le menu des colonnes ou le raccourci Alt + = , puis tapez \u201cNom Complet\u201d dans l\u2019en-t\u00eate de la nouvelle colonne. Cr\u00e9ez une formule en saisissant une valeur dans n\u2019importe quelle cellule de la nouvelle colonne, en commen\u00e7ant par le signe \u00e9gal (\u201c=\u201d). Entrez la formule comme $Last_Name + \", \" + $First_Name . Vous pouvez utiliser une syntaxe similaire \u00e0 Excel pour le m\u00eame effet : CONCAT($Last_Name, \", \", $First_Name) . Dans Grist, une formule s\u2019applique toujours \u00e0 chaque enregistrement de la table. Grist prend en charge Python dans les formules, ainsi que la plupart des fonctions Excel, qui ont des noms en majuscules. Comme les formules s\u2019appliquent \u00e0 chaque ligne, vous devriez voir la colonne Nom Complet remplie automatiquement.","title":"Formules"},{"location":"afterschool-program/#references","text":"Cliquez \u00e0 nouveau sur la page \u201cCours\u201d et ouvrez \u201cOptions de colonne\u201d pour la colonne Instructeur . Nous allons la transformer en r\u00e9f\u00e9rence \u00e0 Personnel . Dans le panneau de droite, d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d (en termes de base de donn\u00e9es, cela est connu sous le nom de \u201ccl\u00e9 \u00e9trang\u00e8re\u201d), et d\u00e9finissez la table r\u00e9f\u00e9renc\u00e9e sur \u201cPersonnel\u201d. Pour le menu d\u00e9roulant \u201cAFFICHER LA COLONNE\u201d, s\u00e9lectionnez \u201cNom Complet\u201d, qui est la nouvelle colonne que nous venons d\u2019ajouter. Cliquez sur le bouton \u201cAppliquer\u201d pour finaliser ce changement de type de colonne (si la colonne est vide, il n\u2019y a pas d\u2019\u00e9tape de confirmation). Vous pouvez maintenant attribuer un instructeur \u00e0 n\u2019importe quel cours. Cliquez sur une cellule dans la colonne Instructeur . Vous pouvez appuyer sur Entr\u00e9e et choisir parmi les instructeurs disponibles dans la table Personnel , ou commencer \u00e0 taper pour utiliser l\u2019auto-compl\u00e9tion. Ensuite, nous allons continuer avec les \u00e9tudiants et leurs inscriptions.","title":"R\u00e9f\u00e9rences"},{"location":"afterschool-program/#etudiants","text":"Chaque cours a un certain nombre d\u2019\u00e9tudiants. Nous aurons donc besoin d\u2019une table d\u2019\u00e9tudiants. Encore une fois, ajoutez une nouvelle table vide, renommez-la en \u201c\u00c9tudiants\u201d et remplissez-la avec les noms des \u00e9tudiants, les niveaux de classe, etc. Ou importez Students.csv pour utiliser des donn\u00e9es d\u2019exemple et gagner quelques \u00e9tapes. Ajoutons ici une colonne de formule \u201cNom Complet\u201d, tout comme dans la table Personnel . Cela sera utile.","title":"\u00c9tudiants"},{"location":"afterschool-program/#relations-plusieurs-a-plusieurs","text":"Un \u00e9tudiant peut suivre plus d\u2019un cours. Rappelons \u00e9galement qu\u2019il y a des cours pass\u00e9s et futurs, et qu\u2019il est pr\u00e9cieux de conserver ces donn\u00e9es historiques. Donc, pour chaque \u00e9tudiant, il peut y avoir plusieurs cours, et dans chaque cours, il y a plusieurs \u00e9tudiants. Une bonne fa\u00e7on de mod\u00e9liser une telle relation est d\u2019ajouter le concept d\u2019une \u201cinscription\u201d et une nouvelle table Inscriptions . Une \u201cinscription\u201d repr\u00e9sente un \u00e9tudiant inscrit dans un cours. Elle a quelques propri\u00e9t\u00e9s utiles \u00e0 elle : le statut de l\u2019inscription (Confirm\u00e9, En attente ou Annul\u00e9), si l\u2019\u00e9tudiant a pay\u00e9 pour le cours, et peut-\u00eatre plus. Dans la conception de bases de donn\u00e9es, cela est connu sous le nom de relation \u201cplusieurs-\u00e0-plusieurs\u201d. La table suppl\u00e9mentaire est connue sous le nom de table de \u201cjointure\u201d. Essentiellement, elle ajoute un enregistrement pour chaque connexion \u00e9tudiant-cours, et transforme la relation \u201cplusieurs-\u00e0-plusieurs\u201d en deux relations \u201cun-\u00e0-plusieurs\u201d. Cette relation : deviendra ceci : Alors, ajoutons une nouvelle table, nommons-la \u201cInscriptions\u201d, et ajoutons les colonnes dont nous avons besoin. Ici aussi, pour suivre, vous pouvez importer des donn\u00e9es d\u2019exemple \u00e0 partir de Enrollments.csv . Dans les Options de colonne pour la colonne \u00c9tudiant , d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d, d\u00e9finissez la table r\u00e9f\u00e9renc\u00e9e sur \u00c9tudiants , et s\u00e9lectionnez \u201cNom Complet\u201d comme colonne \u00e0 afficher. Pour la colonne Cours , d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d, la table r\u00e9f\u00e9renc\u00e9e sur Cours , et s\u00e9lectionnez \u201cCode de Cours\u201d comme colonne \u00e0 afficher. Il est possible d\u2019entrer des donn\u00e9es d\u2019inscription en ajoutant des enregistrements \u00e0 cette table et en utilisant l\u2019auto-compl\u00e9tion dans les colonnes \u00c9tudiant et Cours . Ci-dessous, nous allons mettre en place un moyen beaucoup plus pratique d\u2019inscrire les \u00e9tudiants.","title":"Relations plusieurs-\u00e0-plusieurs"},{"location":"afterschool-program/#vue-des-cours","text":"Un de nos objectifs dans la phase de planification \u00e9tait de voir une liste des \u00e9tudiants inscrits pour chaque cours. Maintenant que les tables de donn\u00e9es sont en place, nous pouvons cr\u00e9er une page qui le fait. Cliquez sur \u201cAjouter Nouveau\u201d, puis \u201cAjouter Page\u201d pour ouvrir le s\u00e9lecteur de widget. S\u00e9lectionnez pour afficher une table de Cours , et cliquez sur \u201cAjouter Page\u201d. La nouvelle page affiche une liste de cours. Renommons cette page \u201cVue des Cours\u201d. Ensuite, ajoutez la table Inscriptions li\u00e9e \u00e0 la table des cours. Cliquez \u00e0 nouveau sur \u201cAjouter Nouveau\u201d, puis \u201cAjouter Widget \u00e0 la Page\u201d. Dans le s\u00e9lecteur de widget, s\u00e9lectionnez pour afficher une table de Inscriptions . Pour \u201cS\u00c9LECTIONNER PAR\u201d, choisissez \u201cCOURS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Nous avons deux tables c\u00f4te \u00e0 c\u00f4te. S\u00e9lectionner un cours affiche toutes les inscriptions dans ce cours, chacune d\u2019elles faisant r\u00e9f\u00e9rence \u00e0 un \u00e9tudiant particulier et incluant d\u2019autres informations d\u2019inscription. Nous pouvons aller un peu plus loin pour rendre cette vue pratique pour nous. Ajoutons une carte de Cours \u00e0 cette vue. Cliquez sur \u201cAjouter Nouveau\u201d et \u201cAjouter Widget \u00e0 la Page\u201d. Dans le s\u00e9lecteur de widget, s\u00e9lectionnez le widget \u201cCarte\u201d pour les donn\u00e9es Cours . Pour \u201cS\u00c9LECTIONNER PAR\u201d, choisissez \u00e0 nouveau \u201cCOURS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Nous pouvons \u00e9galement ajouter une carte pour l\u2019instructeur qui dirige ce cours. Encore une fois, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d, et s\u00e9lectionnez \u201cCarte\u201d pour les donn\u00e9es Personnel . Pour \u201cS\u00c9LECTIONNER PAR\u201d, vous pouvez maintenant choisir \u201cCOURS \u2022 Instructeur\u201d. Vous pouvez changer l\u2019apparence des nouvelles cartes. Cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la carte que vous souhaitez modifier, et choisissez \u201cOptions de Widget\u201d. Trouvez le menu d\u00e9roulant \u201cTh\u00e8me\u201d dans le panneau de droite, et s\u00e9lectionnez \u201cCompact\u201d. Voici ce que nous avons maintenant dans la page Vue des Cours : C\u2019est le bon moment pour nettoyer cette page en masquant les colonnes et les champs qui sont dupliqu\u00e9s ou distrayants. Consultez Configurer les listes de champs pour une m\u00e9thode efficace de s\u00e9lection des champs \u00e0 afficher, et Mises en page personnalis\u00e9es pour r\u00e9organiser les widgets sur la page.","title":"Vue des Cours"},{"location":"afterschool-program/#vue-des-inscriptions","text":"Notre autre objectif d\u00e9clar\u00e9 \u00e9tait de disposer d\u2019un moyen pratique d\u2019inscrire un \u00e9tudiant et de voir ou d\u2019ajuster les inscriptions d\u2019un \u00e9tudiant donn\u00e9. Ajoutons une page pour cela. Cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Page\u201d, et s\u00e9lectionnez une table de \u00c9tudiants . Nous renommerons la nouvelle page en \u201cVue des Inscriptions\u201d. Lorsque nous s\u00e9lectionnons un \u00e9tudiant ici, nous aimerions voir toutes les inscriptions de cet \u00e9tudiant. Donc, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d, et ajoutez une table de Inscriptions . Pour lier le nouveau widget au widget \u00c9tudiants dans la page, d\u00e9finissez le menu d\u00e9roulant \u201cS\u00c9LECTIONNER PAR\u201d sur \u201c\u00c9TUDIANTS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Maintenant, vous pouvez cliquer sur le nom d\u2019un \u00e9tudiant \u00e0 gauche et voir les cours auxquels cet \u00e9tudiant est inscrit \u00e0 droite. Vous pouvez inscrire l\u2019\u00e9tudiant s\u00e9lectionn\u00e9 dans un cours en saisissant simplement un code de cours dans la ligne vide sp\u00e9ciale en bas de la liste des inscriptions. Comme d\u2019habitude, la colonne de r\u00e9f\u00e9rence Cours propose l\u2019auto-compl\u00e9tion. Vous pouvez masquer la colonne \u201c\u00c9tudiant\u201d dans la table \u201cINSCRIPTIONS\u201d, car elle affichera toujours l\u2019\u00e9tudiant s\u00e9lectionn\u00e9 de toute fa\u00e7on. Si vous souhaitez inclure plus d\u2019informations sur les cours dans la table Inscriptions, s\u00e9lectionnez les Options de colonne pour la colonne Cours , et cliquez sur \u201c+ Ajouter une colonne\u201d dans le panneau lat\u00e9ral. Tous les champs associ\u00e9s \u00e0 un cours sont disponibles. Si vous examinez les colonnes que vous ajoutez de cette mani\u00e8re, vous verrez qu\u2019elles sont simplement des formules de la forme $Class.Times .","title":"Vue des Inscriptions"},{"location":"afterschool-program/#ajout-de-couches","text":"Si vous travaillez avec des enfants, vous parlez \u00e0 leurs parents. Vous devrez avoir les noms et les coordonn\u00e9es des parents, que vous pouvez ajouter en tant que colonnes dans la table des \u00e9tudiants. Vous constaterez probablement que certains parents ont plusieurs enfants qui s\u2019inscrivent ensemble \u00e0 des cours. Reconna\u00eetre la relation parent-enfant dans votre base de donn\u00e9es peut sembler une \u00e9tape complexe, mais cela simplifiera probablement votre flux de travail quotidien. Alors, ajoutons une table de plus : Familles . Nous inclurons le nom et les coordonn\u00e9es des parents, et lierons chaque enfant \u00e0 un enregistrement ici. Vous pouvez importer des donn\u00e9es d\u2019exemple \u00e0 partir de Families.csv . Notez que nous avons ajout\u00e9 une colonne Nom Complet ici comme pour d\u2019autres tables qui listent des personnes. Dans la table des \u00c9tudiants, nous allons ajouter une colonne nomm\u00e9e \u201cFamille\u201d, et en faire une R\u00e9f\u00e9rence \u00e0 Familles . Les donn\u00e9es d\u2019exemple ont d\u00e9j\u00e0 des familles remplies, et la conversion en r\u00e9f\u00e9rence recherche le texte pour d\u00e9finir les r\u00e9f\u00e9rences correctes. Si vous saisissiez de nouvelles donn\u00e9es, vous pourriez lier les \u00e9tudiants aux familles en utilisant l\u2019auto-compl\u00e9tion comme avec d\u2019autres colonnes de r\u00e9f\u00e9rence. Changeons notre \u201cVue des Inscriptions\u201d pour lister les familles en premier. De cette fa\u00e7on, lorsque qu\u2019un parent appelle, vous pouvez choisir le bon enregistrement et voir tous leurs enfants et les inscriptions pour chaque enfant. Dans la page \u201cVue des Inscriptions\u201d, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d. S\u00e9lectionnez pour afficher une table de Familles . R\u00e9organisez les widgets pour avoir les Familles \u00e0 gauche, et les \u00c9tudiants et Inscriptions \u00e0 droite. Maintenant, liez les \u00e9tudiants aux Familles : cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la table \u00c9TUDIANTS, et choisissez \u201cS\u00e9lection de donn\u00e9es\u201d. Dans le panneau lat\u00e9ral, vous pouvez d\u00e9finir le widget \u201cS\u00c9LECTIONNER PAR\u201d sur \u201cFAMILLES\u201d. Enfin, vous pouvez ajouter des widgets de carte pour les d\u00e9tails de la famille s\u00e9lectionn\u00e9e et de l\u2019\u00e9tudiant s\u00e9lectionn\u00e9, et r\u00e9organiser les widgets sur la page pour cr\u00e9er une mise en page parfaite pour parler \u00e0 un parent. Vous s\u00e9lectionnez un parent, voyez leurs enfants, puis s\u00e9lectionnez un enfant pour voir ses inscriptions. Il est facile d\u2019ajouter un enregistrement d\u2019inscription pour un nouveau cours, ou de modifier un enregistrement (par exemple, le marquer comme \u201cannul\u00e9\u201d), d\u2019ajouter un autre enfant ou d\u2019ajouter une nouvelle famille.","title":"Ajout de Couches"},{"location":"afterschool-program/#document-exemple","text":"Le document exemple \u201cProgramme p\u00e9riscolaire\u201d comprend tout ce qui est d\u00e9crit ci-dessus et un peu plus. En particulier, il ajoute un champ Nombre aux Cours pour calculer le nombre d\u2019\u00e9tudiants inscrits, et un champ Places Disponibles pour montrer le nombre de places restantes, en comparant Nombre \u00e0 Max_Students : La formule pour Nombre est len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) . La formule pour Places Disponibles est max($Max_Students - $Count, 0) or \"Complet\" . Cela rend la page Vue des Cours plus utile, o\u00f9 il est maintenant facile de voir d\u2019un coup d\u2019\u0153il quels cours ont des places restantes.","title":"Document Exemple"},{"location":"ai-assistant/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Assistant de Formule AI # L\u2019Assistant de Formule AI de Grist simplifie la partie la plus difficile des feuilles de calcul \u2014 les formules. L\u2019assistant ne fait qu\u2019une seule chose, \u00e9crire des formules en r\u00e9ponse \u00e0 des requ\u00eates en langage clair. Lorsque vous posez une question \u00e0 l\u2019assistant, il n\u2019est pas n\u00e9cessaire de sp\u00e9cifier les IDs des colonnes ou d\u2019expliquer la structure de vos donn\u00e9es. Lorsque vous soumettez une question \u00e0 l\u2019assistant, Grist envoie votre question et le sch\u00e9ma de vos donn\u00e9es (en partie ou en totalit\u00e9) \u00e0 OpenAI afin que l\u2019assistant puisse mieux comprendre votre document. Vous pouvez consulter le sch\u00e9ma de vos donn\u00e9es dans la vue code. Aucune donn\u00e9e n\u2019est partag\u00e9e avec OpenAI \u00e0 moins qu\u2019un utilisateur ne soumette une question \u00e0 l\u2019assistant. En savoir plus sur l\u2019utilisation des donn\u00e9es . Comment Utiliser l\u2019Assistant AI # Cr\u00e9ez une colonne de formule et cliquez soit sur l\u2019ic\u00f4ne d\u2019agrandissement, soit sur le lien texte \u201cutiliser l\u2019Assistant AI\u201d dans la cellule. Cela ouvrira un \u00e9diteur de formule \u00e9tendu avec le chat de l\u2019Assistant AI en dessous. D\u00e9crivez simplement ce que vous voulez que la formule fasse. Voici quelques conseils. Lorsque vous appliquez une formule sugg\u00e9r\u00e9e, vous verrez la formule pr\u00e9visualis\u00e9e dans la colonne. Si vous \u00eates satisfait de la formule, cliquez sur \u201cEnregistrer\u201d. Sinon, cliquez sur \u201cAnnuler\u201d pour annuler les modifications apport\u00e9es \u00e0 la formule. Assistant AI pour les Auto-h\u00e9bergeurs # Pour les auto-h\u00e9bergeurs souhaitant connecter leur instance Grist, d\u00e9finissez les variables d\u2019environnement li\u00e9es \u00e0 l\u2019Assistant AI . Les variables ci-dessus permettent \u00e9galement l\u2019utilisation de la famille de mod\u00e8les auto-h\u00e9bergeables LLaMA via llama2-cpp-python . En savoir plus sur la gestion autonome de Grist . Tarification de l\u2019Assistant AI # Les plans personnels gratuits et les plans d\u2019\u00e9quipe gratuits disposent de 100 cr\u00e9dits d\u2019Assistant AI (ou requ\u00eates). Pour les espaces d\u2019\u00e9quipe gratuits, cela s\u2019applique \u00e0 toute l\u2019\u00e9quipe. Les plans Pro incluent 100 cr\u00e9dits d\u2019Assistant AI par mois. Les cr\u00e9dits se rechargent automatiquement \u00e0 100 \u00e0 chaque cycle de facturation. Les cr\u00e9dits s\u2019appliquent \u00e0 toute l\u2019\u00e9quipe. Chaque message de chat envoy\u00e9 co\u00fbte un cr\u00e9dit. Si vous avez besoin de plus de cr\u00e9dits, il existe deux options de mise \u00e0 niveau : 500 cr\u00e9dits mensuels pour 10 $ par mois (par \u00e9quipe, non par personne) 2 000 cr\u00e9dits mensuels pour 29 $ par mois (par \u00e9quipe, non par personne) Bonnes Pratiques # Il est utile de comprendre comment les formules fonctionnent dans Grist, surtout par rapport aux feuilles de calcul traditionnelles. Dans Grist, une seule formule s\u2019applique \u00e0 toute une colonne. Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec des feuilles de calcul, vous pourriez \u00eatre surpris de ne pas avoir \u00e0 sp\u00e9cifier les num\u00e9ros de ligne, comme B1 * C1 . Si vous \u00eates nouveau sur Grist, vous pourriez essayer quelque chose de simple sans l\u2019assistant pour voir comment les formules se comportent, par exemple $Prix * $Taxe . D\u00e9finir un en-t\u00eate de colonne avant de soumettre une question am\u00e9liore les r\u00e9sultats. Par exemple, \u201cB\u00e9n\u00e9fice Net\u201d fournit plus de contexte qu\u2019une colonne \u00e9tiquet\u00e9e \u201cD\u201d. D\u00e9finissez le type de colonne de la colonne de formule avant de demander de l\u2019aide \u00e0 l\u2019assistant. Cela aide l\u2019assistant \u00e0 deviner quel type de valeurs vous souhaitez obtenir. Pensez au type de valeur que vous vous attendez \u00e0 voir dans la formule, et formulez la question en cons\u00e9quence. Par exemple, si vous voulez une formule qui renvoie Vrai ou Faux dans une colonne de bascule , posez une question oui-ou-non. Sinon, l\u2019assistant pourrait sugg\u00e9rer une formule qui liste toutes les lignes o\u00f9 quelque chose est vrai (et est techniquement correct), mais vous esp\u00e9riez une simple valeur vraie ou fausse par ligne. L\u2019assistant est conversationnel. Si vous n\u2019\u00eates pas satisfait d\u2019une formule sugg\u00e9r\u00e9e, expliquez \u00e0 l\u2019assistant o\u00f9 la formule a \u00e9chou\u00e9 et demandez-lui de faire un changement. Parfois, l\u2019assistant s\u2019ent\u00eate sur une mauvaise id\u00e9e. S\u2019il insiste sur une m\u00e9thode de formule particuli\u00e8re, envisagez de supprimer la conversation et de recommencer. Cliquez sur le menu \u00e0 trois points dans l\u2019en-t\u00eate de l\u2019Assistant AI pour effacer une conversation. Rappelez-vous que les formules Grist s\u2019appliquent \u00e0 toute la colonne. Si vous voulez des sommes de lignes, vous avez besoin d\u2019une table de r\u00e9sum\u00e9 . Vous pouvez ajouter plus de formules aux tables de r\u00e9sum\u00e9 et demander \u00e0 l\u2019assistant de vous aider. Politique d\u2019Utilisation des Donn\u00e9es # Votre requ\u00eate et le sch\u00e9ma de votre document sont envoy\u00e9s \u00e0 OpenAI . L\u2019Assistant de Formule AI de Grist utilise le mod\u00e8le gpt-3.5-turbo, alias ChatGPT. La Politique de Confidentialit\u00e9 d\u2019OpenAI d\u00e9crit comment OpenAI g\u00e8re vos donn\u00e9es. La Politique de Contenu , les Politiques d\u2019Utilisation et la Politique de Partage et de Publication d\u2019OpenAI d\u00e9crivent comment l\u2019Assistant AI de Grist et ses r\u00e9sultats peuvent \u00eatre utilis\u00e9s et partag\u00e9s. Ceux qui violent les politiques d\u2019OpenAI peuvent perdre l\u2019acc\u00e8s \u00e0 l\u2019assistant AI de Grist. Certains employ\u00e9s de Grist Labs peuvent \u00e9galement examiner les journaux des requ\u00eates de l\u2019assistant (questions et sch\u00e9ma de document) pour comprendre ce qui fonctionne et ce qui ne fonctionne pas, afin de fournir un meilleur service.","title":"AI Formula Assistant"},{"location":"ai-assistant/#assistant-de-formule-ai","text":"L\u2019Assistant de Formule AI de Grist simplifie la partie la plus difficile des feuilles de calcul \u2014 les formules. L\u2019assistant ne fait qu\u2019une seule chose, \u00e9crire des formules en r\u00e9ponse \u00e0 des requ\u00eates en langage clair. Lorsque vous posez une question \u00e0 l\u2019assistant, il n\u2019est pas n\u00e9cessaire de sp\u00e9cifier les IDs des colonnes ou d\u2019expliquer la structure de vos donn\u00e9es. Lorsque vous soumettez une question \u00e0 l\u2019assistant, Grist envoie votre question et le sch\u00e9ma de vos donn\u00e9es (en partie ou en totalit\u00e9) \u00e0 OpenAI afin que l\u2019assistant puisse mieux comprendre votre document. Vous pouvez consulter le sch\u00e9ma de vos donn\u00e9es dans la vue code. Aucune donn\u00e9e n\u2019est partag\u00e9e avec OpenAI \u00e0 moins qu\u2019un utilisateur ne soumette une question \u00e0 l\u2019assistant. En savoir plus sur l\u2019utilisation des donn\u00e9es .","title":"Assistant de Formule AI"},{"location":"ai-assistant/#comment-utiliser-lassistant-ai","text":"Cr\u00e9ez une colonne de formule et cliquez soit sur l\u2019ic\u00f4ne d\u2019agrandissement, soit sur le lien texte \u201cutiliser l\u2019Assistant AI\u201d dans la cellule. Cela ouvrira un \u00e9diteur de formule \u00e9tendu avec le chat de l\u2019Assistant AI en dessous. D\u00e9crivez simplement ce que vous voulez que la formule fasse. Voici quelques conseils. Lorsque vous appliquez une formule sugg\u00e9r\u00e9e, vous verrez la formule pr\u00e9visualis\u00e9e dans la colonne. Si vous \u00eates satisfait de la formule, cliquez sur \u201cEnregistrer\u201d. Sinon, cliquez sur \u201cAnnuler\u201d pour annuler les modifications apport\u00e9es \u00e0 la formule.","title":"Comment Utiliser l’Assistant AI"},{"location":"ai-assistant/#assistant-ai-pour-les-auto-hebergeurs","text":"Pour les auto-h\u00e9bergeurs souhaitant connecter leur instance Grist, d\u00e9finissez les variables d\u2019environnement li\u00e9es \u00e0 l\u2019Assistant AI . Les variables ci-dessus permettent \u00e9galement l\u2019utilisation de la famille de mod\u00e8les auto-h\u00e9bergeables LLaMA via llama2-cpp-python . En savoir plus sur la gestion autonome de Grist .","title":"Assistant AI pour les Auto-h\u00e9bergeurs"},{"location":"ai-assistant/#tarification-de-lassistant-ai","text":"Les plans personnels gratuits et les plans d\u2019\u00e9quipe gratuits disposent de 100 cr\u00e9dits d\u2019Assistant AI (ou requ\u00eates). Pour les espaces d\u2019\u00e9quipe gratuits, cela s\u2019applique \u00e0 toute l\u2019\u00e9quipe. Les plans Pro incluent 100 cr\u00e9dits d\u2019Assistant AI par mois. Les cr\u00e9dits se rechargent automatiquement \u00e0 100 \u00e0 chaque cycle de facturation. Les cr\u00e9dits s\u2019appliquent \u00e0 toute l\u2019\u00e9quipe. Chaque message de chat envoy\u00e9 co\u00fbte un cr\u00e9dit. Si vous avez besoin de plus de cr\u00e9dits, il existe deux options de mise \u00e0 niveau : 500 cr\u00e9dits mensuels pour 10 $ par mois (par \u00e9quipe, non par personne) 2 000 cr\u00e9dits mensuels pour 29 $ par mois (par \u00e9quipe, non par personne)","title":"Tarification de l’Assistant AI"},{"location":"ai-assistant/#bonnes-pratiques","text":"Il est utile de comprendre comment les formules fonctionnent dans Grist, surtout par rapport aux feuilles de calcul traditionnelles. Dans Grist, une seule formule s\u2019applique \u00e0 toute une colonne. Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec des feuilles de calcul, vous pourriez \u00eatre surpris de ne pas avoir \u00e0 sp\u00e9cifier les num\u00e9ros de ligne, comme B1 * C1 . Si vous \u00eates nouveau sur Grist, vous pourriez essayer quelque chose de simple sans l\u2019assistant pour voir comment les formules se comportent, par exemple $Prix * $Taxe . D\u00e9finir un en-t\u00eate de colonne avant de soumettre une question am\u00e9liore les r\u00e9sultats. Par exemple, \u201cB\u00e9n\u00e9fice Net\u201d fournit plus de contexte qu\u2019une colonne \u00e9tiquet\u00e9e \u201cD\u201d. D\u00e9finissez le type de colonne de la colonne de formule avant de demander de l\u2019aide \u00e0 l\u2019assistant. Cela aide l\u2019assistant \u00e0 deviner quel type de valeurs vous souhaitez obtenir. Pensez au type de valeur que vous vous attendez \u00e0 voir dans la formule, et formulez la question en cons\u00e9quence. Par exemple, si vous voulez une formule qui renvoie Vrai ou Faux dans une colonne de bascule , posez une question oui-ou-non. Sinon, l\u2019assistant pourrait sugg\u00e9rer une formule qui liste toutes les lignes o\u00f9 quelque chose est vrai (et est techniquement correct), mais vous esp\u00e9riez une simple valeur vraie ou fausse par ligne. L\u2019assistant est conversationnel. Si vous n\u2019\u00eates pas satisfait d\u2019une formule sugg\u00e9r\u00e9e, expliquez \u00e0 l\u2019assistant o\u00f9 la formule a \u00e9chou\u00e9 et demandez-lui de faire un changement. Parfois, l\u2019assistant s\u2019ent\u00eate sur une mauvaise id\u00e9e. S\u2019il insiste sur une m\u00e9thode de formule particuli\u00e8re, envisagez de supprimer la conversation et de recommencer. Cliquez sur le menu \u00e0 trois points dans l\u2019en-t\u00eate de l\u2019Assistant AI pour effacer une conversation. Rappelez-vous que les formules Grist s\u2019appliquent \u00e0 toute la colonne. Si vous voulez des sommes de lignes, vous avez besoin d\u2019une table de r\u00e9sum\u00e9 . Vous pouvez ajouter plus de formules aux tables de r\u00e9sum\u00e9 et demander \u00e0 l\u2019assistant de vous aider.","title":"Bonnes Pratiques"},{"location":"ai-assistant/#politique-dutilisation-des-donnees","text":"Votre requ\u00eate et le sch\u00e9ma de votre document sont envoy\u00e9s \u00e0 OpenAI . L\u2019Assistant de Formule AI de Grist utilise le mod\u00e8le gpt-3.5-turbo, alias ChatGPT. La Politique de Confidentialit\u00e9 d\u2019OpenAI d\u00e9crit comment OpenAI g\u00e8re vos donn\u00e9es. La Politique de Contenu , les Politiques d\u2019Utilisation et la Politique de Partage et de Publication d\u2019OpenAI d\u00e9crivent comment l\u2019Assistant AI de Grist et ses r\u00e9sultats peuvent \u00eatre utilis\u00e9s et partag\u00e9s. Ceux qui violent les politiques d\u2019OpenAI peuvent perdre l\u2019acc\u00e8s \u00e0 l\u2019assistant AI de Grist. Certains employ\u00e9s de Grist Labs peuvent \u00e9galement examiner les journaux des requ\u00eates de l\u2019assistant (questions et sch\u00e9ma de document) pour comprendre ce qui fonctionne et ce qui ne fonctionne pas, afin de fournir un meilleur service.","title":"Politique d’Utilisation des Donn\u00e9es"},{"location":"authorship/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Colonnes d\u2019auteur # Parfois, il est utile d\u2019avoir des colonnes qui enregistrent qui a cr\u00e9\u00e9 des enregistrements individuels et qui les a mis \u00e0 jour en dernier. Grist vous permet de cr\u00e9er facilement de telles colonnes. Il suit \u00e9galement automatiquement les modifications du document dans l\u2019onglet Activit\u00e9 de l\u2019Historique du document, mais il est n\u00e9anmoins pratique d\u2019avoir ces informations sous forme tabulaire disponibles pour les formules et les filtres, et les colonnes d\u2019auteur vous permettent de le faire. Une colonne \u201cCr\u00e9\u00e9 par\u201d # Supposons que nous voulions remplir automatiquement une colonne avec le nom du cr\u00e9ateur de chaque enregistrement au fur et \u00e0 mesure qu\u2019ils sont ajout\u00e9s. Comme premi\u00e8re \u00e9tape, ajoutez une colonne appel\u00e9e (par exemple) Cr\u00e9\u00e9 par . Dans les options de colonne dans le panneau lat\u00e9ral (voir Colonnes pour un rappel), cliquez sur l\u2019action D\u00e9finir une formule de d\u00e9clenchement . D\u00e9finissez user.Name comme formule de la colonne. Il existe d\u2019autres possibilit\u00e9s, telles que user.Email , un user.UserID unique, et ainsi de suite. Les informations utilisateur disponibles sont les m\u00eames que celles des conditions de r\u00e8gles d\u2019acc\u00e8s . Les informations temporelles sont \u00e9galement disponibles (voir Colonnes de timestamp ). Mais restons-en \u00e0 user.Name pour l\u2019instant. Maintenant, pour d\u00e9finir la colonne chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9, assurez-vous que l\u2019option Appliquer aux nouveaux enregistrements est coch\u00e9e. Et c\u2019est tout ! Maintenant, chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9, la colonne Cr\u00e9\u00e9 le sera d\u00e9finie avec le nom de l\u2019utilisateur qui le cr\u00e9e : Une colonne \u201cMis \u00e0 jour par\u201d # Si nous voulons une colonne qui enregistre qui a modifi\u00e9 un enregistrement en dernier (par opposition \u00e0 son cr\u00e9ateur), la proc\u00e9dure est similaire \u00e0 celle d\u2019une colonne \u201cCr\u00e9\u00e9 par\u201d , mais au lieu de Appliquer aux nouveaux enregistrements , s\u00e9lectionnez Appliquer aux modifications des enregistrements . Ensuite, s\u00e9lectionnez N'importe quel champ (en supposant que vous voulez que toute modification d\u2019un enregistrement soit consid\u00e9r\u00e9e comme une mise \u00e0 jour) et appuyez sur OK . Vous pouvez alternativement choisir quelles colonnes, lorsqu\u2019elles sont mises \u00e0 jour, d\u00e9clencheront la formule. Voici un exemple de la nouvelle colonne en action - lorsque Cotton Candy v Candy Floss est mis \u00e0 jour, un nom d\u2019utilisateur appara\u00eet pour cet enregistrement : Il est toujours possible pour un utilisateur de modifier manuellement les cellules dans les colonnes Cr\u00e9\u00e9 par et Mis \u00e0 jour par . Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire.","title":"Authorship columns"},{"location":"authorship/#colonnes-dauteur","text":"Parfois, il est utile d\u2019avoir des colonnes qui enregistrent qui a cr\u00e9\u00e9 des enregistrements individuels et qui les a mis \u00e0 jour en dernier. Grist vous permet de cr\u00e9er facilement de telles colonnes. Il suit \u00e9galement automatiquement les modifications du document dans l\u2019onglet Activit\u00e9 de l\u2019Historique du document, mais il est n\u00e9anmoins pratique d\u2019avoir ces informations sous forme tabulaire disponibles pour les formules et les filtres, et les colonnes d\u2019auteur vous permettent de le faire.","title":"Colonnes d’auteur"},{"location":"authorship/#une-colonne-cree-par","text":"Supposons que nous voulions remplir automatiquement une colonne avec le nom du cr\u00e9ateur de chaque enregistrement au fur et \u00e0 mesure qu\u2019ils sont ajout\u00e9s. Comme premi\u00e8re \u00e9tape, ajoutez une colonne appel\u00e9e (par exemple) Cr\u00e9\u00e9 par . Dans les options de colonne dans le panneau lat\u00e9ral (voir Colonnes pour un rappel), cliquez sur l\u2019action D\u00e9finir une formule de d\u00e9clenchement . D\u00e9finissez user.Name comme formule de la colonne. Il existe d\u2019autres possibilit\u00e9s, telles que user.Email , un user.UserID unique, et ainsi de suite. Les informations utilisateur disponibles sont les m\u00eames que celles des conditions de r\u00e8gles d\u2019acc\u00e8s . Les informations temporelles sont \u00e9galement disponibles (voir Colonnes de timestamp ). Mais restons-en \u00e0 user.Name pour l\u2019instant. Maintenant, pour d\u00e9finir la colonne chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9, assurez-vous que l\u2019option Appliquer aux nouveaux enregistrements est coch\u00e9e. Et c\u2019est tout ! Maintenant, chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9, la colonne Cr\u00e9\u00e9 le sera d\u00e9finie avec le nom de l\u2019utilisateur qui le cr\u00e9e :","title":"Une colonne “Cr\u00e9\u00e9 par”"},{"location":"authorship/#une-colonne-mis-a-jour-par","text":"Si nous voulons une colonne qui enregistre qui a modifi\u00e9 un enregistrement en dernier (par opposition \u00e0 son cr\u00e9ateur), la proc\u00e9dure est similaire \u00e0 celle d\u2019une colonne \u201cCr\u00e9\u00e9 par\u201d , mais au lieu de Appliquer aux nouveaux enregistrements , s\u00e9lectionnez Appliquer aux modifications des enregistrements . Ensuite, s\u00e9lectionnez N'importe quel champ (en supposant que vous voulez que toute modification d\u2019un enregistrement soit consid\u00e9r\u00e9e comme une mise \u00e0 jour) et appuyez sur OK . Vous pouvez alternativement choisir quelles colonnes, lorsqu\u2019elles sont mises \u00e0 jour, d\u00e9clencheront la formule. Voici un exemple de la nouvelle colonne en action - lorsque Cotton Candy v Candy Floss est mis \u00e0 jour, un nom d\u2019utilisateur appara\u00eet pour cet enregistrement : Il est toujours possible pour un utilisateur de modifier manuellement les cellules dans les colonnes Cr\u00e9\u00e9 par et Mis \u00e0 jour par . Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire.","title":"Une colonne “Mis \u00e0 jour par”"},{"location":"automatic-backups/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Sauvegardes Automatiques # Grist enregistre automatiquement des sauvegardes de vos documents pendant que vous travaillez dessus. Ces sauvegardes \u2013 ou instantan\u00e9s \u2013 du document peuvent \u00eatre examin\u00e9es \u00e0 tout moment. Grist conserve des instantan\u00e9s plus fr\u00e9quents des modifications r\u00e9centes, et des instantan\u00e9s moins fr\u00e9quents au fur et \u00e0 mesure que vous remontez dans le temps. Par exemple, des instantan\u00e9s horaires sont conserv\u00e9s pendant environ une journ\u00e9e, mais des instantan\u00e9s mensuels sont conserv\u00e9s pendant plus d\u2019un an. Examiner les Sauvegardes # Pour voir la liste des sauvegardes, cliquez sur \u201cHistorique du Document\u201d dans le panneau de gauche, puis cliquez sur l\u2019onglet \u201cInstantan\u00e9s\u201d dans le panneau qui s\u2019ouvre \u00e0 droite : Vous pouvez ouvrir n\u2019importe lequel des instantan\u00e9s list\u00e9s pour voir le document tel qu\u2019il existait \u00e0 ce moment-l\u00e0. Restaurer une Version Ant\u00e9rieure # Lors de l\u2019examen d\u2019un instantan\u00e9, le menu \u201cPartager\u201d propose des options suppl\u00e9mentaires ; Utilisez l\u2019option \u201cRemplacer la Version Actuelle\u201d pour revenir \u00e0 la version du document que vous consultez. Vous pouvez \u00e9galement enregistrer l\u2019instantan\u00e9 comme un nouveau document en utilisant l\u2019option \u201cEnregistrer une Copie\u201d. Documents Supprim\u00e9s # Lorsque vous supprimez un document, son historique de sauvegardes est supprim\u00e9 avec lui. Tant que le document est dans la Corbeille, vous pouvez encore le restaurer pendant 30 jours. Si vous le faites, vous retrouverez tous les instantan\u00e9s historiques. Si vous choisissez \u201cSupprimer D\u00e9finitivement\u201d pour un document dans la Corbeille, ou lorsque un document dans la Corbeille est automatiquement purg\u00e9 apr\u00e8s 30 jours, les sauvegardes seront supprim\u00e9es d\u00e9finitivement avec lui.","title":"Automatic backups"},{"location":"automatic-backups/#sauvegardes-automatiques","text":"Grist enregistre automatiquement des sauvegardes de vos documents pendant que vous travaillez dessus. Ces sauvegardes \u2013 ou instantan\u00e9s \u2013 du document peuvent \u00eatre examin\u00e9es \u00e0 tout moment. Grist conserve des instantan\u00e9s plus fr\u00e9quents des modifications r\u00e9centes, et des instantan\u00e9s moins fr\u00e9quents au fur et \u00e0 mesure que vous remontez dans le temps. Par exemple, des instantan\u00e9s horaires sont conserv\u00e9s pendant environ une journ\u00e9e, mais des instantan\u00e9s mensuels sont conserv\u00e9s pendant plus d\u2019un an.","title":"Sauvegardes Automatiques"},{"location":"automatic-backups/#examiner-les-sauvegardes","text":"Pour voir la liste des sauvegardes, cliquez sur \u201cHistorique du Document\u201d dans le panneau de gauche, puis cliquez sur l\u2019onglet \u201cInstantan\u00e9s\u201d dans le panneau qui s\u2019ouvre \u00e0 droite : Vous pouvez ouvrir n\u2019importe lequel des instantan\u00e9s list\u00e9s pour voir le document tel qu\u2019il existait \u00e0 ce moment-l\u00e0.","title":"Examiner les Sauvegardes"},{"location":"automatic-backups/#restaurer-une-version-anterieure","text":"Lors de l\u2019examen d\u2019un instantan\u00e9, le menu \u201cPartager\u201d propose des options suppl\u00e9mentaires ; Utilisez l\u2019option \u201cRemplacer la Version Actuelle\u201d pour revenir \u00e0 la version du document que vous consultez. Vous pouvez \u00e9galement enregistrer l\u2019instantan\u00e9 comme un nouveau document en utilisant l\u2019option \u201cEnregistrer une Copie\u201d.","title":"Restaurer une Version Ant\u00e9rieure"},{"location":"automatic-backups/#documents-supprimes","text":"Lorsque vous supprimez un document, son historique de sauvegardes est supprim\u00e9 avec lui. Tant que le document est dans la Corbeille, vous pouvez encore le restaurer pendant 30 jours. Si vous le faites, vous retrouverez tous les instantan\u00e9s historiques. Si vous choisissez \u201cSupprimer D\u00e9finitivement\u201d pour un document dans la Corbeille, ou lorsque un document dans la Corbeille est automatiquement purg\u00e9 apr\u00e8s 30 jours, les sauvegardes seront supprim\u00e9es d\u00e9finitivement avec lui.","title":"Documents Supprim\u00e9s"},{"location":"browser-support/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Support des Navigateurs # Grist est officiellement pris en charge et r\u00e9guli\u00e8rement test\u00e9 sur les navigateurs modernes Firefox et Google Chrome sur toutes les plateformes de bureau. Ils sont disponibles ici : T\u00e9l\u00e9charger Firefox T\u00e9l\u00e9charger Chrome D\u2019autres navigateurs modernes fonctionneront dans la mesure o\u00f9 ils sont conformes aux normes. En particulier, il est rapport\u00e9 que Grist fonctionne sur Safari et Microsoft Edge modernes. Si vous rencontrez des erreurs ou un comportement inattendu sur ces navigateurs, nous vous encourageons \u00e0 nous les signaler en nous envoyant un email \u00e0 support@getgrist.com . Support Mobile # Vous pouvez utiliser Grist de mani\u00e8re assez confortable dans les navigateurs mobiles tels que Chrome, Safari et Firefox. Sur les petits \u00e9crans, vous pouvez trouver la liste des pages \u00e0 partir du bouton dans la barre inf\u00e9rieure. Pour les pages avec plusieurs vues, seule la vue active est d\u00e9velopp\u00e9e. Les autres vues sont r\u00e9duites jusqu\u2019\u00e0 ce que vous touchiez pour les d\u00e9velopper. Pour \u00e9diter une cellule, il suffit de la toucher deux fois. Le support mobile est encore en cours de d\u00e9veloppement. Pour revenir \u00e0 la version bureau sur un appareil mobile, ouvrez le menu de votre compte et s\u00e9lectionnez l\u2019option \u00ab Basculer en mode mobile \u00bb :","title":"Browser support"},{"location":"browser-support/#support-des-navigateurs","text":"Grist est officiellement pris en charge et r\u00e9guli\u00e8rement test\u00e9 sur les navigateurs modernes Firefox et Google Chrome sur toutes les plateformes de bureau. Ils sont disponibles ici : T\u00e9l\u00e9charger Firefox T\u00e9l\u00e9charger Chrome D\u2019autres navigateurs modernes fonctionneront dans la mesure o\u00f9 ils sont conformes aux normes. En particulier, il est rapport\u00e9 que Grist fonctionne sur Safari et Microsoft Edge modernes. Si vous rencontrez des erreurs ou un comportement inattendu sur ces navigateurs, nous vous encourageons \u00e0 nous les signaler en nous envoyant un email \u00e0 support@getgrist.com .","title":"Support des Navigateurs"},{"location":"browser-support/#support-mobile","text":"Vous pouvez utiliser Grist de mani\u00e8re assez confortable dans les navigateurs mobiles tels que Chrome, Safari et Firefox. Sur les petits \u00e9crans, vous pouvez trouver la liste des pages \u00e0 partir du bouton dans la barre inf\u00e9rieure. Pour les pages avec plusieurs vues, seule la vue active est d\u00e9velopp\u00e9e. Les autres vues sont r\u00e9duites jusqu\u2019\u00e0 ce que vous touchiez pour les d\u00e9velopper. Pour \u00e9diter une cellule, il suffit de la toucher deux fois. Le support mobile est encore en cours de d\u00e9veloppement. Pour revenir \u00e0 la version bureau sur un appareil mobile, ouvrez le menu de votre compte et s\u00e9lectionnez l\u2019option \u00ab Basculer en mode mobile \u00bb :","title":"Support Mobile"},{"location":"col-refs/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . R\u00e9f\u00e9rence et Listes de R\u00e9f\u00e9rences # Vue d\u2019ensemble # Les colonnes R\u00e9f\u00e9rence et Liste de R\u00e9f\u00e9rences dans Grist permettent \u00e0 une table de cr\u00e9er une r\u00e9f\u00e9rence explicite \u00e0 une autre. Dans le monde des bases de donn\u00e9es, cela est similaire \u00e0 une cl\u00e9 \u00e9trang\u00e8re. Dans le monde des tableurs, cela est similaire \u00e0 un VLOOKUP , mais beaucoup plus puissant et plus facile \u00e0 utiliser. Dans ce guide, nous utiliserons le terme table sous-jacente pour la table qui liste toutes les valeurs disponibles, et table de r\u00e9f\u00e9rence pour la table qui utilise ces valeurs. Cr\u00e9er une nouvelle colonne de R\u00e9f\u00e9rence # Supposons que nous ayons un document avec deux tables, Clients et Projets. La table Clients liste nos clients - noms, contacts, dates de signature - et la table Projets liste les projets que nous r\u00e9alisons pour les clients. Il y a toutes sortes de choses que Grist peut faire pour nous si nous lui indiquons que la colonne Client dans la table Projets fait r\u00e9f\u00e9rence aux clients list\u00e9s dans la table Clients. Nous pouvons le faire en convertissant la colonne Client en une \u201ccolonne de r\u00e9f\u00e9rence\u201d. Ouvrez le panneau lat\u00e9ral des Options de Colonne (voir Sp\u00e9cifier un type ) et d\u00e9finissez le \u201cType de Colonne\u201d sur \u201cR\u00e9f\u00e9rence\u201d. Ajustez l\u2019option \u201cDonn\u00e9es de la Table\u201d pour \u00eatre la table correcte que vous souhaitez croiser, et l\u2019option \u201cAfficher la Colonne\u201d pour correspondre \u00e0 la colonne de cette table que vous souhaitez afficher. Ensuite, cliquez sur \u201cAppliquer\u201d lorsque vous \u00eates satisfait du r\u00e9sultat. Comprendre la r\u00e9f\u00e9rence La valeur de la colonne fait toujours r\u00e9f\u00e9rence \u00e0 l\u2019ensemble du record dans la table sous-jacente. La valeur affich\u00e9e peut \u00eatre n\u2019importe quelle colonne de ce record, comme s\u00e9lectionn\u00e9 dans Afficher la Colonne . Vous pouvez \u00e9galement inclure des colonnes suppl\u00e9mentaires \u00e0 afficher comme expliqu\u00e9 plus tard. Dans notre exemple, vous pouvez voir des petites ic\u00f4nes de lien appara\u00eetre dans les cellules de la colonne Client, montrant qu\u2019elles ont \u00e9t\u00e9 correctement crois\u00e9es avec la table Clients. Une fois le type de colonne d\u00e9fini, vous pouvez commencer \u00e0 taper dedans ou double-cliquer pour voir une liste d\u00e9roulante de toutes les valeurs disponibles. Notez que la table Clients et la colonne Client sont li\u00e9es par le type de colonne plut\u00f4t que par le nom. Elles peuvent \u00eatre nomm\u00e9es comme vous le souhaitez. Rep\u00e9rer les colonnes de r\u00e9f\u00e9rence Vous pouvez dire que les valeurs dans une colonne repr\u00e9sentent une r\u00e9f\u00e9rence par l\u2019ic\u00f4ne de lien qui appara\u00eet \u00e0 c\u00f4t\u00e9 des valeurs. Si vous tapez accidentellement une valeur qui n\u2019est pas pr\u00e9sente dans la table Clients , sa valeur sera mise en \u00e9vidence comme invalide : Ajouter des valeurs \u00e0 une colonne de R\u00e9f\u00e9rence # Parfois, il est utile d\u2019ajouter une nouvelle valeur \u00e0 la liste d\u00e9roulante sans avoir \u00e0 passer \u00e0 la table sous-jacente. Les colonnes de r\u00e9f\u00e9rence rendent cela facile ! Il suffit de taper la valeur que vous souhaitez ajouter et de s\u00e9lectionner la valeur + dans la liste d\u00e9roulante. Grist ajoutera automatiquement un nouveau record contenant cette valeur \u00e0 la table sous-jacente et ins\u00e9rera la r\u00e9f\u00e9rence appropri\u00e9e : Convertir une colonne de Texte en R\u00e9f\u00e9rence # Lorsque vous travaillez avec des donn\u00e9es existantes, il est courant d\u2019avoir des valeurs textuelles existantes qui devraient vraiment \u00eatre des valeurs de r\u00e9f\u00e9rence. Ne vous inqui\u00e9tez pas, la conversion est simple ! Il suffit de changer le type de colonne en R\u00e9f\u00e9rence et Grist trouvera et substituera automatiquement les valeurs correspondantes par des r\u00e9f\u00e9rences. Si certaines valeurs ne sont pas trouv\u00e9es, elles seront affich\u00e9es comme invalides. Vous pouvez alors soit les ajouter \u00e0 la table sous-jacente, soit s\u00e9lectionner les valeurs appropri\u00e9es pour elles. Dans cet exemple, les trois premi\u00e8res valeurs correspondent parfaitement, mais Forest Labs est invalide car il n\u2019existe pas dans la table Clients : Inclure # plusieurs champs d\u2019une r\u00e9f\u00e9rence # Un grand avantage des colonnes de r\u00e9f\u00e9rence est qu\u2019elles vous permettent d\u2019int\u00e9grer facilement plusieurs colonnes de la table sous-jacente. Dans notre exemple, si vous souhaitez int\u00e9grer $Client.Contact \u00e0 la table Projets , vous pouvez simplement s\u00e9lectionner la colonne Contact dans la section Ajouter des Colonnes R\u00e9f\u00e9renc\u00e9es et elle sera automatiquement ajout\u00e9e \u00e0 la table Projets : Si vous \u00eates \u00e0 l\u2019aise avec les formules, vous pouvez voir que la colonne ajout\u00e9e est simplement la formule =$Client.Contact . Si vous le souhaitez, vous pouvez obtenir le m\u00eame r\u00e9sultat en ajoutant manuellement la colonne de formule. Vous pouvez \u00e9galement utiliser d\u2019autres champs de la table Clients en r\u00e9f\u00e9rant \u00e0 $Client dans les formules de la table Projets . Notez que dans les formules, nous utilisons le nom de la colonne de r\u00e9f\u00e9rence ( $Client ) pour faire r\u00e9f\u00e9rence \u00e0 un record li\u00e9, et non le nom de la table (qui est Clients ici). Ne laissez pas la similarit\u00e9 des noms dans cet exemple vous confondre. Utiliser des r\u00e9f\u00e9rences dans les formules Vous avez peut-\u00eatre remarqu\u00e9 que la table sous-jacente est Clients (pluriel) mais que la formule est $Client.Contact (singulier). C\u2019est parce que la formule se r\u00e9f\u00e8re \u00e0 la colonne de r\u00e9f\u00e9rence, pas \u00e0 la table sous-jacente. Dans notre exemple, la colonne de r\u00e9f\u00e9rence est Client . Cr\u00e9er une nouvelle colonne de Liste de R\u00e9f\u00e9rences # Jusqu\u2019\u00e0 pr\u00e9sent, notre exemple ne traitait que des projets ayant un seul client. Supposons que nous ayons \u00e9galement des projets avec plusieurs clients, et que nous souhaitions maintenir des r\u00e9f\u00e9rences \u00e0 tous depuis la colonne Client de la table Projets . Nous pouvons indiquer \u00e0 Grist que la colonne Client contient plusieurs r\u00e9f\u00e9rences en changeant son type en \u201cListe de R\u00e9f\u00e9rences\u201d. Ce type de colonne peut r\u00e9f\u00e9rencer plusieurs records, et peut \u00e9galement \u00eatre consid\u00e9r\u00e9 comme une s\u00e9lection multiple. Ouvrez le panneau lat\u00e9ral des Options de Colonne (voir Sp\u00e9cifier un type ) et d\u00e9finissez le \u201cType de Colonne\u201d de Client sur \u201cListe de R\u00e9f\u00e9rences\u201d. Grist convertira automatiquement toutes vos r\u00e9f\u00e9rences existantes en listes de r\u00e9f\u00e9rences. Une fois que vous \u00eates satisfait du r\u00e9sultat, cliquez simplement sur \u201cAppliquer\u201d et la colonne Client sera pr\u00eate \u00e0 accepter autant de clients que vos projets en ont besoin. Modifier les valeurs dans une colonne de Liste de R\u00e9f\u00e9rences # Pour apporter des modifications \u00e0 une cellule de Liste de R\u00e9f\u00e9rences, double-cliquez simplement sur la cellule ou appuyez sur la touche Entr\u00e9e apr\u00e8s avoir s\u00e9lectionn\u00e9 la cellule que vous souhaitez modifier. Vous pouvez \u00e9galement commencer \u00e0 taper apr\u00e8s avoir s\u00e9lectionn\u00e9 une cellule si vous souhaitez \u00e9craser tout contenu existant. Cela ouvrira un \u00e9diteur comme celui de l\u2019exemple ci-dessous. Comme avec les colonnes de R\u00e9f\u00e9rence, le menu de saisie semi-automatique se remplira de suggestions au fur et \u00e0 mesure que vous tapez. Si vous tapez une valeur qui n\u2019est pas pr\u00e9sente dans la table r\u00e9f\u00e9renc\u00e9e, vous pouvez s\u00e9lectionner la valeur + pour ajouter une nouvelle ligne \u00e0 la table r\u00e9f\u00e9renc\u00e9e avec votre valeur. Pour supprimer des r\u00e9f\u00e9rences existantes, appuyez simplement sur la touche Retour arri\u00e8re , ou d\u00e9placez votre curseur sur une r\u00e9f\u00e9rence et cliquez sur l\u2019ic\u00f4ne X . Vous pouvez \u00e9galement r\u00e9organiser les r\u00e9f\u00e9rences dans l\u2019\u00e9diteur en les faisant glisser avec votre souris. Pour enregistrer vos modifications et fermer l\u2019\u00e9diteur, appuyez sur Entr\u00e9e ou Tabulation , ou cliquez n\u2019importe o\u00f9 en dehors de l\u2019\u00e9diteur. Pour fermer l\u2019\u00e9diteur et annuler toutes les modifications que vous avez apport\u00e9es, appuyez sur \u00c9chap . Comprendre les colonnes de r\u00e9f\u00e9rence # Les cellules dans une colonne de r\u00e9f\u00e9rence identifient toujours un record entier dans la table r\u00e9f\u00e9renc\u00e9e. Pour plus de commodit\u00e9, vous pouvez s\u00e9lectionner quelle colonne de ce record afficher en d\u00e9finissant \u201cAFFICHER LA COLONNE\u201d. Cependant, la valeur de la cellule est toujours l\u2019ID unique d\u2019un record. De m\u00eame, les Listes de R\u00e9f\u00e9rences stockent une liste d\u2019IDs de records. Qu\u2019est-ce que cela signifie vraiment ? Jetons un coup d\u2019\u0153il au mod\u00e8le Inscription aux Cours . Dans la table Classes, la colonne Instructeur est une colonne de r\u00e9f\u00e9rence qui fait r\u00e9f\u00e9rence aux donn\u00e9es de la table Staff. Le Nom Complet est s\u00e9lectionn\u00e9 sous \u2018Afficher la Colonne\u2019 et est utilis\u00e9 comme \u00e9tiquette pour repr\u00e9senter le record de la table Staff qui est r\u00e9f\u00e9renc\u00e9 ici. Nous pouvons changer cette \u00e9tiquette pour n\u2019importe quelle autre valeur contenue dans le record. Changeons-la en \u2018ID de Ligne\u2019. L\u2019ID de ligne est ce qui est r\u00e9ellement stock\u00e9 dans la colonne de R\u00e9f\u00e9rence ou de Liste de R\u00e9f\u00e9rences. Avec cet ID, nous pouvons r\u00e9cup\u00e9rer toutes les donn\u00e9es associ\u00e9es \u00e0 ce record. Dans la premi\u00e8re ligne de la table Classes, nous voyons Staff[2] comme valeur dans la colonne Instructeur. Cela repr\u00e9sente le record dans la table Staff avec l\u2019ID de Ligne = 2 . Nous pouvons naviguer vers la table Staff et voir quel record est assign\u00e9 \u00e0 l\u2019ID de Ligne = 2 . Pour voir l\u2019ID unique d\u2019un record, ajoutez une nouvelle colonne avec la formule = $id . Nous pouvons voir que la valeur dans la colonne Nom Complet pour le record avec l\u2019ID de Ligne = 2 est Dowbakin, Daniella . Si nous revenons \u00e0 nos param\u00e8tres d\u2019origine pour la colonne Instructeur de la table Classes, o\u00f9 Nom Complet \u00e9tait s\u00e9lectionn\u00e9 sous Afficher la Colonne, nous voyons que la valeur de Nom Complet associ\u00e9e \u00e0 Staff[2] est Dowbakin, Daniella . Filtrer les choix de R\u00e9f\u00e9rence dans la liste d\u00e9roulante # Lors de la saisie de donn\u00e9es dans une colonne de r\u00e9f\u00e9rence, vous verrez une liste d\u00e9roulante de toutes les valeurs disponibles \u00e0 choisir. Parfois, la liste peut devenir longue et, dans certains cas, confuse. Par exemple, disons que vous suivez les changements de population dans les 1 000 villes les plus peupl\u00e9es du monde. Lors de la saisie d\u2019une ville dans la colonne de r\u00e9f\u00e9rence pour la s\u00e9lection de la ville, la liste d\u00e9roulante affiche toutes les 1 000 villes. Il serait utile que la liste d\u00e9roulante des choix de villes soit filtr\u00e9e en fonction du pays s\u00e9lectionn\u00e9 dans la colonne Pays . Pour filtrer la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence, s\u00e9lectionnez la colonne de r\u00e9f\u00e9rence puis d\u00e9finissez une \u201cCondition de Liste D\u00e9roulante\u201d dans le Panneau de Cr\u00e9ation sous l\u2019onglet \u201cColonne\u201d. Vous pouvez filtrer le choix de la liste d\u00e9roulante en \u00e9crivant une condition sous forme de formule. L\u2019attribut choice fait r\u00e9f\u00e9rence aux choix dans la liste d\u00e9roulante. Dans ce cas, la formule est choice.Country == $Country . Pourquoi cela a-t-il fonctionn\u00e9 ? La colonne de ville est une colonne de r\u00e9f\u00e9rence pointant vers une table Cities qui correspond aux pays et aux villes. Cette table ressemble \u00e0 ceci. La condition de formule choice.Country == $Country recherche le pays de chaque choix dans la table Cities en utilisant un lookup de r\u00e9f\u00e9rence , puis compare ces pays \u00e0 la valeur entr\u00e9e dans la colonne Country de la table Population Rankings . La liste d\u00e9roulante affiche maintenant uniquement les choix (c\u2019est-\u00e0-dire les villes) dont le pays est \u00e9gal au pays entr\u00e9 dans la colonne Country . L\u2019attribut choice peut \u00e9galement \u00eatre utilis\u00e9 lors de la d\u00e9finition des conditions de filtre de liste d\u00e9roulante pour les colonnes Choice et Choice List . Notez que parce que le filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence est \u00e9crit sous forme de formules, le filtrage peut \u00eatre tr\u00e8s flexible et granulaire. Les utilisateurs exp\u00e9riment\u00e9s avec les permissions avanc\u00e9es peuvent remarquer des similitudes dans la fa\u00e7on de penser \u00e0 l\u2019\u00e9criture de ces formules.","title":"Reference columns"},{"location":"col-refs/#reference-et-listes-de-references","text":"","title":"R\u00e9f\u00e9rence et Listes de R\u00e9f\u00e9rences"},{"location":"col-refs/#vue-densemble","text":"Les colonnes R\u00e9f\u00e9rence et Liste de R\u00e9f\u00e9rences dans Grist permettent \u00e0 une table de cr\u00e9er une r\u00e9f\u00e9rence explicite \u00e0 une autre. Dans le monde des bases de donn\u00e9es, cela est similaire \u00e0 une cl\u00e9 \u00e9trang\u00e8re. Dans le monde des tableurs, cela est similaire \u00e0 un VLOOKUP , mais beaucoup plus puissant et plus facile \u00e0 utiliser. Dans ce guide, nous utiliserons le terme table sous-jacente pour la table qui liste toutes les valeurs disponibles, et table de r\u00e9f\u00e9rence pour la table qui utilise ces valeurs.","title":"Vue d’ensemble"},{"location":"col-refs/#creer-une-nouvelle-colonne-de-reference","text":"Supposons que nous ayons un document avec deux tables, Clients et Projets. La table Clients liste nos clients - noms, contacts, dates de signature - et la table Projets liste les projets que nous r\u00e9alisons pour les clients. Il y a toutes sortes de choses que Grist peut faire pour nous si nous lui indiquons que la colonne Client dans la table Projets fait r\u00e9f\u00e9rence aux clients list\u00e9s dans la table Clients. Nous pouvons le faire en convertissant la colonne Client en une \u201ccolonne de r\u00e9f\u00e9rence\u201d. Ouvrez le panneau lat\u00e9ral des Options de Colonne (voir Sp\u00e9cifier un type ) et d\u00e9finissez le \u201cType de Colonne\u201d sur \u201cR\u00e9f\u00e9rence\u201d. Ajustez l\u2019option \u201cDonn\u00e9es de la Table\u201d pour \u00eatre la table correcte que vous souhaitez croiser, et l\u2019option \u201cAfficher la Colonne\u201d pour correspondre \u00e0 la colonne de cette table que vous souhaitez afficher. Ensuite, cliquez sur \u201cAppliquer\u201d lorsque vous \u00eates satisfait du r\u00e9sultat. Comprendre la r\u00e9f\u00e9rence La valeur de la colonne fait toujours r\u00e9f\u00e9rence \u00e0 l\u2019ensemble du record dans la table sous-jacente. La valeur affich\u00e9e peut \u00eatre n\u2019importe quelle colonne de ce record, comme s\u00e9lectionn\u00e9 dans Afficher la Colonne . Vous pouvez \u00e9galement inclure des colonnes suppl\u00e9mentaires \u00e0 afficher comme expliqu\u00e9 plus tard. Dans notre exemple, vous pouvez voir des petites ic\u00f4nes de lien appara\u00eetre dans les cellules de la colonne Client, montrant qu\u2019elles ont \u00e9t\u00e9 correctement crois\u00e9es avec la table Clients. Une fois le type de colonne d\u00e9fini, vous pouvez commencer \u00e0 taper dedans ou double-cliquer pour voir une liste d\u00e9roulante de toutes les valeurs disponibles. Notez que la table Clients et la colonne Client sont li\u00e9es par le type de colonne plut\u00f4t que par le nom. Elles peuvent \u00eatre nomm\u00e9es comme vous le souhaitez. Rep\u00e9rer les colonnes de r\u00e9f\u00e9rence Vous pouvez dire que les valeurs dans une colonne repr\u00e9sentent une r\u00e9f\u00e9rence par l\u2019ic\u00f4ne de lien qui appara\u00eet \u00e0 c\u00f4t\u00e9 des valeurs. Si vous tapez accidentellement une valeur qui n\u2019est pas pr\u00e9sente dans la table Clients , sa valeur sera mise en \u00e9vidence comme invalide :","title":"Cr\u00e9er une nouvelle colonne de R\u00e9f\u00e9rence"},{"location":"col-refs/#ajouter-des-valeurs-a-une-colonne-de-reference","text":"Parfois, il est utile d\u2019ajouter une nouvelle valeur \u00e0 la liste d\u00e9roulante sans avoir \u00e0 passer \u00e0 la table sous-jacente. Les colonnes de r\u00e9f\u00e9rence rendent cela facile ! Il suffit de taper la valeur que vous souhaitez ajouter et de s\u00e9lectionner la valeur + dans la liste d\u00e9roulante. Grist ajoutera automatiquement un nouveau record contenant cette valeur \u00e0 la table sous-jacente et ins\u00e9rera la r\u00e9f\u00e9rence appropri\u00e9e :","title":"Ajouter des valeurs \u00e0 une colonne de R\u00e9f\u00e9rence"},{"location":"col-refs/#convertir-une-colonne-de-texte-en-reference","text":"Lorsque vous travaillez avec des donn\u00e9es existantes, il est courant d\u2019avoir des valeurs textuelles existantes qui devraient vraiment \u00eatre des valeurs de r\u00e9f\u00e9rence. Ne vous inqui\u00e9tez pas, la conversion est simple ! Il suffit de changer le type de colonne en R\u00e9f\u00e9rence et Grist trouvera et substituera automatiquement les valeurs correspondantes par des r\u00e9f\u00e9rences. Si certaines valeurs ne sont pas trouv\u00e9es, elles seront affich\u00e9es comme invalides. Vous pouvez alors soit les ajouter \u00e0 la table sous-jacente, soit s\u00e9lectionner les valeurs appropri\u00e9es pour elles. Dans cet exemple, les trois premi\u00e8res valeurs correspondent parfaitement, mais Forest Labs est invalide car il n\u2019existe pas dans la table Clients :","title":"Convertir une colonne de Texte en R\u00e9f\u00e9rence"},{"location":"col-refs/#inclure","text":"","title":"Inclure"},{"location":"col-refs/#plusieurs-champs-dune-reference","text":"Un grand avantage des colonnes de r\u00e9f\u00e9rence est qu\u2019elles vous permettent d\u2019int\u00e9grer facilement plusieurs colonnes de la table sous-jacente. Dans notre exemple, si vous souhaitez int\u00e9grer $Client.Contact \u00e0 la table Projets , vous pouvez simplement s\u00e9lectionner la colonne Contact dans la section Ajouter des Colonnes R\u00e9f\u00e9renc\u00e9es et elle sera automatiquement ajout\u00e9e \u00e0 la table Projets : Si vous \u00eates \u00e0 l\u2019aise avec les formules, vous pouvez voir que la colonne ajout\u00e9e est simplement la formule =$Client.Contact . Si vous le souhaitez, vous pouvez obtenir le m\u00eame r\u00e9sultat en ajoutant manuellement la colonne de formule. Vous pouvez \u00e9galement utiliser d\u2019autres champs de la table Clients en r\u00e9f\u00e9rant \u00e0 $Client dans les formules de la table Projets . Notez que dans les formules, nous utilisons le nom de la colonne de r\u00e9f\u00e9rence ( $Client ) pour faire r\u00e9f\u00e9rence \u00e0 un record li\u00e9, et non le nom de la table (qui est Clients ici). Ne laissez pas la similarit\u00e9 des noms dans cet exemple vous confondre. Utiliser des r\u00e9f\u00e9rences dans les formules Vous avez peut-\u00eatre remarqu\u00e9 que la table sous-jacente est Clients (pluriel) mais que la formule est $Client.Contact (singulier). C\u2019est parce que la formule se r\u00e9f\u00e8re \u00e0 la colonne de r\u00e9f\u00e9rence, pas \u00e0 la table sous-jacente. Dans notre exemple, la colonne de r\u00e9f\u00e9rence est Client .","title":"plusieurs champs d’une r\u00e9f\u00e9rence"},{"location":"col-refs/#creer-une-nouvelle-colonne-de-liste-de-references","text":"Jusqu\u2019\u00e0 pr\u00e9sent, notre exemple ne traitait que des projets ayant un seul client. Supposons que nous ayons \u00e9galement des projets avec plusieurs clients, et que nous souhaitions maintenir des r\u00e9f\u00e9rences \u00e0 tous depuis la colonne Client de la table Projets . Nous pouvons indiquer \u00e0 Grist que la colonne Client contient plusieurs r\u00e9f\u00e9rences en changeant son type en \u201cListe de R\u00e9f\u00e9rences\u201d. Ce type de colonne peut r\u00e9f\u00e9rencer plusieurs records, et peut \u00e9galement \u00eatre consid\u00e9r\u00e9 comme une s\u00e9lection multiple. Ouvrez le panneau lat\u00e9ral des Options de Colonne (voir Sp\u00e9cifier un type ) et d\u00e9finissez le \u201cType de Colonne\u201d de Client sur \u201cListe de R\u00e9f\u00e9rences\u201d. Grist convertira automatiquement toutes vos r\u00e9f\u00e9rences existantes en listes de r\u00e9f\u00e9rences. Une fois que vous \u00eates satisfait du r\u00e9sultat, cliquez simplement sur \u201cAppliquer\u201d et la colonne Client sera pr\u00eate \u00e0 accepter autant de clients que vos projets en ont besoin.","title":"Cr\u00e9er une nouvelle colonne de Liste de R\u00e9f\u00e9rences"},{"location":"col-refs/#modifier-les-valeurs-dans-une-colonne-de-liste-de-references","text":"Pour apporter des modifications \u00e0 une cellule de Liste de R\u00e9f\u00e9rences, double-cliquez simplement sur la cellule ou appuyez sur la touche Entr\u00e9e apr\u00e8s avoir s\u00e9lectionn\u00e9 la cellule que vous souhaitez modifier. Vous pouvez \u00e9galement commencer \u00e0 taper apr\u00e8s avoir s\u00e9lectionn\u00e9 une cellule si vous souhaitez \u00e9craser tout contenu existant. Cela ouvrira un \u00e9diteur comme celui de l\u2019exemple ci-dessous. Comme avec les colonnes de R\u00e9f\u00e9rence, le menu de saisie semi-automatique se remplira de suggestions au fur et \u00e0 mesure que vous tapez. Si vous tapez une valeur qui n\u2019est pas pr\u00e9sente dans la table r\u00e9f\u00e9renc\u00e9e, vous pouvez s\u00e9lectionner la valeur + pour ajouter une nouvelle ligne \u00e0 la table r\u00e9f\u00e9renc\u00e9e avec votre valeur. Pour supprimer des r\u00e9f\u00e9rences existantes, appuyez simplement sur la touche Retour arri\u00e8re , ou d\u00e9placez votre curseur sur une r\u00e9f\u00e9rence et cliquez sur l\u2019ic\u00f4ne X . Vous pouvez \u00e9galement r\u00e9organiser les r\u00e9f\u00e9rences dans l\u2019\u00e9diteur en les faisant glisser avec votre souris. Pour enregistrer vos modifications et fermer l\u2019\u00e9diteur, appuyez sur Entr\u00e9e ou Tabulation , ou cliquez n\u2019importe o\u00f9 en dehors de l\u2019\u00e9diteur. Pour fermer l\u2019\u00e9diteur et annuler toutes les modifications que vous avez apport\u00e9es, appuyez sur \u00c9chap .","title":"Modifier les valeurs dans une colonne de Liste de R\u00e9f\u00e9rences"},{"location":"col-refs/#comprendre-les-colonnes-de-reference","text":"Les cellules dans une colonne de r\u00e9f\u00e9rence identifient toujours un record entier dans la table r\u00e9f\u00e9renc\u00e9e. Pour plus de commodit\u00e9, vous pouvez s\u00e9lectionner quelle colonne de ce record afficher en d\u00e9finissant \u201cAFFICHER LA COLONNE\u201d. Cependant, la valeur de la cellule est toujours l\u2019ID unique d\u2019un record. De m\u00eame, les Listes de R\u00e9f\u00e9rences stockent une liste d\u2019IDs de records. Qu\u2019est-ce que cela signifie vraiment ? Jetons un coup d\u2019\u0153il au mod\u00e8le Inscription aux Cours . Dans la table Classes, la colonne Instructeur est une colonne de r\u00e9f\u00e9rence qui fait r\u00e9f\u00e9rence aux donn\u00e9es de la table Staff. Le Nom Complet est s\u00e9lectionn\u00e9 sous \u2018Afficher la Colonne\u2019 et est utilis\u00e9 comme \u00e9tiquette pour repr\u00e9senter le record de la table Staff qui est r\u00e9f\u00e9renc\u00e9 ici. Nous pouvons changer cette \u00e9tiquette pour n\u2019importe quelle autre valeur contenue dans le record. Changeons-la en \u2018ID de Ligne\u2019. L\u2019ID de ligne est ce qui est r\u00e9ellement stock\u00e9 dans la colonne de R\u00e9f\u00e9rence ou de Liste de R\u00e9f\u00e9rences. Avec cet ID, nous pouvons r\u00e9cup\u00e9rer toutes les donn\u00e9es associ\u00e9es \u00e0 ce record. Dans la premi\u00e8re ligne de la table Classes, nous voyons Staff[2] comme valeur dans la colonne Instructeur. Cela repr\u00e9sente le record dans la table Staff avec l\u2019ID de Ligne = 2 . Nous pouvons naviguer vers la table Staff et voir quel record est assign\u00e9 \u00e0 l\u2019ID de Ligne = 2 . Pour voir l\u2019ID unique d\u2019un record, ajoutez une nouvelle colonne avec la formule = $id . Nous pouvons voir que la valeur dans la colonne Nom Complet pour le record avec l\u2019ID de Ligne = 2 est Dowbakin, Daniella . Si nous revenons \u00e0 nos param\u00e8tres d\u2019origine pour la colonne Instructeur de la table Classes, o\u00f9 Nom Complet \u00e9tait s\u00e9lectionn\u00e9 sous Afficher la Colonne, nous voyons que la valeur de Nom Complet associ\u00e9e \u00e0 Staff[2] est Dowbakin, Daniella .","title":"Comprendre les colonnes de r\u00e9f\u00e9rence"},{"location":"col-refs/#filtrer-les-choix-de-reference-dans-la-liste-deroulante","text":"Lors de la saisie de donn\u00e9es dans une colonne de r\u00e9f\u00e9rence, vous verrez une liste d\u00e9roulante de toutes les valeurs disponibles \u00e0 choisir. Parfois, la liste peut devenir longue et, dans certains cas, confuse. Par exemple, disons que vous suivez les changements de population dans les 1 000 villes les plus peupl\u00e9es du monde. Lors de la saisie d\u2019une ville dans la colonne de r\u00e9f\u00e9rence pour la s\u00e9lection de la ville, la liste d\u00e9roulante affiche toutes les 1 000 villes. Il serait utile que la liste d\u00e9roulante des choix de villes soit filtr\u00e9e en fonction du pays s\u00e9lectionn\u00e9 dans la colonne Pays . Pour filtrer la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence, s\u00e9lectionnez la colonne de r\u00e9f\u00e9rence puis d\u00e9finissez une \u201cCondition de Liste D\u00e9roulante\u201d dans le Panneau de Cr\u00e9ation sous l\u2019onglet \u201cColonne\u201d. Vous pouvez filtrer le choix de la liste d\u00e9roulante en \u00e9crivant une condition sous forme de formule. L\u2019attribut choice fait r\u00e9f\u00e9rence aux choix dans la liste d\u00e9roulante. Dans ce cas, la formule est choice.Country == $Country . Pourquoi cela a-t-il fonctionn\u00e9 ? La colonne de ville est une colonne de r\u00e9f\u00e9rence pointant vers une table Cities qui correspond aux pays et aux villes. Cette table ressemble \u00e0 ceci. La condition de formule choice.Country == $Country recherche le pays de chaque choix dans la table Cities en utilisant un lookup de r\u00e9f\u00e9rence , puis compare ces pays \u00e0 la valeur entr\u00e9e dans la colonne Country de la table Population Rankings . La liste d\u00e9roulante affiche maintenant uniquement les choix (c\u2019est-\u00e0-dire les villes) dont le pays est \u00e9gal au pays entr\u00e9 dans la colonne Country . L\u2019attribut choice peut \u00e9galement \u00eatre utilis\u00e9 lors de la d\u00e9finition des conditions de filtre de liste d\u00e9roulante pour les colonnes Choice et Choice List . Notez que parce que le filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence est \u00e9crit sous forme de formules, le filtrage peut \u00eatre tr\u00e8s flexible et granulaire. Les utilisateurs exp\u00e9riment\u00e9s avec les permissions avanc\u00e9es peuvent remarquer des similitudes dans la fa\u00e7on de penser \u00e0 l\u2019\u00e9criture de ces formules.","title":"Filtrer les choix de R\u00e9f\u00e9rence dans la liste d\u00e9roulante"},{"location":"col-transform/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Transformations de Colonne # Grist offre deux fa\u00e7ons de transformer toutes les valeurs d\u2019une colonne. L\u2019une consiste \u00e0 changer le type de la colonne, et l\u2019autre \u00e0 appliquer une transformation bas\u00e9e sur une formule. Conversions de type # Lors de la conversion entre diff\u00e9rents types de colonnes, Grist adopte un comportement par d\u00e9faut raisonnable, mais rend ce comportement facile \u00e0 r\u00e9viser. Par exemple, supposons que vous ayez une colonne d\u2019entiers. Pour convertir cette colonne en texte, ouvrez les options de la colonne comme d\u00e9crit dans Sp\u00e9cifier un type , et trouvez la section de type de colonne. Changez le type de colonne en texte dans le menu d\u00e9roulant. Vous remarquerez qu\u2019une bo\u00eete de dialogue \u201cannuler/r\u00e9viser/appliquer\u201d s\u2019ouvre \u00e0 c\u00f4t\u00e9 du menu d\u00e9roulant. Pour changer la fa\u00e7on dont la conversion est effectu\u00e9e, cliquez sur R\u00e9viser . Vous verrez une bo\u00eete de formule avec la m\u00e9thode de conversion par d\u00e9faut, grist.Text.typeConvert($tally) . Cela signifie \u201cfaire la conversion par d\u00e9faut en texte pour la colonne tally \u201d. Vous pouvez remplacer cela par n\u2019importe quelle formule de votre choix. Par exemple : Le code pour convertir en lignes unicode est laiss\u00e9 comme exercice au lecteur. Pour pr\u00e9visualiser les r\u00e9sultats de la conversion, cliquez sur \u201cpr\u00e9visualiser\u201d. Lorsque vous \u00eates satisfait de la conversion, cliquez sur \u201cappliquer\u201d. Pour abandonner la conversion, cliquez sur \u201cannuler\u201d. Transformations bas\u00e9es sur des formules # Les tableurs sont des outils pratiques pour nettoyer les donn\u00e9es en utilisant des formules . Par exemple, imaginez que vous ayez des codes postaux qui ont perdu leurs z\u00e9ros initiaux - vous pouvez facilement les reformater avec une formule rapide : Nous pourrions maintenant figer les r\u00e9sultats et supprimer les donn\u00e9es originales si nous n\u2019en avons plus besoin. Si vous savez que vous allez jeter les donn\u00e9es originales comme cela, Grist offre des transformations de colonne comme un moyen plus rapide de modifier syst\u00e9matiquement toutes les cellules d\u2019une colonne. Trouvez la section \u201cTransformer\u201d en bas du panneau lat\u00e9ral des options de colonne (voir Colonnes pour savoir comment ouvrir ce panneau). Lorsque vous cliquez sur le bouton orange \u201c\u00e9clair\u201d, Grist vous propose une formule, return $zip dans ce cas. Vous pouvez modifier cette formule pour apporter un changement \u00e0 la colonne s\u00e9lectionn\u00e9e. Par exemple, return $zip + 1 ajouterait un au code postal. Vous pouvez pr\u00e9visualiser l\u2019effet de votre formule, et lorsque vous \u00eates satisfait, appuyez sur \u201cAppliquer\u201d. Dans notre cas, o\u00f9 nous voulons ajouter des z\u00e9ros initiaux, nous devons d\u2019abord changer notre type de colonne en Texte (en supposant qu\u2019il soit actuellement Entier - s\u2019il est Num\u00e9rique , convertissez-le d\u2019abord en Entier puis en Texte pour \u00e9viter les points d\u00e9cimaux). Une fois cela fait, nous pouvons utiliser notre formule pour ajouter des z\u00e9ros initiaux : Lorsque vous \u00eates satisfait, appuyez sur \u201cAppliquer\u201d pour remplacer les valeurs des cellules par leurs nouvelles versions. De m\u00eame, la colonne response pourrait \u00eatre transform\u00e9e avec la formule en valeurs vrai/faux avec $response[0] == 'y' , puis d\u00e9finie comme une colonne \u00e0 bascule .","title":"Transformations"},{"location":"col-transform/#transformations-de-colonne","text":"Grist offre deux fa\u00e7ons de transformer toutes les valeurs d\u2019une colonne. L\u2019une consiste \u00e0 changer le type de la colonne, et l\u2019autre \u00e0 appliquer une transformation bas\u00e9e sur une formule.","title":""},{"location":"col-transform/#conversions-de-type","text":"Lors de la conversion entre diff\u00e9rents types de colonnes, Grist adopte un comportement par d\u00e9faut raisonnable, mais rend ce comportement facile \u00e0 r\u00e9viser. Par exemple, supposons que vous ayez une colonne d\u2019entiers. Pour convertir cette colonne en texte, ouvrez les options de la colonne comme d\u00e9crit dans Sp\u00e9cifier un type , et trouvez la section de type de colonne. Changez le type de colonne en texte dans le menu d\u00e9roulant. Vous remarquerez qu\u2019une bo\u00eete de dialogue \u201cannuler/r\u00e9viser/appliquer\u201d s\u2019ouvre \u00e0 c\u00f4t\u00e9 du menu d\u00e9roulant. Pour changer la fa\u00e7on dont la conversion est effectu\u00e9e, cliquez sur R\u00e9viser . Vous verrez une bo\u00eete de formule avec la m\u00e9thode de conversion par d\u00e9faut, grist.Text.typeConvert($tally) . Cela signifie \u201cfaire la conversion par d\u00e9faut en texte pour la colonne tally \u201d. Vous pouvez remplacer cela par n\u2019importe quelle formule de votre choix. Par exemple : Le code pour convertir en lignes unicode est laiss\u00e9 comme exercice au lecteur. Pour pr\u00e9visualiser les r\u00e9sultats de la conversion, cliquez sur \u201cpr\u00e9visualiser\u201d. Lorsque vous \u00eates satisfait de la conversion, cliquez sur \u201cappliquer\u201d. Pour abandonner la conversion, cliquez sur \u201cannuler\u201d.","title":"Conversions de type"},{"location":"col-transform/#transformations-basees-sur-des-formules","text":"Les tableurs sont des outils pratiques pour nettoyer les donn\u00e9es en utilisant des formules . Par exemple, imaginez que vous ayez des codes postaux qui ont perdu leurs z\u00e9ros initiaux - vous pouvez facilement les reformater avec une formule rapide : Nous pourrions maintenant figer les r\u00e9sultats et supprimer les donn\u00e9es originales si nous n\u2019en avons plus besoin. Si vous savez que vous allez jeter les donn\u00e9es originales comme cela, Grist offre des transformations de colonne comme un moyen plus rapide de modifier syst\u00e9matiquement toutes les cellules d\u2019une colonne. Trouvez la section \u201cTransformer\u201d en bas du panneau lat\u00e9ral des options de colonne (voir Colonnes pour savoir comment ouvrir ce panneau). Lorsque vous cliquez sur le bouton orange \u201c\u00e9clair\u201d, Grist vous propose une formule, return $zip dans ce cas. Vous pouvez modifier cette formule pour apporter un changement \u00e0 la colonne s\u00e9lectionn\u00e9e. Par exemple, return $zip + 1 ajouterait un au code postal. Vous pouvez pr\u00e9visualiser l\u2019effet de votre formule, et lorsque vous \u00eates satisfait, appuyez sur \u201cAppliquer\u201d. Dans notre cas, o\u00f9 nous voulons ajouter des z\u00e9ros initiaux, nous devons d\u2019abord changer notre type de colonne en Texte (en supposant qu\u2019il soit actuellement Entier - s\u2019il est Num\u00e9rique , convertissez-le d\u2019abord en Entier puis en Texte pour \u00e9viter les points d\u00e9cimaux). Une fois cela fait, nous pouvons utiliser notre formule pour ajouter des z\u00e9ros initiaux : Lorsque vous \u00eates satisfait, appuyez sur \u201cAppliquer\u201d pour remplacer les valeurs des cellules par leurs nouvelles versions. De m\u00eame, la colonne response pourrait \u00eatre transform\u00e9e avec la formule en valeurs vrai/faux avec $response[0] == 'y' , puis d\u00e9finie comme une colonne \u00e0 bascule .","title":"Transformations bas\u00e9es sur des formules"},{"location":"col-types/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Colonnes et types de donn\u00e9es # Ajouter et supprimer des colonnes # Chaque table Grist, lorsqu\u2019elle est cr\u00e9\u00e9e pour la premi\u00e8re fois, a trois colonnes appel\u00e9es A, B et C. Pour renommer une colonne, survolez l\u2019en-t\u00eate de la colonne, cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cRenommer la colonne\u201d (vous pouvez \u00e9galement cliquer deux fois sur l\u2019en-t\u00eate de la colonne). Pour supprimer une colonne, survolez l\u2019en-t\u00eate de la colonne, cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cSupprimer la colonne\u201d. Pour ajouter une colonne, cliquez sur le symbole \u201c+\u201d dans la ligne d\u2019en-t\u00eate pour ouvrir le menu \u201cAjouter une colonne\u201d. La premi\u00e8re option dans le menu, \u201cAjouter une colonne\u201d, ajoutera une nouvelle colonne de donn\u00e9es vide \u00e0 votre table. Si vous savez quel type de colonne vous avez besoin, l\u2019option suivante vous permet d\u2019assigner un type \u00e0 votre nouvelle colonne. S\u00e9lectionnez un type de colonne dans le menu d\u00e9roulant. La troisi\u00e8me option, \u201cAjouter une colonne de formule\u201d, ajoutera une nouvelle colonne de formule avec la bo\u00eete d\u2019entr\u00e9e de formule imm\u00e9diatement ouverte afin que vous puissiez commencer \u00e0 entrer votre formule sans clics suppl\u00e9mentaires. \u201cColonnes cach\u00e9es\u201d s\u2019agrandit pour montrer une liste de colonnes cach\u00e9es de cette vue qui peuvent \u00eatre rapidement ajout\u00e9es \u00e0 nouveau. \u201cAppariements\u201d vous permet d\u2019ajouter des colonnes de donn\u00e9es provenant de tables li\u00e9es. Vous pouvez utiliser des colonnes de r\u00e9f\u00e9rence pour relier des donn\u00e9es dans diff\u00e9rentes tables. En savoir plus sur R\u00e9f\u00e9rences et Appariements . \u201cRaccourcis\u201d r\u00e9pertorie les fonctions de formule d\u2019initialisation les plus fr\u00e9quemment utilis\u00e9es. En savoir plus sur chaque option de raccourci aux liens ci-dessous : Horodatage Autorit\u00e9 D\u00e9tecter les doublons dans\u2026 UUID R\u00e9organiser les colonnes # Pour r\u00e9organiser une colonne, s\u00e9lectionnez d\u2019abord la colonne si elle n\u2019est pas d\u00e9j\u00e0 s\u00e9lectionn\u00e9e, en cliquant sur l\u2019en-t\u00eate de la colonne. Ensuite, cliquez et maintenez l\u2019en-t\u00eate de la colonne. Apr\u00e8s une seconde ou deux, vous pourrez faire glisser l\u2019ensemble de la colonne vers son nouvel emplacement. Une autre fa\u00e7on de r\u00e9organiser les colonnes est via les options de vue : Dans la section des colonnes visibles, les colonnes peuvent \u00eatre d\u00e9plac\u00e9es librement pour les r\u00e9organiser. Vous pouvez \u00e9galement cacher des colonnes ici. Renommer les colonnes # Vous pouvez renommer les colonnes de plusieurs mani\u00e8res. Une fa\u00e7on est de double-cliquer sur un en-t\u00eate de colonne. Ensuite, vous pouvez renommer la colonne ou ajouter une description de colonne. Vous pouvez \u00e9galement survoler l\u2019en-t\u00eate de la colonne, cliquer sur le menu d\u00e9roulant, puis s\u00e9lectionner \u201cRenommer la colonne\u201d. Cela ouvre la m\u00eame fen\u00eatre contextuelle que celle vue ci-dessus. S\u00e9lectionner \u201cOptions de colonne\u201d dans le m\u00eame menu d\u00e9roulant ouvre le panneau de cr\u00e9ation. \u00c0 partir de l\u00e0, vous pouvez modifier l\u2019\u00e9tiquette de la colonne, affich\u00e9e en haut ou ajouter une description. Un avantage de cette m\u00e9thode est que vous pouvez \u00e9galement contr\u00f4ler l\u2019identifiant donn\u00e9 \u00e0 la colonne dans les formules. Par d\u00e9faut, cela est bas\u00e9 sur le nom du champ, avec tous les caract\u00e8res que Python n\u2019aime pas remplac\u00e9s par \u201c_\u201c, et un num\u00e9ro ajout\u00e9 si n\u00e9cessaire pour garder le nom unique dans votre table. Si vous n\u2019aimez pas cet identifiant, vous pouvez le changer, bien qu\u2019il doive toujours \u00eatre compatible avec Python. Cliquez sur l\u2019ic\u00f4ne de lien pour rendre le champ ID modifiable, puis entrez le nouvel ID de colonne. Mise en forme des colonnes # Les styles d\u2019en-t\u00eate et de cellule peuvent \u00eatre modifi\u00e9s sous l\u2019onglet Colonne du panneau de cr\u00e9ation. Lorsque vous ouvrez le menu de style, vous avez la possibilit\u00e9 d\u2019appliquer un formatage de texte ainsi que des couleurs de texte et de remplissage. Si vous souhaitez plus d\u2019options de couleur, cliquez sur la bo\u00eete de couleur de remplissage puis trouvez la teinte que vous souhaitez. Si vous avez une couleur sp\u00e9cifique que vous souhaitez utiliser, vous pouvez entrer le code hexad\u00e9cimal, les valeurs RGB ou HSL. Le style de cellule peut \u00e9galement \u00eatre modifi\u00e9 en fonction de r\u00e8gles conditionnelles. En savoir plus sur Mise en forme conditionnelle . Sp\u00e9cifier un type # Les colonnes Grist ont des types, similaires \u00e0 d\u2019autres feuilles de calcul ou bases de donn\u00e9es. Le type d\u2019une colonne contr\u00f4le son apparence et l\u2019aide que Grist vous offrira lors de l\u2019\u00e9dition des cellules. Lorsque vous cr\u00e9ez une nouvelle colonne, elle a initialement le type Any . Lorsque vous entrez dans la premi\u00e8re cellule de la colonne, Grist essaie de restreindre ce type. Si vous entrez un nombre, la colonne sera chang\u00e9e en type Numeric , qui est align\u00e9 \u00e0 droite par d\u00e9faut. Si vous entrez quelque chose qui ne ressemble pas \u00e0 un nombre, la colonne sera chang\u00e9e en type Text , qui est align\u00e9 \u00e0 gauche par d\u00e9faut. Pour inspecter le type d\u2019une colonne, survolez l\u2019en-t\u00eate de la colonne, puis cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cOptions de colonne\u201d. La section \u201cType de colonne\u201d est ce que vous recherchez. Vous voudrez souvent contr\u00f4ler le type de colonne manuellement. Vous pouvez le changer dans la section \u201cType de colonne\u201d. Par exemple, ici nous d\u00e9finissons une colonne pleine de r\u00e9ponses \u201coui\u201d et \u201cnon\u201d comme \u00e9tant de type Toggle : Un avantage de faire cela est que Grist peut maintenant vous offrir des moyens de visualiser la colonne qui sont sp\u00e9cialis\u00e9s pour les valeurs de type on/off. Chaque type de colonne a diff\u00e9rentes options dans la section \u201cFormat de cellule\u201d du panneau lat\u00e9ral : Quel que soit le type de colonne, vous pouvez entrer n\u2019importe quelle valeur dans les cellules. Si une valeur entr\u00e9e est incompatible avec le type d\u00e9fini, la cellule sera mise en surbrillance avec une erreur (et les colonnes r\u00e9f\u00e9renc\u00e9es par la valeur invalide afficheront \u00e9galement une erreur) : Types pris en charge # Grist prend en charge les types suivants : Type Description Texte ( Par d\u00e9faut ) Toute cha\u00eene de texte. Num\u00e9rique Nombres \u00e0 virgule flottante. Entier Entiers (nombres entiers). Basculer Bool\u00e9en (Vrai / Faux) Date Date valide (sans composant horaire). DateHeure Date + heure valide. Choix Valeur unique d\u2019une liste de valeurs valides pr\u00e9d\u00e9finies. Liste de choix Plusieurs valeurs d\u2019une liste de valeurs valides pr\u00e9d\u00e9finies. R\u00e9f\u00e9rence Une colonne de r\u00e9f\u00e9rence vers une autre table. Liste de r\u00e9f\u00e9rences Une liste de r\u00e9f\u00e9rences vers une autre table. Pi\u00e8ce jointe Cellules o\u00f9 vous pouvez placer des fichiers ou des images. Colonnes de texte # Vous pouvez mettre n\u2019importe quel texte que vous aimez dans ce type de colonne. Pour la mise en forme, vous pouvez contr\u00f4ler l\u2019alignement et le retour \u00e0 la ligne, la couleur du texte et la couleur de fond. Si la colonne est utilis\u00e9e pour stocker des liens web, vous pouvez activer le formatage \u201cHyperLink\u201d pour rendre les liens plus jolis et inclure une ic\u00f4ne de lien cliquable. Hyperliens # Lorsque une colonne de texte utilise le formatage \u201cHyperLink\u201d, les valeurs sont format\u00e9es comme suit : https://getgrist.com affichera https://getgrist.com . Grist Labs https://getgrist.com affichera Grist Labs (liant \u00e0 \u201chttps://getgrist.com\u201d avec \u201cGrist Labs\u201d comme texte). Email Help mailto:support@getgrist.com affichera Email Help , un lien qui ouvrirait un programme de messagerie pour composer un email \u00e0 support@getgrist.com. En g\u00e9n\u00e9ral, la valeur jusqu\u2019au dernier espace est utilis\u00e9e comme texte du lien, tandis que le dernier mot est utilis\u00e9 comme destination du lien. Le formatage des liens est particuli\u00e8rement utile lorsque les liens sont g\u00e9n\u00e9r\u00e9s \u00e0 l\u2019aide d\u2019une formule telle que : $Company + \" \" + $Website Colonnes num\u00e9riques # Ce type est pour les nombres, y compris les nombres \u00e0 virgule flottante. En plus de contr\u00f4ler l\u2019alignement et la couleur, vous pouvez choisir le format de nombre, et le nombre minimum et maximum de chiffres \u00e0 afficher apr\u00e8s la virgule. Choisir l\u2019option \u201cSpinner\u201d pour le FORMAT DE CELLULE affichera des fl\u00e8ches dans chaque cellule pour augmenter/diminuer le nombre. Les options sous FORMAT DE NOMBRE incluent : $ : Format pour les montants en devise, tels que les dollars ou les euros. S\u00e9lectionner le $ ajoutera un pr\u00e9fixe de devise, des s\u00e9parateurs de milliers, et par d\u00e9faut \u00e0 2 chiffres apr\u00e8s la virgule. Cela ouvrira \u00e9galement un s\u00e9lecteur de devise pour les devises internationales. D\u00e9finir la devise par d\u00e9faut Vous pouvez d\u00e9finir le fuseau horaire, la locale et la devise par d\u00e9faut d\u2019un document dans Param\u00e8tres du document . , : Activer l\u2019affichage des s\u00e9parateurs de milliers. % : Afficher les nombres en pourcentages. Par exemple, \u201c0.5\u201d s\u2019afficherait comme \u201c50%\u201d. Exp : Afficher les nombres en notation exponentielle (ou scientifique). Par exemple, \u201c1234\u201d serait affich\u00e9 comme \u201c1.234E3\u201d. (-) : Afficher les nombres n\u00e9gatifs entre parenth\u00e8ses, sans signe moins devant. Ceci est couramment utilis\u00e9 en comptabilit\u00e9, et g\u00e9n\u00e9ralement combin\u00e9 avec les formats $ ou , . Colonnes enti\u00e8res # Ce type est strictement pour les nombres entiers. Il a les m\u00eames options que le type num\u00e9rique. Colonnes basculantes # Ce type est pour stocker des valeurs vrai/faux. Les valeurs peuvent \u00eatre affich\u00e9es sous forme de texte, de cases \u00e0 cocher ou de commutateurs. Voir \u00e9galement l\u2019exemple dans Sp\u00e9cifier un type . Colonnes de date # Ce type est pour stocker des dates de calendrier (sans composant horaire). Plus de d\u00e9tails dans Travailler avec des dates . Vous pouvez choisir le format des dates, voir la r\u00e9f\u00e9rence de formatage des dates . Colonnes DateHeure # Ce type est pour stocker des dates de calendrier plus l\u2019heure de la journ\u00e9e. Plus de d\u00e9tails dans Travailler avec des dates . Vous pouvez choisir le format des dates, voir la r\u00e9f\u00e9rence de formatage des dates et heures . Vous pouvez \u00e9galement sp\u00e9cifier le fuseau horaire \u00e0 afficher. Si vous souhaitez d\u00e9finir un fuseau horaire par d\u00e9faut pour votre document, vous pouvez le faire dans Param\u00e8tres du document . Colonnes de choix # Ce type est pour stocker une valeur parmi un ensemble de valeurs valides, o\u00f9 vous pouvez sp\u00e9cifier les valeurs disponibles. Il y a un exemple d\u2019utilisation de ce type de colonne dans l\u2019 exemple de CRM l\u00e9ger . Si vous commencez avec une colonne de texte peupl\u00e9e, Grist prendra toutes les valeurs uniques de cette colonne comme choix valides. Vous pouvez ajouter ou supprimer des choix en cliquant soit sur Modifier soit sur la bo\u00eete de choix. Pour ajouter un choix, tapez sa valeur dans le champ de texte en dessous des autres choix et appuyez sur Entr\u00e9e . Pour supprimer un choix, cliquez sur l\u2019ic\u00f4ne de suppression \u00e0 droite du choix ou s\u00e9lectionnez le choix en cliquant dessus, puis appuyez sur Retour arri\u00e8re / Supprimer . Pour appliquer/enregistrer vos modifications, vous pouvez soit cliquer sur le bouton Enregistrer , soit appuyer sur Entr\u00e9e . Pour annuler vos modifications, vous pouvez soit cliquer sur le bouton Annuler , soit appuyer sur \u00c9chap . Cliquer sur le menu d\u00e9roulant de couleur \u00e0 gauche d\u2019un choix ouvrira un s\u00e9lecteur de couleur pour personnaliser la couleur de remplissage et de texte d\u2019un choix. Les modifications de couleurs sont refl\u00e9t\u00e9es dans les cellules et dans le reste de votre document une fois que vous avez enregistr\u00e9 vos modifications. Les choix peuvent \u00eatre r\u00e9organis\u00e9s en cliquant et en les faisant glisser, ce qui d\u00e9termine l\u2019ordre dans lequel ils apparaissent lors de la saisie dans une cellule. Vous pouvez \u00e9galement renommer un choix en cliquant dessus et en tapant un nouveau nom. Renommer un choix renomme \u00e9galement toutes les valeurs utilis\u00e9es dans votre document. L\u2019\u00e9diteur de configuration prend en charge de nombreux raccourcis clavier pratiques. Vous pouvez appuyer sur les touches Fl\u00e8che haut et Fl\u00e8che bas pour naviguer entre les choix s\u00e9lectionn\u00e9s ; maintenir la touche Maj pour s\u00e9lectionner plusieurs choix adjacents tout en cliquant ou en utilisant les touches fl\u00e9ch\u00e9es ; et maintenir la touche Commande / Contr\u00f4le pour s\u00e9lectionner plusieurs choix tout en cliquant. Pour s\u00e9lectionner tous les choix, vous pouvez appuyer sur Commande / Contr\u00f4le + A . L\u2019annulation et la r\u00e9tablissement sont \u00e9galement pris en charge dans l\u2019\u00e9diteur de configuration. Lorsque votre curseur est focalis\u00e9 sur le champ de texte de l\u2019\u00e9diteur, vous pouvez appuyer sur Commande / Contr\u00f4le + Z pour annuler votre derni\u00e8re modification, et Commande / Contr\u00f4le + Maj + Z pour la r\u00e9tablir. L\u2019\u00e9diteur de configuration prend \u00e9galement en charge le copier-coller. Pour copier, s\u00e9lectionnez les choix que vous souhaitez copier et appuyez sur Commande / Contr\u00f4le + C . Pour coller, concentrez-vous sur le champ de texte et appuyez sur Commande / Contr\u00f4le + V . Les choix sont coll\u00e9s en bloc si le presse-papiers contient plusieurs lignes de texte. Les choix peuvent \u00e9galement \u00eatre copi\u00e9s \u00e0 partir de l\u2019\u00e9diteur de configuration d\u2019une colonne et coll\u00e9s dans une autre, ce qui copiera \u00e0 la fois les valeurs et leurs couleurs configur\u00e9es. Lors de la saisie dans une cellule de colonne de choix, vos choix configur\u00e9s seront affich\u00e9s dans un menu de saisie semi-automatique. Vous pouvez soit cliquer sur un choix, soit utiliser les touches fl\u00e9ch\u00e9es et Entr\u00e9e pour ajouter un choix \u00e0 une cellule. Si votre saisie n\u2019est pas l\u2019un des choix valides, Grist affichera une option de menu pour l\u2019ajouter facilement comme choix valide et dans la cellule en une seule \u00e9tape. Colonnes de liste de choix # Ce type est pour stocker plusieurs valeurs d\u2019un ensemble de valeurs valides, o\u00f9 vous pouvez sp\u00e9cifier les valeurs disponibles. Si vous commencez avec une colonne de texte peupl\u00e9e, Grist prendra toutes les valeurs uniques de cette colonne comme choix valides. Les colonnes de liste de choix sont configur\u00e9es de la m\u00eame mani\u00e8re que les colonnes de Choix , et prennent en charge le m\u00eame niveau de personnalisation et de raccourcis clavier. Elles diff\u00e8rent par le nombre de choix qu\u2019elles permettent d\u2019entrer dans chaque cellule. Alors que les colonnes de choix ne permettent qu\u2019une seule valeur au maximum dans une cellule, les colonnes de liste de choix en permettent plusieurs. Comme avec les colonnes de choix, lors de la saisie dans une cellule de colonne de liste de choix, les choix valides seront affich\u00e9s dans un menu de saisie semi-automatique. Une fois que vous avez s\u00e9lectionn\u00e9 une valeur, vous pouvez continuer \u00e0 ajouter des choix \u00e0 la m\u00eame cellule. Les choix peuvent \u00eatre r\u00e9organis\u00e9s \u00e0 l\u2019int\u00e9rieur de leurs cellules en cliquant et en les faisant glisser pendant que la cellule est en cours d\u2019\u00e9dition. Vous pouvez \u00e9galement utiliser les touches fl\u00e9ch\u00e9es et la touche Supprimer pour naviguer et supprimer des choix, ou simplement cliquer sur l\u2019ic\u00f4ne de suppression lorsque vous survolez un choix. Filtrer les listes d\u00e9roulantes des colonnes de choix et de liste de choix Lors de la saisie de donn\u00e9es dans une colonne de choix ou de liste de choix, vous verrez une liste d\u00e9roulante de tous les choix disponibles. Parfois, il serait utile de filtrer la liste d\u00e9roulante en fonction d\u2019une condition, comme la valeur dans une autre cellule. \u00c9crire des conditions pour filtrer les listes d\u00e9roulantes de choix est similaire \u00e0 filtrer les listes d\u00e9roulantes des colonnes de r\u00e9f\u00e9rence . Colonnes de r\u00e9f\u00e9rence # Ceci \u00e9tablit une r\u00e9f\u00e9rence crois\u00e9e \u00e0 une autre table. Vous pouvez sp\u00e9cifier la table \u00e0 r\u00e9f\u00e9rencer, et une colonne au sein de cette table \u00e0 afficher. Il y a beaucoup de choses que vous pouvez faire avec ce type de colonne, voir Colonnes de r\u00e9f\u00e9rence pour plus de d\u00e9tails. Colonnes de liste de r\u00e9f\u00e9rences # Comme les Colonnes de r\u00e9f\u00e9rence , mais peuvent stocker plusieurs r\u00e9f\u00e9rences dans une seule cellule. Il y a beaucoup de choses que vous pouvez faire avec ce type de colonne, voir Colonnes de r\u00e9f\u00e9rence pour plus de d\u00e9tails. Colonnes de pi\u00e8ces jointes # Ce type de colonne vous permet d\u2019ins\u00e9rer des fichiers et des images entiers dans des cellules. Lorsque des images sont ajout\u00e9es dans des cellules, une miniature d\u2019aper\u00e7u est affich\u00e9e dans la cellule. La barre \u201cTaille\u201d permet de contr\u00f4ler l\u2019\u00e9chelle de cette miniature. Lorsque vous cr\u00e9ez une colonne de pi\u00e8ces jointes, les cellules de cette colonne auront une ic\u00f4ne de trombone : Lorsque vous cliquez sur une ic\u00f4ne de trombone, vous pouvez s\u00e9lectionner un fichier \u00e0 joindre. Si c\u2019est une image, vous verrez une miniature dans la cellule. Si vous survolez l\u2019image, vous verrez \u00e0 nouveau une ic\u00f4ne de trombone, que vous pouvez utiliser pour ajouter d\u2019autres fichiers dans la m\u00eame cellule. Vous verrez \u00e9galement une ic\u00f4ne \u201c\u0153il ouvert\u201d, qui, lorsqu\u2019elle est cliqu\u00e9e, affiche une vue agrandie de toutes les pi\u00e8ces jointes de la cellule, et vous donne un moyen de les renommer, de les t\u00e9l\u00e9charger ou de les supprimer.","title":"Columns & types"},{"location":"col-types/#colonnes-et-types-de-donnees","text":"","title":"Colonnes et types de donn\u00e9es"},{"location":"col-types/#ajouter-et-supprimer-des-colonnes","text":"Chaque table Grist, lorsqu\u2019elle est cr\u00e9\u00e9e pour la premi\u00e8re fois, a trois colonnes appel\u00e9es A, B et C. Pour renommer une colonne, survolez l\u2019en-t\u00eate de la colonne, cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cRenommer la colonne\u201d (vous pouvez \u00e9galement cliquer deux fois sur l\u2019en-t\u00eate de la colonne). Pour supprimer une colonne, survolez l\u2019en-t\u00eate de la colonne, cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cSupprimer la colonne\u201d. Pour ajouter une colonne, cliquez sur le symbole \u201c+\u201d dans la ligne d\u2019en-t\u00eate pour ouvrir le menu \u201cAjouter une colonne\u201d. La premi\u00e8re option dans le menu, \u201cAjouter une colonne\u201d, ajoutera une nouvelle colonne de donn\u00e9es vide \u00e0 votre table. Si vous savez quel type de colonne vous avez besoin, l\u2019option suivante vous permet d\u2019assigner un type \u00e0 votre nouvelle colonne. S\u00e9lectionnez un type de colonne dans le menu d\u00e9roulant. La troisi\u00e8me option, \u201cAjouter une colonne de formule\u201d, ajoutera une nouvelle colonne de formule avec la bo\u00eete d\u2019entr\u00e9e de formule imm\u00e9diatement ouverte afin que vous puissiez commencer \u00e0 entrer votre formule sans clics suppl\u00e9mentaires. \u201cColonnes cach\u00e9es\u201d s\u2019agrandit pour montrer une liste de colonnes cach\u00e9es de cette vue qui peuvent \u00eatre rapidement ajout\u00e9es \u00e0 nouveau. \u201cAppariements\u201d vous permet d\u2019ajouter des colonnes de donn\u00e9es provenant de tables li\u00e9es. Vous pouvez utiliser des colonnes de r\u00e9f\u00e9rence pour relier des donn\u00e9es dans diff\u00e9rentes tables. En savoir plus sur R\u00e9f\u00e9rences et Appariements . \u201cRaccourcis\u201d r\u00e9pertorie les fonctions de formule d\u2019initialisation les plus fr\u00e9quemment utilis\u00e9es. En savoir plus sur chaque option de raccourci aux liens ci-dessous : Horodatage Autorit\u00e9 D\u00e9tecter les doublons dans\u2026 UUID","title":"Ajouter et supprimer des colonnes"},{"location":"col-types/#reorganiser-les-colonnes","text":"Pour r\u00e9organiser une colonne, s\u00e9lectionnez d\u2019abord la colonne si elle n\u2019est pas d\u00e9j\u00e0 s\u00e9lectionn\u00e9e, en cliquant sur l\u2019en-t\u00eate de la colonne. Ensuite, cliquez et maintenez l\u2019en-t\u00eate de la colonne. Apr\u00e8s une seconde ou deux, vous pourrez faire glisser l\u2019ensemble de la colonne vers son nouvel emplacement. Une autre fa\u00e7on de r\u00e9organiser les colonnes est via les options de vue : Dans la section des colonnes visibles, les colonnes peuvent \u00eatre d\u00e9plac\u00e9es librement pour les r\u00e9organiser. Vous pouvez \u00e9galement cacher des colonnes ici.","title":"R\u00e9organiser les colonnes"},{"location":"col-types/#renommer-les-colonnes","text":"Vous pouvez renommer les colonnes de plusieurs mani\u00e8res. Une fa\u00e7on est de double-cliquer sur un en-t\u00eate de colonne. Ensuite, vous pouvez renommer la colonne ou ajouter une description de colonne. Vous pouvez \u00e9galement survoler l\u2019en-t\u00eate de la colonne, cliquer sur le menu d\u00e9roulant, puis s\u00e9lectionner \u201cRenommer la colonne\u201d. Cela ouvre la m\u00eame fen\u00eatre contextuelle que celle vue ci-dessus. S\u00e9lectionner \u201cOptions de colonne\u201d dans le m\u00eame menu d\u00e9roulant ouvre le panneau de cr\u00e9ation. \u00c0 partir de l\u00e0, vous pouvez modifier l\u2019\u00e9tiquette de la colonne, affich\u00e9e en haut ou ajouter une description. Un avantage de cette m\u00e9thode est que vous pouvez \u00e9galement contr\u00f4ler l\u2019identifiant donn\u00e9 \u00e0 la colonne dans les formules. Par d\u00e9faut, cela est bas\u00e9 sur le nom du champ, avec tous les caract\u00e8res que Python n\u2019aime pas remplac\u00e9s par \u201c_\u201c, et un num\u00e9ro ajout\u00e9 si n\u00e9cessaire pour garder le nom unique dans votre table. Si vous n\u2019aimez pas cet identifiant, vous pouvez le changer, bien qu\u2019il doive toujours \u00eatre compatible avec Python. Cliquez sur l\u2019ic\u00f4ne de lien pour rendre le champ ID modifiable, puis entrez le nouvel ID de colonne.","title":"Renommer les colonnes"},{"location":"col-types/#mise-en-forme-des-colonnes","text":"Les styles d\u2019en-t\u00eate et de cellule peuvent \u00eatre modifi\u00e9s sous l\u2019onglet Colonne du panneau de cr\u00e9ation. Lorsque vous ouvrez le menu de style, vous avez la possibilit\u00e9 d\u2019appliquer un formatage de texte ainsi que des couleurs de texte et de remplissage. Si vous souhaitez plus d\u2019options de couleur, cliquez sur la bo\u00eete de couleur de remplissage puis trouvez la teinte que vous souhaitez. Si vous avez une couleur sp\u00e9cifique que vous souhaitez utiliser, vous pouvez entrer le code hexad\u00e9cimal, les valeurs RGB ou HSL. Le style de cellule peut \u00e9galement \u00eatre modifi\u00e9 en fonction de r\u00e8gles conditionnelles. En savoir plus sur Mise en forme conditionnelle .","title":"Mise en forme des colonnes"},{"location":"col-types/#specifier-un-type","text":"Les colonnes Grist ont des types, similaires \u00e0 d\u2019autres feuilles de calcul ou bases de donn\u00e9es. Le type d\u2019une colonne contr\u00f4le son apparence et l\u2019aide que Grist vous offrira lors de l\u2019\u00e9dition des cellules. Lorsque vous cr\u00e9ez une nouvelle colonne, elle a initialement le type Any . Lorsque vous entrez dans la premi\u00e8re cellule de la colonne, Grist essaie de restreindre ce type. Si vous entrez un nombre, la colonne sera chang\u00e9e en type Numeric , qui est align\u00e9 \u00e0 droite par d\u00e9faut. Si vous entrez quelque chose qui ne ressemble pas \u00e0 un nombre, la colonne sera chang\u00e9e en type Text , qui est align\u00e9 \u00e0 gauche par d\u00e9faut. Pour inspecter le type d\u2019une colonne, survolez l\u2019en-t\u00eate de la colonne, puis cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cOptions de colonne\u201d. La section \u201cType de colonne\u201d est ce que vous recherchez. Vous voudrez souvent contr\u00f4ler le type de colonne manuellement. Vous pouvez le changer dans la section \u201cType de colonne\u201d. Par exemple, ici nous d\u00e9finissons une colonne pleine de r\u00e9ponses \u201coui\u201d et \u201cnon\u201d comme \u00e9tant de type Toggle : Un avantage de faire cela est que Grist peut maintenant vous offrir des moyens de visualiser la colonne qui sont sp\u00e9cialis\u00e9s pour les valeurs de type on/off. Chaque type de colonne a diff\u00e9rentes options dans la section \u201cFormat de cellule\u201d du panneau lat\u00e9ral : Quel que soit le type de colonne, vous pouvez entrer n\u2019importe quelle valeur dans les cellules. Si une valeur entr\u00e9e est incompatible avec le type d\u00e9fini, la cellule sera mise en surbrillance avec une erreur (et les colonnes r\u00e9f\u00e9renc\u00e9es par la valeur invalide afficheront \u00e9galement une erreur) :","title":"Sp\u00e9cifier un type"},{"location":"col-types/#types-pris-en-charge","text":"Grist prend en charge les types suivants : Type Description Texte ( Par d\u00e9faut ) Toute cha\u00eene de texte. Num\u00e9rique Nombres \u00e0 virgule flottante. Entier Entiers (nombres entiers). Basculer Bool\u00e9en (Vrai / Faux) Date Date valide (sans composant horaire). DateHeure Date + heure valide. Choix Valeur unique d\u2019une liste de valeurs valides pr\u00e9d\u00e9finies. Liste de choix Plusieurs valeurs d\u2019une liste de valeurs valides pr\u00e9d\u00e9finies. R\u00e9f\u00e9rence Une colonne de r\u00e9f\u00e9rence vers une autre table. Liste de r\u00e9f\u00e9rences Une liste de r\u00e9f\u00e9rences vers une autre table. Pi\u00e8ce jointe Cellules o\u00f9 vous pouvez placer des fichiers ou des images.","title":"Types pris en charge"},{"location":"col-types/#colonnes-de-texte","text":"Vous pouvez mettre n\u2019importe quel texte que vous aimez dans ce type de colonne. Pour la mise en forme, vous pouvez contr\u00f4ler l\u2019alignement et le retour \u00e0 la ligne, la couleur du texte et la couleur de fond. Si la colonne est utilis\u00e9e pour stocker des liens web, vous pouvez activer le formatage \u201cHyperLink\u201d pour rendre les liens plus jolis et inclure une ic\u00f4ne de lien cliquable.","title":"Colonnes de texte"},{"location":"col-types/#hyperliens","text":"Lorsque une colonne de texte utilise le formatage \u201cHyperLink\u201d, les valeurs sont format\u00e9es comme suit : https://getgrist.com affichera https://getgrist.com . Grist Labs https://getgrist.com affichera Grist Labs (liant \u00e0 \u201chttps://getgrist.com\u201d avec \u201cGrist Labs\u201d comme texte). Email Help mailto:support@getgrist.com affichera Email Help , un lien qui ouvrirait un programme de messagerie pour composer un email \u00e0 support@getgrist.com. En g\u00e9n\u00e9ral, la valeur jusqu\u2019au dernier espace est utilis\u00e9e comme texte du lien, tandis que le dernier mot est utilis\u00e9 comme destination du lien. Le formatage des liens est particuli\u00e8rement utile lorsque les liens sont g\u00e9n\u00e9r\u00e9s \u00e0 l\u2019aide d\u2019une formule telle que : $Company + \" \" + $Website","title":"Hyperliens"},{"location":"col-types/#colonnes-numeriques","text":"Ce type est pour les nombres, y compris les nombres \u00e0 virgule flottante. En plus de contr\u00f4ler l\u2019alignement et la couleur, vous pouvez choisir le format de nombre, et le nombre minimum et maximum de chiffres \u00e0 afficher apr\u00e8s la virgule. Choisir l\u2019option \u201cSpinner\u201d pour le FORMAT DE CELLULE affichera des fl\u00e8ches dans chaque cellule pour augmenter/diminuer le nombre. Les options sous FORMAT DE NOMBRE incluent : $ : Format pour les montants en devise, tels que les dollars ou les euros. S\u00e9lectionner le $ ajoutera un pr\u00e9fixe de devise, des s\u00e9parateurs de milliers, et par d\u00e9faut \u00e0 2 chiffres apr\u00e8s la virgule. Cela ouvrira \u00e9galement un s\u00e9lecteur de devise pour les devises internationales. D\u00e9finir la devise par d\u00e9faut Vous pouvez d\u00e9finir le fuseau horaire, la locale et la devise par d\u00e9faut d\u2019un document dans Param\u00e8tres du document . , : Activer l\u2019affichage des s\u00e9parateurs de milliers. % : Afficher les nombres en pourcentages. Par exemple, \u201c0.5\u201d s\u2019afficherait comme \u201c50%\u201d. Exp : Afficher les nombres en notation exponentielle (ou scientifique). Par exemple, \u201c1234\u201d serait affich\u00e9 comme \u201c1.234E3\u201d. (-) : Afficher les nombres n\u00e9gatifs entre parenth\u00e8ses, sans signe moins devant. Ceci est couramment utilis\u00e9 en comptabilit\u00e9, et g\u00e9n\u00e9ralement combin\u00e9 avec les formats $ ou , .","title":"Colonnes num\u00e9riques"},{"location":"col-types/#colonnes-entieres","text":"Ce type est strictement pour les nombres entiers. Il a les m\u00eames options que le type num\u00e9rique.","title":"Colonnes enti\u00e8res"},{"location":"col-types/#colonnes-basculantes","text":"Ce type est pour stocker des valeurs vrai/faux. Les valeurs peuvent \u00eatre affich\u00e9es sous forme de texte, de cases \u00e0 cocher ou de commutateurs. Voir \u00e9galement l\u2019exemple dans Sp\u00e9cifier un type .","title":"Colonnes basculantes"},{"location":"col-types/#colonnes-de-date","text":"Ce type est pour stocker des dates de calendrier (sans composant horaire). Plus de d\u00e9tails dans Travailler avec des dates . Vous pouvez choisir le format des dates, voir la r\u00e9f\u00e9rence de formatage des dates .","title":"Colonnes de date"},{"location":"col-types/#colonnes-dateheure","text":"Ce type est pour stocker des dates de calendrier plus l\u2019heure de la journ\u00e9e. Plus de d\u00e9tails dans Travailler avec des dates . Vous pouvez choisir le format des dates, voir la r\u00e9f\u00e9rence de formatage des dates et heures . Vous pouvez \u00e9galement sp\u00e9cifier le fuseau horaire \u00e0 afficher. Si vous souhaitez d\u00e9finir un fuseau horaire par d\u00e9faut pour votre document, vous pouvez le faire dans Param\u00e8tres du document .","title":"Colonnes DateHeure"},{"location":"col-types/#colonnes-de-choix","text":"Ce type est pour stocker une valeur parmi un ensemble de valeurs valides, o\u00f9 vous pouvez sp\u00e9cifier les valeurs disponibles. Il y a un exemple d\u2019utilisation de ce type de colonne dans l\u2019 exemple de CRM l\u00e9ger . Si vous commencez avec une colonne de texte peupl\u00e9e, Grist prendra toutes les valeurs uniques de cette colonne comme choix valides. Vous pouvez ajouter ou supprimer des choix en cliquant soit sur Modifier soit sur la bo\u00eete de choix. Pour ajouter un choix, tapez sa valeur dans le champ de texte en dessous des autres choix et appuyez sur Entr\u00e9e . Pour supprimer un choix, cliquez sur l\u2019ic\u00f4ne de suppression \u00e0 droite du choix ou s\u00e9lectionnez le choix en cliquant dessus, puis appuyez sur Retour arri\u00e8re / Supprimer . Pour appliquer/enregistrer vos modifications, vous pouvez soit cliquer sur le bouton Enregistrer , soit appuyer sur Entr\u00e9e . Pour annuler vos modifications, vous pouvez soit cliquer sur le bouton Annuler , soit appuyer sur \u00c9chap . Cliquer sur le menu d\u00e9roulant de couleur \u00e0 gauche d\u2019un choix ouvrira un s\u00e9lecteur de couleur pour personnaliser la couleur de remplissage et de texte d\u2019un choix. Les modifications de couleurs sont refl\u00e9t\u00e9es dans les cellules et dans le reste de votre document une fois que vous avez enregistr\u00e9 vos modifications. Les choix peuvent \u00eatre r\u00e9organis\u00e9s en cliquant et en les faisant glisser, ce qui d\u00e9termine l\u2019ordre dans lequel ils apparaissent lors de la saisie dans une cellule. Vous pouvez \u00e9galement renommer un choix en cliquant dessus et en tapant un nouveau nom. Renommer un choix renomme \u00e9galement toutes les valeurs utilis\u00e9es dans votre document. L\u2019\u00e9diteur de configuration prend en charge de nombreux raccourcis clavier pratiques. Vous pouvez appuyer sur les touches Fl\u00e8che haut et Fl\u00e8che bas pour naviguer entre les choix s\u00e9lectionn\u00e9s ; maintenir la touche Maj pour s\u00e9lectionner plusieurs choix adjacents tout en cliquant ou en utilisant les touches fl\u00e9ch\u00e9es ; et maintenir la touche Commande / Contr\u00f4le pour s\u00e9lectionner plusieurs choix tout en cliquant. Pour s\u00e9lectionner tous les choix, vous pouvez appuyer sur Commande / Contr\u00f4le + A . L\u2019annulation et la r\u00e9tablissement sont \u00e9galement pris en charge dans l\u2019\u00e9diteur de configuration. Lorsque votre curseur est focalis\u00e9 sur le champ de texte de l\u2019\u00e9diteur, vous pouvez appuyer sur Commande / Contr\u00f4le + Z pour annuler votre derni\u00e8re modification, et Commande / Contr\u00f4le + Maj + Z pour la r\u00e9tablir. L\u2019\u00e9diteur de configuration prend \u00e9galement en charge le copier-coller. Pour copier, s\u00e9lectionnez les choix que vous souhaitez copier et appuyez sur Commande / Contr\u00f4le + C . Pour coller, concentrez-vous sur le champ de texte et appuyez sur Commande / Contr\u00f4le + V . Les choix sont coll\u00e9s en bloc si le presse-papiers contient plusieurs lignes de texte. Les choix peuvent \u00e9galement \u00eatre copi\u00e9s \u00e0 partir de l\u2019\u00e9diteur de configuration d\u2019une colonne et coll\u00e9s dans une autre, ce qui copiera \u00e0 la fois les valeurs et leurs couleurs configur\u00e9es. Lors de la saisie dans une cellule de colonne de choix, vos choix configur\u00e9s seront affich\u00e9s dans un menu de saisie semi-automatique. Vous pouvez soit cliquer sur un choix, soit utiliser les touches fl\u00e9ch\u00e9es et Entr\u00e9e pour ajouter un choix \u00e0 une cellule. Si votre saisie n\u2019est pas l\u2019un des choix valides, Grist affichera une option de menu pour l\u2019ajouter facilement comme choix valide et dans la cellule en une seule \u00e9tape.","title":"Colonnes de choix"},{"location":"col-types/#colonnes-de-liste-de-choix","text":"Ce type est pour stocker plusieurs valeurs d\u2019un ensemble de valeurs valides, o\u00f9 vous pouvez sp\u00e9cifier les valeurs disponibles. Si vous commencez avec une colonne de texte peupl\u00e9e, Grist prendra toutes les valeurs uniques de cette colonne comme choix valides. Les colonnes de liste de choix sont configur\u00e9es de la m\u00eame mani\u00e8re que les colonnes de Choix , et prennent en charge le m\u00eame niveau de personnalisation et de raccourcis clavier. Elles diff\u00e8rent par le nombre de choix qu\u2019elles permettent d\u2019entrer dans chaque cellule. Alors que les colonnes de choix ne permettent qu\u2019une seule valeur au maximum dans une cellule, les colonnes de liste de choix en permettent plusieurs. Comme avec les colonnes de choix, lors de la saisie dans une cellule de colonne de liste de choix, les choix valides seront affich\u00e9s dans un menu de saisie semi-automatique. Une fois que vous avez s\u00e9lectionn\u00e9 une valeur, vous pouvez continuer \u00e0 ajouter des choix \u00e0 la m\u00eame cellule. Les choix peuvent \u00eatre r\u00e9organis\u00e9s \u00e0 l\u2019int\u00e9rieur de leurs cellules en cliquant et en les faisant glisser pendant que la cellule est en cours d\u2019\u00e9dition. Vous pouvez \u00e9galement utiliser les touches fl\u00e9ch\u00e9es et la touche Supprimer pour naviguer et supprimer des choix, ou simplement cliquer sur l\u2019ic\u00f4ne de suppression lorsque vous survolez un choix. Filtrer les listes d\u00e9roulantes des colonnes de choix et de liste de choix Lors de la saisie de donn\u00e9es dans une colonne de choix ou de liste de choix, vous verrez une liste d\u00e9roulante de tous les choix disponibles. Parfois, il serait utile de filtrer la liste d\u00e9roulante en fonction d\u2019une condition, comme la valeur dans une autre cellule. \u00c9crire des conditions pour filtrer les listes d\u00e9roulantes de choix est similaire \u00e0 filtrer les listes d\u00e9roulantes des colonnes de r\u00e9f\u00e9rence .","title":"Colonnes de liste de choix"},{"location":"col-types/#colonnes-de-reference","text":"Ceci \u00e9tablit une r\u00e9f\u00e9rence crois\u00e9e \u00e0 une autre table. Vous pouvez sp\u00e9cifier la table \u00e0 r\u00e9f\u00e9rencer, et une colonne au sein de cette table \u00e0 afficher. Il y a beaucoup de choses que vous pouvez faire avec ce type de colonne, voir Colonnes de r\u00e9f\u00e9rence pour plus de d\u00e9tails.","title":"Colonnes de r\u00e9f\u00e9rence"},{"location":"col-types/#colonnes-de-liste-de-references","text":"Comme les Colonnes de r\u00e9f\u00e9rence , mais peuvent stocker plusieurs r\u00e9f\u00e9rences dans une seule cellule. Il y a beaucoup de choses que vous pouvez faire avec ce type de colonne, voir Colonnes de r\u00e9f\u00e9rence pour plus de d\u00e9tails.","title":"Colonnes de liste de r\u00e9f\u00e9rences"},{"location":"col-types/#colonnes-de-pieces-jointes","text":"Ce type de colonne vous permet d\u2019ins\u00e9rer des fichiers et des images entiers dans des cellules. Lorsque des images sont ajout\u00e9es dans des cellules, une miniature d\u2019aper\u00e7u est affich\u00e9e dans la cellule. La barre \u201cTaille\u201d permet de contr\u00f4ler l\u2019\u00e9chelle de cette miniature. Lorsque vous cr\u00e9ez une colonne de pi\u00e8ces jointes, les cellules de cette colonne auront une ic\u00f4ne de trombone : Lorsque vous cliquez sur une ic\u00f4ne de trombone, vous pouvez s\u00e9lectionner un fichier \u00e0 joindre. Si c\u2019est une image, vous verrez une miniature dans la cellule. Si vous survolez l\u2019image, vous verrez \u00e0 nouveau une ic\u00f4ne de trombone, que vous pouvez utiliser pour ajouter d\u2019autres fichiers dans la m\u00eame cellule. Vous verrez \u00e9galement une ic\u00f4ne \u201c\u0153il ouvert\u201d, qui, lorsqu\u2019elle est cliqu\u00e9e, affiche une vue agrandie de toutes les pi\u00e8ces jointes de la cellule, et vous donne un moyen de les renommer, de les t\u00e9l\u00e9charger ou de les supprimer.","title":"Colonnes de pi\u00e8ces jointes"},{"location":"conditional-formatting/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Mise en forme conditionnelle # Le style des cellules peut changer en fonction des r\u00e8gles conditionnelles. Les r\u00e8gles conditionnelles sont \u00e9crites sous forme de formules. La mise en forme conditionnelle peut s\u2019appliquer \u00e0 une ligne enti\u00e8re ou aux cellules d\u2019une colonne. Pour ajouter une mise en forme conditionnelle \u00e0 une colonne particuli\u00e8re, s\u00e9lectionnez la colonne, allez \u00e0 la section STYLE DE CELLULE du panneau de cr\u00e9ation sous l\u2019onglet Colonne , et cliquez sur Ajouter un style conditionnel . Dans cet exemple, nous avons une liste d\u2019\u00e9leveurs de chiens qui ont \u00e9lev\u00e9 des pur-sang champions. Appliquons une mise en forme conditionnelle \u00e0 la colonne \u00c9leveur en fonction du nombre de chiens champions. Nous aimerions mettre en surbrillance en or les \u00e9leveurs ayant plus de 2 champions. Ici, la formule conditionnelle est $Number_of_Champions > 2 . Nous aimerions \u00e9galement mettre en surbrillance les \u00e9leveurs ayant 1 ou 2 chiens champions en bleu, et ceux ayant 0 chien champion en marron. Cliquez sur Ajouter une autre r\u00e8gle pour ajouter plus de styles conditionnels. Pour ajouter une mise en forme conditionnelle aux lignes, allez \u00e0 la section STYLE DE LIGNE du panneau de cr\u00e9ation sous l\u2019onglet Table > Vue , et cliquez sur Ajouter un style conditionnel . Ordre des r\u00e8gles # Notez que Grist applique les r\u00e8gles dans l\u2019ordre. Les styles appliqu\u00e9s par des r\u00e8gles ult\u00e9rieures remplaceront ceux appliqu\u00e9s par des r\u00e8gles ant\u00e9rieures. Que se passerait-il si nous \u00e9changions les deux derni\u00e8res r\u00e8gles dans l\u2019exemple ci-dessus ? Remarquez que Gen Hamamoto, qui a 0 chien champion, n\u2019est pas mis en surbrillance en marron. C\u2019est parce qu\u2019apr\u00e8s avoir appliqu\u00e9 le deuxi\u00e8me style conditionnel, $Number_of_Champions == 0 , Grist a appliqu\u00e9 le troisi\u00e8me, $Number_of_Champions <= 2 , qui s\u2019applique \u00e9galement \u00e0 Gen Hamamoto et le colore en bleu.","title":"Conditional formatting"},{"location":"conditional-formatting/#mise-en-forme-conditionnelle","text":"Le style des cellules peut changer en fonction des r\u00e8gles conditionnelles. Les r\u00e8gles conditionnelles sont \u00e9crites sous forme de formules. La mise en forme conditionnelle peut s\u2019appliquer \u00e0 une ligne enti\u00e8re ou aux cellules d\u2019une colonne. Pour ajouter une mise en forme conditionnelle \u00e0 une colonne particuli\u00e8re, s\u00e9lectionnez la colonne, allez \u00e0 la section STYLE DE CELLULE du panneau de cr\u00e9ation sous l\u2019onglet Colonne , et cliquez sur Ajouter un style conditionnel . Dans cet exemple, nous avons une liste d\u2019\u00e9leveurs de chiens qui ont \u00e9lev\u00e9 des pur-sang champions. Appliquons une mise en forme conditionnelle \u00e0 la colonne \u00c9leveur en fonction du nombre de chiens champions. Nous aimerions mettre en surbrillance en or les \u00e9leveurs ayant plus de 2 champions. Ici, la formule conditionnelle est $Number_of_Champions > 2 . Nous aimerions \u00e9galement mettre en surbrillance les \u00e9leveurs ayant 1 ou 2 chiens champions en bleu, et ceux ayant 0 chien champion en marron. Cliquez sur Ajouter une autre r\u00e8gle pour ajouter plus de styles conditionnels. Pour ajouter une mise en forme conditionnelle aux lignes, allez \u00e0 la section STYLE DE LIGNE du panneau de cr\u00e9ation sous l\u2019onglet Table > Vue , et cliquez sur Ajouter un style conditionnel .","title":"Mise en forme conditionnelle"},{"location":"conditional-formatting/#ordre-des-regles","text":"Notez que Grist applique les r\u00e8gles dans l\u2019ordre. Les styles appliqu\u00e9s par des r\u00e8gles ult\u00e9rieures remplaceront ceux appliqu\u00e9s par des r\u00e8gles ant\u00e9rieures. Que se passerait-il si nous \u00e9changions les deux derni\u00e8res r\u00e8gles dans l\u2019exemple ci-dessus ? Remarquez que Gen Hamamoto, qui a 0 chien champion, n\u2019est pas mis en surbrillance en marron. C\u2019est parce qu\u2019apr\u00e8s avoir appliqu\u00e9 le deuxi\u00e8me style conditionnel, $Number_of_Champions == 0 , Grist a appliqu\u00e9 le troisi\u00e8me, $Number_of_Champions <= 2 , qui s\u2019applique \u00e9galement \u00e0 Gen Hamamoto et le colore en bleu.","title":"Ordre des r\u00e8gles"},{"location":"copying-docs/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Copier des Documents # Il est parfois utile de faire une copie, ou un clone, d\u2019un document Grist. Quelques sc\u00e9narios sont d\u00e9crits ci-dessous. Dans tous les cas, vous commencerez par le menu \u201cPartager\u201d disponible dans la barre sup\u00e9rieure d\u2019un document ouvert : Essayer des Modifications # \u00c0 mesure que votre document prend de l\u2019importance, il devient plus risqu\u00e9 de modifier sa structure ou sa logique. C\u2019est une bonne raison de tester ces modifications sur une copie du document, sans craindre d\u2019affecter l\u2019original. Ouvrez le menu Partager et cliquez sur l\u2019option \u201cTravailler sur une copie\u201d. Vous obtiendrez une copie non enregistr\u00e9e de votre document. Cette copie est sp\u00e9ciale car elle sait de quel document original elle provient (vous pouvez voir l\u2019ID du document original inclus dans son URL). Vous pouvez exp\u00e9rimenter sur cette copie, en faisant des modifications grandes ou petites, une ou plusieurs. Pour ceux qui sont familiers avec le d\u00e9veloppement logiciel, cette option est similaire \u00e0 une branche ou un fork comme utilis\u00e9 dans les syst\u00e8mes de contr\u00f4le de version tels que Git . Lorsque vous travaillez sur une copie, le menu Partager propose de nouvelles options. Par exemple, vous pouvez visualiser les diff\u00e9rences entre la copie du document et l\u2019original, en utilisant l\u2019\u00e9l\u00e9ment de menu \u201cComparer \u00e0 l\u2019original\u201d : Les nouvelles modifications seront surlign\u00e9es en vert, et les anciennes en rouge. Une fois satisfait de vos modifications, cliquez sur l\u2019option \u201cRemplacer l\u2019original\u201d. Votre copie remplacera le document original. Grist vous avertira si le remplacement risque d\u2019\u00e9craser des modifications r\u00e9centes dans l\u2019original. Pour abandonner vos modifications, revenez simplement au document original en utilisant l\u2019option \u201cRetourner \u00e0 l\u2019original\u201d (ou le bouton Retour de votre navigateur). Ne vous inqui\u00e9tez pas de nettoyer votre copie. Elle ne compte pas dans les limites de documents et sera automatiquement nettoy\u00e9e si elle n\u2019a pas \u00e9t\u00e9 utilis\u00e9e pendant un certain temps. Vous pouvez \u00e9galement enregistrer votre copie sous un nouveau nom en utilisant l\u2019option \u201cEnregistrer une copie\u201d. Acc\u00e8s aux Copies Non Enregistr\u00e9es # Lorsque vous cr\u00e9ez une copie exp\u00e9rimentale comme d\u00e9crit ci-dessus, elle obtient un lien unique. La copie n\u2019est list\u00e9e nulle part, donc les autres ne la trouveront pas \u00e0 moins que vous ne partagiez ce lien. Toute personne ayant un lien vers votre copie et ayant acc\u00e8s au document original est autoris\u00e9e \u00e0 voir la copie, mais vous \u00eates le seul utilisateur autoris\u00e9 \u00e0 la modifier. Cela signifie que vous pouvez partager un lien vers votre copie avec d\u2019autres, qui peuvent examiner vos modifications. Cela signifie \u00e9galement que vous pouvez essayer des modifications m\u00eame si vous ne pouvez pas modifier l\u2019original ! Vous pouvez ensuite partager un lien vers votre copie avec un collaborateur qui a un acc\u00e8s de modification, qui pourra examiner vos modifications et les appliquer au document original. Dupliquer des Documents # Vous pouvez enregistrer votre document sous un nouveau nom en utilisant l\u2019option \u201cDupliquer le document\u201d dans le menu Partager. En cliquant dessus, une bo\u00eete de dialogue s\u2019ouvre : Tapez le nouveau nom. Si vous avez acc\u00e8s \u00e0 un ou plusieurs comptes d\u2019\u00e9quipe, vous pouvez avoir le choix d\u2019une \u00e9quipe de destination et d\u2019un dossier de destination o\u00f9 enregistrer la copie. Notez que sur un espace d\u2019\u00e9quipe, vous ne pourrez pas enregistrer le document en dehors de l\u2019espace d\u2019\u00e9quipe \u00e0 moins d\u2019avoir un acc\u00e8s de niveau propri\u00e9taire au document. Copier comme Mod\u00e8le # Si vous cochez la case \u201cComme mod\u00e8le\u201d lors de l\u2019enregistrement d\u2019une copie, vous obtiendrez un document qui a toute la structure, les formules et les mises en page de l\u2019original, mais aucune des donn\u00e9es. Cela facilite l\u2019utilisation de la structure existante pour un nouvel ensemble de donn\u00e9es. Copier \u00e0 des Fins de Sauvegarde # Vous pouvez utiliser l\u2019option \u201cDupliquer le document\u201d pour enregistrer la version actuelle du document comme sauvegarde, en ajoutant peut-\u00eatre la date d\u2019aujourd\u2019hui au nom de la copie. Cela dit, Grist effectue d\u00e9j\u00e0 des sauvegardes automatiques r\u00e9guli\u00e8rement, ce qui peut \u00eatre suffisant pour la plupart des besoins de sauvegarde. Voir Sauvegardes Automatiques . Copier des Exemples Publics # Lorsque vous ouvrez un exemple public depuis la page Exemples & Mod\u00e8les , il ouvrira l\u2019exemple en mode sandbox . Le mode sandbox est similaire \u00e0 travailler sur une copie, comme d\u00e9crit ci-dessus dans Essayer des Modifications . Vous pouvez apporter des modifications, mais elles restent priv\u00e9es. Vous pouvez enregistrer une copie de l\u2019exemple sous un nouveau nom en utilisant le bouton ou l\u2019option de menu \u201cEnregistrer une copie\u201d. Vous pouvez utiliser la case \u00e0 cocher \u201cComme mod\u00e8le\u201d pour supprimer les donn\u00e9es de l\u2019exemple, en conservant uniquement sa structure. Cela facilite son utilisation pour vos propres donn\u00e9es.","title":"Copying documents"},{"location":"copying-docs/#copier-des-documents","text":"Il est parfois utile de faire une copie, ou un clone, d\u2019un document Grist. Quelques sc\u00e9narios sont d\u00e9crits ci-dessous. Dans tous les cas, vous commencerez par le menu \u201cPartager\u201d disponible dans la barre sup\u00e9rieure d\u2019un document ouvert :","title":"Copier des Documents"},{"location":"copying-docs/#essayer-des-modifications","text":"\u00c0 mesure que votre document prend de l\u2019importance, il devient plus risqu\u00e9 de modifier sa structure ou sa logique. C\u2019est une bonne raison de tester ces modifications sur une copie du document, sans craindre d\u2019affecter l\u2019original. Ouvrez le menu Partager et cliquez sur l\u2019option \u201cTravailler sur une copie\u201d. Vous obtiendrez une copie non enregistr\u00e9e de votre document. Cette copie est sp\u00e9ciale car elle sait de quel document original elle provient (vous pouvez voir l\u2019ID du document original inclus dans son URL). Vous pouvez exp\u00e9rimenter sur cette copie, en faisant des modifications grandes ou petites, une ou plusieurs. Pour ceux qui sont familiers avec le d\u00e9veloppement logiciel, cette option est similaire \u00e0 une branche ou un fork comme utilis\u00e9 dans les syst\u00e8mes de contr\u00f4le de version tels que Git . Lorsque vous travaillez sur une copie, le menu Partager propose de nouvelles options. Par exemple, vous pouvez visualiser les diff\u00e9rences entre la copie du document et l\u2019original, en utilisant l\u2019\u00e9l\u00e9ment de menu \u201cComparer \u00e0 l\u2019original\u201d : Les nouvelles modifications seront surlign\u00e9es en vert, et les anciennes en rouge. Une fois satisfait de vos modifications, cliquez sur l\u2019option \u201cRemplacer l\u2019original\u201d. Votre copie remplacera le document original. Grist vous avertira si le remplacement risque d\u2019\u00e9craser des modifications r\u00e9centes dans l\u2019original. Pour abandonner vos modifications, revenez simplement au document original en utilisant l\u2019option \u201cRetourner \u00e0 l\u2019original\u201d (ou le bouton Retour de votre navigateur). Ne vous inqui\u00e9tez pas de nettoyer votre copie. Elle ne compte pas dans les limites de documents et sera automatiquement nettoy\u00e9e si elle n\u2019a pas \u00e9t\u00e9 utilis\u00e9e pendant un certain temps. Vous pouvez \u00e9galement enregistrer votre copie sous un nouveau nom en utilisant l\u2019option \u201cEnregistrer une copie\u201d.","title":"Essayer des Modifications"},{"location":"copying-docs/#acces-aux-copies-non-enregistrees","text":"Lorsque vous cr\u00e9ez une copie exp\u00e9rimentale comme d\u00e9crit ci-dessus, elle obtient un lien unique. La copie n\u2019est list\u00e9e nulle part, donc les autres ne la trouveront pas \u00e0 moins que vous ne partagiez ce lien. Toute personne ayant un lien vers votre copie et ayant acc\u00e8s au document original est autoris\u00e9e \u00e0 voir la copie, mais vous \u00eates le seul utilisateur autoris\u00e9 \u00e0 la modifier. Cela signifie que vous pouvez partager un lien vers votre copie avec d\u2019autres, qui peuvent examiner vos modifications. Cela signifie \u00e9galement que vous pouvez essayer des modifications m\u00eame si vous ne pouvez pas modifier l\u2019original ! Vous pouvez ensuite partager un lien vers votre copie avec un collaborateur qui a un acc\u00e8s de modification, qui pourra examiner vos modifications et les appliquer au document original.","title":"Acc\u00e8s aux Copies Non Enregistr\u00e9es"},{"location":"copying-docs/#dupliquer-des-documents","text":"Vous pouvez enregistrer votre document sous un nouveau nom en utilisant l\u2019option \u201cDupliquer le document\u201d dans le menu Partager. En cliquant dessus, une bo\u00eete de dialogue s\u2019ouvre : Tapez le nouveau nom. Si vous avez acc\u00e8s \u00e0 un ou plusieurs comptes d\u2019\u00e9quipe, vous pouvez avoir le choix d\u2019une \u00e9quipe de destination et d\u2019un dossier de destination o\u00f9 enregistrer la copie. Notez que sur un espace d\u2019\u00e9quipe, vous ne pourrez pas enregistrer le document en dehors de l\u2019espace d\u2019\u00e9quipe \u00e0 moins d\u2019avoir un acc\u00e8s de niveau propri\u00e9taire au document.","title":"Dupliquer des Documents"},{"location":"copying-docs/#copier-comme-modele","text":"Si vous cochez la case \u201cComme mod\u00e8le\u201d lors de l\u2019enregistrement d\u2019une copie, vous obtiendrez un document qui a toute la structure, les formules et les mises en page de l\u2019original, mais aucune des donn\u00e9es. Cela facilite l\u2019utilisation de la structure existante pour un nouvel ensemble de donn\u00e9es.","title":"Copier comme Mod\u00e8le"},{"location":"copying-docs/#copier-a-des-fins-de-sauvegarde","text":"Vous pouvez utiliser l\u2019option \u201cDupliquer le document\u201d pour enregistrer la version actuelle du document comme sauvegarde, en ajoutant peut-\u00eatre la date d\u2019aujourd\u2019hui au nom de la copie. Cela dit, Grist effectue d\u00e9j\u00e0 des sauvegardes automatiques r\u00e9guli\u00e8rement, ce qui peut \u00eatre suffisant pour la plupart des besoins de sauvegarde. Voir Sauvegardes Automatiques .","title":"Copier \u00e0 des Fins de Sauvegarde"},{"location":"copying-docs/#copier-des-exemples-publics","text":"Lorsque vous ouvrez un exemple public depuis la page Exemples & Mod\u00e8les , il ouvrira l\u2019exemple en mode sandbox . Le mode sandbox est similaire \u00e0 travailler sur une copie, comme d\u00e9crit ci-dessus dans Essayer des Modifications . Vous pouvez apporter des modifications, mais elles restent priv\u00e9es. Vous pouvez enregistrer une copie de l\u2019exemple sous un nouveau nom en utilisant le bouton ou l\u2019option de menu \u201cEnregistrer une copie\u201d. Vous pouvez utiliser la case \u00e0 cocher \u201cComme mod\u00e8le\u201d pour supprimer les donn\u00e9es de l\u2019exemple, en conservant uniquement sa structure. Cela facilite son utilisation pour vos propres donn\u00e9es.","title":"Copier des Exemples Publics"},{"location":"creating-doc/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Cr\u00e9er un document # Pour commencer avec Grist, vous devez d\u2019abord cr\u00e9er un document. Chaque document peut stocker diff\u00e9rents types de donn\u00e9es, alors pensez-y comme \u00e0 une collection de donn\u00e9es li\u00e9es . Vous pouvez commencer de z\u00e9ro ou importer des donn\u00e9es existantes. Cliquez sur le bouton \u201cAjouter Nouveau\u201d sur l\u2019\u00e9cran d\u2019accueil et choisissez soit \u201cCr\u00e9er un document vide\u201d soit \u201cImporter un document\u201d. Vous pouvez importer des feuilles de calcul au format Excel, ainsi que des fichiers de valeurs s\u00e9par\u00e9es par des virgules ou CSV. Si vous importez une feuille de calcul qui comporte plusieurs onglets, chaque onglet deviendra une table s\u00e9par\u00e9e dans Grist. Exemples et mod\u00e8les # La liste \u201cExemples & Mod\u00e8les\u201d sur la page d\u2019accueil de Grist comprend un certain nombre de documents Grist qui d\u00e9montrent les fonctionnalit\u00e9s et les cas d\u2019utilisation de Grist. Ceux-ci sont toujours accessibles via un lien en bas \u00e0 gauche de la page d\u2019accueil. Pour chaque exemple, il existe un tutoriel correspondant dans le Centre d\u2019aide Grist, qui d\u00e9crit comment l\u2019utiliser ou comment cr\u00e9er un tel document \u00e0 partir de z\u00e9ro. Lorsque vous ouvrez un exemple, vous pouvez y apporter des modifications. Vous \u00e9ditez une copie, et vos modifications sont priv\u00e9es. Vous pouvez enregistrer vos modifications en cliquant sur le bouton \u201cEnregistrer une copie\u201d en haut de la page. Vous pouvez \u00e9galement utiliser l\u2019un des exemples comme mod\u00e8le pour un nouveau document, ce qui inclura la structure, la mise en page et les formules de l\u2019exemple, mais aucune des donn\u00e9es d\u2019exemple. Il suffit d\u2019utiliser le bouton \u201cEnregistrer une copie\u201d et de cocher la case \u201cComme mod\u00e8le\u201d dans la bo\u00eete de dialogue qui s\u2019ouvre. Importer plus de donn\u00e9es # Une fois que vous avez cr\u00e9\u00e9 un document, vous pouvez y importer plus de donn\u00e9es en ouvrant le document et en s\u00e9lectionnant \u201cAjouter Nouveau\u201d puis l\u2019une des options d\u2019importation. Vous pouvez en savoir plus sur l\u2019importation de donn\u00e9es \u00e0 Importer plus de donn\u00e9es . Param\u00e8tres du document # Lorsque le document est ouvert, vous pouvez acc\u00e9der aux param\u00e8tres du document depuis le menu utilisateur ou depuis le menu Outils dans le panneau de navigation de gauche. L\u00e0, vous pouvez trouver l\u2019ID du document pour une utilisation API, ainsi que d\u00e9finir le fuseau horaire par d\u00e9faut, la langue et la devise pour le document.","title":"Creating a document"},{"location":"creating-doc/#creer-un-document","text":"Pour commencer avec Grist, vous devez d\u2019abord cr\u00e9er un document. Chaque document peut stocker diff\u00e9rents types de donn\u00e9es, alors pensez-y comme \u00e0 une collection de donn\u00e9es li\u00e9es . Vous pouvez commencer de z\u00e9ro ou importer des donn\u00e9es existantes. Cliquez sur le bouton \u201cAjouter Nouveau\u201d sur l\u2019\u00e9cran d\u2019accueil et choisissez soit \u201cCr\u00e9er un document vide\u201d soit \u201cImporter un document\u201d. Vous pouvez importer des feuilles de calcul au format Excel, ainsi que des fichiers de valeurs s\u00e9par\u00e9es par des virgules ou CSV. Si vous importez une feuille de calcul qui comporte plusieurs onglets, chaque onglet deviendra une table s\u00e9par\u00e9e dans Grist.","title":"Cr\u00e9er un document"},{"location":"creating-doc/#exemples-et-modeles","text":"La liste \u201cExemples & Mod\u00e8les\u201d sur la page d\u2019accueil de Grist comprend un certain nombre de documents Grist qui d\u00e9montrent les fonctionnalit\u00e9s et les cas d\u2019utilisation de Grist. Ceux-ci sont toujours accessibles via un lien en bas \u00e0 gauche de la page d\u2019accueil. Pour chaque exemple, il existe un tutoriel correspondant dans le Centre d\u2019aide Grist, qui d\u00e9crit comment l\u2019utiliser ou comment cr\u00e9er un tel document \u00e0 partir de z\u00e9ro. Lorsque vous ouvrez un exemple, vous pouvez y apporter des modifications. Vous \u00e9ditez une copie, et vos modifications sont priv\u00e9es. Vous pouvez enregistrer vos modifications en cliquant sur le bouton \u201cEnregistrer une copie\u201d en haut de la page. Vous pouvez \u00e9galement utiliser l\u2019un des exemples comme mod\u00e8le pour un nouveau document, ce qui inclura la structure, la mise en page et les formules de l\u2019exemple, mais aucune des donn\u00e9es d\u2019exemple. Il suffit d\u2019utiliser le bouton \u201cEnregistrer une copie\u201d et de cocher la case \u201cComme mod\u00e8le\u201d dans la bo\u00eete de dialogue qui s\u2019ouvre.","title":"Exemples et mod\u00e8les"},{"location":"creating-doc/#importer-plus-de-donnees","text":"Une fois que vous avez cr\u00e9\u00e9 un document, vous pouvez y importer plus de donn\u00e9es en ouvrant le document et en s\u00e9lectionnant \u201cAjouter Nouveau\u201d puis l\u2019une des options d\u2019importation. Vous pouvez en savoir plus sur l\u2019importation de donn\u00e9es \u00e0 Importer plus de donn\u00e9es .","title":"Importer plus de donn\u00e9es"},{"location":"creating-doc/#parametres-du-document","text":"Lorsque le document est ouvert, vous pouvez acc\u00e9der aux param\u00e8tres du document depuis le menu utilisateur ou depuis le menu Outils dans le panneau de navigation de gauche. L\u00e0, vous pouvez trouver l\u2019ID du document pour une utilisation API, ainsi que d\u00e9finir le fuseau horaire par d\u00e9faut, la langue et la devise pour le document.","title":"Param\u00e8tres du document"},{"location":"custom-layouts/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Dispositions Personnalis\u00e9es # Vous pouvez facilement ajouter plusieurs vues \u00e0 une page, comme d\u00e9crit dans Vues de page , et les lier comme d\u00e9crit dans Lier les vues . Il est \u00e9galement facile de personnaliser leur agencement. D\u00e9placez le curseur de la souris sur le titre de la vue. Une petite ic\u00f4ne de glissement appara\u00eetra \u00e0 gauche du titre. Lorsque vous appuyez sur cette ic\u00f4ne, vous pouvez faire glisser l\u2019ensemble de la vue vers un autre endroit de l\u2019\u00e9cran. Lorsque vous la d\u00e9placez pr\u00e8s du bord de l\u2019\u00e9cran ou du bord d\u2019une autre vue, vous verrez un contour en pointill\u00e9s - parfois plus d\u2019un - o\u00f9 la vue peut \u00eatre d\u00e9pos\u00e9e. Rel\u00e2chez la souris pour repositionner cette vue. Pour redimensionner les vues, d\u00e9placez le curseur de la souris entre deux vues jusqu\u2019\u00e0 ce qu\u2019une ligne en pointill\u00e9s apparaisse. Faites glisser cette ligne en pointill\u00e9s pour redimensionner. Pour agrandir une vue, cliquez sur l\u2019ic\u00f4ne d\u2019agrandissement en haut \u00e0 droite de la vue. Cela ouvrira une vue en pleine page de la vue. Pour r\u00e9duire une vue, cliquez et faites glisser une vue vers le plateau de vues en haut de la page. Lorsque vous cliquez sur une vue r\u00e9duite, elle s\u2019ouvre en vue pleine page. Pour la restaurer \u00e0 la page principale, il suffit de faire glisser la vue r\u00e9duite \u00e0 l\u2019emplacement souhait\u00e9. Recommandations de Disposition # Bien qu\u2019il n\u2019y ait pas de limite \u00e0 la complexit\u00e9 d\u2019une disposition que vous pouvez cr\u00e9er, vous devriez viser des dispositions simples qui seront faciles \u00e0 utiliser pour vos utilisateurs (m\u00eame lorsque vous \u00eates le seul utilisateur !). Une r\u00e8gle de base est qu\u2019une vue contr\u00f4l\u00e9e par une autre vue \u201cs\u00e9lecteur\u201d (voir Lier les vues ) devrait \u00eatre \u00e0 droite ou en dessous de celle-ci. Voici quelques dispositions courantes. Disposition : Liste et D\u00e9tail # La plus courante est d\u2019avoir une liste d\u2019\u00e9l\u00e9ments \u00e0 gauche, avec une ou plusieurs vues \u00e0 droite fournissant plus d\u2019informations. Par exemple, l\u2019exemple de CRM L\u00e9ger inclut une liste de personnes \u00e0 gauche, avec une fiche de personne et une table d\u2019interactions li\u00e9es \u00e0 droite de la liste. Dans cette utilisation, vous pourriez vouloir inclure dans la liste uniquement les informations minimales dont vous avez besoin, peut-\u00eatre seulement le nom d\u2019un contact. Si votre table a de nombreuses colonnes, un moyen rapide de n\u2019en laisser que quelques-unes est via les options de vue dans le panneau de droite. Dans la vue de table, cliquez sur le menu \u00e0 trois points en haut \u00e0 droite et s\u00e9lectionnez \u201cOptions de vue\u201d. Vous verrez une liste de \u201cColonnes visibles\u201d. Cliquez sur le lien \u201cS\u00e9lectionner tout\u201d en haut de cette liste : Maintenant, d\u00e9cochez les quelques champs que vous souhaitez conserver et cliquez sur \u201cMasquer les colonnes\u201d pour masquer le reste. Disposition : Tableur Plus # Parfois, un large tableur avec de nombreuses colonnes est pratique. Si vous souhaitez voir plus d\u2019informations associ\u00e9es aux lignes de ce tableur, vous pouvez ajouter des vues en dessous. Celles-ci pourraient \u00eatre des d\u00e9tails li\u00e9s au tableur, ou des tables de synth\u00e8se qui montrent des totaux ou d\u2019autres informations globales. Par exemple, voici une disposition possible bas\u00e9e sur l\u2019exemple de CRM L\u00e9ger. Elle montre les contacts sous forme de large tableur, et en dessous inclut des sections avec un r\u00e9sum\u00e9 global et des interactions pour le contact s\u00e9lectionn\u00e9. Disposition : R\u00e9sum\u00e9 et D\u00e9tails # Parfois, il est utile de diviser un grand ensemble de donn\u00e9es en sous-ensembles. Par exemple, vous pourriez avoir des transactions par carte de cr\u00e9dit et vouloir un moyen de les visualiser un mois \u00e0 la fois. Pour ce faire, vous utiliserez une colonne \u201cMois\u201d, en cr\u00e9ant une avec une formule si n\u00e9cessaire. Ensuite, cr\u00e9ez une table de synth\u00e8se group\u00e9e par \u201cMois\u201d (voir Tables de synth\u00e8se ), et liez la table des transactions \u00e0 celle-ci. Nous pouvons alors s\u00e9lectionner un mois et voir un tableur des seules transactions de ce mois. Disposition : Tableau de Bord de Graphiques # Si vous avez de nombreux graphiques, vous pouvez simplement les disposer en grille pour cr\u00e9er un tableau de bord de haut niveau. Pour les graphiques dynamiques dans lesquels les donn\u00e9es sont s\u00e9lectionn\u00e9es par une autre table, une disposition comme Liste et D\u00e9tail ci-dessus fonctionnerait bien. Un conseil est d\u2019inclure \u00e0 la fois une vue de Table et une vue de Graphique, configur\u00e9es et li\u00e9es de la m\u00eame mani\u00e8re, et ne diff\u00e9rant que par le type de vue : Avoir une table \u00e0 c\u00f4t\u00e9 du graphique peut \u00eatre une r\u00e9f\u00e9rence utile, ainsi que fournir plus de contexte \u00e0 ce qui est visible dans le graphique.","title":"Custom layouts"},{"location":"custom-layouts/#dispositions-personnalisees","text":"Vous pouvez facilement ajouter plusieurs vues \u00e0 une page, comme d\u00e9crit dans Vues de page , et les lier comme d\u00e9crit dans Lier les vues . Il est \u00e9galement facile de personnaliser leur agencement. D\u00e9placez le curseur de la souris sur le titre de la vue. Une petite ic\u00f4ne de glissement appara\u00eetra \u00e0 gauche du titre. Lorsque vous appuyez sur cette ic\u00f4ne, vous pouvez faire glisser l\u2019ensemble de la vue vers un autre endroit de l\u2019\u00e9cran. Lorsque vous la d\u00e9placez pr\u00e8s du bord de l\u2019\u00e9cran ou du bord d\u2019une autre vue, vous verrez un contour en pointill\u00e9s - parfois plus d\u2019un - o\u00f9 la vue peut \u00eatre d\u00e9pos\u00e9e. Rel\u00e2chez la souris pour repositionner cette vue. Pour redimensionner les vues, d\u00e9placez le curseur de la souris entre deux vues jusqu\u2019\u00e0 ce qu\u2019une ligne en pointill\u00e9s apparaisse. Faites glisser cette ligne en pointill\u00e9s pour redimensionner. Pour agrandir une vue, cliquez sur l\u2019ic\u00f4ne d\u2019agrandissement en haut \u00e0 droite de la vue. Cela ouvrira une vue en pleine page de la vue. Pour r\u00e9duire une vue, cliquez et faites glisser une vue vers le plateau de vues en haut de la page. Lorsque vous cliquez sur une vue r\u00e9duite, elle s\u2019ouvre en vue pleine page. Pour la restaurer \u00e0 la page principale, il suffit de faire glisser la vue r\u00e9duite \u00e0 l\u2019emplacement souhait\u00e9.","title":"Dispositions Personnalis\u00e9es"},{"location":"custom-layouts/#recommandations-de-disposition","text":"Bien qu\u2019il n\u2019y ait pas de limite \u00e0 la complexit\u00e9 d\u2019une disposition que vous pouvez cr\u00e9er, vous devriez viser des dispositions simples qui seront faciles \u00e0 utiliser pour vos utilisateurs (m\u00eame lorsque vous \u00eates le seul utilisateur !). Une r\u00e8gle de base est qu\u2019une vue contr\u00f4l\u00e9e par une autre vue \u201cs\u00e9lecteur\u201d (voir Lier les vues ) devrait \u00eatre \u00e0 droite ou en dessous de celle-ci. Voici quelques dispositions courantes.","title":"Recommandations de Disposition"},{"location":"custom-layouts/#disposition-liste-et-detail","text":"La plus courante est d\u2019avoir une liste d\u2019\u00e9l\u00e9ments \u00e0 gauche, avec une ou plusieurs vues \u00e0 droite fournissant plus d\u2019informations. Par exemple, l\u2019exemple de CRM L\u00e9ger inclut une liste de personnes \u00e0 gauche, avec une fiche de personne et une table d\u2019interactions li\u00e9es \u00e0 droite de la liste. Dans cette utilisation, vous pourriez vouloir inclure dans la liste uniquement les informations minimales dont vous avez besoin, peut-\u00eatre seulement le nom d\u2019un contact. Si votre table a de nombreuses colonnes, un moyen rapide de n\u2019en laisser que quelques-unes est via les options de vue dans le panneau de droite. Dans la vue de table, cliquez sur le menu \u00e0 trois points en haut \u00e0 droite et s\u00e9lectionnez \u201cOptions de vue\u201d. Vous verrez une liste de \u201cColonnes visibles\u201d. Cliquez sur le lien \u201cS\u00e9lectionner tout\u201d en haut de cette liste : Maintenant, d\u00e9cochez les quelques champs que vous souhaitez conserver et cliquez sur \u201cMasquer les colonnes\u201d pour masquer le reste.","title":"Disposition : Liste et D\u00e9tail"},{"location":"custom-layouts/#disposition-tableur-plus","text":"Parfois, un large tableur avec de nombreuses colonnes est pratique. Si vous souhaitez voir plus d\u2019informations associ\u00e9es aux lignes de ce tableur, vous pouvez ajouter des vues en dessous. Celles-ci pourraient \u00eatre des d\u00e9tails li\u00e9s au tableur, ou des tables de synth\u00e8se qui montrent des totaux ou d\u2019autres informations globales. Par exemple, voici une disposition possible bas\u00e9e sur l\u2019exemple de CRM L\u00e9ger. Elle montre les contacts sous forme de large tableur, et en dessous inclut des sections avec un r\u00e9sum\u00e9 global et des interactions pour le contact s\u00e9lectionn\u00e9.","title":"Disposition : Tableur Plus"},{"location":"custom-layouts/#disposition-resume-et-details","text":"Parfois, il est utile de diviser un grand ensemble de donn\u00e9es en sous-ensembles. Par exemple, vous pourriez avoir des transactions par carte de cr\u00e9dit et vouloir un moyen de les visualiser un mois \u00e0 la fois. Pour ce faire, vous utiliserez une colonne \u201cMois\u201d, en cr\u00e9ant une avec une formule si n\u00e9cessaire. Ensuite, cr\u00e9ez une table de synth\u00e8se group\u00e9e par \u201cMois\u201d (voir Tables de synth\u00e8se ), et liez la table des transactions \u00e0 celle-ci. Nous pouvons alors s\u00e9lectionner un mois et voir un tableur des seules transactions de ce mois.","title":"Disposition : R\u00e9sum\u00e9 et D\u00e9tails"},{"location":"custom-layouts/#disposition-tableau-de-bord-de-graphiques","text":"Si vous avez de nombreux graphiques, vous pouvez simplement les disposer en grille pour cr\u00e9er un tableau de bord de haut niveau. Pour les graphiques dynamiques dans lesquels les donn\u00e9es sont s\u00e9lectionn\u00e9es par une autre table, une disposition comme Liste et D\u00e9tail ci-dessus fonctionnerait bien. Un conseil est d\u2019inclure \u00e0 la fois une vue de Table et une vue de Graphique, configur\u00e9es et li\u00e9es de la m\u00eame mani\u00e8re, et ne diff\u00e9rant que par le type de vue : Avoir une table \u00e0 c\u00f4t\u00e9 du graphique peut \u00eatre une r\u00e9f\u00e9rence utile, ainsi que fournir plus de contexte \u00e0 ce qui est visible dans le graphique.","title":"Disposition : Tableau de Bord de Graphiques"},{"location":"data-security/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . S\u00e9curit\u00e9 des Donn\u00e9es # Grist est disponible en tant que service h\u00e9berg\u00e9 (\u201cGrist SaaS\u201d) fonctionnant sur une infrastructure g\u00e9r\u00e9e par Grist Labs. Il peut \u00e9galement \u00eatre install\u00e9 sur votre propre infrastructure (\u201cGrist Auto-G\u00e9r\u00e9\u201d). Dans les deux cas, nous prenons des mesures pour s\u00e9curiser vos donn\u00e9es que vous devez conna\u00eetre. Grist SaaS # Notre politique g\u00e9n\u00e9rale de confidentialit\u00e9 et nos conditions sont disponibles sur https://www.getgrist.com/privacy et https://www.getgrist.com/terms . De plus, voici un r\u00e9sum\u00e9 des mesures sp\u00e9cifiques qui concernent les documents Grist que nous h\u00e9bergeons pour vous : Les serveurs Grist fonctionnent sur l\u2019infrastructure cloud d\u2019Amazon Web Services (AWS), aux \u00c9tats-Unis. AWS S3 est utilis\u00e9 pour le stockage \u00e0 long terme, et stocke les documents sous forme crypt\u00e9e. Les donn\u00e9es sont stock\u00e9es aux \u00c9tats-Unis. Les employ\u00e9s de Grist ne regardent jamais vos donn\u00e9es et ne peuvent pas ouvrir vos documents. La seule exception est si vous choisissez de partager un document avec le support client afin d\u2019obtenir de l\u2019aide pour un probl\u00e8me. Lorsqu\u2019elles sont trait\u00e9es, vos donn\u00e9es existeront par n\u00e9cessit\u00e9 sous forme non crypt\u00e9e dans certains des syst\u00e8mes internes de Grist. Seuls certains employ\u00e9s cl\u00e9s ont un acc\u00e8s complet \u00e0 ces syst\u00e8mes, et la politique leur interdit de regarder \u00e0 l\u2019int\u00e9rieur des documents. Le HTTPS s\u00e9curis\u00e9 est utilis\u00e9 pour tout acc\u00e8s \u00e0 Grist via Internet public (\u00e0 la fois pour le site web et les appels API). Des sauvegardes r\u00e9guli\u00e8res des documents Grist sont effectu\u00e9es et sont stock\u00e9es sous forme crypt\u00e9e. Grist conserve des instantan\u00e9s plus fr\u00e9quents des changements r\u00e9cents, et des instantan\u00e9s moins fr\u00e9quents au fur et \u00e0 mesure que vous remontez dans le temps. Si vous supprimez un document, il restera pendant 30 jours dans un dossier Corbeille sous votre contr\u00f4le. \u00c0 tout moment, une option \u201cSupprimer d\u00e9finitivement\u201d peut \u00eatre utilis\u00e9e pour purger imm\u00e9diatement un document dans ce dossier. Toutes les sauvegardes automatiques sont purg\u00e9es avec le document. Le produit Grist h\u00e9berg\u00e9 n\u2019a pas encore \u00e9t\u00e9 certifi\u00e9 ou audit\u00e9 pour la conformit\u00e9 SOC 2, ISO 27001, HIPAA ou RGPD. Si vous avez besoin de documentation sp\u00e9cifique, veuillez contacter le support client. Vous pouvez \u00e9galement nous encourager \u00e0 prioriser la certification par rapport au d\u00e9veloppement de fonctionnalit\u00e9s sur ce probl\u00e8me . Grist Auto-G\u00e9r\u00e9 # Pour Grist Auto-G\u00e9r\u00e9, vous avez un contr\u00f4le total sur l\u2019emplacement des serveurs et le lieu de stockage des donn\u00e9es. Voici quelques consid\u00e9rations de s\u00e9curit\u00e9 \u00e0 garder \u00e0 l\u2019esprit : Le logiciel Grist est distribu\u00e9 via l\u2019organisation gristlabs sur github et docker hub . Veuillez faire preuve de diligence si vous acc\u00e9dez au logiciel ailleurs, car le logiciel que vous installez aura un acc\u00e8s complet \u00e0 vos donn\u00e9es. Les documents Grist prennent en charge des formules Python puissantes. Veuillez pr\u00eater attention aux instructions pour configurer le sandboxing si votre \u00e9quipe peut travailler avec des documents non fiables. Par d\u00e9faut, Grist est accueillant pour les utilisateurs anonymes, leur permettant de cr\u00e9er et de modifier leurs propres documents. Vous pouvez souhaiter configurer une disposition plus stricte . Grist ne rend pas les services externes obligatoires, car cela introduirait des obstacles inutiles dans certains sc\u00e9narios. Par exemple, une personne \u00e9ditant un document Grist hors ligne sur son propre bureau ne devrait pas avoir besoin d\u2019installer une base de donn\u00e9es PostgreSQL d\u2019abord. Mais il est important d\u2019\u00e9valuer ce dont vous avez besoin dans votre situation plut\u00f4t que de simplement vous en tenir aux param\u00e8tres par d\u00e9faut. Veuillez lire \u00e0 propos des donn\u00e9es que Grist stocke et de vos options pour savoir o\u00f9 les stocker. Il est important de garder votre installation Grist \u00e0 jour .","title":"Data security"},{"location":"data-security/#securite-des-donnees","text":"Grist est disponible en tant que service h\u00e9berg\u00e9 (\u201cGrist SaaS\u201d) fonctionnant sur une infrastructure g\u00e9r\u00e9e par Grist Labs. Il peut \u00e9galement \u00eatre install\u00e9 sur votre propre infrastructure (\u201cGrist Auto-G\u00e9r\u00e9\u201d). Dans les deux cas, nous prenons des mesures pour s\u00e9curiser vos donn\u00e9es que vous devez conna\u00eetre.","title":"S\u00e9curit\u00e9 des Donn\u00e9es"},{"location":"data-security/#grist-saas","text":"Notre politique g\u00e9n\u00e9rale de confidentialit\u00e9 et nos conditions sont disponibles sur https://www.getgrist.com/privacy et https://www.getgrist.com/terms . De plus, voici un r\u00e9sum\u00e9 des mesures sp\u00e9cifiques qui concernent les documents Grist que nous h\u00e9bergeons pour vous : Les serveurs Grist fonctionnent sur l\u2019infrastructure cloud d\u2019Amazon Web Services (AWS), aux \u00c9tats-Unis. AWS S3 est utilis\u00e9 pour le stockage \u00e0 long terme, et stocke les documents sous forme crypt\u00e9e. Les donn\u00e9es sont stock\u00e9es aux \u00c9tats-Unis. Les employ\u00e9s de Grist ne regardent jamais vos donn\u00e9es et ne peuvent pas ouvrir vos documents. La seule exception est si vous choisissez de partager un document avec le support client afin d\u2019obtenir de l\u2019aide pour un probl\u00e8me. Lorsqu\u2019elles sont trait\u00e9es, vos donn\u00e9es existeront par n\u00e9cessit\u00e9 sous forme non crypt\u00e9e dans certains des syst\u00e8mes internes de Grist. Seuls certains employ\u00e9s cl\u00e9s ont un acc\u00e8s complet \u00e0 ces syst\u00e8mes, et la politique leur interdit de regarder \u00e0 l\u2019int\u00e9rieur des documents. Le HTTPS s\u00e9curis\u00e9 est utilis\u00e9 pour tout acc\u00e8s \u00e0 Grist via Internet public (\u00e0 la fois pour le site web et les appels API). Des sauvegardes r\u00e9guli\u00e8res des documents Grist sont effectu\u00e9es et sont stock\u00e9es sous forme crypt\u00e9e. Grist conserve des instantan\u00e9s plus fr\u00e9quents des changements r\u00e9cents, et des instantan\u00e9s moins fr\u00e9quents au fur et \u00e0 mesure que vous remontez dans le temps. Si vous supprimez un document, il restera pendant 30 jours dans un dossier Corbeille sous votre contr\u00f4le. \u00c0 tout moment, une option \u201cSupprimer d\u00e9finitivement\u201d peut \u00eatre utilis\u00e9e pour purger imm\u00e9diatement un document dans ce dossier. Toutes les sauvegardes automatiques sont purg\u00e9es avec le document. Le produit Grist h\u00e9berg\u00e9 n\u2019a pas encore \u00e9t\u00e9 certifi\u00e9 ou audit\u00e9 pour la conformit\u00e9 SOC 2, ISO 27001, HIPAA ou RGPD. Si vous avez besoin de documentation sp\u00e9cifique, veuillez contacter le support client. Vous pouvez \u00e9galement nous encourager \u00e0 prioriser la certification par rapport au d\u00e9veloppement de fonctionnalit\u00e9s sur ce probl\u00e8me .","title":"Grist SaaS"},{"location":"data-security/#grist-auto-gere","text":"Pour Grist Auto-G\u00e9r\u00e9, vous avez un contr\u00f4le total sur l\u2019emplacement des serveurs et le lieu de stockage des donn\u00e9es. Voici quelques consid\u00e9rations de s\u00e9curit\u00e9 \u00e0 garder \u00e0 l\u2019esprit : Le logiciel Grist est distribu\u00e9 via l\u2019organisation gristlabs sur github et docker hub . Veuillez faire preuve de diligence si vous acc\u00e9dez au logiciel ailleurs, car le logiciel que vous installez aura un acc\u00e8s complet \u00e0 vos donn\u00e9es. Les documents Grist prennent en charge des formules Python puissantes. Veuillez pr\u00eater attention aux instructions pour configurer le sandboxing si votre \u00e9quipe peut travailler avec des documents non fiables. Par d\u00e9faut, Grist est accueillant pour les utilisateurs anonymes, leur permettant de cr\u00e9er et de modifier leurs propres documents. Vous pouvez souhaiter configurer une disposition plus stricte . Grist ne rend pas les services externes obligatoires, car cela introduirait des obstacles inutiles dans certains sc\u00e9narios. Par exemple, une personne \u00e9ditant un document Grist hors ligne sur son propre bureau ne devrait pas avoir besoin d\u2019installer une base de donn\u00e9es PostgreSQL d\u2019abord. Mais il est important d\u2019\u00e9valuer ce dont vous avez besoin dans votre situation plut\u00f4t que de simplement vous en tenir aux param\u00e8tres par d\u00e9faut. Veuillez lire \u00e0 propos des donn\u00e9es que Grist stocke et de vos options pour savoir o\u00f9 les stocker. Il est important de garder votre installation Grist \u00e0 jour .","title":"Grist Auto-G\u00e9r\u00e9"},{"location":"dates/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue d\u2019ensemble # Grist exprime les dates et les heures de deux mani\u00e8res. La premi\u00e8re est le type de colonne Date , qui repr\u00e9sente une date de calendrier, sans heure de la journ\u00e9e, et non associ\u00e9e \u00e0 un fuseau horaire particulier. La seconde est le type de colonne DateTime , qui repr\u00e9sente une date de calendrier avec une heure de la journ\u00e9e pouvant \u00eatre li\u00e9e \u00e0 un fuseau horaire. Les types de colonnes Date et DateTime prennent en charge diff\u00e9rentes options de formatage. Lorsqu\u2019une colonne est d\u00e9finie comme Date ou DateTime , un widget de s\u00e9lection de date vous permet de choisir la date sur un calendrier lors de l\u2019\u00e9dition d\u2019une cellule. Lorsque vous travaillez avec des dates dans des formules, les dates sont des objets datetime Python. Cela vous permet de faire des choses puissantes, mais peut \u00eatre inattendu si vous n\u2019\u00eates pas familier avec eux. Cr\u00e9ation d\u2019une colonne date/heure # Pour une introduction g\u00e9n\u00e9rale \u00e0 la d\u00e9finition du type de colonnes, consultez Colonnes et types de donn\u00e9es . Pour indiquer \u00e0 Grist que vous avez l\u2019intention de saisir uniquement des dates/heures dans une colonne, allez dans l\u2019en-t\u00eate de la colonne, trouvez le menu d\u00e9roulant et s\u00e9lectionnez \u201cOptions de colonne\u201d. Ensuite, dans le panneau lat\u00e9ral qui s\u2019ouvre \u00e0 droite, choisissez \u201cDate\u201d dans le menu d\u00e9roulant \u201cType de colonne\u201d. Ou, si vous voulez des dates avec des heures, choisissez \u201cDateTime\u201d. Ensuite, vous pouvez choisir votre format de date/heure pr\u00e9f\u00e9r\u00e9. Pour le type \u201cDateTime\u201d, vous pouvez \u00e9galement choisir le fuseau horaire. Lorsque vous convertissez une colonne d\u2019un autre type, tel que \u201cTexte\u201d, vous verrez un aper\u00e7u des r\u00e9sultats de la conversion et devrez cliquer sur \u201cAppliquer\u201d pour terminer la conversion. Vous pouvez revenir et modifier les param\u00e8tres \u00e0 tout moment. Maintenant, lorsque vous \u00e9ditez une cellule dans cette colonne, vous aurez de l\u2019aide pour s\u00e9lectionner les dates et les heures. Insertion de la date actuelle # Vous pouvez ins\u00e9rer la date actuelle dans une cellule en utilisant \u2318 + ; (point-virgule) (Mac) ou Ctrl + ; (Windows). Vous pouvez ins\u00e9rer la date et l\u2019heure actuelles en utilisant \u2318 + Shift + ; (Mac) ou Ctrl + Shift + ; (Windows). Lors de l\u2019\u00e9dition d\u2019une cellule de date, le widget de saisie de date dispose d\u2019un bouton \u201caujourd\u2019hui\u201d pour la date du jour. Analyse des dates \u00e0 partir de cha\u00eenes # La fonction DATEVALUE convertit une cha\u00eene qui repr\u00e9sente une date en un objet datetime . Elle est simple \u00e0 utiliser et d\u00e9tectera automatiquement diff\u00e9rents formats de date : Vous pouvez \u00e9galement utiliser la biblioth\u00e8que datetime de Python, qui fournit deux fonctions utiles : strptime() et strftime() . Par exemple, disons que vous avez une table de suites de films et leurs dates de sortie (en tant que cha\u00eenes). Vous souhaitez analyser la date r\u00e9elle pour pouvoir trier correctement la table. Voici comment vous feriez cela : La premi\u00e8re ligne importe la biblioth\u00e8que datetime La deuxi\u00e8me ligne divise la cha\u00eene en deux parties et renvoie la deuxi\u00e8me partie (les tableaux Python sont bas\u00e9s sur z\u00e9ro). La troisi\u00e8me ligne utilise la fonction strptime de Python pour analyser la date (par exemple, \u201c19 mai 1999\u201d) en un objet datetime. Le premier param\u00e8tre de la fonction est la cha\u00eene \u00e0 analyser, le deuxi\u00e8me param\u00e8tre est le format de date dans lequel se trouve la cha\u00eene. Consultez les options de format pour voir si la cha\u00eene de format d\u2019exemple %B %d, %Y a du sens. (Remarque : Vous auriez \u00e9galement pu utiliser DATEVALUE(d) pour obtenir le m\u00eame r\u00e9sultat.) Le r\u00e9sultat a une v\u00e9ritable colonne de date et peut maintenant \u00eatre tri\u00e9 correctement par ordre chronologique, avec \u201cUn nouvel espoir\u201d en haut. Pour des raisons historiques, le premier film Star Wars est consid\u00e9r\u00e9 comme l\u2019\u00e9pisode 4. Et, parce que le type de colonne est s\u00e9lectionn\u00e9 comme une date, vous pouvez utiliser le \u201cFormat de date\u201d dans \u201cOptions de colonne\u201d pour s\u00e9lectionner le format dans lequel afficher la date. Pour certaines situations, vous pouvez souhaiter utiliser la biblioth\u00e8que python dateutil . Par exemple, si vous vivez dans une r\u00e9gion o\u00f9 les dates commencent g\u00e9n\u00e9ralement par le jour puis le mois, vous pouvez utiliser cette formule : import dateutil dateutil.parser.parse($date_text, dayfirst=True) Calculs de dates # Une fois que vous avez une colonne de date correcte, vous voudrez souvent effectuer des calculs de dates, comme calculer la diff\u00e9rence entre deux dates. La mani\u00e8re la plus simple de le faire est d\u2019utiliser la fonction DATEDIF qui prend deux dates et l\u2019unit\u00e9 d\u2019information \u00e0 retourner (Jours, Mois ou Ann\u00e9es). Vous pouvez \u00e9galement utiliser le signe moins pour soustraire deux dates, mais vous pourriez \u00eatre surpris par le r\u00e9sultat : Cela se produit parce que la soustraction de deux objets datetime comme nous l\u2019avons fait dans l\u2019exemple ci-dessus, donne un objet datetime.timedelta qui repr\u00e9sente \u201cUne dur\u00e9e exprimant la diff\u00e9rence entre deux instances de date, heure ou datetime \u00e0 une r\u00e9solution de microseconde.\u201d Dans Grist (et Python), vous devez \u00eatre plus pr\u00e9cis sur la fa\u00e7on dont vous souhaitez afficher la diff\u00e9rence de date. Par exemple, pour obtenir le nombre de jours \u00e0 partir de l\u2019objet timedelta retourn\u00e9, utilisez sa propri\u00e9t\u00e9 .days : Si vous voulez des semaines ou des ann\u00e9es, divisez simplement par 7 ou par 365. (Divisez par 7.0 ou 365.0 pour inclure une partie fractionnaire dans le r\u00e9sultat.) Si vous voulez des heures, multipliez par 24. Vous pouvez \u00e9galement utiliser des fonctions sp\u00e9cifiques pour obtenir ce que vous voulez. Par exemple, DAYS est une fonction courante dans les applications de tableur qui renvoie la diff\u00e9rence entre deux dates : DAYS($Last_day, $First_day) Formules Excel/Sheets Grist prend en charge de nombreuses autres fonctions courantes d\u2019autres applications de tableur, y compris DATEADD , DATEDIF , DATEVALUE , MONTH , HOUR , et bien d\u2019autres . Obtenir une partie de la date # Vous avez vu comment analyser la date, l\u2019afficher dans diff\u00e9rents formats et effectuer des calculs de dates. Mais que faire si vous voulez obtenir plus d\u2019informations sur une date sp\u00e9cifique, comme obtenir son jour de la semaine ? Une option est d\u2019utiliser la fonction WEEKDAY , qui se comporte comme dans Excel, renvoyant 1-7 pour dimanche-samedi. Alternativement, nous pouvons utiliser la fonction strftime : Une autre option serait de reformater la date en utilisant le format de date dans les options de colonne (voir la r\u00e9f\u00e9rence de formatage de date ). Fuseaux horaires # Les valeurs dans les colonnes DateTime repr\u00e9sentent des moments dans le temps. Le m\u00eame moment appara\u00eetra diff\u00e9remment dans diff\u00e9rents fuseaux horaires. Dans Grist, le fuseau horaire est d\u00e9fini sur chaque colonne DateTime . Par exemple, si le fuseau horaire est d\u00e9fini sur \u201cAmerica/New_York\u201d, il affichera les valeurs dans le fuseau horaire de New York aux collaborateurs du monde entier. Un document Grist a un param\u00e8tre de fuseau horaire global, qui sert de fuseau horaire par d\u00e9faut lorsque vous cr\u00e9ez une nouvelle colonne de type DateTime . Ce fuseau horaire global est d\u00e9fini sur votre fuseau horaire local lorsque vous cr\u00e9ez un document pour la premi\u00e8re fois. Vous pouvez le voir ou le modifier en cliquant sur votre photo de profil ou ic\u00f4ne, et en s\u00e9lectionnant \u201cParam\u00e8tres du document\u201d. Si vous ins\u00e9rez la date et l\u2019heure actuelles en utilisant \u2318 + Shift + ; (Mac) ou Ctrl + Shift + ; (Windows) dans une colonne DateTime , elle sera ins\u00e9r\u00e9e comme un v\u00e9ritable horodatage conscient du fuseau horaire, et affich\u00e9e avec le fuseau horaire d\u00e9fini pour cette colonne. Si vous faites de m\u00eame dans une colonne Texte , la date/heure sera ins\u00e9r\u00e9e comme le texte appropri\u00e9 pour le param\u00e8tre de fuseau horaire global du document. De m\u00eame, ins\u00e9rer la date actuelle dans une colonne Date produira la date actuelle selon le fuseau horaire du document. Ressources suppl\u00e9mentaires # Cheatsheet Python pour strftime , \u00e0 utiliser avec strftime() et strptime() dans les formules. Cheatsheet de formatage de date , pour sp\u00e9cifier le format date/heure dans les param\u00e8tres de colonne. Biblioth\u00e8que dateutil , extensions au module standard datetime de Python.","title":"Working with dates"},{"location":"dates/#vue-densemble","text":"Grist exprime les dates et les heures de deux mani\u00e8res. La premi\u00e8re est le type de colonne Date , qui repr\u00e9sente une date de calendrier, sans heure de la journ\u00e9e, et non associ\u00e9e \u00e0 un fuseau horaire particulier. La seconde est le type de colonne DateTime , qui repr\u00e9sente une date de calendrier avec une heure de la journ\u00e9e pouvant \u00eatre li\u00e9e \u00e0 un fuseau horaire. Les types de colonnes Date et DateTime prennent en charge diff\u00e9rentes options de formatage. Lorsqu\u2019une colonne est d\u00e9finie comme Date ou DateTime , un widget de s\u00e9lection de date vous permet de choisir la date sur un calendrier lors de l\u2019\u00e9dition d\u2019une cellule. Lorsque vous travaillez avec des dates dans des formules, les dates sont des objets datetime Python. Cela vous permet de faire des choses puissantes, mais peut \u00eatre inattendu si vous n\u2019\u00eates pas familier avec eux.","title":"Vue d’ensemble"},{"location":"dates/#creation-dune-colonne-dateheure","text":"Pour une introduction g\u00e9n\u00e9rale \u00e0 la d\u00e9finition du type de colonnes, consultez Colonnes et types de donn\u00e9es . Pour indiquer \u00e0 Grist que vous avez l\u2019intention de saisir uniquement des dates/heures dans une colonne, allez dans l\u2019en-t\u00eate de la colonne, trouvez le menu d\u00e9roulant et s\u00e9lectionnez \u201cOptions de colonne\u201d. Ensuite, dans le panneau lat\u00e9ral qui s\u2019ouvre \u00e0 droite, choisissez \u201cDate\u201d dans le menu d\u00e9roulant \u201cType de colonne\u201d. Ou, si vous voulez des dates avec des heures, choisissez \u201cDateTime\u201d. Ensuite, vous pouvez choisir votre format de date/heure pr\u00e9f\u00e9r\u00e9. Pour le type \u201cDateTime\u201d, vous pouvez \u00e9galement choisir le fuseau horaire. Lorsque vous convertissez une colonne d\u2019un autre type, tel que \u201cTexte\u201d, vous verrez un aper\u00e7u des r\u00e9sultats de la conversion et devrez cliquer sur \u201cAppliquer\u201d pour terminer la conversion. Vous pouvez revenir et modifier les param\u00e8tres \u00e0 tout moment. Maintenant, lorsque vous \u00e9ditez une cellule dans cette colonne, vous aurez de l\u2019aide pour s\u00e9lectionner les dates et les heures.","title":"Cr\u00e9ation d’une colonne date/heure"},{"location":"dates/#insertion-de-la-date-actuelle","text":"Vous pouvez ins\u00e9rer la date actuelle dans une cellule en utilisant \u2318 + ; (point-virgule) (Mac) ou Ctrl + ; (Windows). Vous pouvez ins\u00e9rer la date et l\u2019heure actuelles en utilisant \u2318 + Shift + ; (Mac) ou Ctrl + Shift + ; (Windows). Lors de l\u2019\u00e9dition d\u2019une cellule de date, le widget de saisie de date dispose d\u2019un bouton \u201caujourd\u2019hui\u201d pour la date du jour.","title":"Insertion de la date actuelle"},{"location":"dates/#analyse-des-dates-a-partir-de-chaines","text":"La fonction DATEVALUE convertit une cha\u00eene qui repr\u00e9sente une date en un objet datetime . Elle est simple \u00e0 utiliser et d\u00e9tectera automatiquement diff\u00e9rents formats de date : Vous pouvez \u00e9galement utiliser la biblioth\u00e8que datetime de Python, qui fournit deux fonctions utiles : strptime() et strftime() . Par exemple, disons que vous avez une table de suites de films et leurs dates de sortie (en tant que cha\u00eenes). Vous souhaitez analyser la date r\u00e9elle pour pouvoir trier correctement la table. Voici comment vous feriez cela : La premi\u00e8re ligne importe la biblioth\u00e8que datetime La deuxi\u00e8me ligne divise la cha\u00eene en deux parties et renvoie la deuxi\u00e8me partie (les tableaux Python sont bas\u00e9s sur z\u00e9ro). La troisi\u00e8me ligne utilise la fonction strptime de Python pour analyser la date (par exemple, \u201c19 mai 1999\u201d) en un objet datetime. Le premier param\u00e8tre de la fonction est la cha\u00eene \u00e0 analyser, le deuxi\u00e8me param\u00e8tre est le format de date dans lequel se trouve la cha\u00eene. Consultez les options de format pour voir si la cha\u00eene de format d\u2019exemple %B %d, %Y a du sens. (Remarque : Vous auriez \u00e9galement pu utiliser DATEVALUE(d) pour obtenir le m\u00eame r\u00e9sultat.) Le r\u00e9sultat a une v\u00e9ritable colonne de date et peut maintenant \u00eatre tri\u00e9 correctement par ordre chronologique, avec \u201cUn nouvel espoir\u201d en haut. Pour des raisons historiques, le premier film Star Wars est consid\u00e9r\u00e9 comme l\u2019\u00e9pisode 4. Et, parce que le type de colonne est s\u00e9lectionn\u00e9 comme une date, vous pouvez utiliser le \u201cFormat de date\u201d dans \u201cOptions de colonne\u201d pour s\u00e9lectionner le format dans lequel afficher la date. Pour certaines situations, vous pouvez souhaiter utiliser la biblioth\u00e8que python dateutil . Par exemple, si vous vivez dans une r\u00e9gion o\u00f9 les dates commencent g\u00e9n\u00e9ralement par le jour puis le mois, vous pouvez utiliser cette formule : import dateutil dateutil.parser.parse($date_text, dayfirst=True)","title":"Analyse des dates \u00e0 partir de cha\u00eenes"},{"location":"dates/#calculs-de-dates","text":"Une fois que vous avez une colonne de date correcte, vous voudrez souvent effectuer des calculs de dates, comme calculer la diff\u00e9rence entre deux dates. La mani\u00e8re la plus simple de le faire est d\u2019utiliser la fonction DATEDIF qui prend deux dates et l\u2019unit\u00e9 d\u2019information \u00e0 retourner (Jours, Mois ou Ann\u00e9es). Vous pouvez \u00e9galement utiliser le signe moins pour soustraire deux dates, mais vous pourriez \u00eatre surpris par le r\u00e9sultat : Cela se produit parce que la soustraction de deux objets datetime comme nous l\u2019avons fait dans l\u2019exemple ci-dessus, donne un objet datetime.timedelta qui repr\u00e9sente \u201cUne dur\u00e9e exprimant la diff\u00e9rence entre deux instances de date, heure ou datetime \u00e0 une r\u00e9solution de microseconde.\u201d Dans Grist (et Python), vous devez \u00eatre plus pr\u00e9cis sur la fa\u00e7on dont vous souhaitez afficher la diff\u00e9rence de date. Par exemple, pour obtenir le nombre de jours \u00e0 partir de l\u2019objet timedelta retourn\u00e9, utilisez sa propri\u00e9t\u00e9 .days : Si vous voulez des semaines ou des ann\u00e9es, divisez simplement par 7 ou par 365. (Divisez par 7.0 ou 365.0 pour inclure une partie fractionnaire dans le r\u00e9sultat.) Si vous voulez des heures, multipliez par 24. Vous pouvez \u00e9galement utiliser des fonctions sp\u00e9cifiques pour obtenir ce que vous voulez. Par exemple, DAYS est une fonction courante dans les applications de tableur qui renvoie la diff\u00e9rence entre deux dates : DAYS($Last_day, $First_day) Formules Excel/Sheets Grist prend en charge de nombreuses autres fonctions courantes d\u2019autres applications de tableur, y compris DATEADD , DATEDIF , DATEVALUE , MONTH , HOUR , et bien d\u2019autres .","title":"Calculs de dates"},{"location":"dates/#obtenir-une-partie-de-la-date","text":"Vous avez vu comment analyser la date, l\u2019afficher dans diff\u00e9rents formats et effectuer des calculs de dates. Mais que faire si vous voulez obtenir plus d\u2019informations sur une date sp\u00e9cifique, comme obtenir son jour de la semaine ? Une option est d\u2019utiliser la fonction WEEKDAY , qui se comporte comme dans Excel, renvoyant 1-7 pour dimanche-samedi. Alternativement, nous pouvons utiliser la fonction strftime : Une autre option serait de reformater la date en utilisant le format de date dans les options de colonne (voir la r\u00e9f\u00e9rence de formatage de date ).","title":"Obtenir une partie de la date"},{"location":"dates/#fuseaux-horaires","text":"Les valeurs dans les colonnes DateTime repr\u00e9sentent des moments dans le temps. Le m\u00eame moment appara\u00eetra diff\u00e9remment dans diff\u00e9rents fuseaux horaires. Dans Grist, le fuseau horaire est d\u00e9fini sur chaque colonne DateTime . Par exemple, si le fuseau horaire est d\u00e9fini sur \u201cAmerica/New_York\u201d, il affichera les valeurs dans le fuseau horaire de New York aux collaborateurs du monde entier. Un document Grist a un param\u00e8tre de fuseau horaire global, qui sert de fuseau horaire par d\u00e9faut lorsque vous cr\u00e9ez une nouvelle colonne de type DateTime . Ce fuseau horaire global est d\u00e9fini sur votre fuseau horaire local lorsque vous cr\u00e9ez un document pour la premi\u00e8re fois. Vous pouvez le voir ou le modifier en cliquant sur votre photo de profil ou ic\u00f4ne, et en s\u00e9lectionnant \u201cParam\u00e8tres du document\u201d. Si vous ins\u00e9rez la date et l\u2019heure actuelles en utilisant \u2318 + Shift + ; (Mac) ou Ctrl + Shift + ; (Windows) dans une colonne DateTime , elle sera ins\u00e9r\u00e9e comme un v\u00e9ritable horodatage conscient du fuseau horaire, et affich\u00e9e avec le fuseau horaire d\u00e9fini pour cette colonne. Si vous faites de m\u00eame dans une colonne Texte , la date/heure sera ins\u00e9r\u00e9e comme le texte appropri\u00e9 pour le param\u00e8tre de fuseau horaire global du document. De m\u00eame, ins\u00e9rer la date actuelle dans une colonne Date produira la date actuelle selon le fuseau horaire du document.","title":"Fuseaux horaires"},{"location":"dates/#ressources-supplementaires","text":"Cheatsheet Python pour strftime , \u00e0 utiliser avec strftime() et strptime() dans les formules. Cheatsheet de formatage de date , pour sp\u00e9cifier le format date/heure dans les param\u00e8tres de colonne. Biblioth\u00e8que dateutil , extensions au module standard datetime de Python.","title":"Ressources suppl\u00e9mentaires"},{"location":"document-history/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Historique du document # Pour acc\u00e9der aux informations sur l\u2019historique d\u2019un document, cliquez sur \u201cHistorique du document\u201d dans le panneau de gauche. Le panneau de droite proposera alors deux onglets, \u201cActivit\u00e9\u201d et \u201cInstantan\u00e9s\u201d. Instantan\u00e9s # Grist enregistre automatiquement des sauvegardes compl\u00e8tes de vos documents au fur et \u00e0 mesure que vous travaillez dessus, les rendant disponibles dans l\u2019onglet Instantan\u00e9s. Lisez Sauvegardes automatiques pour plus de d\u00e9tails sur l\u2019utilisation de cet onglet pour examiner, comparer et restaurer des versions ant\u00e9rieures d\u2019un document. Activit\u00e9 # L\u2019onglet Activit\u00e9 r\u00e9pertorie tous les changements r\u00e9cents pour la table associ\u00e9e \u00e0 la vue que vous consultez actuellement. Cochez la case \u201cToutes les tables\u201d pour voir les changements r\u00e9cents dans le document, quelle que soit la table. Les changements sont affich\u00e9s sous forme de petits extraits de table. Les cellules sont cliquables et vous am\u00e8nent \u00e0 la version actuelle de la cellule (si elle existe encore) dans la vue \u201cprincipale\u201d pour la table la contenant (il s\u2019agit g\u00e9n\u00e9ralement de la premi\u00e8re vue cr\u00e9\u00e9e montrant la table).","title":"Document history"},{"location":"document-history/#historique-du-document","text":"Pour acc\u00e9der aux informations sur l\u2019historique d\u2019un document, cliquez sur \u201cHistorique du document\u201d dans le panneau de gauche. Le panneau de droite proposera alors deux onglets, \u201cActivit\u00e9\u201d et \u201cInstantan\u00e9s\u201d.","title":"Historique du document"},{"location":"document-history/#instantanes","text":"Grist enregistre automatiquement des sauvegardes compl\u00e8tes de vos documents au fur et \u00e0 mesure que vous travaillez dessus, les rendant disponibles dans l\u2019onglet Instantan\u00e9s. Lisez Sauvegardes automatiques pour plus de d\u00e9tails sur l\u2019utilisation de cet onglet pour examiner, comparer et restaurer des versions ant\u00e9rieures d\u2019un document.","title":"Instantan\u00e9s"},{"location":"document-history/#activite","text":"L\u2019onglet Activit\u00e9 r\u00e9pertorie tous les changements r\u00e9cents pour la table associ\u00e9e \u00e0 la vue que vous consultez actuellement. Cochez la case \u201cToutes les tables\u201d pour voir les changements r\u00e9cents dans le document, quelle que soit la table. Les changements sont affich\u00e9s sous forme de petits extraits de table. Les cellules sont cliquables et vous am\u00e8nent \u00e0 la version actuelle de la cellule (si elle existe encore) dans la vue \u201cprincipale\u201d pour la table la contenant (il s\u2019agit g\u00e9n\u00e9ralement de la premi\u00e8re vue cr\u00e9\u00e9e montrant la table).","title":"Activit\u00e9"},{"location":"embedding/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Int\u00e9grer Grist # Peut-\u00eatre souhaitez-vous lister vos produits, prix et quantit\u00e9s sur votre site web, ou vous voulez afficher un graphique en camembert des r\u00e9sultats de vote qui se met \u00e0 jour en direct. Avec l\u2019acc\u00e8s public activ\u00e9, vous pouvez int\u00e9grer votre document Grist sur votre propre site. Pour ce faire, vous devez d\u2019abord le rendre public et avoir acc\u00e8s au code de votre site web afin de placer du code HTML \u00e0 l\u2019emplacement souhait\u00e9. Si votre site est h\u00e9berg\u00e9 sur une plateforme CMS cloud populaire (comme Blogger ou WordPress), vous pouvez trouver des blocs de code HTML dans l\u2019\u00e9diteur de th\u00e8me, ou vous devrez peut-\u00eatre utiliser un plugin pour acc\u00e9der au code de votre site. Si vous avez des probl\u00e8mes pour modifier votre site, n\u2019h\u00e9sitez pas \u00e0 nous demander ou \u00e0 poser une question sur notre Forum Communautaire . Une fois que vous avez d\u00e9cid\u00e9 o\u00f9 int\u00e9grer votre document, collez cet extrait de code dans votre fichier HTML : L\u2019attribut src pointe vers l\u2019URL de la page que vous souhaitez int\u00e9grer. Pour obtenir l\u2019 URL de votre document, naviguez simplement vers la page que vous souhaitez partager et copiez l\u2019URL depuis la barre d\u2019adresse du navigateur. Ajouter le param\u00e8tre ?embed=true \u00e0 la fin indique \u00e0 Grist qu\u2019il doit afficher uniquement le contenu de votre page, en supprimant tous les \u00e9l\u00e9ments qui ne sont pas n\u00e9cessaires pour la version int\u00e9gr\u00e9e. Vous pouvez ajuster les attributs height et width pour am\u00e9liorer l\u2019apparence sur votre site. Puisque ce document du Centre d\u2019Aide est un fichier HTML ordinaire, nous pouvons l\u2019essayer tout de suite ! Vous devriez voir ci-dessous une table en direct int\u00e9gr\u00e9e (et non une capture d\u2019\u00e9cran) provenant de l\u2019un de nos exemples : Ceci est une vue en direct et en lecture seule de la page Grist et elle se met \u00e0 jour d\u00e8s que quelqu\u2019un la modifie. Vous pouvez, bien s\u00fbr, int\u00e9grer n\u2019importe quelle page que vous souhaitez, y compris la vue fiche, les graphiques et toute page avec plusieurs sections. Voici deux autres exemples avec un graphique et une vue liste de fiches : Param\u00e8tres # Lecture seule vs. \u00c9ditable # Ajouter ?embed=true \u00e0 une URL partage la page en lecture seule tandis que ?style=singlePage peut \u00eatre \u00e9dit\u00e9e et suit les permissions avanc\u00e9es . Partager une Vue Int\u00e9gr\u00e9e Ajouter ?embed=true ou ?style=singlePage \u00e0 la fin de l\u2019URL d\u2019une page de document rend le document sans la barre d\u2019outils en haut, le menu de page \u00e0 gauche ou le panneau de cr\u00e9ateur \u00e0 droite. Pour en savoir plus sur le partage de lien, consultez Acc\u00e8s public et partage de lien . Apparence # Contr\u00f4lez l\u2019apparence d\u2019un iframe int\u00e9gr\u00e9 en assignant une apparence de th\u00e8me en ajoutant ?themeAppearance=light pour le mode clair ou ?themeAppearance=dark pour le mode sombre \u00e0 votre URL. Vous pouvez \u00e9galement remplacer le param\u00e8tre par d\u00e9faut du syst\u00e8me d\u2019exploitation en utilisant ?themeSyncWithOs=false . Cha\u00eenage des Param\u00e8tres Lors de l\u2019ajout de param\u00e8tres \u00e0 la fin de votre URL, le premier commence toujours par ? . Tous les param\u00e8tres suppl\u00e9mentaires commencent par & . Par exemple, https://templates.getgrist.com/6D8E2h2DQNwS/Task-Management/p/6?embed=true&themeAppearance=dark&themeSyncWithOs=false cr\u00e9e une vue int\u00e9gr\u00e9e, en lecture seule et force le mode sombre, ind\u00e9pendamment des param\u00e8tres de votre syst\u00e8me d\u2019exploitation.","title":"Embedding"},{"location":"embedding/#integrer-grist","text":"Peut-\u00eatre souhaitez-vous lister vos produits, prix et quantit\u00e9s sur votre site web, ou vous voulez afficher un graphique en camembert des r\u00e9sultats de vote qui se met \u00e0 jour en direct. Avec l\u2019acc\u00e8s public activ\u00e9, vous pouvez int\u00e9grer votre document Grist sur votre propre site. Pour ce faire, vous devez d\u2019abord le rendre public et avoir acc\u00e8s au code de votre site web afin de placer du code HTML \u00e0 l\u2019emplacement souhait\u00e9. Si votre site est h\u00e9berg\u00e9 sur une plateforme CMS cloud populaire (comme Blogger ou WordPress), vous pouvez trouver des blocs de code HTML dans l\u2019\u00e9diteur de th\u00e8me, ou vous devrez peut-\u00eatre utiliser un plugin pour acc\u00e9der au code de votre site. Si vous avez des probl\u00e8mes pour modifier votre site, n\u2019h\u00e9sitez pas \u00e0 nous demander ou \u00e0 poser une question sur notre Forum Communautaire . Une fois que vous avez d\u00e9cid\u00e9 o\u00f9 int\u00e9grer votre document, collez cet extrait de code dans votre fichier HTML : L\u2019attribut src pointe vers l\u2019URL de la page que vous souhaitez int\u00e9grer. Pour obtenir l\u2019 URL de votre document, naviguez simplement vers la page que vous souhaitez partager et copiez l\u2019URL depuis la barre d\u2019adresse du navigateur. Ajouter le param\u00e8tre ?embed=true \u00e0 la fin indique \u00e0 Grist qu\u2019il doit afficher uniquement le contenu de votre page, en supprimant tous les \u00e9l\u00e9ments qui ne sont pas n\u00e9cessaires pour la version int\u00e9gr\u00e9e. Vous pouvez ajuster les attributs height et width pour am\u00e9liorer l\u2019apparence sur votre site. Puisque ce document du Centre d\u2019Aide est un fichier HTML ordinaire, nous pouvons l\u2019essayer tout de suite ! Vous devriez voir ci-dessous une table en direct int\u00e9gr\u00e9e (et non une capture d\u2019\u00e9cran) provenant de l\u2019un de nos exemples : Ceci est une vue en direct et en lecture seule de la page Grist et elle se met \u00e0 jour d\u00e8s que quelqu\u2019un la modifie. Vous pouvez, bien s\u00fbr, int\u00e9grer n\u2019importe quelle page que vous souhaitez, y compris la vue fiche, les graphiques et toute page avec plusieurs sections. Voici deux autres exemples avec un graphique et une vue liste de fiches :","title":"Int\u00e9grer Grist"},{"location":"embedding/#parametres","text":"","title":"Param\u00e8tres"},{"location":"embedding/#lecture-seule-vs-editable","text":"Ajouter ?embed=true \u00e0 une URL partage la page en lecture seule tandis que ?style=singlePage peut \u00eatre \u00e9dit\u00e9e et suit les permissions avanc\u00e9es . Partager une Vue Int\u00e9gr\u00e9e Ajouter ?embed=true ou ?style=singlePage \u00e0 la fin de l\u2019URL d\u2019une page de document rend le document sans la barre d\u2019outils en haut, le menu de page \u00e0 gauche ou le panneau de cr\u00e9ateur \u00e0 droite. Pour en savoir plus sur le partage de lien, consultez Acc\u00e8s public et partage de lien .","title":"Lecture seule vs. \u00c9ditable"},{"location":"embedding/#apparence","text":"Contr\u00f4lez l\u2019apparence d\u2019un iframe int\u00e9gr\u00e9 en assignant une apparence de th\u00e8me en ajoutant ?themeAppearance=light pour le mode clair ou ?themeAppearance=dark pour le mode sombre \u00e0 votre URL. Vous pouvez \u00e9galement remplacer le param\u00e8tre par d\u00e9faut du syst\u00e8me d\u2019exploitation en utilisant ?themeSyncWithOs=false . Cha\u00eenage des Param\u00e8tres Lors de l\u2019ajout de param\u00e8tres \u00e0 la fin de votre URL, le premier commence toujours par ? . Tous les param\u00e8tres suppl\u00e9mentaires commencent par & . Par exemple, https://templates.getgrist.com/6D8E2h2DQNwS/Task-Management/p/6?embed=true&themeAppearance=dark&themeSyncWithOs=false cr\u00e9e une vue int\u00e9gr\u00e9e, en lecture seule et force le mode sombre, ind\u00e9pendamment des param\u00e8tres de votre syst\u00e8me d\u2019exploitation.","title":"Apparence"},{"location":"enter-data/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Saisie de donn\u00e9es # Une grille de type tableur est un excellent moyen de visualiser les donn\u00e9es. Dans Grist, c\u2019est la vue offerte par le widget de page par d\u00e9faut appel\u00e9 \u201cTable\u201d. Comme dans un tableur, vous pouvez utiliser la souris ou les touches fl\u00e9ch\u00e9es pour vous d\u00e9placer dans les cellules d\u2019une table. Pour commencer \u00e0 saisir des donn\u00e9es dans une cellule s\u00e9lectionn\u00e9e, commencez \u00e0 taper, appuyez sur Entr\u00e9e , ou double-cliquez sur la cellule. \u00c9dition des cellules # Lors de l\u2019\u00e9dition d\u2019une cellule, plusieurs touches sont sp\u00e9ciales : \u00c9chap annule l\u2019op\u00e9ration et restaure la valeur pr\u00e9c\u00e9dente dans la cellule. Tab , Maj + Tab enregistre votre entr\u00e9e et d\u00e9place votre curseur vers la cellule suivante ou pr\u00e9c\u00e9dente. Entr\u00e9e enregistre votre entr\u00e9e et d\u00e9place votre curseur vers la ligne suivante. Maj + Entr\u00e9e ajoute une nouvelle ligne dans votre cellule. Copier et coller # Vous pouvez copier des donn\u00e9es depuis Grist ou y coller des donn\u00e9es. Si l\u2019intervalle coll\u00e9 est plus long que les enregistrements disponibles, de nouveaux enregistrements seront ajout\u00e9s. Notez que Grist ne cr\u00e9e pas automatiquement de nouvelles colonnes. Si les donn\u00e9es coll\u00e9es ont plus de colonnes que celles affich\u00e9es par la grille, les colonnes suppl\u00e9mentaires seront omises. Widgets de saisie de donn\u00e9es # Dans Grist, les colonnes ont des types. En plus de taper des valeurs, de nombreux types de colonnes offrent des widgets sp\u00e9cialis\u00e9s pour saisir des donn\u00e9es plus facilement. Voici quelques-uns des plus utiles : Basculer . Une colonne \u201cBasculer\u201d affiche des valeurs Vrai/Faux et peut les afficher sous forme de \u201cCase \u00e0 cocher\u201d ou de \u201cCommutateur\u201d, que vous pouvez s\u00e9lectionner dans les options de la colonne. Vous pouvez basculer une valeur dans une telle cellule en cliquant sur la case \u00e0 cocher ou le commutateur, ou en appuyant sur Espace . Date et DateHeure . Appuyer sur Entr\u00e9e dans une telle cellule ouvrira un calendrier pour choisir une date. Choix et R\u00e9f\u00e9rence . Taper dans une cellule de l\u2019un de ces types produira un menu d\u00e9roulant de saisie semi-automatique. Lien vers les cellules # Vous pouvez cr\u00e9er un lien partageable vers une cellule en appuyant sur \u2318 \u21e7 A (Mac) ou Ctrl + Maj + A (Windows) lorsque la cellule est s\u00e9lectionn\u00e9e. Cette option est \u00e9galement disponible via le menu de la ligne sous \u201cCopier le lien d\u2019ancrage.\u201d Le lien sera plac\u00e9 dans votre presse-papiers, pr\u00eat \u00e0 \u00eatre coll\u00e9 dans un email ou une application de messagerie instantan\u00e9e. Le lien ne s\u2019ouvrira que pour les personnes ayant acc\u00e8s au document.","title":"Entering data"},{"location":"enter-data/#saisie-de-donnees","text":"Une grille de type tableur est un excellent moyen de visualiser les donn\u00e9es. Dans Grist, c\u2019est la vue offerte par le widget de page par d\u00e9faut appel\u00e9 \u201cTable\u201d. Comme dans un tableur, vous pouvez utiliser la souris ou les touches fl\u00e9ch\u00e9es pour vous d\u00e9placer dans les cellules d\u2019une table. Pour commencer \u00e0 saisir des donn\u00e9es dans une cellule s\u00e9lectionn\u00e9e, commencez \u00e0 taper, appuyez sur Entr\u00e9e , ou double-cliquez sur la cellule.","title":"Saisie de donn\u00e9es"},{"location":"enter-data/#edition-des-cellules","text":"Lors de l\u2019\u00e9dition d\u2019une cellule, plusieurs touches sont sp\u00e9ciales : \u00c9chap annule l\u2019op\u00e9ration et restaure la valeur pr\u00e9c\u00e9dente dans la cellule. Tab , Maj + Tab enregistre votre entr\u00e9e et d\u00e9place votre curseur vers la cellule suivante ou pr\u00e9c\u00e9dente. Entr\u00e9e enregistre votre entr\u00e9e et d\u00e9place votre curseur vers la ligne suivante. Maj + Entr\u00e9e ajoute une nouvelle ligne dans votre cellule.","title":"\u00c9dition des cellules"},{"location":"enter-data/#copier-et-coller","text":"Vous pouvez copier des donn\u00e9es depuis Grist ou y coller des donn\u00e9es. Si l\u2019intervalle coll\u00e9 est plus long que les enregistrements disponibles, de nouveaux enregistrements seront ajout\u00e9s. Notez que Grist ne cr\u00e9e pas automatiquement de nouvelles colonnes. Si les donn\u00e9es coll\u00e9es ont plus de colonnes que celles affich\u00e9es par la grille, les colonnes suppl\u00e9mentaires seront omises.","title":"Copier et coller"},{"location":"enter-data/#widgets-de-saisie-de-donnees","text":"Dans Grist, les colonnes ont des types. En plus de taper des valeurs, de nombreux types de colonnes offrent des widgets sp\u00e9cialis\u00e9s pour saisir des donn\u00e9es plus facilement. Voici quelques-uns des plus utiles : Basculer . Une colonne \u201cBasculer\u201d affiche des valeurs Vrai/Faux et peut les afficher sous forme de \u201cCase \u00e0 cocher\u201d ou de \u201cCommutateur\u201d, que vous pouvez s\u00e9lectionner dans les options de la colonne. Vous pouvez basculer une valeur dans une telle cellule en cliquant sur la case \u00e0 cocher ou le commutateur, ou en appuyant sur Espace . Date et DateHeure . Appuyer sur Entr\u00e9e dans une telle cellule ouvrira un calendrier pour choisir une date. Choix et R\u00e9f\u00e9rence . Taper dans une cellule de l\u2019un de ces types produira un menu d\u00e9roulant de saisie semi-automatique.","title":"Widgets de saisie de donn\u00e9es"},{"location":"enter-data/#lien-vers-les-cellules","text":"Vous pouvez cr\u00e9er un lien partageable vers une cellule en appuyant sur \u2318 \u21e7 A (Mac) ou Ctrl + Maj + A (Windows) lorsque la cellule est s\u00e9lectionn\u00e9e. Cette option est \u00e9galement disponible via le menu de la ligne sous \u201cCopier le lien d\u2019ancrage.\u201d Le lien sera plac\u00e9 dans votre presse-papiers, pr\u00eat \u00e0 \u00eatre coll\u00e9 dans un email ou une application de messagerie instantan\u00e9e. Le lien ne s\u2019ouvrira que pour les personnes ayant acc\u00e8s au document.","title":"Lien vers les cellules"},{"location":"examples/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Plus d\u2019exemples # Ici, nous publierons des exemples utiles de ce que vous pouvez faire avec Grist, parfois avec des mod\u00e8les pr\u00eats \u00e0 l\u2019emploi. Analyse des D\u00e9penses de Carte de Cr\u00e9dit : Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit. Les membres de la carte American Express peuvent utiliser le mod\u00e8le pr\u00eat \u00e0 l\u2019emploi dans l\u2019exemple. Listes de Livres avec Recherches en Biblioth\u00e8que et Magasin : La gestion des liens et les formules de Grist peuvent vous aider avec votre club de lecture, en ajoutant des liens automatiques vers des biblioth\u00e8ques, des magasins, des sites de critiques et d\u2019autres r\u00e9f\u00e9rences. Les m\u00eames id\u00e9es pourraient fonctionner avec les meubles Ikea, les commandes de nourriture, tout ce que vous aimez. Pr\u00e9parer des Emails en Utilisant des Formules : Transformez les cellules en liens qui ouvrent un programme de messagerie pour composer un nouveau message, et pr\u00e9-remplir ses destinataires, son objet, et plus encore. Pr\u00e9paration des Factures : Pr\u00e9visualisez des factures imprimables c\u00f4te \u00e0 c\u00f4te avec les donn\u00e9es de vos clients. Suivi de la Paie : Suivez facilement les taux, r\u00f4les et heures des employ\u00e9s, avec des r\u00e9sum\u00e9s de paie fiables et \u00e0 jour, et un historique d\u00e9taill\u00e9. Impression d\u2019\u00c9tiquettes de Courrier : Imprimez facilement des \u00e9tiquettes de courrier. Une vue personnalis\u00e9e prenant en charge les tailles d\u2019\u00e9tiquettes populaires permet de g\u00e9n\u00e9rer rapidement des \u00e9tiquettes et de les imprimer depuis Grist. Chasse au Tr\u00e9sor : Planifiez une chasse au tr\u00e9sor sans perdre le fil. Brainstormez des indices, puis assemblez-les en un parcours coh\u00e9rent. Carte : Affichez les emplacements list\u00e9s dans une table sur une carte. Gestion des T\u00e2ches pour \u00c9quipes : Cette liste de t\u00e2ches glorifi\u00e9e - similaire \u00e0 celle que nous utilisons en interne chez Grist labs - fonctionne bien pour g\u00e9rer les t\u00e2ches d\u2019une \u00e9quipe. Liste de Prospects : Une liste tr\u00e8s simple de prospects, assign\u00e9e \u00e0 des individus pour un suivi, avec le contr\u00f4le des affectations r\u00e9serv\u00e9 aux propri\u00e9taires du document. Comprendre les Cl\u00e9s de Lien : Apprenez \u00e0 cr\u00e9er des liens uniques qui partagent des vues limit\u00e9es de votre document Grist. Guide des Colonnes de R\u00e9f\u00e9rence : Ma\u00eetriser les Colonnes de R\u00e9f\u00e9rence en 3 \u00c9tapes. Guide des Tables R\u00e9sum\u00e9es : Ma\u00eetrisez les Tables R\u00e9sum\u00e9es avec 2 Concepts, en utilisant l\u2019exemple d\u2019un suivi de feuilles de temps, avec un suivi d\u00e9taill\u00e9 des comptes. Horodatages Automatiques et Tampons d\u2019Utilisateur : Apprenez \u00e0 cr\u00e9er des colonnes qui tamponnent l\u2019heure ou le nom d\u2019un utilisateur sur un enregistrement lorsqu\u2019il est cr\u00e9\u00e9 ou mis \u00e0 jour. Permissions Avanc\u00e9es pour Restreindre les Enregistrements en Double : Apprenez \u00e0 cr\u00e9er une condition dans les Permissions Avanc\u00e9es pour restreindre la cr\u00e9ation d\u2019un enregistrement en double. Cr\u00e9ation de Propositions et Contrats : Pr\u00e9visualisez des formulaires imprimables c\u00f4te \u00e0 c\u00f4te avec les donn\u00e9es de votre projet. Vous avez quelque chose \u00e0 partager ? # Vous avez votre propre mod\u00e8le \u00e0 partager avec le monde ? Envoyez-nous un email \u00e0 support@getgrist.com , et nous pourrions le pr\u00e9senter dans un futur post.","title":"More examples"},{"location":"examples/#plus-dexemples","text":"Ici, nous publierons des exemples utiles de ce que vous pouvez faire avec Grist, parfois avec des mod\u00e8les pr\u00eats \u00e0 l\u2019emploi. Analyse des D\u00e9penses de Carte de Cr\u00e9dit : Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit. Les membres de la carte American Express peuvent utiliser le mod\u00e8le pr\u00eat \u00e0 l\u2019emploi dans l\u2019exemple. Listes de Livres avec Recherches en Biblioth\u00e8que et Magasin : La gestion des liens et les formules de Grist peuvent vous aider avec votre club de lecture, en ajoutant des liens automatiques vers des biblioth\u00e8ques, des magasins, des sites de critiques et d\u2019autres r\u00e9f\u00e9rences. Les m\u00eames id\u00e9es pourraient fonctionner avec les meubles Ikea, les commandes de nourriture, tout ce que vous aimez. Pr\u00e9parer des Emails en Utilisant des Formules : Transformez les cellules en liens qui ouvrent un programme de messagerie pour composer un nouveau message, et pr\u00e9-remplir ses destinataires, son objet, et plus encore. Pr\u00e9paration des Factures : Pr\u00e9visualisez des factures imprimables c\u00f4te \u00e0 c\u00f4te avec les donn\u00e9es de vos clients. Suivi de la Paie : Suivez facilement les taux, r\u00f4les et heures des employ\u00e9s, avec des r\u00e9sum\u00e9s de paie fiables et \u00e0 jour, et un historique d\u00e9taill\u00e9. Impression d\u2019\u00c9tiquettes de Courrier : Imprimez facilement des \u00e9tiquettes de courrier. Une vue personnalis\u00e9e prenant en charge les tailles d\u2019\u00e9tiquettes populaires permet de g\u00e9n\u00e9rer rapidement des \u00e9tiquettes et de les imprimer depuis Grist. Chasse au Tr\u00e9sor : Planifiez une chasse au tr\u00e9sor sans perdre le fil. Brainstormez des indices, puis assemblez-les en un parcours coh\u00e9rent. Carte : Affichez les emplacements list\u00e9s dans une table sur une carte. Gestion des T\u00e2ches pour \u00c9quipes : Cette liste de t\u00e2ches glorifi\u00e9e - similaire \u00e0 celle que nous utilisons en interne chez Grist labs - fonctionne bien pour g\u00e9rer les t\u00e2ches d\u2019une \u00e9quipe. Liste de Prospects : Une liste tr\u00e8s simple de prospects, assign\u00e9e \u00e0 des individus pour un suivi, avec le contr\u00f4le des affectations r\u00e9serv\u00e9 aux propri\u00e9taires du document. Comprendre les Cl\u00e9s de Lien : Apprenez \u00e0 cr\u00e9er des liens uniques qui partagent des vues limit\u00e9es de votre document Grist. Guide des Colonnes de R\u00e9f\u00e9rence : Ma\u00eetriser les Colonnes de R\u00e9f\u00e9rence en 3 \u00c9tapes. Guide des Tables R\u00e9sum\u00e9es : Ma\u00eetrisez les Tables R\u00e9sum\u00e9es avec 2 Concepts, en utilisant l\u2019exemple d\u2019un suivi de feuilles de temps, avec un suivi d\u00e9taill\u00e9 des comptes. Horodatages Automatiques et Tampons d\u2019Utilisateur : Apprenez \u00e0 cr\u00e9er des colonnes qui tamponnent l\u2019heure ou le nom d\u2019un utilisateur sur un enregistrement lorsqu\u2019il est cr\u00e9\u00e9 ou mis \u00e0 jour. Permissions Avanc\u00e9es pour Restreindre les Enregistrements en Double : Apprenez \u00e0 cr\u00e9er une condition dans les Permissions Avanc\u00e9es pour restreindre la cr\u00e9ation d\u2019un enregistrement en double. Cr\u00e9ation de Propositions et Contrats : Pr\u00e9visualisez des formulaires imprimables c\u00f4te \u00e0 c\u00f4te avec les donn\u00e9es de votre projet.","title":"Plus d’exemples"},{"location":"examples/#vous-avez-quelque-chose-a-partager","text":"Vous avez votre propre mod\u00e8le \u00e0 partager avec le monde ? Envoyez-nous un email \u00e0 support@getgrist.com , et nous pourrions le pr\u00e9senter dans un futur post.","title":"Vous avez quelque chose \u00e0 partager ?"},{"location":"exports/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Exportation # Exporter une table # Si vous souhaitez exporter une table vers une autre feuille de calcul ou une base de donn\u00e9es, vous pouvez exporter cette table soit en fichier XLSX, soit en CSV, un format d\u2019\u00e9change courant pour les donn\u00e9es. Pour ce faire, ouvrez votre document \u00e0 la table ou \u00e0 la vue souhait\u00e9e. Ensuite, cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la vue. S\u00e9lectionnez soit \u201cT\u00e9l\u00e9charger en CSV\u201d soit \u201cT\u00e9l\u00e9charger en XLSX\u201d. Votre navigateur t\u00e9l\u00e9chargera alors un fichier contenant une ligne d\u2019en-t\u00eate nommant vos colonnes, \u00e0 l\u2019exclusion de toute colonne masqu\u00e9e ou ligne filtr\u00e9e, suivie de toutes les lignes de donn\u00e9es visibles dans la table. Exporter un document # Si vous souhaitez exporter toutes les tables au format Excel, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cExporter XLSX\u201d. Votre navigateur t\u00e9l\u00e9chargera alors un fichier Excel, o\u00f9 chaque table est une feuille distincte contenant toutes les lignes, sans aucun filtre appliqu\u00e9. Pour utiliser cette option, vous devez avoir un acc\u00e8s complet en lecture pour toutes les tables d\u2019un document. Une note \u00e0 propos de \u201cExporter CSV\u201d dans le menu de partage. Lorsque vous \u00eates sur une page avec plusieurs vues, \u201cExporter CSV\u201d n\u2019exportera que les donn\u00e9es de la vue actuellement s\u00e9lectionn\u00e9e. Pour exporter toutes vos donn\u00e9es, utilisez \u201cExporter XLSX\u201d ou l\u2019option \u201cT\u00e9l\u00e9charger\u201d qui est expliqu\u00e9e ci-dessous dans sauvegarder un document entier . Envoyer vers Google Drive # Si vous souhaitez exporter un document vers Google Drive en tant que fichier Google Sheet, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cEnvoyer vers Google Drive\u201d. Grist vous demandera d\u2019abord de vous connecter \u00e0 votre compte Google (ou d\u2019utiliser un compte auquel vous \u00eates d\u00e9j\u00e0 connect\u00e9) puis d\u2019autoriser la cr\u00e9ation d\u2019un fichier dans votre Google Drive. Grist pourra cr\u00e9er de nouveaux fichiers et les g\u00e9rer, mais ne pourra pas acc\u00e9der \u00e0 d\u2019autres fichiers dans votre drive. Une fois que vous acceptez la demande d\u2019autorisation, Grist exportera votre document en un fichier Excel puis le sauvegardera dans votre Google Drive en tant que fichier Google Sheet. Pour utiliser cette option, vous devez avoir un acc\u00e8s complet en lecture pour toutes les tables d\u2019un document. Sauvegarder un document entier # Grist effectue automatiquement des sauvegardes r\u00e9guli\u00e8res des documents, comme d\u00e9crit dans Sauvegardes Automatiques . Vous pouvez \u00e9galement effectuer des sauvegardes manuelles en enregistrant des copies des documents dans votre compte Grist. De plus, les documents Grist peuvent \u00eatre t\u00e9l\u00e9charg\u00e9s dans leur int\u00e9gralit\u00e9 sous forme de fichier de base de donn\u00e9es SQLite avec une extension .grist . SQLite est un format de base de donn\u00e9es populaire. Le fichier t\u00e9l\u00e9charg\u00e9 contiendra toutes vos donn\u00e9es tabulaires, tous les fichiers joints dans ces tables, les m\u00e9tadonn\u00e9es sur vos tables, pages et vues, ainsi qu\u2019un historique des modifications r\u00e9centes du document. Il ne contiendra pas d\u2019informations sur les personnes avec qui le document est partag\u00e9. Pour t\u00e9l\u00e9charger un document Grist, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran, et s\u00e9lectionnez \u201cT\u00e9l\u00e9charger\u201d. Restaurer \u00e0 partir d\u2019une sauvegarde # Un fichier .grist t\u00e9l\u00e9charg\u00e9 peut \u00eatre t\u00e9l\u00e9charg\u00e9 \u00e0 nouveau pour fournir une copie exacte de l\u2019original. Pour t\u00e9l\u00e9charger le fichier, ouvrez l\u2019espace d\u2019\u00e9quipe ou l\u2019espace personnel o\u00f9 vous souhaitez le placer, et s\u00e9lectionnez \u00e9ventuellement aussi un dossier. Ensuite, cliquez sur \u201cAjouter Nouveau\u201d en haut \u00e0 gauche, et s\u00e9lectionnez \u201cImporter un document\u201d. Vous pouvez \u00e9galement importer des fichiers CSV et Excel comme nouveaux documents Grist de cette mani\u00e8re.","title":"Exports & backups"},{"location":"exports/#exportation","text":"","title":"Exportation"},{"location":"exports/#exporter-une-table","text":"Si vous souhaitez exporter une table vers une autre feuille de calcul ou une base de donn\u00e9es, vous pouvez exporter cette table soit en fichier XLSX, soit en CSV, un format d\u2019\u00e9change courant pour les donn\u00e9es. Pour ce faire, ouvrez votre document \u00e0 la table ou \u00e0 la vue souhait\u00e9e. Ensuite, cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la vue. S\u00e9lectionnez soit \u201cT\u00e9l\u00e9charger en CSV\u201d soit \u201cT\u00e9l\u00e9charger en XLSX\u201d. Votre navigateur t\u00e9l\u00e9chargera alors un fichier contenant une ligne d\u2019en-t\u00eate nommant vos colonnes, \u00e0 l\u2019exclusion de toute colonne masqu\u00e9e ou ligne filtr\u00e9e, suivie de toutes les lignes de donn\u00e9es visibles dans la table.","title":"Exporter une table"},{"location":"exports/#exporter-un-document","text":"Si vous souhaitez exporter toutes les tables au format Excel, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cExporter XLSX\u201d. Votre navigateur t\u00e9l\u00e9chargera alors un fichier Excel, o\u00f9 chaque table est une feuille distincte contenant toutes les lignes, sans aucun filtre appliqu\u00e9. Pour utiliser cette option, vous devez avoir un acc\u00e8s complet en lecture pour toutes les tables d\u2019un document. Une note \u00e0 propos de \u201cExporter CSV\u201d dans le menu de partage. Lorsque vous \u00eates sur une page avec plusieurs vues, \u201cExporter CSV\u201d n\u2019exportera que les donn\u00e9es de la vue actuellement s\u00e9lectionn\u00e9e. Pour exporter toutes vos donn\u00e9es, utilisez \u201cExporter XLSX\u201d ou l\u2019option \u201cT\u00e9l\u00e9charger\u201d qui est expliqu\u00e9e ci-dessous dans sauvegarder un document entier .","title":"Exporter un document"},{"location":"exports/#envoyer-vers-google-drive","text":"Si vous souhaitez exporter un document vers Google Drive en tant que fichier Google Sheet, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cEnvoyer vers Google Drive\u201d. Grist vous demandera d\u2019abord de vous connecter \u00e0 votre compte Google (ou d\u2019utiliser un compte auquel vous \u00eates d\u00e9j\u00e0 connect\u00e9) puis d\u2019autoriser la cr\u00e9ation d\u2019un fichier dans votre Google Drive. Grist pourra cr\u00e9er de nouveaux fichiers et les g\u00e9rer, mais ne pourra pas acc\u00e9der \u00e0 d\u2019autres fichiers dans votre drive. Une fois que vous acceptez la demande d\u2019autorisation, Grist exportera votre document en un fichier Excel puis le sauvegardera dans votre Google Drive en tant que fichier Google Sheet. Pour utiliser cette option, vous devez avoir un acc\u00e8s complet en lecture pour toutes les tables d\u2019un document.","title":"Envoyer vers Google Drive"},{"location":"exports/#sauvegarder-un-document-entier","text":"Grist effectue automatiquement des sauvegardes r\u00e9guli\u00e8res des documents, comme d\u00e9crit dans Sauvegardes Automatiques . Vous pouvez \u00e9galement effectuer des sauvegardes manuelles en enregistrant des copies des documents dans votre compte Grist. De plus, les documents Grist peuvent \u00eatre t\u00e9l\u00e9charg\u00e9s dans leur int\u00e9gralit\u00e9 sous forme de fichier de base de donn\u00e9es SQLite avec une extension .grist . SQLite est un format de base de donn\u00e9es populaire. Le fichier t\u00e9l\u00e9charg\u00e9 contiendra toutes vos donn\u00e9es tabulaires, tous les fichiers joints dans ces tables, les m\u00e9tadonn\u00e9es sur vos tables, pages et vues, ainsi qu\u2019un historique des modifications r\u00e9centes du document. Il ne contiendra pas d\u2019informations sur les personnes avec qui le document est partag\u00e9. Pour t\u00e9l\u00e9charger un document Grist, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran, et s\u00e9lectionnez \u201cT\u00e9l\u00e9charger\u201d.","title":"Sauvegarder un document entier"},{"location":"exports/#restaurer-a-partir-dune-sauvegarde","text":"Un fichier .grist t\u00e9l\u00e9charg\u00e9 peut \u00eatre t\u00e9l\u00e9charg\u00e9 \u00e0 nouveau pour fournir une copie exacte de l\u2019original. Pour t\u00e9l\u00e9charger le fichier, ouvrez l\u2019espace d\u2019\u00e9quipe ou l\u2019espace personnel o\u00f9 vous souhaitez le placer, et s\u00e9lectionnez \u00e9ventuellement aussi un dossier. Ensuite, cliquez sur \u201cAjouter Nouveau\u201d en haut \u00e0 gauche, et s\u00e9lectionnez \u201cImporter un document\u201d. Vous pouvez \u00e9galement importer des fichiers CSV et Excel comme nouveaux documents Grist de cette mani\u00e8re.","title":"Restaurer \u00e0 partir d’une sauvegarde"},{"location":"formula-cheat-sheet/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Fiche de Formules # Grist dispose d\u2019un puissant moteur de donn\u00e9es pour calculer les cellules de vos tables \u00e0 l\u2019aide de formules. Les formules Grist sont \u00e9crites en Python , le langage le plus populaire pour la science des donn\u00e9es. Nous avons \u00e9galement une suite de fonctions semblables \u00e0 celles d\u2019Excel, avec des noms en majuscules. Voici quelques notes utiles : Les formules s\u2019appliquent \u00e0 toute la colonne. Les champs sont inclus dans les formules sous la forme $ColumnID . Python est sensible \u00e0 la casse, y compris pour les noms de table et de colonne Grist. Si l\u2019ID de votre colonne est title , la formule utilisera $title , o\u00f9 les deux sont en minuscules. Vous pouvez \u00e9crire du code Python multi-lignes dans les formules (utilisez Shift + Enter pour ajouter des lignes), y compris des instructions, des variables, des imports, etc. Le code Grist s\u2019ex\u00e9cute dans un sandbox s\u00e9curis\u00e9, sans acc\u00e8s \u00e0 quoi que ce soit en dehors de votre document. Si vous ne trouvez pas ce que vous cherchez, postez dans le Forum Communautaire et nous pourrons vous aider ! Fonctions Math\u00e9matiques # Math\u00e9matiques Simples (addition, soustraction, multiplication, division) # Utilise les op\u00e9rateurs + , - , / et * pour effectuer des calculs. Exemple de Math\u00e9matiques Simples # Chestwood Art Studio exp\u00e9die des \u0153uvres d\u2019art \u00e0 travers le pays et a la possibilit\u00e9 de paiements mensuels sur une p\u00e9riode de 12 mois. Nous avons le sous-total, la taxe (bas\u00e9e sur l\u2019\u00e9tat de destination) et le montant d\u00fb mensuel. Cette colonne de formule utilise l\u2019addition, la multiplication et la division. La formule utilis\u00e9e ici est : ($Subtotal + ($Subtotal*$Tax)) / 12 Nous ajoutons le sous-total \u00e0 la taxe calcul\u00e9e, puis divisons cela par 12 mois pour obtenir notre montant d\u00fb mensuel. D\u00e9pannage des Erreurs # #TypeError : Confirmez que toutes les colonnes utilis\u00e9es dans la formule sont de type Num\u00e9rique . max et min # Vous permet de trouver les valeurs max ou min dans une liste. Exemples utilisant MAX() et MIN() # MAX() et MIN() lorsqu\u2019ils sont en majuscules sont des fonctions de tableur qui n\u00e9cessitent une syntaxe sp\u00e9cifique. La syntaxe des formules de tableur est r\u00e9sum\u00e9e dans notre r\u00e9f\u00e9rence de fonctions . max() et min() en minuscules sont des fonctions Python. Max : Table des classes du mod\u00e8le Class Enrollment . La formule utilis\u00e9e dans la colonne \u2018Spots Left\u2019 de la table des Classes est : max($Max_Students - $Count, 0) or \"Full\" Cette formule montre le nombre de places restantes dans une classe, ou le texte \u2018Full\u2019 lorsque la classe est pleine ou surabonn\u00e9e. Nous construisons une liste entre les parenth\u00e8ses compos\u00e9e de deux \u00e9l\u00e9ments : $Max_Students - $Count et 0 . La formule renvoie le plus grand des deux. Lorsque $Count est inf\u00e9rieur \u00e0 $Max_Students , la diff\u00e9rence $Max_Students - $Count est positive et repr\u00e9sente les places restantes dans la classe. Lorsque $Count d\u00e9passe $Max_Students , alors la classe est pleine ou surabonn\u00e9e, et $Max_Students - $Count est n\u00e9gatif. Le maximum d\u2019un nombre n\u00e9gatif et de 0 sera 0, donc max($Max_Students - $Count, 0) est 0. Cela repr\u00e9sente une classe pleine. L\u2019ajout de or \"Full\" est appliqu\u00e9 lorsque la valeur est fausse, ce qui signifie qu\u2019un 0 est remplac\u00e9 par le texte \"Full\" . Min : Table des contacts du mod\u00e8le Lightweight CRM . La formule utilis\u00e9e dans la colonne \u2018Due\u2019 de la table des Contacts est : items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return min(items.Date) if items else None D\u00e9composons cela. Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") trouve tous les enregistrements dans la table Interactions o\u00f9 les Contacts correspondent et le Type est To-Do. Cela renvoie une liste d\u2019enregistrements que nous assignons \u00e0 la variable items . Ensuite, nous utilisons la notation par points pour trouver toutes les Dates assign\u00e9es aux enregistrements de notre liste items . Ces dates sont \u00e9valu\u00e9es pour trouver la date minimale. C\u2019est la valeur qui est renvoy\u00e9e. Ainsi, nous voyons la date de la t\u00e2che qui est due le plus t\u00f4t. S\u2019il n\u2019y a pas d\u2019\u00e9l\u00e9ments dans la liste, rien n\u2019est renvoy\u00e9 et le champ reste vide. Dans l\u2019exemple MAX(), la liste a deux \u00e9l\u00e9ments : $Max_Students - $Count et 0 , et la formule renvoie le plus grand des deux. Dans l\u2019exemple min(), la variable items tire une liste d\u2019enregistrements bas\u00e9e sur les arguments lookupRecords , \u00e9num\u00e9rant les dates et renvoyant la plus petite date. Notez que c\u2019est une fonction Python. Si nous avions \u00e9crit la formule comme MIN(), une fonction de tableur, la formule ne fonctionnerait pas car la formule de tableur n\u00e9cessite un format tr\u00e8s sp\u00e9cifique . Somme # Utilisez la fonction SUM() lorsque vous souhaitez additionner une liste de valeurs disponibles dans une cellule. Si vous souhaitez additionner des valeurs dans une colonne, utilisez Tables de R\u00e9sum\u00e9 . Exemple de SUM() # Custom Product Builder template La formule utilis\u00e9e dans la colonne Co\u00fbt Total de la table S\u00e9lectionner ou Ajouter de Nouveaux Produits est : SUM($Requirements.Cost) La colonne Requirements est une colonne cach\u00e9e dans cette table. C\u2019est une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table Build Requirements. Notre formule utilise la colonne Requirements pour acc\u00e9der \u00e0 la table Build Requirements, puis tire le co\u00fbt pour chaque enregistrement dans la table. Nous utilisons SUM() pour additionner les co\u00fbts de chaque enregistrement. Inventory Manager template La formule utilis\u00e9e dans la colonne Re\u00e7u de la table Tous les Produits est : SUM(Incoming_Order_Line_Items.lookupRecords(SKU=$id).Received_Qty) Nous utilisons la fonction lookupRecords pour trouver tous les enregistrements dans la table Incoming Order Line Items o\u00f9 le SKU correspond au SKU dans cette ligne, puis tirer la valeur dans la colonne Received Qty pour chacun de ces enregistrements. Nous utilisons SUM() pour trouver la somme de ces valeurs. Les colonnes Qty on Order et Sold de la table Tous les Produits sont \u00e9galement de bons exemples de la fonction SUM(). Consultez un autre exemple dans notre Forum Communautaire : Cr\u00e9er une somme de b\u00e9n\u00e9fice net et brut \u00e0 partir de plusieurs tables Comparer pour l\u2019\u00e9galit\u00e9 : == et != # Lors de la comparaison pour l\u2019\u00e9galit\u00e9 en Python, nous utilisons == pour \u2018\u00e9gal\u2019 et != pour \u2018diff\u00e9rent\u2019. Si $A est 2 et $B est 3, la formule $A == $B renverrait False , tandis que la formule $A != $B serait True . Exemples utilisant == # Inventory Manager template La formule utilis\u00e9e dans la colonne Received Qty de la table Incoming Order Line Items est : if $Order.Status =='Received': return $Qty else: return None La colonne Order de la table Incoming Order Line Items est une colonne de r\u00e9f\u00e9rence qui pointe vers la colonne Order Number de la table Incoming Orders. $Order.Status utilise la notation par points pour tirer la valeur de la colonne Status de la table Incoming Orders. Si la valeur dans cette colonne est \u00e9gale \u00e0 Received , la valeur de la colonne Qty sera renvoy\u00e9e. Si la valeur n\u2019est pas \u00e9gale \u00e0 Received , rien n\u2019est renvoy\u00e9. La formule utilis\u00e9e dans la colonne Date Received de la table Create New Order est : if $Status == \"Received\": return NOW() C\u2019est une formule d\u2019initialisation qui est d\u00e9clench\u00e9e lorsqu\u2019un changement est effectu\u00e9 dans la colonne Status. Si la valeur dans la colonne Status est \u00e9gale \u00e0 Received , la date actuelle est renvoy\u00e9e. Si les valeurs ne sont pas \u00e9gales, rien n\u2019est renvoy\u00e9. Exemples utilisant != # Project Management template La formule utilis\u00e9e dans la colonne Missed Deadline de la table Missed Deadline est : TODAY()> $Due_Date and $Status != \"Completed\" Si la date actuelle est sup\u00e9rieure \u00e0 la date donn\u00e9e dans la colonne Due Date et que la valeur dans la colonne Status n\u2019est pas \u00e9gale \u00e0 Completed , la formule est True . Si l\u2019une de ces affirmations est fausse, la formule est False . Comparer des Valeurs : < , > , <= , >= # Vous permet de comparer des valeurs num\u00e9riques. Si Sales est \u00e9gal \u00e0 1200 et Running_Cost est \u00e9gal \u00e0 1650 , \"Gains\" if $Sales > $Running_Cost else \"Loss\" renverrait Loss . Exemples de comparaison de valeurs # Inventory Manager template La formule utilis\u00e9e dans la colonne Stock Alert de la table Tous les Produits est : if $In_Stock + $QTY_on_Order > 5: return \"In Stock\" if $In_Stock + $QTY_on_Order > 0: return \"Low Stock\" else: return \"OUT OF STOCK\" Ici, nous avons deux d\u00e9clarations if-return diff\u00e9rentes ; si x est vrai, renvoyer some_value . Une fois qu\u2019une d\u00e9claration est vraie et qu\u2019une valeur est renvoy\u00e9e, la formule s\u2019arr\u00eate. Si les deux sont fausses, OUT OF STOCK est renvoy\u00e9. Tout d\u2019abord, si la valeur dans la colonne In Stock plus la valeur dans la colonne Qty On Order est sup\u00e9rieure \u00e0 5, renvoyez \u201cIn Stock\u201d. Ensuite, si la valeur dans la colonne In Stock plus la valeur dans la colonne Qty On Order est sup\u00e9rieure \u00e0 0, renvoyez \u201cLow Stock\u201d. Il est implicite que la valeur est inf\u00e9rieure ou \u00e9gale \u00e0 5 car la premi\u00e8re d\u00e9claration devrait \u00eatre fausse pour que cela soit \u00e9valu\u00e9. Enfin, si toutes les d\u00e9clarations sont fausses, renvoyez \u201cOUT OF STOCK\u201d. Internal Links Tracker for SEO template La formule utilis\u00e9e dans la colonne Orphaned? de la table Orphaned Pages est : len(Links.lookupRecords(To=$id))<1 Nous utilisons la fonction lookupRecords pour trouver tous les enregistrements dans la table Links o\u00f9 le lien dans la colonne To correspond au lien list\u00e9 dans la colonne Slug de cette ligne. Nous utilisons len() pour compter le nombre d\u2019enregistrements trouv\u00e9s. S\u2019il est inf\u00e9rieur \u00e0 1, la formule est \u00e9valu\u00e9e comme vraie et la case \u00e0 cocher sera coch\u00e9e. S\u2019il est \u00e9gal ou sup\u00e9rieur \u00e0 1, la formule est \u00e9valu\u00e9e comme fausse. Conversion de String en Float # String : Une s\u00e9quence de caract\u00e8res ou d\u2019extraits de texte. Dans le code, les cha\u00eenes sont entre guillemets, par exemple 'Hello' ou \"-12\" (ce sont trois caract\u00e8res entre guillemets, par opposition \u00e0 un nombre n\u00e9gatif). Voir Fonction str() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en cha\u00eene. Float : Nombres r\u00e9els qui peuvent stocker des valeurs d\u00e9cimales. \u00c9galement appel\u00e9s nombres \u00e0 virgule flottante. Voir Fonction float() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en un nombre \u00e0 virgule flottante. Integer : Un nombre entier, sans d\u00e9cimales. Voir Fonction int() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en un nombre entier. Exemple de conversion d\u2019une cha\u00eene en float # Artwork Orders La formule utilis\u00e9e dans la colonne Sale Price est : if $Appraisal_Value.endswith(\"k\"): return float($Appraisal_Value.rstrip(\"k\")) * 1000 return float($Appraisal_Value) Dans cet exemple, la colonne Appraisal Value est une colonne de texte qui contient des caract\u00e8res alphanum\u00e9riques. Afin d\u2019utiliser cette valeur dans des formules math\u00e9matiques, nous devons convertir de string \u00e0 float. Si la valeur dans la colonne Appraisal Value se termine par \u201ck\u201d, nous utilisons d\u2019abord rstrip() pour supprimer \u201ck\u201d de la cha\u00eene dans la colonne Appraisal Value. Maintenant que nous n\u2019avons que des caract\u00e8res num\u00e9riques, nous utilisons float() pour convertir notre cha\u00eene en float. Comme K repr\u00e9sente 1000 et que nous avons supprim\u00e9 cela de la valeur, nous multiplions notre float par 1000. Si la valeur dans la colonne Appraisal Value ne se termine pas par \u201ck\u201d, et ne contient que des caract\u00e8res num\u00e9riques, nous pouvons simplement utiliser float() pour convertir notre cha\u00eene en float. D\u00e9pannage # Si vous essayez d\u2019utiliser diff\u00e9rentes colonnes avec des valeurs num\u00e9riques dans une formule math\u00e9matique mais que vous voyez une erreur, v\u00e9rifiez les types de colonnes pour chacune des colonnes utilis\u00e9es dans la formule. Toutes doivent \u00eatre de type Num\u00e9rique . float() n\u2019est n\u00e9cessaire que lorsque vous traitez des valeurs alphanum\u00e9riques comme nous le voyons dans l\u2019 exemple . TypeError : impossible de multiplier une s\u00e9quence par un type non-int de \u2018float\u2019 Cette erreur se produit lorsqu\u2019une formule tente de multiplier des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans la capture d\u2019\u00e9cran ci-dessous, la colonne Tax est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour / : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente de diviser des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne \u2018# of Payments\u2019 est une colonne Choice . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour + : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente d\u2019 ajouter des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne Tax est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour - : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente de soustraire des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne Discount est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. Arrondir les Nombres # Sp\u00e9cifiez le nombre de d\u00e9cimales \u00e0 donner dans un r\u00e9sultat en utilisant la fonction ROUND() . Si la Temp\u00e9rature Moyenne est \u00e9gale \u00e0 46.5 , ROUND($Average_Temperature) renverrait 47 . Exemple d\u2019arrondi des nombres # Payroll template La formule utilis\u00e9e dans la colonne Payment est : ROUND($Hours*$Per_Hour, 2) La fonction ROUND() suit le format ROUND(value, places) qui arrondira la valeur donn\u00e9e au nombre de d\u00e9cimales sp\u00e9cifi\u00e9. Notre formule trouve la valeur pour $Hours*$Per_Hour puis arrondit cette valeur \u00e0 2 d\u00e9cimales. Mixing Products La formule utilis\u00e9e dans la colonne Rounded Value est : mix_list_str = $Mix_Product.Lt_per_100_Lt mix_list_float = [float(i) for i in mix_list_str] x = [Lt * $Water/100 for Lt in mix_list_float] round_x = [ROUND(num, 2) for num in x] l = $Mix_Product.Product ' '.join('{} {}'.format(first, second) for first, second in zip(l, round_x)) D\u00e9composons cela. $Mix_Product repr\u00e9sente la colonne Mix Product, une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Product de Table1. Nous pouvons utiliser cette colonne comme un lien vers Table1 pour tirer d\u2019autres donn\u00e9es. $Mix_Product.Lt_per_100_Lt utilise la colonne de liste de r\u00e9f\u00e9rence, Mix Product, pour tirer des valeurs de la colonne Lt per 100 Lt de Table1 pour les produits list\u00e9s dans la colonne Mix Product de Table2, puis assigne cette liste de valeurs \u00e0 la variable mix_list_str . C\u2019est la m\u00eame formule utilis\u00e9e dans la colonne Lt per 100 Lt de Table2, donc vous pouvez voir la valeur qu\u2019elle renvoie dans la ligne 1 de Table2. Elle renvoie une liste : ['0.2355', '1.2579'] . Cette liste est \u00e9valu\u00e9e comme une cha\u00eene plut\u00f4t que comme des valeurs num\u00e9riques. Nous devons convertir chaque valeur de cette liste en float. Dans notre prochaine formule, [float(i) for i in mix_list_str] , nous it\u00e9rons \u00e0 travers la liste qui a \u00e9t\u00e9 assign\u00e9e dans la premi\u00e8re \u00e9quation \u00e0 mix_list_str et convertissons chaque valeur en un nombre \u00e0 virgule flottante. Nous voulons convertir en float plut\u00f4t qu\u2019en entier car toutes les valeurs ne sont pas des nombres entiers et contiennent des d\u00e9cimales. i est une variable repr\u00e9sentant chaque valeur. Donc chaque valeur dans mix_list_str est \u00e9valu\u00e9e dans l\u2019\u00e9quation float(i) . float(0.2355) convertit 0.2355 en float et float(1.2579) convertit 1.2579 en float. Maintenant, nous assignons notre liste de floats \u00e0 la variable mix_list_float . Nous pouvons maintenant utiliser nos valeurs float dans une \u00e9quation math\u00e9matique. Encore une fois, nous it\u00e9rons \u00e0 travers la liste qui a \u00e9t\u00e9 assign\u00e9e \u00e0 la variable mix_list_float . Dans notre \u00e9quation [Lt * $Water/100 for Lt in mix_list_float] , Lt repr\u00e9sente chaque valeur dans mix_list_float et $Water repr\u00e9sente la valeur trouv\u00e9e dans la colonne Water qui est 1000 . Nous \u00e9valuons l\u2019\u00e9quation Lt * 1000/100 lorsque Lt = 0.2355 et Lt = 1.2579 , ce qui renvoie la liste [2.355, 12.579] . Nous assignons cette liste \u00e0 la variable x . Pour arrondir les valeurs dans x \u00e0 deux d\u00e9cimales, nous devons \u00e9valuer l\u2019\u00e9quation ROUND(num, 2) o\u00f9 num repr\u00e9sente chaque valeur dans notre liste et 2 sp\u00e9cifie le nombre de d\u00e9cimales que nous voulons arrondir. Cela renvoie la liste [2.36, 12.58] que nous assignons \u00e0 la variable round_x. Dans la premi\u00e8re \u00e9quation, nous avons utilis\u00e9 notre colonne de liste de r\u00e9f\u00e9rence, Mix Product, comme notre lien vers Table1 afin de tirer des donn\u00e9es de Table1 dans Table2. Nous utilisons cette m\u00e9thode \u00e0 nouveau dans $Mix_Product.Product pour tirer des donn\u00e9es de la colonne Product de Table1. Cela renvoie une liste de produits ; [Prod A, Prod B] . Nous assignons cette liste \u00e0 la variable l . Enfin, nous utilisons la m\u00e9thode join() pour combiner nos deux listes. ' ' est notre cha\u00eene de d\u00e9part (vide). Nous utilisons la m\u00e9thode format de Python pour formater notre cha\u00eene. {} est un espace r\u00e9serv\u00e9 pour chaque variable list\u00e9e dans .format() . Enfin, nous utilisons la fonction zip() de Python pour associer les premi\u00e8res valeurs de chaque liste ensemble, puis associer les deuxi\u00e8mes valeurs de chaque liste ensemble. l est assign\u00e9 comme notre liste first et round_x est assign\u00e9 comme notre liste second . l = [Prod A, Prod B] et round_x = [2.36, 12.58] . En zippant nos listes dans '{} {}'.format(first, second) , nous obtenons Prod A 2.36 dans notre premi\u00e8re it\u00e9ration et Prod B 12.58 dans notre seconde it\u00e9ration. Notre valeur de retour finale est Prod A 2.36 Prod B 12.58 . Formatage des nombres avec des z\u00e9ros en t\u00eate # Vous permet de sp\u00e9cifier le nombre minimum de chiffres renvoy\u00e9s dans une colonne num\u00e9rique en ajoutant des z\u00e9ros en t\u00eate. Si x = 5, str(x).zfill(3) ou '{:0>3}'.format(x) renverrait 005 . Formatage des nombres avec des z\u00e9ros en t\u00eate # Exemple Communautaire : Utilisation de Row ID La formule utilis\u00e9e dans la colonne ID \u00e0 5 chiffres de la table ID Examples est : 'TCH{:0>5}'.format($id) '{:0>5}'.format($id) prend l\u2019ID de ligne unique et le formate pour avoir un minimum de 5 chiffres. Nous ajoutons ensuite cela \u00e0 notre cha\u00eene \"TCH\" pour obtenir notre valeur finale. Si l\u2019ID $id est plus long que 5 chiffres, la formule renvoie la cha\u00eene sans modification. Nous pouvons faire la m\u00eame chose en utilisant la m\u00e9thode str.zfill() . La formule utilis\u00e9e dans la colonne zfill Method de la table ID Examples est : str($id).zfill(5) str($id) convertit l\u2019ID de ligne en cha\u00eene. .zfill(x) renvoie une copie de la cha\u00eene avec des z\u00e9ros en t\u00eate pour faire une cha\u00eene de longueur x . Dans notre exemple, cela ajoute des z\u00e9ros en t\u00eate pour faire la cha\u00eene de 5 caract\u00e8res de long. Encore une fois, si l\u2019ID $id est plus long que 5 chiffres, la formule renvoie la cha\u00eene sans modification. D\u00e9pannage des Erreurs # #TypeError : ne peut concat\u00e9ner que str (pas \u201cint\u201d) \u00e0 str Si vous souhaitez combiner une cha\u00eene et une valeur num\u00e9rique, assurez-vous de la convertir en cha\u00eene en utilisant str() . Travailler avec des Cha\u00eenes # Combinaison de Texte de Plusieurs Colonnes # M\u00e9thode 1 : Si vous avez une colonne Pr\u00e9nom et une colonne Nom, vous pouvez combiner ces colonnes pour avoir une colonne Nom Complet. Si le Pr\u00e9nom est George et le Nom est Washington , $First_Name + \" \" + $Last_Name renverrait George Washington . M\u00e9thode 2 : Si vous avez un formatage suppl\u00e9mentaire, une mani\u00e8re plus simple de le faire serait d\u2019utiliser la m\u00e9thode format() de Python . La m\u00e9thode format() formate les valeurs sp\u00e9cifi\u00e9es et les ins\u00e8re \u00e0 la place du placeholder, {} . En utilisant le m\u00eame exemple que ci-dessus, notre formule serait \"{} {}\".format($First_Name, $Last_Name) . Remarque : Vous pouvez cliquer sur les colonnes pour les ins\u00e9rer dans vos formules, plut\u00f4t que de les taper. Exemples utilisant la M\u00e9thode 1 # Class Enrollment template{:target=\u201d_blank\u201d} La formule utilis\u00e9e dans la colonne Nom Complet de la table des \u00c9tudiants est : $Last_Name + \", \" + $First_Name Ici, nous combinons la valeur trouv\u00e9e dans la colonne Last Name avec une virgule suivie d\u2019un espace suivi de la valeur de la colonne First Name. Lorsque vous ajoutez des caract\u00e8res ou des espaces suppl\u00e9mentaires, placez-les entre guillemets doubles, comme nous l\u2019avons fait dans l\u2019exemple avec \", \" . Une combinaison alternative de ces colonnes pour le Nom Complet pourrait \u00eatre $First_Name + \" \" + $Last_Name . Pour l\u2019exemple dans la ligne 1, le Pr\u00e9nom est Brockie et le Nom est Raddon , donc la valeur renvoy\u00e9e serait Brockie Raddon . Inventory Manager template La formule utilis\u00e9e dans la colonne SKU de la table Tous les Produits est : $Brand.Brand_Code+\"-\"+$Color.Code+\"-\"+$Size Brand est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Name Brand de la table Add Products. Nous utilisons cette colonne de r\u00e9f\u00e9rence dans $Brand.Brand_Code pour tirer des donn\u00e9es de la colonne Brand Code de la table Add Products. Color est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Color de la table Color. Nous utilisons cette colonne de r\u00e9f\u00e9rence dans $Color.Code pour tirer des donn\u00e9es de la colonne Code de la table Color. Chacune des valeurs trouv\u00e9es dans $Brand.Brand_Code et $Color.Code est combin\u00e9e avec la valeur dans la colonne Size avec un - entre chacune des trois valeurs pour constituer le SKU. Exemples utilisant la M\u00e9thode 2 # Tracking Time + Invoicing template La formule utilis\u00e9e dans la colonne Nom du Projet de la table des Projets est : \"{}: {}\".format($Client.Name, $Name) D\u00e9composons cela. Tout ce qui se trouve entre guillemets doubles \" est notre cha\u00eene. Les accolades {} sont des espaces r\u00e9serv\u00e9s pour les valeurs trouv\u00e9es \u00e0 l\u2019aide de .format() qui est la m\u00e9thode de formatage de cha\u00eene de Python. Le premier ensemble d\u2019accolades est remplac\u00e9 par la valeur trouv\u00e9e dans $Client.Name . Client est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es pour un enregistrement sp\u00e9cifique de la table Clients. $Client.Name utilise notre colonne de r\u00e9f\u00e9rence, Client pour tirer des donn\u00e9es de la colonne Name de la table Clients. Le deuxi\u00e8me ensemble d\u2019accolades est remplac\u00e9 par la valeur trouv\u00e9e dans la colonne Name de cette table. Bien que la colonne Client montre la valeur que nous voulons, nous ne pouvons pas utiliser $Client comme nous l\u2019avons fait avec $Name . Cela est d\u00fb au fait que la colonne Client est une colonne de r\u00e9f\u00e9rence. Elle fait r\u00e9f\u00e9rence \u00e0 l\u2019 entier enregistrement mais utilise la valeur de la colonne Name de la table Clients comme repr\u00e9sentation visuelle de cet enregistrement. Dans le panneau de configuration de la colonne sur le c\u00f4t\u00e9 droit, nous pouvons changer quelle valeur de colonne nous voyons pour l\u2019enregistrement. Dans la capture d\u2019\u00e9cran ci-dessous, \u2018Show Column\u2019 a \u00e9t\u00e9 chang\u00e9 de Name \u00e0 Email. Cela ne change pas les donn\u00e9es, cela change simplement l\u2019\u00e9tiquette sur ces donn\u00e9es dans la colonne Client. Cela pointe toujours vers le m\u00eame enregistrement mais montre maintenant une \u00e9tiquette diff\u00e9rente. $Client.Name tire le Nom pour l\u2019enregistrement qui est r\u00e9f\u00e9renc\u00e9 dans la colonne Client, peu importe l\u2019\u00e9tiquette que nous voyons. Custom Product Builder template La formule utilis\u00e9e dans la colonne All Components de la carte CONTRACT_BUILDER est : '\\n'.join(sorted( \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) for (comp, quantity) in $Components.items() )) Nous utilisons la m\u00e9thode join() , la fonction sorted() et la m\u00e9thode format() toutes en une seule fois ! '\\n'.join() ajoute une nouvelle ligne entre chaque \u00e9l\u00e9ment de la liste. sorted() trie les \u00e9l\u00e9ments de la liste par ordre alphab\u00e9tique. Cela nous laisse avec le suivant : \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) for (comp, quantity) in $Components.items() Nous allons travailler \u00e0 l\u2019envers. Tout d\u2019abord, nous devons examiner la colonne Components qui est une colonne cach\u00e9e dans la table All Contracts. Cette colonne est une liste de composants et de leurs quantit\u00e9s associ\u00e9es pour le contrat. Dans la boucle for , nous assignons chaque \u00e9l\u00e9ment de la liste de composants \u00e0 deux variables, comp et quantity. Pour Components[3]: 6.0 , comp = Components[3] et quantity = 6.0 . Components[#] sp\u00e9cifie un Composant dans la table Components par ID de ligne. Components[3] est le composant assign\u00e9 3 comme son ID de ligne. Maintenant, nous ex\u00e9cutons chaque \u00e9l\u00e9ment de la liste ci-dessus \u00e0 travers l\u2019\u00e9quation \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) . comp.Component remplace le premier ensemble de {} . comp est la variable avec notre ID de composant donc comp.Component trouve la valeur dans la colonne Component associ\u00e9e \u00e0 cet ID de ligne. Pour Components[3] , comp.Component est Nozzle. quantity remplace le deuxi\u00e8me ensemble de {} . Encore une fois, la quantit\u00e9 est la deuxi\u00e8me variable dans notre liste. Pour Components[3]: 6.0 , quantity est 6.0 . Notre deuxi\u00e8me ensemble de {} n\u2019est pas vide. Ils incluent :g *. Cela convertit la valeur en un nombre \u00e0 virgule flottante. comp.Unit remplace le dernier ensemble de {} . comp est la variable avec notre ID de composant donc comp.Unit trouve la valeur dans la colonne Unit associ\u00e9e \u00e0 cet ID de ligne. Pour Components[3] , comp.Unit est None . *Notez que {:g} formate les nombres \u00e0 virgule flottante d\u2019une mani\u00e8re particuli\u00e8re qui omet les d\u00e9cimales lorsqu\u2019elles ne sont pas n\u00e9cessaires. Il existe de nombreuses options disponibles dans les espaces r\u00e9serv\u00e9s pour formater des nombres, des dates, etc. En savoir plus sur les espaces r\u00e9serv\u00e9s ici . Email Contacts template La formule utilis\u00e9e dans la colonne Body de la table Advanced Compose est : \"Dear %s,\\n\\nWelcome to the %s team!\" % ($Contact_Name_as_Plaintext, $Team) Cette technique utilise l\u2019op\u00e9rateur % au lieu de la m\u00e9thode format() . Les sp\u00e9cificateurs de format commencent par % suivi d\u2019un caract\u00e8re qui repr\u00e9sente le type de donn\u00e9es. %s est un espace r\u00e9serv\u00e9 pour une cha\u00eene. Le premier %s est remplac\u00e9 par la valeur trouv\u00e9e dans la colonne \u201cContact Name as Plaintext\u201d qui est une colonne cach\u00e9e et le deuxi\u00e8me %s est remplac\u00e9 par la valeur dans la colonne Team. \\n ajoute une nouvelle ligne. Division de Cha\u00eenes de Texte # Divisez une cha\u00eene en utilisant la m\u00e9thode split() de Python. Si le Nom Complet est George Washington , $Full_Name.split(\" \") renverrait [George, Washington] . Exemple de Division de Cha\u00eenes de Texte # Exemple Communautaire : Colors La formule dans la colonne \u201cColor Reference (Just URL)\u201d de la Table 2 est : split = $Color_Reference.Color.split(\" \") return split[-1] $Color_Reference.Color utilise la colonne de r\u00e9f\u00e9rence, \u201cColor Reference\u201d pour tirer des donn\u00e9es de la table qu\u2019elle r\u00e9f\u00e9rence, Table 1. Sp\u00e9cifiquement, elle tire la valeur de la colonne Color de Table 1. Color est une colonne de texte qui contient un hyperlien avec une \u00e9tiquette. Nous ne voyons que l\u2019\u00e9tiquette dans Table 1 mais comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessus, la valeur dans la cellule \u2018pink\u2019 est d\u00e9velopp\u00e9e pour montrer toute la cha\u00eene qui contient \u201cpink\u201d suivie de l\u2019URL. Vous pouvez \u00e9galement voir cela dans la colonne \u201cColor Reference\u201d de la Table 2. Nous voulons obtenir le lien par lui-m\u00eame dans \u201cColor Reference (Just URL)\u201d. Nous pouvons le faire en utilisant la m\u00e9thode split() de Python. .split(\" \") nous permet de diviser la cha\u00eene partout o\u00f9 il y a un espace (\" \") . Dans la colonne Color, il y a une \u00e9tiquette suivie d\u2019un espace suivi de l\u2019URL. La valeur de la colonne Color est divis\u00e9e en une liste contenant deux \u00e9l\u00e9ments Label et URL . Cette liste est assign\u00e9e \u00e0 la variable split . Nous voulons renvoyer le dernier \u00e9l\u00e9ment de la liste split afin d\u2019obtenir notre URL . Le dernier \u00e9l\u00e9ment d\u2019une liste a toujours l\u2019index [-1] . return split[-1] renvoie le dernier \u00e9l\u00e9ment de la liste split . Lien Direct vers l\u2019Historique Gmail pour un Contact # Si vous stockez des contacts dans Grist et utilisez Gmail pour les email, vous pouvez cr\u00e9er une formule qui ouvrira Gmail sur une liste de conversations avec ce contact. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Afficher l\u2019historique Gmail pour un contact particulier D\u00e9pannage # Votre URL s\u2019affiche-t-elle toujours apr\u00e8s avoir ajout\u00e9 une \u00e9tiquette ? Assurez-vous que votre Type de Colonne est Texte et que le Format de Cellule est Hyperlien. Joindre une Liste de Cha\u00eenes # Lorsque vous souhaitez joindre une liste de cha\u00eenes, vous pouvez utiliser la m\u00e9thode join() de Python . Exemple de Jointure d\u2019une Liste # Exemple Communautaire : .join() Exemple La formule utilis\u00e9e dans la colonne Advertisement de la table 2022 Grand Openings est : \"Coming soon to a city near you!\\n\" + \" : \".join($New_Location_s_in_2022) Ici, nous joignons plusieurs cha\u00eenes pour cr\u00e9er notre publicit\u00e9. \"Coming soon to a city near you!\\n\" est renvoy\u00e9 presque exactement comme nous le voyons, \u00e0 l\u2019exception des guillemets \"\" et \\n \u00e0 la fin de la cha\u00eene. Les guillemets \"\" sp\u00e9cifient qu\u2019il s\u2019agit d\u2019une cha\u00eene et \\n est en fait un caract\u00e8re de nouvelle ligne qui peut \u00eatre utilis\u00e9 pour sp\u00e9cifier une nouvelle ligne dans une cha\u00eene. \" : \".join($New_Location_s_in_2022) est \u00e9galement une cha\u00eene mais utilise la m\u00e9thode join() de Python pour joindre les valeurs de notre colonne de liste de choix , \u201cNew Locations in 2022\u201d. Ce que nous voyons entre guillemets avant .join est ce qui s\u00e9parera chaque valeur de notre liste. Dans cet exemple, chaque valeur est s\u00e9par\u00e9e par un espace, : et un autre espace. Trouver des Doublons # Vous pouvez trouver des doublons dans une colonne en utilisant soit le formatage conditionnel, soit une colonne d\u2019aide. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Assurer des valeurs uniques ou d\u00e9tecter des doublons Exemple de Trouver des Doublons # Exemple Communautaire : Finding Duplicates La formule utilis\u00e9e dans la colonne Duplicate? de la table Duplicates est : len(Duplicates.lookupRecords(Grocery_List=$Grocery_List))>1 D\u00e9composons cela, en travaillant de l\u2019int\u00e9rieur vers l\u2019ext\u00e9rieur. Duplicates.lookupRecords(Grocery_List=$Grocery_List) Ceci est une fonction lookupRecords qui suit le format : [Table_Name].lookupRecords([A]=$[B]) O\u00f9 [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table \u00e9tant recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Cette formule recherche des enregistrements dans la table Duplicates o\u00f9 un enregistrement dans la colonne Grocery List correspond \u00e0 un autre enregistrement dans la m\u00eame colonne. len() compte le nombre d\u2019enregistrements dans notre liste. Puisque chaque doublon correspondra \u00e0 l\u2019autre, il devrait appara\u00eetre deux fois dans notre liste. C\u2019est pourquoi len() > 1 . Si len() > 1 , la formule est vraie. Si len() <= 1 , la formule est fausse. Cette m\u00eame formule peut \u00eatre utilis\u00e9e dans le formatage conditionnel. Cela peut \u00eatre vu dans la colonne \u2018Grocery List\u2019 de la table Duplicates. Si len() > 1 , notre formule est vraie et la couleur de cellule conditionnelle est appliqu\u00e9e \u00e0 ces cellules. Si len() <= 1 , notre formule est fausse et la couleur de cellule reste inchang\u00e9e. Utilisation de l\u2019Identifiant Unique d\u2019un Enregistrement dans les Formules # Lorsqu\u2019un enregistrement est cr\u00e9\u00e9, il se voit attribuer un ID num\u00e9rique (disponible sous la forme $id dans les formules) qui est unique au sein de cette table. Vous pouvez r\u00e9v\u00e9ler l\u2019ID de ligne en ajoutant une colonne de formule o\u00f9 la formule est $id . Exemples d\u2019Utilisation de l\u2019ID de Ligne dans les Formules # Vous pouvez r\u00e9v\u00e9ler l\u2019ID avec la formule $id Custom Product Builder template La formule utilis\u00e9e dans la colonne Contract No de la table Contract Builder est : $id + 500 Ici, nous utilisons une formule d\u2019initialisation pour cr\u00e9er un num\u00e9ro de contrat unique lors de la cr\u00e9ation d\u2019un enregistrement. Class Enrollment template La formule utilis\u00e9e dans la colonne Count de la table des Classes est : len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) Ceci est appel\u00e9 une recherche invers\u00e9e. Nous pouvons utiliser l\u2019ID de ligne pour faire correspondre un enregistrement dans une autre table o\u00f9 une colonne de r\u00e9f\u00e9rence est utilis\u00e9e. LookupRecords suit le format [Table_Name].lookupRecords([A]=$[B]) . [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table \u00e9tant recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Lookup Records cr\u00e9e une liste d\u2019enregistrements qui correspondent aux crit\u00e8res \u00e9num\u00e9r\u00e9s. len() compte combien d\u2019enregistrements sont dans cette liste. Ici, nous recherchons des enregistrements dans la table Enrollments o\u00f9 l\u2019enregistrement mentionn\u00e9 dans la colonne Class (notre colonne de r\u00e9f\u00e9rence) a le m\u00eame ID de ligne que la ligne dans la table dans laquelle vous entrez la formule. De plus, la valeur dans la colonne Status de la table Enrollments est Confirmed . Nous allons d\u00e9composer cela. La table dans laquelle nous recherchons des enregistrements est la table Enrollments. Nos crit\u00e8res proviennent de la colonne Class et de la colonne Status. Le crit\u00e8re pour Status est simple ; la valeur doit \u00eatre Confirmed pour \u00eatre incluse dans notre liste d\u2019enregistrements. Class est un peu plus compliqu\u00e9. Comme nous le voyons dans la capture d\u2019\u00e9cran ci-dessous, Class est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table Classes. Ici, la colonne Class montre la valeur de la colonne Class Code de la table Classes mais elle pointe vers l\u2019enregistrement entier o\u00f9 le code de classe est 2018F-Stars . Une colonne de r\u00e9f\u00e9rence pointe vers l\u2019 entier enregistrement, pas seulement la valeur que vous voyez ici dans la colonne Class. En utilisant le panneau de configuration sur le c\u00f4t\u00e9 droit de l\u2019\u00e9cran, vous pouvez choisir n\u2019importe quelle colonne de la table d\u2019origine \u00e0 afficher. Pour cet exemple, la colonne Class montre la valeur de la colonne Class Code de la table Classes mais elle pointe vers l\u2019enregistrement entier o\u00f9 le code de classe est 2018F-Stars . Comme vous pouvez le voir dans cette capture d\u2019\u00e9cran, l\u2019ID de ligne pour cet enregistrement particulier est 2 et parce que nous calculons le Count pour la ligne avec Row ID = 2 , il comptera tous les enregistrements dans la table Enrollment o\u00f9 Class montre 2018F-Stars et Status est Confirmed . Restaurant Custom Orders template La formule d\u2019initialisation utilis\u00e9e dans la colonne BOM # de la table Bill of Materials est : MAX(o.BOM_ for o in Bill_Of_Materials.all if o.id != $id) + 1 Tout d\u2019abord, nous allons examiner la formule \u00e0 l\u2019int\u00e9rieur des parenth\u00e8ses, puis travailler vers l\u2019ext\u00e9rieur. Ici, o est une variable repr\u00e9sentant chaque enregistrement dans notre table. o.BOM_ repr\u00e9sente le BOM # pour chaque enregistrement et o.id repr\u00e9sente l\u2019ID de ligne pour chaque enregistrement. C\u2019est une boucle for qui cr\u00e9e une liste des BOM # pour chaque enregistrement dans la table Bill of Materials lorsque l\u2019ID d\u2019enregistrement n\u2019est pas \u00e9gal \u00e0 l\u2019ID de cette ligne. MAX() trouve le maximum des BOM # dans la liste puis + 1 pour obtenir notre valeur finale. C\u2019est une formule d\u2019initialisation qui ne s\u2019applique qu\u2019aux nouveaux enregistrements. Lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9, la formule trouve le plus grand BOM # dans la table puis ajoute 1 pour que nous ayons un BOM # unique pour le nouvel enregistrement. Suppression des Doublons d\u2019une Liste # Vous pouvez supprimer des doublons d\u2019une liste avec l\u2019aide de la m\u00e9thode set() de Python. Exemple de Suppression des Doublons d\u2019une Liste # Exemple Communautaire : Removing Duplicates From a List La formule dans la colonne All Divisions de la table Abroad Trips est : confirmed_div = $Attending_Confirmed.Role_Division.Division pending_div = $Attending_Pending.Role_Division.Division full_list = confirmed_div + pending_div return sorted(set(full_list)) Nous allons d\u00e9composer cela ligne par ligne. Attending-Confirmed est une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table EMPLOYEES. $Attending_Confirmed.Role_Division tire la valeur de la colonne Role Division de la table EMPLOYEES. La colonne Role Division dans la table EMPLOYEES est elle-m\u00eame une colonne de r\u00e9f\u00e9rence, qui pointe vers un enregistrement dans la table Divisions. Chaining nous permet de sp\u00e9cifier quelles informations nous voulons de cet enregistrement. Dans ce cas, nous voulons la Division. Nous d\u00e9veloppons notre formule pour $Attending_Confirmed.Role_Division.Division . La Division est trouv\u00e9e pour chaque employ\u00e9 list\u00e9 dans la colonne Attending-Confirmed, cr\u00e9ant une liste. Nous assignons cette liste de divisions \u00e0 la variable confirmed_div . Attending-Pending est \u00e9galement une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table EMPLOYEES. $Attending_Pending.Role_Division.Division fait la m\u00eame chose que ci-dessus sauf que maintenant nous tirons la division pour chaque employ\u00e9 dans la colonne Attending-Pending. Nous assignons cette liste \u00e0 la variable pending_div . Nous cr\u00e9ons une liste de toutes les divisions en ajoutant les deux listes ensemble et en assignant cette liste combin\u00e9e \u00e0 la variable full_list . return sorted(set(full_list)) utilise d\u2019abord la m\u00e9thode set() de Python pour cr\u00e9er une liste sans doublons. Nous utilisons ensuite la m\u00e9thode sorted() pour renvoyer notre ensemble de divisions, tri\u00e9 par ordre alphab\u00e9tique. Notez que la formule ci-dessus peut \u00eatre simplifi\u00e9e encore plus \u00e0 : sorted( set($Attending_Confirmed.Role_Division.Division) | set($Attending_Pending.Role_Division.Division) ) D\u00e9finir des Valeurs par D\u00e9faut pour de Nouveaux Enregistrements # Vous pouvez d\u00e9finir des valeurs par d\u00e9faut pour lorsque un nouvel enregistrement est cr\u00e9\u00e9 et vous \u00e9pargner le tracas de devoir remplir les m\u00eames champs avec les m\u00eames valeurs encore et encore. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Valeurs par d\u00e9faut sur le widget Travailler avec des dates et des heures # Tampons Automatiques de Date, Heure et Auteur # Vous pouvez automatiquement ajouter la date ou l\u2019heure \u00e0 laquelle un enregistrement a \u00e9t\u00e9 cr\u00e9\u00e9 ou mis \u00e0 jour ainsi que qui a effectu\u00e9 le changement. Exemples de Tampons Automatiques de Date, Heure et Auteur # Grant Application Tracker template La formule utilis\u00e9e dans la colonne Last Updated de la table Tasks est : NOW() C\u2019est une formule d\u2019initialisation qui se d\u00e9clenche lorsqu\u2019un changement est effectu\u00e9 dans n\u2019importe quel champ pour cet enregistrement. Lorsqu\u2019un changement est effectu\u00e9, cette formule ex\u00e9cute son calcul. NOW() calcule l\u2019heure et la date actuelles pour le fuseau horaire s\u00e9lectionn\u00e9. La formule utilis\u00e9e dans la colonne Created By de la table Tasks est : user.Name C\u2019est une formule d\u2019initialisation qui se d\u00e9clenche lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Lorsque l\u2019enregistrement est cr\u00e9\u00e9, cette formule ex\u00e9cute son calcul. user.Name recherche le compte utilisateur qui est connect\u00e9 \u00e0 Grist et renvoie le nom associ\u00e9 \u00e0 ce compte. D\u00e9pannage des Erreurs # Si la valeur de temps dans votre colonne datetime ne se calcule pas, v\u00e9rifiez votre formule. Si TODAY() est utilis\u00e9 dans DateTime, l\u2019heure affichera toujours 12:00 am comme vous le voyez ci-dessous. NOW() est utilis\u00e9 pour les colonnes DateTime. TODAY() est utilis\u00e9 pour la Date. #AttributeError Vous avez probablement entr\u00e9 user.name mais la formule est user.Name . Faites attention \u00e0 la capitalisation ! #NameError Vous avez peut-\u00eatre entr\u00e9 username ou userName . La formule correcte est user.Name . Une autre possibilit\u00e9 est que cela a \u00e9t\u00e9 entr\u00e9 en tant que colonne de formule plut\u00f4t qu\u2019en tant que colonne de formule d\u2019initialisation. Convertissez-la en formule d\u2019initialisation et cela devrait r\u00e9soudre le probl\u00e8me. Filtrer les Donn\u00e9es dans une Dur\u00e9e Sp\u00e9cifi\u00e9e # En utilisant la fonction DATEADD() et les op\u00e9rateurs de comparaison , vous pouvez d\u00e9terminer si une date tombe dans une plage sp\u00e9cifique puis appliquer un filtre. Exemple de Filtrage des Donn\u00e9es qui \u2018Tombe dans une Plage de 1 Mois\u2019 # Exemple Communautaire : Filtrage des Donn\u00e9es dans une Plage de 1 Mois La formule utilis\u00e9e dans la colonne Falls in 1 Month Range? de la table Interactions est : TODAY() >= $Date >= DATEADD(TODAY(),months=-1) TODAY() renvoie la date actuelle. $Date est le nom d\u2019une colonne dans notre table, qui est de type Date . DATEADD(start_date, days=0, months=0, years=0, weeks=0) renvoie la date qui est le nombre donn\u00e9 de jours, mois, ann\u00e9es ou semaines avant ou apr\u00e8s la start_date . Dans cet exemple, elle renvoie la date qui est un mois avant la date de d\u00e9part, TODAY() . Cette formule est vraie si la valeur de date dans la colonne Date tombe entre TODAY() et notre date DATEADD() qui est un mois auparavant. Si la valeur de date dans la colonne Date ne tombe pas entre ces deux dates, la formule renvoie faux. Nous pouvons utiliser cette colonne pour filtrer nos donn\u00e9es. Si nous ne voulons voir que les interactions qui tombent dans la Plage de 1 Mois, nous filtrerions pour n\u2019inclure que les valeurs true . Si nous voulons voir les interactions qui tombent en dehors de la Plage de 1 Mois, nous filtrerions pour n\u2019inclure que les valeurs false . D\u00e9pannage des Erreurs # #TypeError : Parce que $Date est une colonne de type Date , TODAY() doit \u00eatre utilis\u00e9 dans les formules comparant des dates. NOW() est une formule DateTime qui ne doit \u00eatre utilis\u00e9e qu\u2019avec d\u2019autres valeurs DateTime. Par exemple, si la colonne $Date \u00e9tait une colonne de type DateTime , NOW() devrait \u00eatre utilis\u00e9 plut\u00f4t que TODAY() car il inclut le composant temps. NOW() est date et heure. TODAY() est seulement date.","title":"Formula cheat sheet"},{"location":"formula-cheat-sheet/#fiche-de-formules","text":"Grist dispose d\u2019un puissant moteur de donn\u00e9es pour calculer les cellules de vos tables \u00e0 l\u2019aide de formules. Les formules Grist sont \u00e9crites en Python , le langage le plus populaire pour la science des donn\u00e9es. Nous avons \u00e9galement une suite de fonctions semblables \u00e0 celles d\u2019Excel, avec des noms en majuscules. Voici quelques notes utiles : Les formules s\u2019appliquent \u00e0 toute la colonne. Les champs sont inclus dans les formules sous la forme $ColumnID . Python est sensible \u00e0 la casse, y compris pour les noms de table et de colonne Grist. Si l\u2019ID de votre colonne est title , la formule utilisera $title , o\u00f9 les deux sont en minuscules. Vous pouvez \u00e9crire du code Python multi-lignes dans les formules (utilisez Shift + Enter pour ajouter des lignes), y compris des instructions, des variables, des imports, etc. Le code Grist s\u2019ex\u00e9cute dans un sandbox s\u00e9curis\u00e9, sans acc\u00e8s \u00e0 quoi que ce soit en dehors de votre document. Si vous ne trouvez pas ce que vous cherchez, postez dans le Forum Communautaire et nous pourrons vous aider !","title":"Fiche de Formules"},{"location":"formula-cheat-sheet/#fonctions-mathematiques","text":"","title":"Fonctions Math\u00e9matiques"},{"location":"formula-cheat-sheet/#mathematiques-simples-addition-soustraction-multiplication-division","text":"Utilise les op\u00e9rateurs + , - , / et * pour effectuer des calculs.","title":"Math\u00e9matiques Simples (addition, soustraction, multiplication, division)"},{"location":"formula-cheat-sheet/#exemple-de-mathematiques-simples","text":"Chestwood Art Studio exp\u00e9die des \u0153uvres d\u2019art \u00e0 travers le pays et a la possibilit\u00e9 de paiements mensuels sur une p\u00e9riode de 12 mois. Nous avons le sous-total, la taxe (bas\u00e9e sur l\u2019\u00e9tat de destination) et le montant d\u00fb mensuel. Cette colonne de formule utilise l\u2019addition, la multiplication et la division. La formule utilis\u00e9e ici est : ($Subtotal + ($Subtotal*$Tax)) / 12 Nous ajoutons le sous-total \u00e0 la taxe calcul\u00e9e, puis divisons cela par 12 mois pour obtenir notre montant d\u00fb mensuel.","title":"Exemple de Math\u00e9matiques Simples"},{"location":"formula-cheat-sheet/#depannage-des-erreurs","text":"#TypeError : Confirmez que toutes les colonnes utilis\u00e9es dans la formule sont de type Num\u00e9rique .","title":"D\u00e9pannage des Erreurs"},{"location":"formula-cheat-sheet/#max-et-min","text":"Vous permet de trouver les valeurs max ou min dans une liste.","title":"max et min"},{"location":"formula-cheat-sheet/#exemples-utilisant-max-et-min","text":"MAX() et MIN() lorsqu\u2019ils sont en majuscules sont des fonctions de tableur qui n\u00e9cessitent une syntaxe sp\u00e9cifique. La syntaxe des formules de tableur est r\u00e9sum\u00e9e dans notre r\u00e9f\u00e9rence de fonctions . max() et min() en minuscules sont des fonctions Python. Max : Table des classes du mod\u00e8le Class Enrollment . La formule utilis\u00e9e dans la colonne \u2018Spots Left\u2019 de la table des Classes est : max($Max_Students - $Count, 0) or \"Full\" Cette formule montre le nombre de places restantes dans une classe, ou le texte \u2018Full\u2019 lorsque la classe est pleine ou surabonn\u00e9e. Nous construisons une liste entre les parenth\u00e8ses compos\u00e9e de deux \u00e9l\u00e9ments : $Max_Students - $Count et 0 . La formule renvoie le plus grand des deux. Lorsque $Count est inf\u00e9rieur \u00e0 $Max_Students , la diff\u00e9rence $Max_Students - $Count est positive et repr\u00e9sente les places restantes dans la classe. Lorsque $Count d\u00e9passe $Max_Students , alors la classe est pleine ou surabonn\u00e9e, et $Max_Students - $Count est n\u00e9gatif. Le maximum d\u2019un nombre n\u00e9gatif et de 0 sera 0, donc max($Max_Students - $Count, 0) est 0. Cela repr\u00e9sente une classe pleine. L\u2019ajout de or \"Full\" est appliqu\u00e9 lorsque la valeur est fausse, ce qui signifie qu\u2019un 0 est remplac\u00e9 par le texte \"Full\" . Min : Table des contacts du mod\u00e8le Lightweight CRM . La formule utilis\u00e9e dans la colonne \u2018Due\u2019 de la table des Contacts est : items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return min(items.Date) if items else None D\u00e9composons cela. Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") trouve tous les enregistrements dans la table Interactions o\u00f9 les Contacts correspondent et le Type est To-Do. Cela renvoie une liste d\u2019enregistrements que nous assignons \u00e0 la variable items . Ensuite, nous utilisons la notation par points pour trouver toutes les Dates assign\u00e9es aux enregistrements de notre liste items . Ces dates sont \u00e9valu\u00e9es pour trouver la date minimale. C\u2019est la valeur qui est renvoy\u00e9e. Ainsi, nous voyons la date de la t\u00e2che qui est due le plus t\u00f4t. S\u2019il n\u2019y a pas d\u2019\u00e9l\u00e9ments dans la liste, rien n\u2019est renvoy\u00e9 et le champ reste vide. Dans l\u2019exemple MAX(), la liste a deux \u00e9l\u00e9ments : $Max_Students - $Count et 0 , et la formule renvoie le plus grand des deux. Dans l\u2019exemple min(), la variable items tire une liste d\u2019enregistrements bas\u00e9e sur les arguments lookupRecords , \u00e9num\u00e9rant les dates et renvoyant la plus petite date. Notez que c\u2019est une fonction Python. Si nous avions \u00e9crit la formule comme MIN(), une fonction de tableur, la formule ne fonctionnerait pas car la formule de tableur n\u00e9cessite un format tr\u00e8s sp\u00e9cifique .","title":"Exemples utilisant MAX() et MIN()"},{"location":"formula-cheat-sheet/#somme","text":"Utilisez la fonction SUM() lorsque vous souhaitez additionner une liste de valeurs disponibles dans une cellule. Si vous souhaitez additionner des valeurs dans une colonne, utilisez Tables de R\u00e9sum\u00e9 .","title":"Somme"},{"location":"formula-cheat-sheet/#exemple-de-sum","text":"Custom Product Builder template La formule utilis\u00e9e dans la colonne Co\u00fbt Total de la table S\u00e9lectionner ou Ajouter de Nouveaux Produits est : SUM($Requirements.Cost) La colonne Requirements est une colonne cach\u00e9e dans cette table. C\u2019est une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table Build Requirements. Notre formule utilise la colonne Requirements pour acc\u00e9der \u00e0 la table Build Requirements, puis tire le co\u00fbt pour chaque enregistrement dans la table. Nous utilisons SUM() pour additionner les co\u00fbts de chaque enregistrement. Inventory Manager template La formule utilis\u00e9e dans la colonne Re\u00e7u de la table Tous les Produits est : SUM(Incoming_Order_Line_Items.lookupRecords(SKU=$id).Received_Qty) Nous utilisons la fonction lookupRecords pour trouver tous les enregistrements dans la table Incoming Order Line Items o\u00f9 le SKU correspond au SKU dans cette ligne, puis tirer la valeur dans la colonne Received Qty pour chacun de ces enregistrements. Nous utilisons SUM() pour trouver la somme de ces valeurs. Les colonnes Qty on Order et Sold de la table Tous les Produits sont \u00e9galement de bons exemples de la fonction SUM(). Consultez un autre exemple dans notre Forum Communautaire : Cr\u00e9er une somme de b\u00e9n\u00e9fice net et brut \u00e0 partir de plusieurs tables","title":"Exemple de SUM()"},{"location":"formula-cheat-sheet/#comparer-pour-legalite-et","text":"Lors de la comparaison pour l\u2019\u00e9galit\u00e9 en Python, nous utilisons == pour \u2018\u00e9gal\u2019 et != pour \u2018diff\u00e9rent\u2019. Si $A est 2 et $B est 3, la formule $A == $B renverrait False , tandis que la formule $A != $B serait True .","title":"Comparer pour l’\u00e9galit\u00e9 : == et !="},{"location":"formula-cheat-sheet/#exemples-utilisant","text":"Inventory Manager template La formule utilis\u00e9e dans la colonne Received Qty de la table Incoming Order Line Items est : if $Order.Status =='Received': return $Qty else: return None La colonne Order de la table Incoming Order Line Items est une colonne de r\u00e9f\u00e9rence qui pointe vers la colonne Order Number de la table Incoming Orders. $Order.Status utilise la notation par points pour tirer la valeur de la colonne Status de la table Incoming Orders. Si la valeur dans cette colonne est \u00e9gale \u00e0 Received , la valeur de la colonne Qty sera renvoy\u00e9e. Si la valeur n\u2019est pas \u00e9gale \u00e0 Received , rien n\u2019est renvoy\u00e9. La formule utilis\u00e9e dans la colonne Date Received de la table Create New Order est : if $Status == \"Received\": return NOW() C\u2019est une formule d\u2019initialisation qui est d\u00e9clench\u00e9e lorsqu\u2019un changement est effectu\u00e9 dans la colonne Status. Si la valeur dans la colonne Status est \u00e9gale \u00e0 Received , la date actuelle est renvoy\u00e9e. Si les valeurs ne sont pas \u00e9gales, rien n\u2019est renvoy\u00e9.","title":"Exemples utilisant =="},{"location":"formula-cheat-sheet/#exemples-utilisant_1","text":"Project Management template La formule utilis\u00e9e dans la colonne Missed Deadline de la table Missed Deadline est : TODAY()> $Due_Date and $Status != \"Completed\" Si la date actuelle est sup\u00e9rieure \u00e0 la date donn\u00e9e dans la colonne Due Date et que la valeur dans la colonne Status n\u2019est pas \u00e9gale \u00e0 Completed , la formule est True . Si l\u2019une de ces affirmations est fausse, la formule est False .","title":"Exemples utilisant !="},{"location":"formula-cheat-sheet/#comparer-des-valeurs","text":"Vous permet de comparer des valeurs num\u00e9riques. Si Sales est \u00e9gal \u00e0 1200 et Running_Cost est \u00e9gal \u00e0 1650 , \"Gains\" if $Sales > $Running_Cost else \"Loss\" renverrait Loss .","title":"Comparer des Valeurs : < , > , <= , >="},{"location":"formula-cheat-sheet/#exemples-de-comparaison-de-valeurs","text":"Inventory Manager template La formule utilis\u00e9e dans la colonne Stock Alert de la table Tous les Produits est : if $In_Stock + $QTY_on_Order > 5: return \"In Stock\" if $In_Stock + $QTY_on_Order > 0: return \"Low Stock\" else: return \"OUT OF STOCK\" Ici, nous avons deux d\u00e9clarations if-return diff\u00e9rentes ; si x est vrai, renvoyer some_value . Une fois qu\u2019une d\u00e9claration est vraie et qu\u2019une valeur est renvoy\u00e9e, la formule s\u2019arr\u00eate. Si les deux sont fausses, OUT OF STOCK est renvoy\u00e9. Tout d\u2019abord, si la valeur dans la colonne In Stock plus la valeur dans la colonne Qty On Order est sup\u00e9rieure \u00e0 5, renvoyez \u201cIn Stock\u201d. Ensuite, si la valeur dans la colonne In Stock plus la valeur dans la colonne Qty On Order est sup\u00e9rieure \u00e0 0, renvoyez \u201cLow Stock\u201d. Il est implicite que la valeur est inf\u00e9rieure ou \u00e9gale \u00e0 5 car la premi\u00e8re d\u00e9claration devrait \u00eatre fausse pour que cela soit \u00e9valu\u00e9. Enfin, si toutes les d\u00e9clarations sont fausses, renvoyez \u201cOUT OF STOCK\u201d. Internal Links Tracker for SEO template La formule utilis\u00e9e dans la colonne Orphaned? de la table Orphaned Pages est : len(Links.lookupRecords(To=$id))<1 Nous utilisons la fonction lookupRecords pour trouver tous les enregistrements dans la table Links o\u00f9 le lien dans la colonne To correspond au lien list\u00e9 dans la colonne Slug de cette ligne. Nous utilisons len() pour compter le nombre d\u2019enregistrements trouv\u00e9s. S\u2019il est inf\u00e9rieur \u00e0 1, la formule est \u00e9valu\u00e9e comme vraie et la case \u00e0 cocher sera coch\u00e9e. S\u2019il est \u00e9gal ou sup\u00e9rieur \u00e0 1, la formule est \u00e9valu\u00e9e comme fausse.","title":"Exemples de comparaison de valeurs"},{"location":"formula-cheat-sheet/#conversion-de-string-en-float","text":"String : Une s\u00e9quence de caract\u00e8res ou d\u2019extraits de texte. Dans le code, les cha\u00eenes sont entre guillemets, par exemple 'Hello' ou \"-12\" (ce sont trois caract\u00e8res entre guillemets, par opposition \u00e0 un nombre n\u00e9gatif). Voir Fonction str() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en cha\u00eene. Float : Nombres r\u00e9els qui peuvent stocker des valeurs d\u00e9cimales. \u00c9galement appel\u00e9s nombres \u00e0 virgule flottante. Voir Fonction float() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en un nombre \u00e0 virgule flottante. Integer : Un nombre entier, sans d\u00e9cimales. Voir Fonction int() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en un nombre entier.","title":"Conversion de String en Float"},{"location":"formula-cheat-sheet/#exemple-de-conversion-dune-chaine-en-float","text":"Artwork Orders La formule utilis\u00e9e dans la colonne Sale Price est : if $Appraisal_Value.endswith(\"k\"): return float($Appraisal_Value.rstrip(\"k\")) * 1000 return float($Appraisal_Value) Dans cet exemple, la colonne Appraisal Value est une colonne de texte qui contient des caract\u00e8res alphanum\u00e9riques. Afin d\u2019utiliser cette valeur dans des formules math\u00e9matiques, nous devons convertir de string \u00e0 float. Si la valeur dans la colonne Appraisal Value se termine par \u201ck\u201d, nous utilisons d\u2019abord rstrip() pour supprimer \u201ck\u201d de la cha\u00eene dans la colonne Appraisal Value. Maintenant que nous n\u2019avons que des caract\u00e8res num\u00e9riques, nous utilisons float() pour convertir notre cha\u00eene en float. Comme K repr\u00e9sente 1000 et que nous avons supprim\u00e9 cela de la valeur, nous multiplions notre float par 1000. Si la valeur dans la colonne Appraisal Value ne se termine pas par \u201ck\u201d, et ne contient que des caract\u00e8res num\u00e9riques, nous pouvons simplement utiliser float() pour convertir notre cha\u00eene en float.","title":"Exemple de conversion d’une cha\u00eene en float"},{"location":"formula-cheat-sheet/#depannage","text":"Si vous essayez d\u2019utiliser diff\u00e9rentes colonnes avec des valeurs num\u00e9riques dans une formule math\u00e9matique mais que vous voyez une erreur, v\u00e9rifiez les types de colonnes pour chacune des colonnes utilis\u00e9es dans la formule. Toutes doivent \u00eatre de type Num\u00e9rique . float() n\u2019est n\u00e9cessaire que lorsque vous traitez des valeurs alphanum\u00e9riques comme nous le voyons dans l\u2019 exemple . TypeError : impossible de multiplier une s\u00e9quence par un type non-int de \u2018float\u2019 Cette erreur se produit lorsqu\u2019une formule tente de multiplier des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans la capture d\u2019\u00e9cran ci-dessous, la colonne Tax est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour / : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente de diviser des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne \u2018# of Payments\u2019 est une colonne Choice . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour + : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente d\u2019 ajouter des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne Tax est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour - : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente de soustraire des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne Discount est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue.","title":"D\u00e9pannage"},{"location":"formula-cheat-sheet/#arrondir-les-nombres","text":"Sp\u00e9cifiez le nombre de d\u00e9cimales \u00e0 donner dans un r\u00e9sultat en utilisant la fonction ROUND() . Si la Temp\u00e9rature Moyenne est \u00e9gale \u00e0 46.5 , ROUND($Average_Temperature) renverrait 47 .","title":"Arrondir les Nombres"},{"location":"formula-cheat-sheet/#exemple-darrondi-des-nombres","text":"Payroll template La formule utilis\u00e9e dans la colonne Payment est : ROUND($Hours*$Per_Hour, 2) La fonction ROUND() suit le format ROUND(value, places) qui arrondira la valeur donn\u00e9e au nombre de d\u00e9cimales sp\u00e9cifi\u00e9. Notre formule trouve la valeur pour $Hours*$Per_Hour puis arrondit cette valeur \u00e0 2 d\u00e9cimales. Mixing Products La formule utilis\u00e9e dans la colonne Rounded Value est : mix_list_str = $Mix_Product.Lt_per_100_Lt mix_list_float = [float(i) for i in mix_list_str] x = [Lt * $Water/100 for Lt in mix_list_float] round_x = [ROUND(num, 2) for num in x] l = $Mix_Product.Product ' '.join('{} {}'.format(first, second) for first, second in zip(l, round_x)) D\u00e9composons cela. $Mix_Product repr\u00e9sente la colonne Mix Product, une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Product de Table1. Nous pouvons utiliser cette colonne comme un lien vers Table1 pour tirer d\u2019autres donn\u00e9es. $Mix_Product.Lt_per_100_Lt utilise la colonne de liste de r\u00e9f\u00e9rence, Mix Product, pour tirer des valeurs de la colonne Lt per 100 Lt de Table1 pour les produits list\u00e9s dans la colonne Mix Product de Table2, puis assigne cette liste de valeurs \u00e0 la variable mix_list_str . C\u2019est la m\u00eame formule utilis\u00e9e dans la colonne Lt per 100 Lt de Table2, donc vous pouvez voir la valeur qu\u2019elle renvoie dans la ligne 1 de Table2. Elle renvoie une liste : ['0.2355', '1.2579'] . Cette liste est \u00e9valu\u00e9e comme une cha\u00eene plut\u00f4t que comme des valeurs num\u00e9riques. Nous devons convertir chaque valeur de cette liste en float. Dans notre prochaine formule, [float(i) for i in mix_list_str] , nous it\u00e9rons \u00e0 travers la liste qui a \u00e9t\u00e9 assign\u00e9e dans la premi\u00e8re \u00e9quation \u00e0 mix_list_str et convertissons chaque valeur en un nombre \u00e0 virgule flottante. Nous voulons convertir en float plut\u00f4t qu\u2019en entier car toutes les valeurs ne sont pas des nombres entiers et contiennent des d\u00e9cimales. i est une variable repr\u00e9sentant chaque valeur. Donc chaque valeur dans mix_list_str est \u00e9valu\u00e9e dans l\u2019\u00e9quation float(i) . float(0.2355) convertit 0.2355 en float et float(1.2579) convertit 1.2579 en float. Maintenant, nous assignons notre liste de floats \u00e0 la variable mix_list_float . Nous pouvons maintenant utiliser nos valeurs float dans une \u00e9quation math\u00e9matique. Encore une fois, nous it\u00e9rons \u00e0 travers la liste qui a \u00e9t\u00e9 assign\u00e9e \u00e0 la variable mix_list_float . Dans notre \u00e9quation [Lt * $Water/100 for Lt in mix_list_float] , Lt repr\u00e9sente chaque valeur dans mix_list_float et $Water repr\u00e9sente la valeur trouv\u00e9e dans la colonne Water qui est 1000 . Nous \u00e9valuons l\u2019\u00e9quation Lt * 1000/100 lorsque Lt = 0.2355 et Lt = 1.2579 , ce qui renvoie la liste [2.355, 12.579] . Nous assignons cette liste \u00e0 la variable x . Pour arrondir les valeurs dans x \u00e0 deux d\u00e9cimales, nous devons \u00e9valuer l\u2019\u00e9quation ROUND(num, 2) o\u00f9 num repr\u00e9sente chaque valeur dans notre liste et 2 sp\u00e9cifie le nombre de d\u00e9cimales que nous voulons arrondir. Cela renvoie la liste [2.36, 12.58] que nous assignons \u00e0 la variable round_x. Dans la premi\u00e8re \u00e9quation, nous avons utilis\u00e9 notre colonne de liste de r\u00e9f\u00e9rence, Mix Product, comme notre lien vers Table1 afin de tirer des donn\u00e9es de Table1 dans Table2. Nous utilisons cette m\u00e9thode \u00e0 nouveau dans $Mix_Product.Product pour tirer des donn\u00e9es de la colonne Product de Table1. Cela renvoie une liste de produits ; [Prod A, Prod B] . Nous assignons cette liste \u00e0 la variable l . Enfin, nous utilisons la m\u00e9thode join() pour combiner nos deux listes. ' ' est notre cha\u00eene de d\u00e9part (vide). Nous utilisons la m\u00e9thode format de Python pour formater notre cha\u00eene. {} est un espace r\u00e9serv\u00e9 pour chaque variable list\u00e9e dans .format() . Enfin, nous utilisons la fonction zip() de Python pour associer les premi\u00e8res valeurs de chaque liste ensemble, puis associer les deuxi\u00e8mes valeurs de chaque liste ensemble. l est assign\u00e9 comme notre liste first et round_x est assign\u00e9 comme notre liste second . l = [Prod A, Prod B] et round_x = [2.36, 12.58] . En zippant nos listes dans '{} {}'.format(first, second) , nous obtenons Prod A 2.36 dans notre premi\u00e8re it\u00e9ration et Prod B 12.58 dans notre seconde it\u00e9ration. Notre valeur de retour finale est Prod A 2.36 Prod B 12.58 .","title":"Exemple d’arrondi des nombres"},{"location":"formula-cheat-sheet/#formatage-des-nombres-avec-des-zeros-en-tete","text":"Vous permet de sp\u00e9cifier le nombre minimum de chiffres renvoy\u00e9s dans une colonne num\u00e9rique en ajoutant des z\u00e9ros en t\u00eate. Si x = 5, str(x).zfill(3) ou '{:0>3}'.format(x) renverrait 005 .","title":"Formatage des nombres avec des z\u00e9ros en t\u00eate"},{"location":"formula-cheat-sheet/#formatage-des-nombres-avec-des-zeros-en-tete_1","text":"Exemple Communautaire : Utilisation de Row ID La formule utilis\u00e9e dans la colonne ID \u00e0 5 chiffres de la table ID Examples est : 'TCH{:0>5}'.format($id) '{:0>5}'.format($id) prend l\u2019ID de ligne unique et le formate pour avoir un minimum de 5 chiffres. Nous ajoutons ensuite cela \u00e0 notre cha\u00eene \"TCH\" pour obtenir notre valeur finale. Si l\u2019ID $id est plus long que 5 chiffres, la formule renvoie la cha\u00eene sans modification. Nous pouvons faire la m\u00eame chose en utilisant la m\u00e9thode str.zfill() . La formule utilis\u00e9e dans la colonne zfill Method de la table ID Examples est : str($id).zfill(5) str($id) convertit l\u2019ID de ligne en cha\u00eene. .zfill(x) renvoie une copie de la cha\u00eene avec des z\u00e9ros en t\u00eate pour faire une cha\u00eene de longueur x . Dans notre exemple, cela ajoute des z\u00e9ros en t\u00eate pour faire la cha\u00eene de 5 caract\u00e8res de long. Encore une fois, si l\u2019ID $id est plus long que 5 chiffres, la formule renvoie la cha\u00eene sans modification.","title":"Formatage des nombres avec des z\u00e9ros en t\u00eate"},{"location":"formula-cheat-sheet/#depannage-des-erreurs_1","text":"#TypeError : ne peut concat\u00e9ner que str (pas \u201cint\u201d) \u00e0 str Si vous souhaitez combiner une cha\u00eene et une valeur num\u00e9rique, assurez-vous de la convertir en cha\u00eene en utilisant str() .","title":"D\u00e9pannage des Erreurs"},{"location":"formula-cheat-sheet/#travailler-avec-des-chaines","text":"","title":"Travailler avec des Cha\u00eenes"},{"location":"formula-cheat-sheet/#combinaison-de-texte-de-plusieurs-colonnes","text":"M\u00e9thode 1 : Si vous avez une colonne Pr\u00e9nom et une colonne Nom, vous pouvez combiner ces colonnes pour avoir une colonne Nom Complet. Si le Pr\u00e9nom est George et le Nom est Washington , $First_Name + \" \" + $Last_Name renverrait George Washington . M\u00e9thode 2 : Si vous avez un formatage suppl\u00e9mentaire, une mani\u00e8re plus simple de le faire serait d\u2019utiliser la m\u00e9thode format() de Python . La m\u00e9thode format() formate les valeurs sp\u00e9cifi\u00e9es et les ins\u00e8re \u00e0 la place du placeholder, {} . En utilisant le m\u00eame exemple que ci-dessus, notre formule serait \"{} {}\".format($First_Name, $Last_Name) . Remarque : Vous pouvez cliquer sur les colonnes pour les ins\u00e9rer dans vos formules, plut\u00f4t que de les taper.","title":"Combinaison de Texte de Plusieurs Colonnes"},{"location":"formula-cheat-sheet/#exemples-utilisant-la-methode-1","text":"Class Enrollment template{:target=\u201d_blank\u201d} La formule utilis\u00e9e dans la colonne Nom Complet de la table des \u00c9tudiants est : $Last_Name + \", \" + $First_Name Ici, nous combinons la valeur trouv\u00e9e dans la colonne Last Name avec une virgule suivie d\u2019un espace suivi de la valeur de la colonne First Name. Lorsque vous ajoutez des caract\u00e8res ou des espaces suppl\u00e9mentaires, placez-les entre guillemets doubles, comme nous l\u2019avons fait dans l\u2019exemple avec \", \" . Une combinaison alternative de ces colonnes pour le Nom Complet pourrait \u00eatre $First_Name + \" \" + $Last_Name . Pour l\u2019exemple dans la ligne 1, le Pr\u00e9nom est Brockie et le Nom est Raddon , donc la valeur renvoy\u00e9e serait Brockie Raddon . Inventory Manager template La formule utilis\u00e9e dans la colonne SKU de la table Tous les Produits est : $Brand.Brand_Code+\"-\"+$Color.Code+\"-\"+$Size Brand est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Name Brand de la table Add Products. Nous utilisons cette colonne de r\u00e9f\u00e9rence dans $Brand.Brand_Code pour tirer des donn\u00e9es de la colonne Brand Code de la table Add Products. Color est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Color de la table Color. Nous utilisons cette colonne de r\u00e9f\u00e9rence dans $Color.Code pour tirer des donn\u00e9es de la colonne Code de la table Color. Chacune des valeurs trouv\u00e9es dans $Brand.Brand_Code et $Color.Code est combin\u00e9e avec la valeur dans la colonne Size avec un - entre chacune des trois valeurs pour constituer le SKU.","title":"Exemples utilisant la M\u00e9thode 1"},{"location":"formula-cheat-sheet/#exemples-utilisant-la-methode-2","text":"Tracking Time + Invoicing template La formule utilis\u00e9e dans la colonne Nom du Projet de la table des Projets est : \"{}: {}\".format($Client.Name, $Name) D\u00e9composons cela. Tout ce qui se trouve entre guillemets doubles \" est notre cha\u00eene. Les accolades {} sont des espaces r\u00e9serv\u00e9s pour les valeurs trouv\u00e9es \u00e0 l\u2019aide de .format() qui est la m\u00e9thode de formatage de cha\u00eene de Python. Le premier ensemble d\u2019accolades est remplac\u00e9 par la valeur trouv\u00e9e dans $Client.Name . Client est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es pour un enregistrement sp\u00e9cifique de la table Clients. $Client.Name utilise notre colonne de r\u00e9f\u00e9rence, Client pour tirer des donn\u00e9es de la colonne Name de la table Clients. Le deuxi\u00e8me ensemble d\u2019accolades est remplac\u00e9 par la valeur trouv\u00e9e dans la colonne Name de cette table. Bien que la colonne Client montre la valeur que nous voulons, nous ne pouvons pas utiliser $Client comme nous l\u2019avons fait avec $Name . Cela est d\u00fb au fait que la colonne Client est une colonne de r\u00e9f\u00e9rence. Elle fait r\u00e9f\u00e9rence \u00e0 l\u2019 entier enregistrement mais utilise la valeur de la colonne Name de la table Clients comme repr\u00e9sentation visuelle de cet enregistrement. Dans le panneau de configuration de la colonne sur le c\u00f4t\u00e9 droit, nous pouvons changer quelle valeur de colonne nous voyons pour l\u2019enregistrement. Dans la capture d\u2019\u00e9cran ci-dessous, \u2018Show Column\u2019 a \u00e9t\u00e9 chang\u00e9 de Name \u00e0 Email. Cela ne change pas les donn\u00e9es, cela change simplement l\u2019\u00e9tiquette sur ces donn\u00e9es dans la colonne Client. Cela pointe toujours vers le m\u00eame enregistrement mais montre maintenant une \u00e9tiquette diff\u00e9rente. $Client.Name tire le Nom pour l\u2019enregistrement qui est r\u00e9f\u00e9renc\u00e9 dans la colonne Client, peu importe l\u2019\u00e9tiquette que nous voyons. Custom Product Builder template La formule utilis\u00e9e dans la colonne All Components de la carte CONTRACT_BUILDER est : '\\n'.join(sorted( \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) for (comp, quantity) in $Components.items() )) Nous utilisons la m\u00e9thode join() , la fonction sorted() et la m\u00e9thode format() toutes en une seule fois ! '\\n'.join() ajoute une nouvelle ligne entre chaque \u00e9l\u00e9ment de la liste. sorted() trie les \u00e9l\u00e9ments de la liste par ordre alphab\u00e9tique. Cela nous laisse avec le suivant : \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) for (comp, quantity) in $Components.items() Nous allons travailler \u00e0 l\u2019envers. Tout d\u2019abord, nous devons examiner la colonne Components qui est une colonne cach\u00e9e dans la table All Contracts. Cette colonne est une liste de composants et de leurs quantit\u00e9s associ\u00e9es pour le contrat. Dans la boucle for , nous assignons chaque \u00e9l\u00e9ment de la liste de composants \u00e0 deux variables, comp et quantity. Pour Components[3]: 6.0 , comp = Components[3] et quantity = 6.0 . Components[#] sp\u00e9cifie un Composant dans la table Components par ID de ligne. Components[3] est le composant assign\u00e9 3 comme son ID de ligne. Maintenant, nous ex\u00e9cutons chaque \u00e9l\u00e9ment de la liste ci-dessus \u00e0 travers l\u2019\u00e9quation \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) . comp.Component remplace le premier ensemble de {} . comp est la variable avec notre ID de composant donc comp.Component trouve la valeur dans la colonne Component associ\u00e9e \u00e0 cet ID de ligne. Pour Components[3] , comp.Component est Nozzle. quantity remplace le deuxi\u00e8me ensemble de {} . Encore une fois, la quantit\u00e9 est la deuxi\u00e8me variable dans notre liste. Pour Components[3]: 6.0 , quantity est 6.0 . Notre deuxi\u00e8me ensemble de {} n\u2019est pas vide. Ils incluent :g *. Cela convertit la valeur en un nombre \u00e0 virgule flottante. comp.Unit remplace le dernier ensemble de {} . comp est la variable avec notre ID de composant donc comp.Unit trouve la valeur dans la colonne Unit associ\u00e9e \u00e0 cet ID de ligne. Pour Components[3] , comp.Unit est None . *Notez que {:g} formate les nombres \u00e0 virgule flottante d\u2019une mani\u00e8re particuli\u00e8re qui omet les d\u00e9cimales lorsqu\u2019elles ne sont pas n\u00e9cessaires. Il existe de nombreuses options disponibles dans les espaces r\u00e9serv\u00e9s pour formater des nombres, des dates, etc. En savoir plus sur les espaces r\u00e9serv\u00e9s ici . Email Contacts template La formule utilis\u00e9e dans la colonne Body de la table Advanced Compose est : \"Dear %s,\\n\\nWelcome to the %s team!\" % ($Contact_Name_as_Plaintext, $Team) Cette technique utilise l\u2019op\u00e9rateur % au lieu de la m\u00e9thode format() . Les sp\u00e9cificateurs de format commencent par % suivi d\u2019un caract\u00e8re qui repr\u00e9sente le type de donn\u00e9es. %s est un espace r\u00e9serv\u00e9 pour une cha\u00eene. Le premier %s est remplac\u00e9 par la valeur trouv\u00e9e dans la colonne \u201cContact Name as Plaintext\u201d qui est une colonne cach\u00e9e et le deuxi\u00e8me %s est remplac\u00e9 par la valeur dans la colonne Team. \\n ajoute une nouvelle ligne.","title":"Exemples utilisant la M\u00e9thode 2"},{"location":"formula-cheat-sheet/#division-de-chaines-de-texte","text":"Divisez une cha\u00eene en utilisant la m\u00e9thode split() de Python. Si le Nom Complet est George Washington , $Full_Name.split(\" \") renverrait [George, Washington] .","title":"Division de Cha\u00eenes de Texte"},{"location":"formula-cheat-sheet/#exemple-de-division-de-chaines-de-texte","text":"Exemple Communautaire : Colors La formule dans la colonne \u201cColor Reference (Just URL)\u201d de la Table 2 est : split = $Color_Reference.Color.split(\" \") return split[-1] $Color_Reference.Color utilise la colonne de r\u00e9f\u00e9rence, \u201cColor Reference\u201d pour tirer des donn\u00e9es de la table qu\u2019elle r\u00e9f\u00e9rence, Table 1. Sp\u00e9cifiquement, elle tire la valeur de la colonne Color de Table 1. Color est une colonne de texte qui contient un hyperlien avec une \u00e9tiquette. Nous ne voyons que l\u2019\u00e9tiquette dans Table 1 mais comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessus, la valeur dans la cellule \u2018pink\u2019 est d\u00e9velopp\u00e9e pour montrer toute la cha\u00eene qui contient \u201cpink\u201d suivie de l\u2019URL. Vous pouvez \u00e9galement voir cela dans la colonne \u201cColor Reference\u201d de la Table 2. Nous voulons obtenir le lien par lui-m\u00eame dans \u201cColor Reference (Just URL)\u201d. Nous pouvons le faire en utilisant la m\u00e9thode split() de Python. .split(\" \") nous permet de diviser la cha\u00eene partout o\u00f9 il y a un espace (\" \") . Dans la colonne Color, il y a une \u00e9tiquette suivie d\u2019un espace suivi de l\u2019URL. La valeur de la colonne Color est divis\u00e9e en une liste contenant deux \u00e9l\u00e9ments Label et URL . Cette liste est assign\u00e9e \u00e0 la variable split . Nous voulons renvoyer le dernier \u00e9l\u00e9ment de la liste split afin d\u2019obtenir notre URL . Le dernier \u00e9l\u00e9ment d\u2019une liste a toujours l\u2019index [-1] . return split[-1] renvoie le dernier \u00e9l\u00e9ment de la liste split .","title":"Exemple de Division de Cha\u00eenes de Texte"},{"location":"formula-cheat-sheet/#lien-direct-vers-lhistorique-gmail-pour-un-contact","text":"Si vous stockez des contacts dans Grist et utilisez Gmail pour les email, vous pouvez cr\u00e9er une formule qui ouvrira Gmail sur une liste de conversations avec ce contact. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Afficher l\u2019historique Gmail pour un contact particulier","title":"Lien Direct vers l’Historique Gmail pour un Contact"},{"location":"formula-cheat-sheet/#depannage_1","text":"Votre URL s\u2019affiche-t-elle toujours apr\u00e8s avoir ajout\u00e9 une \u00e9tiquette ? Assurez-vous que votre Type de Colonne est Texte et que le Format de Cellule est Hyperlien.","title":"D\u00e9pannage"},{"location":"formula-cheat-sheet/#joindre-une-liste-de-chaines","text":"Lorsque vous souhaitez joindre une liste de cha\u00eenes, vous pouvez utiliser la m\u00e9thode join() de Python .","title":"Joindre une Liste de Cha\u00eenes"},{"location":"formula-cheat-sheet/#exemple-de-jointure-dune-liste","text":"Exemple Communautaire : .join() Exemple La formule utilis\u00e9e dans la colonne Advertisement de la table 2022 Grand Openings est : \"Coming soon to a city near you!\\n\" + \" : \".join($New_Location_s_in_2022) Ici, nous joignons plusieurs cha\u00eenes pour cr\u00e9er notre publicit\u00e9. \"Coming soon to a city near you!\\n\" est renvoy\u00e9 presque exactement comme nous le voyons, \u00e0 l\u2019exception des guillemets \"\" et \\n \u00e0 la fin de la cha\u00eene. Les guillemets \"\" sp\u00e9cifient qu\u2019il s\u2019agit d\u2019une cha\u00eene et \\n est en fait un caract\u00e8re de nouvelle ligne qui peut \u00eatre utilis\u00e9 pour sp\u00e9cifier une nouvelle ligne dans une cha\u00eene. \" : \".join($New_Location_s_in_2022) est \u00e9galement une cha\u00eene mais utilise la m\u00e9thode join() de Python pour joindre les valeurs de notre colonne de liste de choix , \u201cNew Locations in 2022\u201d. Ce que nous voyons entre guillemets avant .join est ce qui s\u00e9parera chaque valeur de notre liste. Dans cet exemple, chaque valeur est s\u00e9par\u00e9e par un espace, : et un autre espace.","title":"Exemple de Jointure d’une Liste"},{"location":"formula-cheat-sheet/#trouver-des-doublons","text":"Vous pouvez trouver des doublons dans une colonne en utilisant soit le formatage conditionnel, soit une colonne d\u2019aide. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Assurer des valeurs uniques ou d\u00e9tecter des doublons","title":"Trouver des Doublons"},{"location":"formula-cheat-sheet/#exemple-de-trouver-des-doublons","text":"Exemple Communautaire : Finding Duplicates La formule utilis\u00e9e dans la colonne Duplicate? de la table Duplicates est : len(Duplicates.lookupRecords(Grocery_List=$Grocery_List))>1 D\u00e9composons cela, en travaillant de l\u2019int\u00e9rieur vers l\u2019ext\u00e9rieur. Duplicates.lookupRecords(Grocery_List=$Grocery_List) Ceci est une fonction lookupRecords qui suit le format : [Table_Name].lookupRecords([A]=$[B]) O\u00f9 [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table \u00e9tant recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Cette formule recherche des enregistrements dans la table Duplicates o\u00f9 un enregistrement dans la colonne Grocery List correspond \u00e0 un autre enregistrement dans la m\u00eame colonne. len() compte le nombre d\u2019enregistrements dans notre liste. Puisque chaque doublon correspondra \u00e0 l\u2019autre, il devrait appara\u00eetre deux fois dans notre liste. C\u2019est pourquoi len() > 1 . Si len() > 1 , la formule est vraie. Si len() <= 1 , la formule est fausse. Cette m\u00eame formule peut \u00eatre utilis\u00e9e dans le formatage conditionnel. Cela peut \u00eatre vu dans la colonne \u2018Grocery List\u2019 de la table Duplicates. Si len() > 1 , notre formule est vraie et la couleur de cellule conditionnelle est appliqu\u00e9e \u00e0 ces cellules. Si len() <= 1 , notre formule est fausse et la couleur de cellule reste inchang\u00e9e.","title":"Exemple de Trouver des Doublons"},{"location":"formula-cheat-sheet/#utilisation-de-lidentifiant-unique-dun-enregistrement-dans-les-formules","text":"Lorsqu\u2019un enregistrement est cr\u00e9\u00e9, il se voit attribuer un ID num\u00e9rique (disponible sous la forme $id dans les formules) qui est unique au sein de cette table. Vous pouvez r\u00e9v\u00e9ler l\u2019ID de ligne en ajoutant une colonne de formule o\u00f9 la formule est $id .","title":"Utilisation de l’Identifiant Unique d’un Enregistrement dans les Formules"},{"location":"formula-cheat-sheet/#exemples-dutilisation-de-lid-de-ligne-dans-les-formules","text":"Vous pouvez r\u00e9v\u00e9ler l\u2019ID avec la formule $id Custom Product Builder template La formule utilis\u00e9e dans la colonne Contract No de la table Contract Builder est : $id + 500 Ici, nous utilisons une formule d\u2019initialisation pour cr\u00e9er un num\u00e9ro de contrat unique lors de la cr\u00e9ation d\u2019un enregistrement. Class Enrollment template La formule utilis\u00e9e dans la colonne Count de la table des Classes est : len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) Ceci est appel\u00e9 une recherche invers\u00e9e. Nous pouvons utiliser l\u2019ID de ligne pour faire correspondre un enregistrement dans une autre table o\u00f9 une colonne de r\u00e9f\u00e9rence est utilis\u00e9e. LookupRecords suit le format [Table_Name].lookupRecords([A]=$[B]) . [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table \u00e9tant recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Lookup Records cr\u00e9e une liste d\u2019enregistrements qui correspondent aux crit\u00e8res \u00e9num\u00e9r\u00e9s. len() compte combien d\u2019enregistrements sont dans cette liste. Ici, nous recherchons des enregistrements dans la table Enrollments o\u00f9 l\u2019enregistrement mentionn\u00e9 dans la colonne Class (notre colonne de r\u00e9f\u00e9rence) a le m\u00eame ID de ligne que la ligne dans la table dans laquelle vous entrez la formule. De plus, la valeur dans la colonne Status de la table Enrollments est Confirmed . Nous allons d\u00e9composer cela. La table dans laquelle nous recherchons des enregistrements est la table Enrollments. Nos crit\u00e8res proviennent de la colonne Class et de la colonne Status. Le crit\u00e8re pour Status est simple ; la valeur doit \u00eatre Confirmed pour \u00eatre incluse dans notre liste d\u2019enregistrements. Class est un peu plus compliqu\u00e9. Comme nous le voyons dans la capture d\u2019\u00e9cran ci-dessous, Class est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table Classes. Ici, la colonne Class montre la valeur de la colonne Class Code de la table Classes mais elle pointe vers l\u2019enregistrement entier o\u00f9 le code de classe est 2018F-Stars . Une colonne de r\u00e9f\u00e9rence pointe vers l\u2019 entier enregistrement, pas seulement la valeur que vous voyez ici dans la colonne Class. En utilisant le panneau de configuration sur le c\u00f4t\u00e9 droit de l\u2019\u00e9cran, vous pouvez choisir n\u2019importe quelle colonne de la table d\u2019origine \u00e0 afficher. Pour cet exemple, la colonne Class montre la valeur de la colonne Class Code de la table Classes mais elle pointe vers l\u2019enregistrement entier o\u00f9 le code de classe est 2018F-Stars . Comme vous pouvez le voir dans cette capture d\u2019\u00e9cran, l\u2019ID de ligne pour cet enregistrement particulier est 2 et parce que nous calculons le Count pour la ligne avec Row ID = 2 , il comptera tous les enregistrements dans la table Enrollment o\u00f9 Class montre 2018F-Stars et Status est Confirmed . Restaurant Custom Orders template La formule d\u2019initialisation utilis\u00e9e dans la colonne BOM # de la table Bill of Materials est : MAX(o.BOM_ for o in Bill_Of_Materials.all if o.id != $id) + 1 Tout d\u2019abord, nous allons examiner la formule \u00e0 l\u2019int\u00e9rieur des parenth\u00e8ses, puis travailler vers l\u2019ext\u00e9rieur. Ici, o est une variable repr\u00e9sentant chaque enregistrement dans notre table. o.BOM_ repr\u00e9sente le BOM # pour chaque enregistrement et o.id repr\u00e9sente l\u2019ID de ligne pour chaque enregistrement. C\u2019est une boucle for qui cr\u00e9e une liste des BOM # pour chaque enregistrement dans la table Bill of Materials lorsque l\u2019ID d\u2019enregistrement n\u2019est pas \u00e9gal \u00e0 l\u2019ID de cette ligne. MAX() trouve le maximum des BOM # dans la liste puis + 1 pour obtenir notre valeur finale. C\u2019est une formule d\u2019initialisation qui ne s\u2019applique qu\u2019aux nouveaux enregistrements. Lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9, la formule trouve le plus grand BOM # dans la table puis ajoute 1 pour que nous ayons un BOM # unique pour le nouvel enregistrement.","title":"Exemples d’Utilisation de l’ID de Ligne dans les Formules"},{"location":"formula-cheat-sheet/#suppression-des-doublons-dune-liste","text":"Vous pouvez supprimer des doublons d\u2019une liste avec l\u2019aide de la m\u00e9thode set() de Python.","title":"Suppression des Doublons d’une Liste"},{"location":"formula-cheat-sheet/#exemple-de-suppression-des-doublons-dune-liste","text":"Exemple Communautaire : Removing Duplicates From a List La formule dans la colonne All Divisions de la table Abroad Trips est : confirmed_div = $Attending_Confirmed.Role_Division.Division pending_div = $Attending_Pending.Role_Division.Division full_list = confirmed_div + pending_div return sorted(set(full_list)) Nous allons d\u00e9composer cela ligne par ligne. Attending-Confirmed est une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table EMPLOYEES. $Attending_Confirmed.Role_Division tire la valeur de la colonne Role Division de la table EMPLOYEES. La colonne Role Division dans la table EMPLOYEES est elle-m\u00eame une colonne de r\u00e9f\u00e9rence, qui pointe vers un enregistrement dans la table Divisions. Chaining nous permet de sp\u00e9cifier quelles informations nous voulons de cet enregistrement. Dans ce cas, nous voulons la Division. Nous d\u00e9veloppons notre formule pour $Attending_Confirmed.Role_Division.Division . La Division est trouv\u00e9e pour chaque employ\u00e9 list\u00e9 dans la colonne Attending-Confirmed, cr\u00e9ant une liste. Nous assignons cette liste de divisions \u00e0 la variable confirmed_div . Attending-Pending est \u00e9galement une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table EMPLOYEES. $Attending_Pending.Role_Division.Division fait la m\u00eame chose que ci-dessus sauf que maintenant nous tirons la division pour chaque employ\u00e9 dans la colonne Attending-Pending. Nous assignons cette liste \u00e0 la variable pending_div . Nous cr\u00e9ons une liste de toutes les divisions en ajoutant les deux listes ensemble et en assignant cette liste combin\u00e9e \u00e0 la variable full_list . return sorted(set(full_list)) utilise d\u2019abord la m\u00e9thode set() de Python pour cr\u00e9er une liste sans doublons. Nous utilisons ensuite la m\u00e9thode sorted() pour renvoyer notre ensemble de divisions, tri\u00e9 par ordre alphab\u00e9tique. Notez que la formule ci-dessus peut \u00eatre simplifi\u00e9e encore plus \u00e0 : sorted( set($Attending_Confirmed.Role_Division.Division) | set($Attending_Pending.Role_Division.Division) )","title":"Exemple de Suppression des Doublons d’une Liste"},{"location":"formula-cheat-sheet/#definir-des-valeurs-par-defaut-pour-de-nouveaux-enregistrements","text":"Vous pouvez d\u00e9finir des valeurs par d\u00e9faut pour lorsque un nouvel enregistrement est cr\u00e9\u00e9 et vous \u00e9pargner le tracas de devoir remplir les m\u00eames champs avec les m\u00eames valeurs encore et encore. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Valeurs par d\u00e9faut sur le widget","title":"D\u00e9finir des Valeurs par D\u00e9faut pour de Nouveaux Enregistrements"},{"location":"formula-cheat-sheet/#travailler-avec-des-dates-et-des-heures","text":"","title":"Travailler avec des dates et des heures"},{"location":"formula-cheat-sheet/#tampons-automatiques-de-date-heure-et-auteur","text":"Vous pouvez automatiquement ajouter la date ou l\u2019heure \u00e0 laquelle un enregistrement a \u00e9t\u00e9 cr\u00e9\u00e9 ou mis \u00e0 jour ainsi que qui a effectu\u00e9 le changement.","title":"Tampons Automatiques de Date, Heure et Auteur"},{"location":"formula-cheat-sheet/#exemples-de-tampons-automatiques-de-date-heure-et-auteur","text":"Grant Application Tracker template La formule utilis\u00e9e dans la colonne Last Updated de la table Tasks est : NOW() C\u2019est une formule d\u2019initialisation qui se d\u00e9clenche lorsqu\u2019un changement est effectu\u00e9 dans n\u2019importe quel champ pour cet enregistrement. Lorsqu\u2019un changement est effectu\u00e9, cette formule ex\u00e9cute son calcul. NOW() calcule l\u2019heure et la date actuelles pour le fuseau horaire s\u00e9lectionn\u00e9. La formule utilis\u00e9e dans la colonne Created By de la table Tasks est : user.Name C\u2019est une formule d\u2019initialisation qui se d\u00e9clenche lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Lorsque l\u2019enregistrement est cr\u00e9\u00e9, cette formule ex\u00e9cute son calcul. user.Name recherche le compte utilisateur qui est connect\u00e9 \u00e0 Grist et renvoie le nom associ\u00e9 \u00e0 ce compte.","title":"Exemples de Tampons Automatiques de Date, Heure et Auteur"},{"location":"formula-cheat-sheet/#depannage-des-erreurs_2","text":"Si la valeur de temps dans votre colonne datetime ne se calcule pas, v\u00e9rifiez votre formule. Si TODAY() est utilis\u00e9 dans DateTime, l\u2019heure affichera toujours 12:00 am comme vous le voyez ci-dessous. NOW() est utilis\u00e9 pour les colonnes DateTime. TODAY() est utilis\u00e9 pour la Date. #AttributeError Vous avez probablement entr\u00e9 user.name mais la formule est user.Name . Faites attention \u00e0 la capitalisation ! #NameError Vous avez peut-\u00eatre entr\u00e9 username ou userName . La formule correcte est user.Name . Une autre possibilit\u00e9 est que cela a \u00e9t\u00e9 entr\u00e9 en tant que colonne de formule plut\u00f4t qu\u2019en tant que colonne de formule d\u2019initialisation. Convertissez-la en formule d\u2019initialisation et cela devrait r\u00e9soudre le probl\u00e8me.","title":"D\u00e9pannage des Erreurs"},{"location":"formula-cheat-sheet/#filtrer-les-donnees-dans-une-duree-specifiee","text":"En utilisant la fonction DATEADD() et les op\u00e9rateurs de comparaison , vous pouvez d\u00e9terminer si une date tombe dans une plage sp\u00e9cifique puis appliquer un filtre.","title":"Filtrer les Donn\u00e9es dans une Dur\u00e9e Sp\u00e9cifi\u00e9e"},{"location":"formula-cheat-sheet/#exemple-de-filtrage-des-donnees-qui-tombe-dans-une-plage-de-1-mois","text":"Exemple Communautaire : Filtrage des Donn\u00e9es dans une Plage de 1 Mois La formule utilis\u00e9e dans la colonne Falls in 1 Month Range? de la table Interactions est : TODAY() >= $Date >= DATEADD(TODAY(),months=-1) TODAY() renvoie la date actuelle. $Date est le nom d\u2019une colonne dans notre table, qui est de type Date . DATEADD(start_date, days=0, months=0, years=0, weeks=0) renvoie la date qui est le nombre donn\u00e9 de jours, mois, ann\u00e9es ou semaines avant ou apr\u00e8s la start_date . Dans cet exemple, elle renvoie la date qui est un mois avant la date de d\u00e9part, TODAY() . Cette formule est vraie si la valeur de date dans la colonne Date tombe entre TODAY() et notre date DATEADD() qui est un mois auparavant. Si la valeur de date dans la colonne Date ne tombe pas entre ces deux dates, la formule renvoie faux. Nous pouvons utiliser cette colonne pour filtrer nos donn\u00e9es. Si nous ne voulons voir que les interactions qui tombent dans la Plage de 1 Mois, nous filtrerions pour n\u2019inclure que les valeurs true . Si nous voulons voir les interactions qui tombent en dehors de la Plage de 1 Mois, nous filtrerions pour n\u2019inclure que les valeurs false .","title":"Exemple de Filtrage des Donn\u00e9es qui ‘Tombe dans une Plage de 1 Mois’"},{"location":"formula-cheat-sheet/#depannage-des-erreurs_3","text":"#TypeError : Parce que $Date est une colonne de type Date , TODAY() doit \u00eatre utilis\u00e9 dans les formules comparant des dates. NOW() est une formule DateTime qui ne doit \u00eatre utilis\u00e9e qu\u2019avec d\u2019autres valeurs DateTime. Par exemple, si la colonne $Date \u00e9tait une colonne de type DateTime , NOW() devrait \u00eatre utilis\u00e9 plut\u00f4t que TODAY() car il inclut le composant temps. NOW() est date et heure. TODAY() est seulement date.","title":"D\u00e9pannage des Erreurs"},{"location":"formula-timer/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Minuteur de formules # Grist dispose d\u2019un minuteur de formules int\u00e9gr\u00e9 qui mesure le temps n\u00e9cessaire pour \u00e9valuer chaque formule dans un document. Cela aide \u00e0 diagnostiquer quelles formules sont responsables des ralentissements lorsque le document est ouvert pour la premi\u00e8re fois ou lorsqu\u2019il r\u00e9pond \u00e0 des modifications. Le minuteur de formules de Grist se trouve sur la page \u2018Param\u00e8tres du document\u2019, sous \u2018Moteur de donn\u00e9es\u2019. S\u00e9lectionnez \u2018D\u00e9marrer le chronom\u00e9trage\u2019 pour commencer. Sur l\u2019\u00e9cran suivant, vous aurez deux choix, \u2018D\u00e9marrer le chronom\u00e9trage\u2019 et \u2018Recharger et chronom\u00e9trer\u2019. D\u00e9marrer le chronom\u00e9trage \u2018D\u00e9marrer le chronom\u00e9trage\u2019 vous permet de faire des modifications dans le document, puis d\u2019arr\u00eater le chronom\u00e9trage pour voir les r\u00e9sultats. Cela est utile si vous souhaitez tester des formules sp\u00e9cifiques. Vous pouvez effectuer une modification qui affecte cette formule, puis revenir et cliquer sur \u2018Arr\u00eater le chronom\u00e9trage\u2019 pour voir le r\u00e9sultat. Recharger et chronom\u00e9trer \u2018Recharger et chronom\u00e9trer\u2019 force un rechargement du document tout en chronom\u00e9trant les formules et affiche le r\u00e9sultat. Cela montrera les r\u00e9sultats de chronom\u00e9trage pour toutes les formules \u00e0 travers l\u2019ensemble du document. R\u00e9sultats # Les r\u00e9sultats sont affich\u00e9s sous forme de tableau. \u26a0\ufe0f Tableau des r\u00e9sultats Le tableau des r\u00e9sultats du minuteur de formules n\u2019est enregistr\u00e9 nulle part dans le document. Si vous quittez cette page, vous devrez relancer le minuteur de formules pour r\u00e9cup\u00e9rer le tableau. Triez la colonne Temps total de Z > A afin que les formules prenant le plus de temps \u00e0 s\u2019ex\u00e9cuter soient list\u00e9es en premier. Le tableau sp\u00e9cifie l\u2019 ID de la table et l\u2019 ID de la colonne contenant chaque formule. Examinez les formules avec le temps total le plus \u00e9lev\u00e9 pour voir comment elles peuvent \u00eatre am\u00e9lior\u00e9es. Si votre document subit des ralentissements dus aux calculs de formules, vous verrez des Temps totaux sup\u00e9rieurs \u00e0 1 seconde. Besoin de conseils pour am\u00e9liorer une formule ? Publiez sur notre Forum Communautaire !","title":"Formula timer"},{"location":"formula-timer/#minuteur-de-formules","text":"Grist dispose d\u2019un minuteur de formules int\u00e9gr\u00e9 qui mesure le temps n\u00e9cessaire pour \u00e9valuer chaque formule dans un document. Cela aide \u00e0 diagnostiquer quelles formules sont responsables des ralentissements lorsque le document est ouvert pour la premi\u00e8re fois ou lorsqu\u2019il r\u00e9pond \u00e0 des modifications. Le minuteur de formules de Grist se trouve sur la page \u2018Param\u00e8tres du document\u2019, sous \u2018Moteur de donn\u00e9es\u2019. S\u00e9lectionnez \u2018D\u00e9marrer le chronom\u00e9trage\u2019 pour commencer. Sur l\u2019\u00e9cran suivant, vous aurez deux choix, \u2018D\u00e9marrer le chronom\u00e9trage\u2019 et \u2018Recharger et chronom\u00e9trer\u2019. D\u00e9marrer le chronom\u00e9trage \u2018D\u00e9marrer le chronom\u00e9trage\u2019 vous permet de faire des modifications dans le document, puis d\u2019arr\u00eater le chronom\u00e9trage pour voir les r\u00e9sultats. Cela est utile si vous souhaitez tester des formules sp\u00e9cifiques. Vous pouvez effectuer une modification qui affecte cette formule, puis revenir et cliquer sur \u2018Arr\u00eater le chronom\u00e9trage\u2019 pour voir le r\u00e9sultat. Recharger et chronom\u00e9trer \u2018Recharger et chronom\u00e9trer\u2019 force un rechargement du document tout en chronom\u00e9trant les formules et affiche le r\u00e9sultat. Cela montrera les r\u00e9sultats de chronom\u00e9trage pour toutes les formules \u00e0 travers l\u2019ensemble du document.","title":"Minuteur de formules"},{"location":"formula-timer/#resultats","text":"Les r\u00e9sultats sont affich\u00e9s sous forme de tableau. \u26a0\ufe0f Tableau des r\u00e9sultats Le tableau des r\u00e9sultats du minuteur de formules n\u2019est enregistr\u00e9 nulle part dans le document. Si vous quittez cette page, vous devrez relancer le minuteur de formules pour r\u00e9cup\u00e9rer le tableau. Triez la colonne Temps total de Z > A afin que les formules prenant le plus de temps \u00e0 s\u2019ex\u00e9cuter soient list\u00e9es en premier. Le tableau sp\u00e9cifie l\u2019 ID de la table et l\u2019 ID de la colonne contenant chaque formule. Examinez les formules avec le temps total le plus \u00e9lev\u00e9 pour voir comment elles peuvent \u00eatre am\u00e9lior\u00e9es. Si votre document subit des ralentissements dus aux calculs de formules, vous verrez des Temps totaux sup\u00e9rieurs \u00e0 1 seconde. Besoin de conseils pour am\u00e9liorer une formule ? Publiez sur notre Forum Communautaire !","title":"R\u00e9sultats"},{"location":"formulas/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Formules # Grist dispose d\u2019un puissant moteur de donn\u00e9es pour calculer les cellules de vos tables en utilisant des formules. Il dispose m\u00eame d\u2019un Assistant de Formule AI pour aider \u00e0 r\u00e9diger des formules. Si vous avez d\u00e9j\u00e0 utilis\u00e9 des tableurs ou des expressions de base de donn\u00e9es, vous serez dans un territoire familier - mais il y a quelques subtilit\u00e9s que vous voudrez conna\u00eetre, alors restez avec nous. Commen\u00e7ons par un usage classique des tableurs. Supposons que vous ayez une liste de produits que vous avez command\u00e9s, la quantit\u00e9 que vous avez command\u00e9e, et le prix unitaire de chacun. Vous avez cr\u00e9\u00e9 une colonne pour montrer la quantit\u00e9 multipli\u00e9e par le prix unitaire, mais vous voulez que l\u2019ordinateur s\u2019occupe de cette partie pour vous. Il vous suffit de s\u00e9lectionner une cellule dans la colonne que vous souhaitez remplir, et d\u2019appuyer sur la touche = pour indiquer \u00e0 Grist que vous souhaitez entrer une formule, plut\u00f4t qu\u2019une valeur. Avez-vous remarqu\u00e9 que, lorsque vous avez fait cela, les \u00e9tiquettes des colonnes ont l\u00e9g\u00e8rement chang\u00e9 ? \u201cProduit\u201d est devenu \u201c$Produit\u201d, et \u201cPrix Unitaire\u201d est devenu \u201c$Prix_Unitaire\u201d. C\u2019est Grist qui vous indique comment vous r\u00e9f\u00e9rer \u00e0 ces colonnes dans votre formule. Il vous suffit de taper $Quantit\u00e9 * $Prix_Unitaire . Vous trouverez une fonction d\u2019auto-compl\u00e9tion pr\u00eate \u00e0 vous aider. Ou si vous n\u2019aimez pas taper, cliquez sur la colonne Quantit\u00e9, tapez le symbole de multiplication, puis cliquez sur la colonne Prix Unitaire. Votre formule devrait ressembler \u00e0 ceci : Pour contr\u00f4ler l\u2019ID de la colonne, comme \u201c$Prix_Unitaire\u201d, qui est utilis\u00e9 dans les formules, consultez Renommer les colonnes . Appuyez sur Entr\u00e9e , et votre formule est appliqu\u00e9e \u00e0 toutes les cellules de la colonne. Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec des tableurs, vous serez peut-\u00eatre surpris de constater que vous n\u2019avez pas besoin de sp\u00e9cifier les num\u00e9ros de ligne, comme B1 * C1 . Dans Grist, une seule formule s\u2019applique \u00e0 toute une colonne. Vous n\u2019avez pas \u00e0 vous soucier de la remplir pour toutes les lignes, et vous pouvez vous r\u00e9f\u00e9rer \u00e0 des valeurs dans la m\u00eame ligne sans tracas. Vous pouvez formater les colonnes num\u00e9riques pour qu\u2019elles aient un meilleur aspect en d\u00e9finissant le type de colonne sur Num\u00e9rique , et en s\u00e9lectionnant des options de formatage appropri\u00e9es : Comportement des colonnes # Lorsque nous fournissons une formule pour une colonne, nous disons \u00e0 Grist de mettre \u00e0 jour sa valeur \u00e0 chaque changement dans un document. Nous ne pouvons plus saisir une valeur dans la cellule, car sa valeur est d\u00e9termin\u00e9e uniquement par la formule. Une colonne de formule est l\u2019un des trois comportements possibles de colonne, que vous pouvez contr\u00f4ler en utilisant la section COMPORTEMENT DE COLONNE dans le panneau de cr\u00e9ation : Colonne de donn\u00e9es maintient des donn\u00e9es, que vous pouvez mettre \u00e0 jour ou effacer manuellement, ou \u00e9ventuellement calculer en utilisant formules d\u2019initialisation . Colonne de formule refl\u00e8te toujours le r\u00e9sultat du calcul de la formule, et est maintenue \u00e0 jour par Grist. Colonne vide est un \u00e9tat pour une nouvelle colonne. Saisir une valeur dans celle-ci la transformera en une Colonne de Donn\u00e9es, tandis que la saisie d\u2019une formule la transformera en une Colonne de Formule. En utilisant la section COMPORTEMENT DE COLONNE , vous pouvez changer manuellement le comportement de la colonne. Les options les plus courantes sont disponibles sous forme de boutons d\u2019action verts en bas, et d\u2019autres options sont disponibles dans le menu de comportement. Selon le comportement actuel de la colonne, celles-ci sont : L\u2019action D\u00e9finir la formule convertit une colonne vide en colonne de formule. L\u2019action D\u00e9finir la formule d'initialisation ou Convertir en formule d'initialisation d\u00e9finit un d\u00e9clencheur sur une colonne (plus d\u2019informations sur les d\u00e9clencheurs dans la prochaine section Formules d\u2019initialisation ). L\u2019action Transformer en colonne de donn\u00e9es convertit une colonne vide en colonne de donn\u00e9es r\u00e9guli\u00e8re. Convertir la colonne en donn\u00e9es convertit une colonne de formule en colonne de donn\u00e9es r\u00e9guli\u00e8re (vous pouvez en lire davantage sur cette fonctionnalit\u00e9 dans la section Geler une colonne de formule ). L\u2019action Effacer et transformer en formule efface toutes les donn\u00e9es d\u2019une colonne et la convertit en une colonne de formule. (Nous disons \u201ceffacer\u201d pour rappeler que les donn\u00e9es existantes dans la colonne seront perdues. Elles seront remplac\u00e9es par les r\u00e9sultats de calcul de la formule.) L\u2019action Effacer et r\u00e9initialiser efface toutes les donn\u00e9es et r\u00e9initialise compl\u00e8tement la colonne \u00e0 son \u00e9tat initial Colonne Vide . Python # Les formules Grist sont \u00e9crites en Python, le langage le plus populaire pour la science des donn\u00e9es. L\u2019int\u00e9gralit\u00e9 de la biblioth\u00e8que standard de Python est \u00e0 votre disposition. Pour ceux qui ont un pass\u00e9 de tableur, nous avons \u00e9galement ajout\u00e9 une suite de fonctions similaires \u00e0 Excel, avec des noms en majuscules. Voici la liste compl\u00e8te des fonctions . Les documents Grist peuvent utiliser Python 2 ou Python 3, consultez notre guide Python pour plus de d\u00e9tails. Formules qui op\u00e8rent sur plusieurs lignes # Si vous \u00eates un utilisateur de tableur, vous pourriez vouloir avoir des lignes sp\u00e9ciales \u00e0 la fin de votre table qui ont des formules diff\u00e9rentes des autres. Dans Grist, nous vous encourageons \u00e0 envisager d\u2019ajouter un widget \u00e0 votre page \u00e0 la place. Pour des cas d\u2019utilisation courants, les Tableaux de R\u00e9sum\u00e9 peuvent \u00eatre exactement ce dont vous avez besoin. Ou si vous voulez tout configurer vous-m\u00eame, vous pouvez ajouter un widget de tableau suppl\u00e9mentaire comme celui-ci (voir Widgets de Page pour plus de d\u00e9tails) : C\u2019est juste un autre tableau, nous donnant un endroit pour mettre des formules en dehors de la structure de la table des Mat\u00e9riaux. Par exemple, si nous voulions compter combien de produits il y a dans ce tableau, nous pourrions utiliser cette formule : len(Materials.all) Chaque tableau dans votre document est disponible par son nom dans les formules, en tant que UserTable . Cette formule utilise la m\u00e9thode all pour acc\u00e9der aux lignes du tableau, mais ne fait rien d\u2019autre que de les compter. Voici une formule pour calculer le prix moyen, en utilisant la fonction similaire \u00e0 Excel MOYENNE : MOYENNE(Materials.all.Prix) La m\u00e9thode all renvoie un RecordSet , qui prend en charge l\u2019it\u00e9ration sur des colonnes individuelles de cette mani\u00e8re. \u00c9quivalemment, nous pourrions utiliser une compr\u00e9hension de liste Python : MOYENNE(mat\u00e9riau.Prix pour mat\u00e9riau dans Materials.all) Si vous n\u2019\u00eates pas familier avec Python, il vaut la peine de suivre un tutoriel. Il existe des milliers en ligne, y compris ce tutoriel officiel . Python vous sera utile pour toutes sortes de travaux de donn\u00e9es, pas seulement pour Grist. La compr\u00e9hension de liste est utile d\u00e8s que nous faisons quelque chose de nuanc\u00e9. Par exemple, voici une formule pour lister les noms des produits avec une quantit\u00e9 sup\u00e9rieure \u00e0 80 : [m.Produit pour m dans Materials.all si m.Quantit\u00e9 > 80] C\u2019est une compr\u00e9hension de liste, mais maintenant avec une condition. Le r\u00e9sultat est une liste, qui est rendue sous forme de texte dans une cellule. Python peut aider de plusieurs autres mani\u00e8res dans votre recherche de lignes. Par exemple, voici une formule pour trouver le nom du produit avec la plus grande quantit\u00e9 : max(Materials.all, key=lambda m: m.Quantit\u00e9).Produit Les formules sont sensibles \u00e0 la casse, les fonctions similaires \u00e0 Excel \u00e9tant en majuscules ( MAX ), et le Python r\u00e9gulier \u00e9tant g\u00e9n\u00e9ralement en minuscules ( max ). Pour des correspondances exactes, il existe un raccourci pour \u00e9viter l\u2019it\u00e9ration appel\u00e9 lookupRecords , ou lookupOne pour des correspondances uniques. Il suffit de passer les valeurs des colonnes que vous souhaitez faire correspondre. Par exemple, voici une formule pour rechercher le nom du produit d\u2019un mat\u00e9riau avec une quantit\u00e9 de 52 : Materials.lookupOne(Quantit\u00e9=52).Produit Pour des tableaux tr\u00e8s volumineux, il est sage d\u2019utiliser des recherches autant que possible, plut\u00f4t que d\u2019it\u00e9rer \u00e0 travers les lignes. Revenons \u00e0 notre document exemple, vous pouvez maintenant voir comment nous avons calcul\u00e9 les colonnes Total D\u00e9pens\u00e9 , Quantit\u00e9 Moyenne , et Produit le Plus Command\u00e9 : Colonne Formule Total D\u00e9pens\u00e9 SUM(Materials.all.Prix) Quantit\u00e9 Moyenne MOYENNE(Materials.all.Quantit\u00e9) Produit le Plus Command\u00e9 max(Materials.all, key=lambda m: m.Quantit\u00e9).Produit S\u00e9parer les calculs de cette mani\u00e8re du corps de vos donn\u00e9es peut prendre un certain temps pour s\u2019y habituer, mais travailler de cette fa\u00e7on peut aider \u00e0 garder votre document plus organis\u00e9. Et cela apporte d\u2019autres avantages. Par exemple, nous pourrions changer le formatage du widget de r\u00e9sum\u00e9 via le panneau lat\u00e9ral : Varier la formule par ligne # Faire appliquer une formule \u00e0 toutes les lignes est pratique et r\u00e9duit les risques d\u2019erreurs. Si vous devez faire changer le comportement d\u2019une colonne sur diff\u00e9rentes lignes, c\u2019est possible en utilisant une condition dans la formule. Par exemple, voici un remplacement pour la formule Materials.Prix qui ignore le prix et affiche z\u00e9ro pour les produits dont le nom se termine par \u201c(\u00c9chantillon)\u201d : if $Produit.endswith(\"(\u00c9chantillon)\"): return 0 else: return $Quantit\u00e9 * $Prix_Unitaire Visualiseur de code # Une fois que vous avez beaucoup de formules, ou si vous avez \u00e9t\u00e9 invit\u00e9 \u00e0 un document et souhaitez avoir un aper\u00e7u de ses formules, il existe un visualiseur de code disponible avec un r\u00e9sum\u00e9 Python pur du document. Valeurs sp\u00e9ciales disponibles dans les formules # Pour ceux qui connaissent Python, voici les valeurs suppl\u00e9mentaires disponibles pour vous dans Grist : rec est la ligne actuelle. La syntaxe $column est une abr\u00e9viation pour rec.column . La variable rec est de type Record . table est le tableau actuel, et est de type UserTable . Les tableaux dans votre document sont disponibles par leur nom, et sont \u00e9galement de type UserTable . De nombreuses fonctions de tableur suppl\u00e9mentaires sont disponibles, consultez la liste compl\u00e8te des fonctions . Si votre tableau ou colonne a un espace dans son nom, ou d\u2019autres caract\u00e8res qui sont g\u00eanants en Python, ces caract\u00e8res sont remplac\u00e9s par un soulignement. L\u2019auto-compl\u00e9tion peut vous aider si vous n\u2019\u00eates pas s\u00fbr. Vous pouvez \u00e9galement contr\u00f4ler les \u201cids\u201d des colonnes et des tableaux dans le panneau lat\u00e9ral droit. Geler une colonne de formule # Si vous souhaitez enregistrer la sortie de votre formule en tant que valeurs simples, vous pouvez simplement changer le comportement de la colonne de Colonne de Formule \u00e0 Colonne de Donn\u00e9es . Ouvrez d\u2019abord les options de colonne dans le panneau lat\u00e9ral : Cliquez maintenant sur la Colonne de Formule et s\u00e9lectionnez l\u2019option Convertir la colonne en donn\u00e9es . Remarquez qu\u2019il n\u2019y a plus de signe = dans les cellules de la colonne, montrant qu\u2019elle n\u2019est plus une formule. Les cellules ne changeront plus si d\u2019autres cellules dont elles d\u00e9pendaient changent. La formule d\u2019origine est sauvegard\u00e9e mais reste inactive. Elle peut redevenir utile si vous souhaitez convertir la colonne de nouveau en colonne de formule, ou l\u2019utiliser comme une Formule d\u2019Initialisation . Le panneau lat\u00e9ral a de nombreux autres param\u00e8tres pratiques, tels que le formatage des cellules (nombre de chiffres apr\u00e8s la virgule, couleur, etc.). Les options s\u2019appliquent tout autant aux colonnes de formule qu\u2019aux colonnes r\u00e9guli\u00e8res. Recherches # Les fonctions Grist lookupOne et lookupRecords sont utiles pour \u00e9num\u00e9rer des sous-ensembles de vos donn\u00e9es. Par exemple, supposons que nous ajoutions une colonne Cat\u00e9gorie \u00e0 notre tableau Mat\u00e9riaux , et souhaitions lister tous les produits appartenant \u00e0 une cat\u00e9gorie sp\u00e9cifique. Nous pouvons le faire en utilisant TABLE.lookupRecords , o\u00f9 TABLE est le tableau d\u2019int\u00e9r\u00eat, et en lui fournissant les valeurs de colonne \u00e0 faire correspondre. Par exemple, Materials.lookupRecords(Cat\u00e9gorie='Navire') , comme ici : Si vous suivez, consultez Ajouter un champ pour des d\u00e9tails sur la fa\u00e7on d\u2019ajouter un nouveau champ \u00e0 une carte. Si vous vous souciez de l\u2019ordre des r\u00e9sultats, lookupRecords prend un param\u00e8tre optionnel sort_by . Par exemple, nous pourrions utiliser cette formule pour trier par le nom du produit lui-m\u00eame : Materials.lookupRecords(Cat\u00e9gorie='Navire', sort_by='Produit').Produit Si vous souhaitez trier par plusieurs colonnes, rappelez-vous que vous pouvez cr\u00e9er une colonne de formule cach\u00e9e qui combine les donn\u00e9es de la mani\u00e8re dont vous le souhaitez, puis trier par celle-ci. L\u2019ordre des enregistrements renvoy\u00e9s par lookupRecords peut ne pas correspondre \u00e0 l\u2019ordre des lignes que vous voyez dans un tableau. Pour obtenir cet ordre, utilisez sort_by='manualSort' . Il s\u2019agit d\u2019une colonne interne qui est mise \u00e0 jour avec l\u2019ordre de tri \u00e9tabli manuellement des lignes. Si vous vous retrouvez \u00e0 faire beaucoup de recherches, envisagez si les Tableaux de R\u00e9sum\u00e9 et Formules de R\u00e9sum\u00e9 pourraient \u00eatre ce que vous recherchez. R\u00e9cursivit\u00e9 # Les recherches sont pratiques pour les formules r\u00e9cursives. Supposons que nous ayons un tableau comptant combien d\u2019\u00e9v\u00e9nements nous avons par jour, et que nous souhaitions ajouter une somme cumulative de ces comptes d\u2019\u00e9v\u00e9nements. Une fa\u00e7on de le faire est avec une formule comme celle-ci : hier = Events.lookupOne(date=$date - datetime.timedelta(days=1)) $events + (hier.cumulative or 0) Pour plus de clart\u00e9, nous avons divis\u00e9 cette formule en deux lignes. La premi\u00e8re ligne cr\u00e9e une variable pointant vers la ligne du jour pr\u00e9c\u00e9dent. La seconde ligne calcule la valeur que nous voulons dans la cellule. Note Python : la valeur de la derni\u00e8re ligne est automatiquement renvoy\u00e9e (vous pourriez la pr\u00e9fixer par return si vous le souhaitez). Remarquez le hier.cumulative or 0 . Pour la premi\u00e8re ligne du tableau, il n\u2019y aura pas de hier. Dans ce cas, lookupOne renvoie un enregistrement vide sp\u00e9cial, pour lequel hier.cumulative sera None . Si vous souhaitez simplifier cette formule, ou si vous vous retrouvez \u00e0 utiliser la m\u00eame recherche dans plusieurs formules, il serait judicieux de faire de hier une colonne de r\u00e9f\u00e9rence . Ajoutez simplement une colonne de r\u00e9f\u00e9rence, et donnez-lui une formule qui correspond \u00e0 la fa\u00e7on dont nous avons d\u00e9fini hier ici. Pour entrer r\u00e9ellement cette formule dans une cellule, vous utiliseriez Shift + Entr\u00e9e pour diviser les lignes. Formules d\u2019initialisation # Les colonnes de formule sont excellentes pour les valeurs calcul\u00e9es \u2013 celles d\u00e9termin\u00e9es par d\u2019autres donn\u00e9es dans le document. Il peut \u00e9galement \u00eatre utile de stocker des donn\u00e9es ind\u00e9pendantes dans une colonne, mais d\u2019utiliser tout de m\u00eame une formule pour les calculer dans certaines situations. C\u2019est exactement ce que les Formules d\u2019Initialisation offrent. C\u2019est une fonctionnalit\u00e9 tr\u00e8s puissante qui vous permet de cr\u00e9er une colonne Horodatage ou d\u2019Autorit\u00e9 , de recalculer vos donn\u00e9es en fonction d\u2019un ensemble de conditions que vous d\u00e9cidez, de nettoyer les donn\u00e9es lorsqu\u2019une nouvelle valeur est saisie, ou de fournir une valeur par d\u00e9faut sensible pour une colonne. Pour cr\u00e9er une colonne de Formule d\u2019Initialisation, vous devez d\u2019abord ouvrir le panneau de cr\u00e9ation et cliquer sur l\u2019action D\u00e9finir la formule d'initialisation . Si vous souhaitez convertir une formule existante, utilisez l\u2019action Convertir en formule d'initialisation disponible dans la section COMPORTEMENT DE COLONNE . Pour contr\u00f4ler quand la formule est \u00e9valu\u00e9e, utilisez les deux options de case \u00e0 cocher ci-dessous : Appliquer aux nouveaux enregistrements d\u00e9clenche la formule uniquement lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9 (une valeur de cellule par d\u00e9faut). Appliquer lors des changements d'enregistrement d\u00e9clenche la formule lorsqu\u2019un enregistrement est mis \u00e0 jour. L\u2019application aux nouveaux enregistrements est explicite, la formule sera \u00e9valu\u00e9e une seule fois lorsque vous ajoutez un nouvel enregistrement. C\u2019est une solution parfaite pour fournir des valeurs par d\u00e9faut aux cellules vides. La seconde option vous permet de peaufiner les conditions et de sp\u00e9cifier quelles colonnes, lorsqu\u2019elles sont mises \u00e0 jour, d\u00e9clencheront l\u2019\u00e9valuation : Vous avez probablement remarqu\u00e9 la premi\u00e8re option Champ actuel . \u00c0 premi\u00e8re vue, vous vous demandez probablement : \u201cPourquoi voudrais-je d\u00e9clencher la colonne sur son propre changement ?\u201d. Cette option vous permet de r\u00e9agir \u00e0 une valeur qui est en cours de saisie dans la colonne, juste avant qu\u2019elle ne soit enregistr\u00e9e ! Dans l\u2019\u00e9diteur de formules, vous avez acc\u00e8s \u00e0 deux variables qui ne sont pas disponibles pour les formules r\u00e9guli\u00e8res : value qui est la valeur qu\u2019un utilisateur souhaite entrer, user qui repr\u00e9sente un objet utilisateur qui effectue le changement (vous verrez \u00e9galement cela dans la section R\u00e8gles d\u2019acc\u00e8s ). Cela vous permet de rendre votre application encore plus intelligente, de suivre quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour , ou de voir qui a effectu\u00e9 le dernier changement \u00e0 une ligne . Exemples simples : Assurez-vous que la valeur d\u2019une colonne est toujours \u00e9crite en lettres majuscules : Avec la formule d\u2019initialisation de value.upper() , la valeur saisie dans cette colonne sera automatiquement convertie en majuscules. Formatez une valeur que l\u2019utilisateur entre pour assainir les donn\u00e9es avant de les enregistrer : Avec une formule comme value if value.startswith(\"SK\") else \"SK\" + value , la valeur saisie dans cette colonne sera toujours pr\u00e9c\u00e9d\u00e9e de \u201cSK\u201d. \u00c9crasez une valeur par d\u00e9faut d\u2019une table r\u00e9f\u00e9renc\u00e9e : Vous pouvez utiliser une formule comme value or $Client.T\u00e9l\u00e9phone , pour fournir une valeur par d\u00e9faut d\u2019une table r\u00e9f\u00e9renc\u00e9e, mais permettre tout de m\u00eame \u00e0 l\u2019utilisateur d\u2019en saisir une nouvelle. Dans chacun de ces exemples, lorsque l\u2019utilisateur essaie de modifier une cellule, Grist (avant de mettre \u00e0 jour l\u2019enregistrement) \u00e9valuera la formule et stockera son r\u00e9sultat dans la colonne au lieu de la valeur fournie par l\u2019utilisateur. Pour un exemple d\u00e9taill\u00e9 et concret, consultez notre guide sur la fa\u00e7on de cr\u00e9er des horodatages et des utilisateurs. Pour plus d\u2019informations sur les formules et les formules d\u2019initialisation, consultez notre webinaire Formules d\u2019Initialisation vs. Formules .","title":"Intro to formulas"},{"location":"formulas/#formules","text":"Grist dispose d\u2019un puissant moteur de donn\u00e9es pour calculer les cellules de vos tables en utilisant des formules. Il dispose m\u00eame d\u2019un Assistant de Formule AI pour aider \u00e0 r\u00e9diger des formules. Si vous avez d\u00e9j\u00e0 utilis\u00e9 des tableurs ou des expressions de base de donn\u00e9es, vous serez dans un territoire familier - mais il y a quelques subtilit\u00e9s que vous voudrez conna\u00eetre, alors restez avec nous. Commen\u00e7ons par un usage classique des tableurs. Supposons que vous ayez une liste de produits que vous avez command\u00e9s, la quantit\u00e9 que vous avez command\u00e9e, et le prix unitaire de chacun. Vous avez cr\u00e9\u00e9 une colonne pour montrer la quantit\u00e9 multipli\u00e9e par le prix unitaire, mais vous voulez que l\u2019ordinateur s\u2019occupe de cette partie pour vous. Il vous suffit de s\u00e9lectionner une cellule dans la colonne que vous souhaitez remplir, et d\u2019appuyer sur la touche = pour indiquer \u00e0 Grist que vous souhaitez entrer une formule, plut\u00f4t qu\u2019une valeur. Avez-vous remarqu\u00e9 que, lorsque vous avez fait cela, les \u00e9tiquettes des colonnes ont l\u00e9g\u00e8rement chang\u00e9 ? \u201cProduit\u201d est devenu \u201c$Produit\u201d, et \u201cPrix Unitaire\u201d est devenu \u201c$Prix_Unitaire\u201d. C\u2019est Grist qui vous indique comment vous r\u00e9f\u00e9rer \u00e0 ces colonnes dans votre formule. Il vous suffit de taper $Quantit\u00e9 * $Prix_Unitaire . Vous trouverez une fonction d\u2019auto-compl\u00e9tion pr\u00eate \u00e0 vous aider. Ou si vous n\u2019aimez pas taper, cliquez sur la colonne Quantit\u00e9, tapez le symbole de multiplication, puis cliquez sur la colonne Prix Unitaire. Votre formule devrait ressembler \u00e0 ceci : Pour contr\u00f4ler l\u2019ID de la colonne, comme \u201c$Prix_Unitaire\u201d, qui est utilis\u00e9 dans les formules, consultez Renommer les colonnes . Appuyez sur Entr\u00e9e , et votre formule est appliqu\u00e9e \u00e0 toutes les cellules de la colonne. Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec des tableurs, vous serez peut-\u00eatre surpris de constater que vous n\u2019avez pas besoin de sp\u00e9cifier les num\u00e9ros de ligne, comme B1 * C1 . Dans Grist, une seule formule s\u2019applique \u00e0 toute une colonne. Vous n\u2019avez pas \u00e0 vous soucier de la remplir pour toutes les lignes, et vous pouvez vous r\u00e9f\u00e9rer \u00e0 des valeurs dans la m\u00eame ligne sans tracas. Vous pouvez formater les colonnes num\u00e9riques pour qu\u2019elles aient un meilleur aspect en d\u00e9finissant le type de colonne sur Num\u00e9rique , et en s\u00e9lectionnant des options de formatage appropri\u00e9es :","title":"Formules"},{"location":"formulas/#comportement-des-colonnes","text":"Lorsque nous fournissons une formule pour une colonne, nous disons \u00e0 Grist de mettre \u00e0 jour sa valeur \u00e0 chaque changement dans un document. Nous ne pouvons plus saisir une valeur dans la cellule, car sa valeur est d\u00e9termin\u00e9e uniquement par la formule. Une colonne de formule est l\u2019un des trois comportements possibles de colonne, que vous pouvez contr\u00f4ler en utilisant la section COMPORTEMENT DE COLONNE dans le panneau de cr\u00e9ation : Colonne de donn\u00e9es maintient des donn\u00e9es, que vous pouvez mettre \u00e0 jour ou effacer manuellement, ou \u00e9ventuellement calculer en utilisant formules d\u2019initialisation . Colonne de formule refl\u00e8te toujours le r\u00e9sultat du calcul de la formule, et est maintenue \u00e0 jour par Grist. Colonne vide est un \u00e9tat pour une nouvelle colonne. Saisir une valeur dans celle-ci la transformera en une Colonne de Donn\u00e9es, tandis que la saisie d\u2019une formule la transformera en une Colonne de Formule. En utilisant la section COMPORTEMENT DE COLONNE , vous pouvez changer manuellement le comportement de la colonne. Les options les plus courantes sont disponibles sous forme de boutons d\u2019action verts en bas, et d\u2019autres options sont disponibles dans le menu de comportement. Selon le comportement actuel de la colonne, celles-ci sont : L\u2019action D\u00e9finir la formule convertit une colonne vide en colonne de formule. L\u2019action D\u00e9finir la formule d'initialisation ou Convertir en formule d'initialisation d\u00e9finit un d\u00e9clencheur sur une colonne (plus d\u2019informations sur les d\u00e9clencheurs dans la prochaine section Formules d\u2019initialisation ). L\u2019action Transformer en colonne de donn\u00e9es convertit une colonne vide en colonne de donn\u00e9es r\u00e9guli\u00e8re. Convertir la colonne en donn\u00e9es convertit une colonne de formule en colonne de donn\u00e9es r\u00e9guli\u00e8re (vous pouvez en lire davantage sur cette fonctionnalit\u00e9 dans la section Geler une colonne de formule ). L\u2019action Effacer et transformer en formule efface toutes les donn\u00e9es d\u2019une colonne et la convertit en une colonne de formule. (Nous disons \u201ceffacer\u201d pour rappeler que les donn\u00e9es existantes dans la colonne seront perdues. Elles seront remplac\u00e9es par les r\u00e9sultats de calcul de la formule.) L\u2019action Effacer et r\u00e9initialiser efface toutes les donn\u00e9es et r\u00e9initialise compl\u00e8tement la colonne \u00e0 son \u00e9tat initial Colonne Vide .","title":"Comportement des colonnes"},{"location":"formulas/#python","text":"Les formules Grist sont \u00e9crites en Python, le langage le plus populaire pour la science des donn\u00e9es. L\u2019int\u00e9gralit\u00e9 de la biblioth\u00e8que standard de Python est \u00e0 votre disposition. Pour ceux qui ont un pass\u00e9 de tableur, nous avons \u00e9galement ajout\u00e9 une suite de fonctions similaires \u00e0 Excel, avec des noms en majuscules. Voici la liste compl\u00e8te des fonctions . Les documents Grist peuvent utiliser Python 2 ou Python 3, consultez notre guide Python pour plus de d\u00e9tails.","title":"Python"},{"location":"formulas/#formules-qui-operent-sur-plusieurs-lignes","text":"Si vous \u00eates un utilisateur de tableur, vous pourriez vouloir avoir des lignes sp\u00e9ciales \u00e0 la fin de votre table qui ont des formules diff\u00e9rentes des autres. Dans Grist, nous vous encourageons \u00e0 envisager d\u2019ajouter un widget \u00e0 votre page \u00e0 la place. Pour des cas d\u2019utilisation courants, les Tableaux de R\u00e9sum\u00e9 peuvent \u00eatre exactement ce dont vous avez besoin. Ou si vous voulez tout configurer vous-m\u00eame, vous pouvez ajouter un widget de tableau suppl\u00e9mentaire comme celui-ci (voir Widgets de Page pour plus de d\u00e9tails) : C\u2019est juste un autre tableau, nous donnant un endroit pour mettre des formules en dehors de la structure de la table des Mat\u00e9riaux. Par exemple, si nous voulions compter combien de produits il y a dans ce tableau, nous pourrions utiliser cette formule : len(Materials.all) Chaque tableau dans votre document est disponible par son nom dans les formules, en tant que UserTable . Cette formule utilise la m\u00e9thode all pour acc\u00e9der aux lignes du tableau, mais ne fait rien d\u2019autre que de les compter. Voici une formule pour calculer le prix moyen, en utilisant la fonction similaire \u00e0 Excel MOYENNE : MOYENNE(Materials.all.Prix) La m\u00e9thode all renvoie un RecordSet , qui prend en charge l\u2019it\u00e9ration sur des colonnes individuelles de cette mani\u00e8re. \u00c9quivalemment, nous pourrions utiliser une compr\u00e9hension de liste Python : MOYENNE(mat\u00e9riau.Prix pour mat\u00e9riau dans Materials.all) Si vous n\u2019\u00eates pas familier avec Python, il vaut la peine de suivre un tutoriel. Il existe des milliers en ligne, y compris ce tutoriel officiel . Python vous sera utile pour toutes sortes de travaux de donn\u00e9es, pas seulement pour Grist. La compr\u00e9hension de liste est utile d\u00e8s que nous faisons quelque chose de nuanc\u00e9. Par exemple, voici une formule pour lister les noms des produits avec une quantit\u00e9 sup\u00e9rieure \u00e0 80 : [m.Produit pour m dans Materials.all si m.Quantit\u00e9 > 80] C\u2019est une compr\u00e9hension de liste, mais maintenant avec une condition. Le r\u00e9sultat est une liste, qui est rendue sous forme de texte dans une cellule. Python peut aider de plusieurs autres mani\u00e8res dans votre recherche de lignes. Par exemple, voici une formule pour trouver le nom du produit avec la plus grande quantit\u00e9 : max(Materials.all, key=lambda m: m.Quantit\u00e9).Produit Les formules sont sensibles \u00e0 la casse, les fonctions similaires \u00e0 Excel \u00e9tant en majuscules ( MAX ), et le Python r\u00e9gulier \u00e9tant g\u00e9n\u00e9ralement en minuscules ( max ). Pour des correspondances exactes, il existe un raccourci pour \u00e9viter l\u2019it\u00e9ration appel\u00e9 lookupRecords , ou lookupOne pour des correspondances uniques. Il suffit de passer les valeurs des colonnes que vous souhaitez faire correspondre. Par exemple, voici une formule pour rechercher le nom du produit d\u2019un mat\u00e9riau avec une quantit\u00e9 de 52 : Materials.lookupOne(Quantit\u00e9=52).Produit Pour des tableaux tr\u00e8s volumineux, il est sage d\u2019utiliser des recherches autant que possible, plut\u00f4t que d\u2019it\u00e9rer \u00e0 travers les lignes. Revenons \u00e0 notre document exemple, vous pouvez maintenant voir comment nous avons calcul\u00e9 les colonnes Total D\u00e9pens\u00e9 , Quantit\u00e9 Moyenne , et Produit le Plus Command\u00e9 : Colonne Formule Total D\u00e9pens\u00e9 SUM(Materials.all.Prix) Quantit\u00e9 Moyenne MOYENNE(Materials.all.Quantit\u00e9) Produit le Plus Command\u00e9 max(Materials.all, key=lambda m: m.Quantit\u00e9).Produit S\u00e9parer les calculs de cette mani\u00e8re du corps de vos donn\u00e9es peut prendre un certain temps pour s\u2019y habituer, mais travailler de cette fa\u00e7on peut aider \u00e0 garder votre document plus organis\u00e9. Et cela apporte d\u2019autres avantages. Par exemple, nous pourrions changer le formatage du widget de r\u00e9sum\u00e9 via le panneau lat\u00e9ral :","title":"Formules qui op\u00e8rent sur plusieurs lignes"},{"location":"formulas/#varier-la-formule-par-ligne","text":"Faire appliquer une formule \u00e0 toutes les lignes est pratique et r\u00e9duit les risques d\u2019erreurs. Si vous devez faire changer le comportement d\u2019une colonne sur diff\u00e9rentes lignes, c\u2019est possible en utilisant une condition dans la formule. Par exemple, voici un remplacement pour la formule Materials.Prix qui ignore le prix et affiche z\u00e9ro pour les produits dont le nom se termine par \u201c(\u00c9chantillon)\u201d : if $Produit.endswith(\"(\u00c9chantillon)\"): return 0 else: return $Quantit\u00e9 * $Prix_Unitaire","title":"Varier la formule par ligne"},{"location":"formulas/#visualiseur-de-code","text":"Une fois que vous avez beaucoup de formules, ou si vous avez \u00e9t\u00e9 invit\u00e9 \u00e0 un document et souhaitez avoir un aper\u00e7u de ses formules, il existe un visualiseur de code disponible avec un r\u00e9sum\u00e9 Python pur du document.","title":"Visualiseur de code"},{"location":"formulas/#valeurs-speciales-disponibles-dans-les-formules","text":"Pour ceux qui connaissent Python, voici les valeurs suppl\u00e9mentaires disponibles pour vous dans Grist : rec est la ligne actuelle. La syntaxe $column est une abr\u00e9viation pour rec.column . La variable rec est de type Record . table est le tableau actuel, et est de type UserTable . Les tableaux dans votre document sont disponibles par leur nom, et sont \u00e9galement de type UserTable . De nombreuses fonctions de tableur suppl\u00e9mentaires sont disponibles, consultez la liste compl\u00e8te des fonctions . Si votre tableau ou colonne a un espace dans son nom, ou d\u2019autres caract\u00e8res qui sont g\u00eanants en Python, ces caract\u00e8res sont remplac\u00e9s par un soulignement. L\u2019auto-compl\u00e9tion peut vous aider si vous n\u2019\u00eates pas s\u00fbr. Vous pouvez \u00e9galement contr\u00f4ler les \u201cids\u201d des colonnes et des tableaux dans le panneau lat\u00e9ral droit.","title":"Valeurs sp\u00e9ciales disponibles dans les formules"},{"location":"formulas/#geler-une-colonne-de-formule","text":"Si vous souhaitez enregistrer la sortie de votre formule en tant que valeurs simples, vous pouvez simplement changer le comportement de la colonne de Colonne de Formule \u00e0 Colonne de Donn\u00e9es . Ouvrez d\u2019abord les options de colonne dans le panneau lat\u00e9ral : Cliquez maintenant sur la Colonne de Formule et s\u00e9lectionnez l\u2019option Convertir la colonne en donn\u00e9es . Remarquez qu\u2019il n\u2019y a plus de signe = dans les cellules de la colonne, montrant qu\u2019elle n\u2019est plus une formule. Les cellules ne changeront plus si d\u2019autres cellules dont elles d\u00e9pendaient changent. La formule d\u2019origine est sauvegard\u00e9e mais reste inactive. Elle peut redevenir utile si vous souhaitez convertir la colonne de nouveau en colonne de formule, ou l\u2019utiliser comme une Formule d\u2019Initialisation . Le panneau lat\u00e9ral a de nombreux autres param\u00e8tres pratiques, tels que le formatage des cellules (nombre de chiffres apr\u00e8s la virgule, couleur, etc.). Les options s\u2019appliquent tout autant aux colonnes de formule qu\u2019aux colonnes r\u00e9guli\u00e8res.","title":"Geler une colonne de formule"},{"location":"formulas/#recherches","text":"Les fonctions Grist lookupOne et lookupRecords sont utiles pour \u00e9num\u00e9rer des sous-ensembles de vos donn\u00e9es. Par exemple, supposons que nous ajoutions une colonne Cat\u00e9gorie \u00e0 notre tableau Mat\u00e9riaux , et souhaitions lister tous les produits appartenant \u00e0 une cat\u00e9gorie sp\u00e9cifique. Nous pouvons le faire en utilisant TABLE.lookupRecords , o\u00f9 TABLE est le tableau d\u2019int\u00e9r\u00eat, et en lui fournissant les valeurs de colonne \u00e0 faire correspondre. Par exemple, Materials.lookupRecords(Cat\u00e9gorie='Navire') , comme ici : Si vous suivez, consultez Ajouter un champ pour des d\u00e9tails sur la fa\u00e7on d\u2019ajouter un nouveau champ \u00e0 une carte. Si vous vous souciez de l\u2019ordre des r\u00e9sultats, lookupRecords prend un param\u00e8tre optionnel sort_by . Par exemple, nous pourrions utiliser cette formule pour trier par le nom du produit lui-m\u00eame : Materials.lookupRecords(Cat\u00e9gorie='Navire', sort_by='Produit').Produit Si vous souhaitez trier par plusieurs colonnes, rappelez-vous que vous pouvez cr\u00e9er une colonne de formule cach\u00e9e qui combine les donn\u00e9es de la mani\u00e8re dont vous le souhaitez, puis trier par celle-ci. L\u2019ordre des enregistrements renvoy\u00e9s par lookupRecords peut ne pas correspondre \u00e0 l\u2019ordre des lignes que vous voyez dans un tableau. Pour obtenir cet ordre, utilisez sort_by='manualSort' . Il s\u2019agit d\u2019une colonne interne qui est mise \u00e0 jour avec l\u2019ordre de tri \u00e9tabli manuellement des lignes. Si vous vous retrouvez \u00e0 faire beaucoup de recherches, envisagez si les Tableaux de R\u00e9sum\u00e9 et Formules de R\u00e9sum\u00e9 pourraient \u00eatre ce que vous recherchez.","title":"Recherches"},{"location":"formulas/#recursivite","text":"Les recherches sont pratiques pour les formules r\u00e9cursives. Supposons que nous ayons un tableau comptant combien d\u2019\u00e9v\u00e9nements nous avons par jour, et que nous souhaitions ajouter une somme cumulative de ces comptes d\u2019\u00e9v\u00e9nements. Une fa\u00e7on de le faire est avec une formule comme celle-ci : hier = Events.lookupOne(date=$date - datetime.timedelta(days=1)) $events + (hier.cumulative or 0) Pour plus de clart\u00e9, nous avons divis\u00e9 cette formule en deux lignes. La premi\u00e8re ligne cr\u00e9e une variable pointant vers la ligne du jour pr\u00e9c\u00e9dent. La seconde ligne calcule la valeur que nous voulons dans la cellule. Note Python : la valeur de la derni\u00e8re ligne est automatiquement renvoy\u00e9e (vous pourriez la pr\u00e9fixer par return si vous le souhaitez). Remarquez le hier.cumulative or 0 . Pour la premi\u00e8re ligne du tableau, il n\u2019y aura pas de hier. Dans ce cas, lookupOne renvoie un enregistrement vide sp\u00e9cial, pour lequel hier.cumulative sera None . Si vous souhaitez simplifier cette formule, ou si vous vous retrouvez \u00e0 utiliser la m\u00eame recherche dans plusieurs formules, il serait judicieux de faire de hier une colonne de r\u00e9f\u00e9rence . Ajoutez simplement une colonne de r\u00e9f\u00e9rence, et donnez-lui une formule qui correspond \u00e0 la fa\u00e7on dont nous avons d\u00e9fini hier ici. Pour entrer r\u00e9ellement cette formule dans une cellule, vous utiliseriez Shift + Entr\u00e9e pour diviser les lignes.","title":"R\u00e9cursivit\u00e9"},{"location":"formulas/#formules-dinitialisation","text":"Les colonnes de formule sont excellentes pour les valeurs calcul\u00e9es \u2013 celles d\u00e9termin\u00e9es par d\u2019autres donn\u00e9es dans le document. Il peut \u00e9galement \u00eatre utile de stocker des donn\u00e9es ind\u00e9pendantes dans une colonne, mais d\u2019utiliser tout de m\u00eame une formule pour les calculer dans certaines situations. C\u2019est exactement ce que les Formules d\u2019Initialisation offrent. C\u2019est une fonctionnalit\u00e9 tr\u00e8s puissante qui vous permet de cr\u00e9er une colonne Horodatage ou d\u2019Autorit\u00e9 , de recalculer vos donn\u00e9es en fonction d\u2019un ensemble de conditions que vous d\u00e9cidez, de nettoyer les donn\u00e9es lorsqu\u2019une nouvelle valeur est saisie, ou de fournir une valeur par d\u00e9faut sensible pour une colonne. Pour cr\u00e9er une colonne de Formule d\u2019Initialisation, vous devez d\u2019abord ouvrir le panneau de cr\u00e9ation et cliquer sur l\u2019action D\u00e9finir la formule d'initialisation . Si vous souhaitez convertir une formule existante, utilisez l\u2019action Convertir en formule d'initialisation disponible dans la section COMPORTEMENT DE COLONNE . Pour contr\u00f4ler quand la formule est \u00e9valu\u00e9e, utilisez les deux options de case \u00e0 cocher ci-dessous : Appliquer aux nouveaux enregistrements d\u00e9clenche la formule uniquement lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9 (une valeur de cellule par d\u00e9faut). Appliquer lors des changements d'enregistrement d\u00e9clenche la formule lorsqu\u2019un enregistrement est mis \u00e0 jour. L\u2019application aux nouveaux enregistrements est explicite, la formule sera \u00e9valu\u00e9e une seule fois lorsque vous ajoutez un nouvel enregistrement. C\u2019est une solution parfaite pour fournir des valeurs par d\u00e9faut aux cellules vides. La seconde option vous permet de peaufiner les conditions et de sp\u00e9cifier quelles colonnes, lorsqu\u2019elles sont mises \u00e0 jour, d\u00e9clencheront l\u2019\u00e9valuation : Vous avez probablement remarqu\u00e9 la premi\u00e8re option Champ actuel . \u00c0 premi\u00e8re vue, vous vous demandez probablement : \u201cPourquoi voudrais-je d\u00e9clencher la colonne sur son propre changement ?\u201d. Cette option vous permet de r\u00e9agir \u00e0 une valeur qui est en cours de saisie dans la colonne, juste avant qu\u2019elle ne soit enregistr\u00e9e ! Dans l\u2019\u00e9diteur de formules, vous avez acc\u00e8s \u00e0 deux variables qui ne sont pas disponibles pour les formules r\u00e9guli\u00e8res : value qui est la valeur qu\u2019un utilisateur souhaite entrer, user qui repr\u00e9sente un objet utilisateur qui effectue le changement (vous verrez \u00e9galement cela dans la section R\u00e8gles d\u2019acc\u00e8s ). Cela vous permet de rendre votre application encore plus intelligente, de suivre quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour , ou de voir qui a effectu\u00e9 le dernier changement \u00e0 une ligne . Exemples simples : Assurez-vous que la valeur d\u2019une colonne est toujours \u00e9crite en lettres majuscules : Avec la formule d\u2019initialisation de value.upper() , la valeur saisie dans cette colonne sera automatiquement convertie en majuscules. Formatez une valeur que l\u2019utilisateur entre pour assainir les donn\u00e9es avant de les enregistrer : Avec une formule comme value if value.startswith(\"SK\") else \"SK\" + value , la valeur saisie dans cette colonne sera toujours pr\u00e9c\u00e9d\u00e9e de \u201cSK\u201d. \u00c9crasez une valeur par d\u00e9faut d\u2019une table r\u00e9f\u00e9renc\u00e9e : Vous pouvez utiliser une formule comme value or $Client.T\u00e9l\u00e9phone , pour fournir une valeur par d\u00e9faut d\u2019une table r\u00e9f\u00e9renc\u00e9e, mais permettre tout de m\u00eame \u00e0 l\u2019utilisateur d\u2019en saisir une nouvelle. Dans chacun de ces exemples, lorsque l\u2019utilisateur essaie de modifier une cellule, Grist (avant de mettre \u00e0 jour l\u2019enregistrement) \u00e9valuera la formule et stockera son r\u00e9sultat dans la colonne au lieu de la valeur fournie par l\u2019utilisateur. Pour un exemple d\u00e9taill\u00e9 et concret, consultez notre guide sur la fa\u00e7on de cr\u00e9er des horodatages et des utilisateurs. Pour plus d\u2019informations sur les formules et les formules d\u2019initialisation, consultez notre webinaire Formules d\u2019Initialisation vs. Formules .","title":"Formules d’initialisation"},{"location":"functions/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . /* Aligne les en-t\u00eates des fonctions avec la fl\u00e8che \"d\u00e9velopper\" */ .wm-page-content summary h4 { display: inline-block; font-size: 14px; } R\u00e9f\u00e9rence des Fonctions # Les formules Grist prennent en charge la plupart des fonctions Excel, ainsi que le langage de programmation Python. Le tableau ci-dessous r\u00e9pertorie les fonctions sp\u00e9cifiques \u00e0 Grist, ainsi que l\u2019ensemble des fonctions similaires \u00e0 Excel incluses. De plus, l\u2019ensemble de la biblioth\u00e8que standard Python est disponible. Pour en savoir plus sur l\u2019utilisation des formules dans Grist, consultez Introduction aux Formules . Grist utilise Python (version 3.11) pour les formules. Vous pouvez utiliser presque toutes les fonctionnalit\u00e9s de Python (voir documentation Python ). Voici quelques notes utiles : Python est sensible \u00e0 la casse, y compris pour les noms de table et de colonne Grist. Les fonctions similaires \u00e0 Excel sont toujours en majuscules. Par exemple, if est un mot-cl\u00e9 Python, tandis que IF est une fonction similaire \u00e0 Excel. Comparez pour l\u2019\u00e9galit\u00e9 en utilisant == , \u00e0 la place du = unique d\u2019Excel (qui en Python signifie l\u2019assignation). \u201cDiff\u00e9rent\u201d utilise != \u00e0 la place de <> d\u2019Excel. Vous pouvez \u00e9crire du Python multi-lignes dans les formules (utilisez Shift + Enter pour ajouter des lignes), y compris des d\u00e9clarations, des variables, des imports, etc. Le code Grist s\u2019ex\u00e9cute dans un sandbox s\u00e9curis\u00e9, sans acc\u00e8s \u00e0 quoi que ce soit en dehors de votre document. Category Functions Grist Record ou rec , $Field ou rec.Field , $group ou rec.group , RecordSet , find.* , UserTable , all , lookupOne , lookupRecords Cumulatif NEXT , PREVIOUS , RANK Date DATE , DATEADD , DATEDIF , DATEVALUE , DATE_TO_XL , DAY , DAYS , DTIME , EDATE , EOMONTH , HOUR , ISOWEEKNUM , MINUTE , MONTH , MOONPHASE , NOW , SECOND , TODAY , WEEKDAY , WEEKNUM , XL_TO_DATE , YEAR , YEARFRAC Info CELL , ISBLANK , ISEMAIL , ISERR , ISERROR , ISLOGICAL , ISNA , ISNONTEXT , ISNUMBER , ISREF , ISREFLIST , ISTEXT , ISURL , N , NA , PEEK , RECORD , REQUEST , TYPE Logique AND , FALSE , IF , IFERROR , NOT , OR , TRUE Lookup lookupOne , lookupRecords , ADDRESS , CHOOSE , COLUMN , COLUMNS , CONTAINS , GETPIVOTDATA , HLOOKUP , HYPERLINK , INDEX , INDIRECT , LOOKUP , MATCH , OFFSET , ROW , ROWS , SELF_HYPERLINK , VLOOKUP Maths ABS , ACOS , ACOSH , ARABIC , ASIN , ASINH , ATAN , ATAN2 , ATANH , CEILING , COMBIN , COS , COSH , DEGREES , EVEN , EXP , FACT , FACTDOUBLE , FLOOR , GCD , INT , LCM , LN , LOG , LOG10 , MOD , MROUND , MULTINOMIAL , NUM , ODD , PI , POWER , PRODUCT , QUOTIENT , RADIANS , RAND , RANDBETWEEN , ROMAN , ROUND , ROUNDDOWN , ROUNDUP , SERIESSUM , SIGN , SIN , SINH , SQRT , SQRTPI , SUBTOTAL , SUM , SUMIF , SUMIFS , SUMPRODUCT , SUMSQ , TAN , TANH , TRUNC , UUID Horaire SCHEDULE Statistiques AVEDEV , AVERAGE , AVERAGEA , AVERAGEIF , AVERAGEIFS , AVERAGE_WEIGHTED , BINOMDIST , CONFIDENCE , CORREL , COUNT , COUNTA , COVAR , CRITBINOM , DEVSQ , EXPONDIST , FDIST , FISHER , FISHERINV , FORECAST , F_DIST , F_DIST_RT , GEOMEAN , HARMEAN , HYPGEOMDIST , INTERCEPT , KURT , LARGE , LOGINV , LOGNORMDIST , MAX , MAXA , MEDIAN , MIN , MINA , MODE , NEGBINOMDIST , NORMDIST , NORMINV , NORMSDIST , NORMSINV , PEARSON , PERCENTILE , PERCENTRANK , PERCENTRANK_EXC , PERCENTRANK_INC , PERMUT , POISSON , PROB , QUARTILE , RANK_AVG , RANK_EQ , RSQ , SKEW , SLOPE , SMALL , STANDARDIZE , STDEV , STDEVA , STDEVP , STDEVPA , STEYX , TDIST , TINV , TRIMMEAN , TTEST , T_INV , T_INV_2T , VAR , VARA , VARP , VARPA , WEIBULL , ZTEST Texte CHAR , CLEAN , CODE , CONCAT , CONCATENATE , DOLLAR , EXACT , FIND , FIXED , LEFT , LEN , LOWER , MID , PHONE_FORMAT , PROPER , REGEXEXTRACT , REGEXMATCH , REGEXREPLACE , REPLACE , REPT , RIGHT , SEARCH , SUBSTITUTE , T , TASTEME , TEXT , TRIM , UPPER , VALUE Grist # class Record # Un Enregistrement repr\u00e9sente un enregistrement de donn\u00e9es. C\u2019est le principal moyen d\u2019acc\u00e9der aux valeurs dans les formules. Un Enregistrement pour une table particuli\u00e8re a une propri\u00e9t\u00e9 pour chaque colonne de donn\u00e9es et de formule dans la table. Dans une formule, $field est traduit en rec.field , o\u00f9 rec est l\u2019Enregistrement pour lequel la formule est \u00e9valu\u00e9e. Par exemple : def Nom_Complet(rec, table): return rec.Prenom + ' ' + rec.NomDeFamille def Longueur_Nom(rec, table): return len(rec.Nom_Complet) $ Field ou rec .Field # Acc\u00e8de au champ nomm\u00e9 \u201cField\u201d de l\u2019enregistrement actuel. Par exemple, $Prenom ou rec.Prenom . $group # Dans une table de r\u00e9sum\u00e9 , $group est un champ sp\u00e9cial contenant la liste des Enregistrements qui sont r\u00e9sum\u00e9s par la ligne de r\u00e9sum\u00e9 actuelle. Par exemple, la formule len($group) compte le nombre de ces enregistrements \u00e9tant r\u00e9sum\u00e9s dans chaque ligne. Voir Ensemble d\u2019Enregistrements pour les propri\u00e9t\u00e9s utiles offertes par l\u2019objet retourn\u00e9. Exemples : sum($group.Montant) # Somme du champ Montant dans les enregistrements correspondants sum(r.Montant for r in $group) # M\u00eame que sum($group.Montant) sum(r.Montant for r in $group if r > 0) # Somme uniquement des montants positifs sum(r.Actions * r.Prix for r in $group) # Somme des produits actions * prix class RecordSet # Un Ensemble d\u2019Enregistrements repr\u00e9sente une collection d\u2019enregistrements, comme retourn\u00e9 par Table.lookupRecords() ou la propri\u00e9t\u00e9 $group dans les vues de r\u00e9sum\u00e9. Un Ensemble d\u2019Enregistrements permet d\u2019it\u00e9rer \u00e0 travers les enregistrements : sum(r.Montant for r in Etudiants.lookupRecords(Prenom=\"John\", NomDeFamille=\"Doe\")) min(r.DateEcheance for r in T\u00e2ches.lookupRecords(Propri\u00e9taire=\"Bob\")) Les Ensembles d\u2019Enregistrements fournissent \u00e9galement un moyen pratique d\u2019acc\u00e9der \u00e0 la liste des valeurs pour un champ particulier pour tous les enregistrements, comme record_set.Field . Par exemple, les exemples ci-dessus sont \u00e9quivalents \u00e0 : sum(Etudiants.lookupRecords(Prenom=\"John\", NomDeFamille=\"Doe\").Montant) min(T\u00e2ches.lookupRecords(Propri\u00e9taire=\"Bob\").DateEcheance) Vous pouvez obtenir le nombre d\u2019enregistrements dans un Ensemble d\u2019Enregistrements en utilisant len , par exemple len($group) . RecordSet. find.* (value) # Un ensemble de m\u00e9thodes pour trouver des valeurs dans des ensembles d\u2019enregistrements tri\u00e9s, comme retourn\u00e9 par lookupRecords . Par exemple : Transactions.lookupRecords(..., order_by=\"Date\").find.lt($Date) Table.lookupRecords(..., order_by=(\"Foo\", \"Bar\")).find.le(foo, bar) Si l\u2019attribut find est masqu\u00e9 par une colonne utilisateur du m\u00eame nom, vous pouvez utiliser _find \u00e0 la place. Les m\u00e9thodes disponibles sont : lt : (moins que) trouver l\u2019enregistrement le plus proche avec des valeurs de tri < les valeurs donn\u00e9es le : (moins que ou \u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri <= les valeurs donn\u00e9es gt : (plus que) trouver l\u2019enregistrement le plus proche avec des valeurs de tri > les valeurs donn\u00e9es ge : (plus que ou \u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri >= les valeurs donn\u00e9es eq : (\u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri == les valeurs donn\u00e9es Exemple de notre mod\u00e8le de Paie . Chaque personne a un historique de taux de paiement, dans la table Taux. Pour trouver un taux applicable \u00e0 une date donn\u00e9e, voici comment vous pouvez le faire \u00e0 l\u2019ancienne : # Obtenez tous les taux pour la Personne et le R\u00f4le dans cette ligne. taux = Taux.lookupRecords(Personne=$Personne, R\u00f4le=$R\u00f4le) # S\u00e9lectionnez uniquement les taux dont le D\u00e9but_Taux est \u00e0 ou avant la Date de cette ligne. taux_pass\u00e9s = [r for r in taux if r.D\u00e9but_Taux <= $Date] # S\u00e9lectionnez le dernier des taux_pass\u00e9s, c'est-\u00e0-dire le maximum par D\u00e9but_Taux. taux = max(taux_pass\u00e9s, key=lambda r: r.D\u00e9but_Taux) # Retournez le Taux_Horaire du taux pertinent. return taux.Taux_Horaire Avec les nouvelles m\u00e9thodes, c\u2019est beaucoup plus simple : taux = Taux.lookupRecords(Personne=$Personne, R\u00f4le=$R\u00f4le, order_by=\"D\u00e9but_Taux\") taux = taux.find.le($Date) return taux.Taux_Horaire Notez que cela est \u00e9galement beaucoup plus rapide lorsqu\u2019il y a de nombreux taux pour la m\u00eame Personne et R\u00f4le. class UserTable # Chaque table de donn\u00e9es dans le document est repr\u00e9sent\u00e9e dans le code par une instance de la classe UserTable . Ces noms sont toujours en majuscules. Une UserTable fournit un acc\u00e8s \u00e0 tous les enregistrements dans la table, ainsi que des m\u00e9thodes pour rechercher des enregistrements particuliers. Chaque table dans le document est disponible pour toutes les formules. UserTable. all # La liste de tous les enregistrements dans cette table. Par exemple, cela \u00e9value le nombre d\u2019enregistrements dans la table Etudiants . len(Etudiants.all) Cela \u00e9value la somme du champ Population pour chaque enregistrement dans la table Pays . sum(r.Population for r in Pays.all) UserTable. lookupOne (Field_In_Lookup_Table=value, \u2026) # Retourne un Enregistrement correspondant aux arguments field=value donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ de la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ). Par exemple : Personnes.lookupOne(Prenom=\"Lewis\", NomDeFamille=\"Carroll\") Personnes.lookupOne(Email=$Email_Travail) En savoir plus sur lookupOne . Si plusieurs enregistrements sont trouv\u00e9s, le premier match est retourn\u00e9. Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les correspondances, pour d\u00e9terminer lequel d\u2019entre eux est retourn\u00e9 en premier. Par d\u00e9faut, l\u2019enregistrement avec le plus petit ID de ligne est retourn\u00e9. Voir lookupRecords pour les d\u00e9tails de toutes les options disponibles et du comportement de order_by (et de son alternative h\u00e9rit\u00e9e, sort_by ). Par exemple : T\u00e2ches.lookupOne(Projet=$id, order_by=\"Priorit\u00e9\") # T\u00e2che avec la plus petite Priorit\u00e9. Taux.lookupOne(Personne=$id, order_by=\"-Date\") # Taux avec la derni\u00e8re Date. UserTable. lookupRecords (Field_In_Lookup_Table=value, \u2026) # Retourne un Ensemble d\u2019Enregistrements correspondant aux arguments field=value donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ de la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ) (exemples ci-dessous). Par exemple : Personnes.lookupRecords(Email=$Email_Travail) Personnes.lookupRecords(Prenom=\"George\", NomDeFamille=\"Washington\") Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les r\u00e9sultats. Vous pouvez pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Vous pouvez \u00e9galement sp\u00e9cifier plusieurs IDs de colonnes sous forme de tuple (par exemple, order_by=(\"Compte\", \"-Date\") ). Par exemple : Transactions.lookupRecords(Compte=$Compte, order_by=\"Date\") Transactions.lookupRecords(Compte=$Compte, order_by=\"-Date\") Transactions.lookupRecords(Actif=True, order_by=(\"Compte\", \"-Date\")) Pour les enregistrements avec des champs order_by \u00e9gaux, les r\u00e9sultats sont tri\u00e9s selon leur apparence dans les vues (ce qui est d\u00e9termin\u00e9 par la colonne sp\u00e9ciale manualSort ). Vous pouvez d\u00e9finir order_by=None pour correspondre \u00e0 l\u2019ordre des enregistrements dans des vues non tri\u00e9es. Par d\u00e9faut, sans order_by , les enregistrements sont tri\u00e9s par ID de ligne, comme si avec order_by=\"id\" . Pour des raisons de compatibilit\u00e9, sort_by peut \u00eatre utilis\u00e9 \u00e0 la place de order_by , mais ne permet qu\u2019un seul champ, et revient \u00e0 l\u2019ID de ligne (plut\u00f4t qu\u2019\u00e0 manualSort ). Voir Ensemble d\u2019Enregistrements pour les propri\u00e9t\u00e9s utiles offertes par l\u2019objet retourn\u00e9. En particulier, des m\u00e9thodes comme .find.le permettent de rechercher des valeurs les plus proches. Voir CONTIENT pour un exemple utilisant UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ de type liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. En savoir plus sur lookupRecords . Cumulatif # NEXT (rec, *, group_by=(), order_by) # Trouve l\u2019enregistrement suivant dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Voir PR\u00c9C\u00c9DENT pour plus de d\u00e9tails. PREVIOUS (rec, *, group_by=(), order_by) # Trouve l\u2019enregistrement pr\u00e9c\u00e9dent dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Chacun de ces arguments peut \u00eatre un ID de colonne ou un tuple de IDs de colonnes, et order_by permet aux IDs de colonnes d\u2019\u00eatre pr\u00e9fix\u00e9s par \u201c-\u201d pour inverser l\u2019ordre de tri. Par exemple, PR\u00c9C\u00c9DENT(rec, order_by=\"Date\") # L'enregistrement pr\u00e9c\u00e9dent lorsqu'il est tri\u00e9 par date croissante. PR\u00c9C\u00c9DENT(rec, order_by=\"-Date\") # L'enregistrement pr\u00e9c\u00e9dent lorsqu'il est tri\u00e9 par date d\u00e9croissante. Vous pouvez utiliser group_by pour rechercher l\u2019enregistrement pr\u00e9c\u00e9dent dans un groupe filtr\u00e9. Par exemple, cela trouve l\u2019enregistrement pr\u00e9c\u00e9dent avec le m\u00eame Compte que rec , lorsque les enregistrements sont filtr\u00e9s par le Compte de rec et tri\u00e9s par date croissante : PR\u00c9C\u00c9DENT(rec, group_by=\"Compte\", order_by=\"Date\") Lorsque plusieurs enregistrements ont les m\u00eames valeurs order_by (par exemple, la m\u00eame Date dans les exemples ci-dessus), l\u2019ordre est d\u00e9termin\u00e9 par la position relative des lignes dans les vues. Cela se fait en interne en retombant sur la colonne sp\u00e9ciale manualSort et la colonne ID de ligne id . Utilisez order_by=None pour trouver l\u2019enregistrement pr\u00e9c\u00e9dent dans une table non tri\u00e9e (lorsque les lignes peuvent \u00eatre r\u00e9arrang\u00e9es en les faisant glisser manuellement). Par exemple : PR\u00c9C\u00c9DENT(rec, order_by=None) # L'enregistrement pr\u00e9c\u00e9dent dans la liste non tri\u00e9e des enregistrements. Vous pouvez sp\u00e9cifier plusieurs IDs de colonnes sous forme de tuple, pour group_by et order_by . Cela peut \u00eatre utilis\u00e9 pour correspondre aux vues tri\u00e9es par plusieurs colonnes. Par exemple : PR\u00c9C\u00c9DENT(rec, group_by=(\"Compte\", \"Ann\u00e9e\"), order_by=(\"Date\", \"-Montant\")) RANK (rec, *, group_by=(), order_by, order=\u2019asc\u2019) # Retourne le rang (ou la position) de cet enregistrement dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Voir PR\u00c9C\u00c9DENT pour les d\u00e9tails de ces param\u00e8tres. Le param\u00e8tre order peut \u00eatre \"asc\" (qui est la valeur par d\u00e9faut) ou \"desc\" . Lorsque order est \"asc\" ou omis, le premier enregistrement dans le groupe dans l\u2019ordre tri\u00e9 aurait le rang de 1. Lorsque order est \"desc\" , le dernier enregistrement dans l\u2019ordre tri\u00e9 aurait le rang de 1. S\u2019il y a plusieurs groupes, il y aura plusieurs enregistrements avec le m\u00eame rang. En particulier, chaque groupe aura un enregistrement avec le rang 1. Par exemple, RANG(rec, group_by=\"Ann\u00e9e\", order_by=\"Score\", order=\"desc\") retournera le rang de l\u2019enregistrement actuel ( rec ) parmi tous les enregistrements de sa table pour la m\u00eame ann\u00e9e, ordonn\u00e9 par score d\u00e9croissant. Date # DATE (year, month, day) # Retourne l\u2019objet datetime.datetime qui repr\u00e9sente une date particuli\u00e8re. La fonction DATE est la plus utile dans les formules o\u00f9 l\u2019ann\u00e9e, le mois et le jour sont des formules, pas des constantes. Si l\u2019ann\u00e9e est comprise entre 0 et 1899 (inclus), ajoute 1900 pour calculer l\u2019ann\u00e9e. >>> DATE(108, 1, 2) datetime.date(2008, 1, 2) >>> DATE(2008, 1, 2) datetime.date(2008, 1, 2) Si le mois est sup\u00e9rieur \u00e0 12, passe \u00e0 l\u2019ann\u00e9e suivante. >>> DATE(2008, 14, 2) datetime.date(2009, 2, 2) Si le mois est inf\u00e9rieur \u00e0 1, soustrait ce nombre de mois plus 1, du premier mois de l\u2019ann\u00e9e. >>> DATE(2008, -3, 2) datetime.date(2007, 9, 2) Si le jour est sup\u00e9rieur au nombre de jours dans le mois donn\u00e9, passe aux mois suivants. >>> DATE(2008, 1, 35) datetime.date(2008, 2, 4) Si le jour est inf\u00e9rieur \u00e0 1, soustrait ce nombre de jours plus 1, du premier jour du mois donn\u00e9. >>> DATE(2008, 1, -15) datetime.date(2007, 12, 16) DATEADD (start_date, days=0, months=0, years=0, weeks=0) # Retourne la date un certain nombre de jours, mois, ann\u00e9es ou semaines \u00e0 partir de start_date . Vous pouvez sp\u00e9cifier les arguments dans n\u2019importe quel ordre si vous sp\u00e9cifiez les noms des arguments. Utilisez des valeurs n\u00e9gatives pour soustraire. Par exemple, DATEADD(date, 1) est identique \u00e0 DATEADD(date, days=1) , et ajoute un jour \u00e0 date . DATEADD(date, years=1, days=-1) ajoute un an moins un jour. >>> DATEADD(DATE(2011, 1, 15), 1) datetime.date(2011, 1, 16) >>> DATEADD(DATE(2011, 1, 15), months=1, days=-1) datetime.date(2011, 2, 14) >>> DATEADD(DATE(2011, 1, 15), years=-2, months=1, days=3, weeks=2) datetime.date(2009, 3, 4) >>> DATEADD(DATE(1975, 4, 30), years=50, weeks=-5) datetime.date(2025, 3, 26) DATEDIF (start_date, end_date, unit) # Calcule le nombre de jours, mois ou ann\u00e9es entre deux dates. L\u2019unit\u00e9 indique le type d\u2019information que vous souhaitez retourner : \u201cY\u201d : Le nombre d\u2019ann\u00e9es compl\u00e8tes dans la p\u00e9riode. \u201cM\u201d : Le nombre de mois complets dans la p\u00e9riode. \u201cD\u201d : Le nombre de jours dans la p\u00e9riode. \u201cMD\u201d : La diff\u00e9rence entre les jours dans start_date et end_date. Les mois et ann\u00e9es des dates sont ignor\u00e9s. \u201cYM\u201d : La diff\u00e9rence entre les mois dans start_date et end_date. Les jours et ann\u00e9es des dates sont ignor\u00e9s. \u201cYD\u201d : La diff\u00e9rence entre les jours de start_date et end_date. Les ann\u00e9es des dates sont ignor\u00e9es. Deux ann\u00e9es compl\u00e8tes dans la p\u00e9riode (2) >>> DATEDIF(DATE(2001, 1, 1), DATE(2003, 1, 1), \"Y\") 2 440 jours entre le 1er juin 2001 et le 15 ao\u00fbt 2002 (440) >>> DATEDIF(DATE(2001, 6, 1), DATE(2002, 8, 15), \"D\") 440 75 jours entre le 1er juin et le 15 ao\u00fbt, en ignorant les ann\u00e9es des dates (75) >>> DATEDIF(DATE(2001, 6, 1), DATE(2012, 8, 15), \"YD\") 75 La diff\u00e9rence entre 1 et 15, en ignorant les mois et les ann\u00e9es des dates (14) >>> DATEDIF(DATE(2001, 6, 1), DATE(2002, 8, 15), \"MD\") 14 DATEVALUE (date_string, tz=None) # Convertit une date qui est stock\u00e9e sous forme de texte en un objet datetime . >>> DATEVALUE(\"1/1/2008\") datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"30-Jan-2008\") datetime.datetime(2008, 1, 30, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"2008-12-11\") datetime.datetime(2008, 12, 11, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"5-JUL\").replace(year=2000) datetime.datetime(2000, 7, 5, 0, 0, tzinfo=moment.tzinfo('America/New_York')) En cas d\u2019ambigu\u00eft\u00e9, pr\u00e9f\u00e9rez le format M/J/A. >>> DATEVALUE(\"1/2/3\") datetime.datetime(2003, 1, 2, 0, 0, tzinfo=moment.tzinfo('America/New_York')) DATE_TO_XL (date_value) # Convertit un objet date ou datetime Python en le num\u00e9ro de s\u00e9rie utilis\u00e9 par Excel, avec le 30 d\u00e9cembre 1899 comme num\u00e9ro de s\u00e9rie 1. Voir XL_TO_DATE pour plus d\u2019explications. >>> DATE_TO_XL(datetime.date(2008, 1, 1)) 39448.0 >>> DATE_TO_XL(datetime.date(2012, 3, 14)) 40982.0 >>> DATE_TO_XL(datetime.datetime(2012, 3, 14, 1, 30)) 40982.0625 DAY (date) # Retourne le jour d\u2019une date, sous forme d\u2019entier allant de 1 \u00e0 31. Identique \u00e0 date.day . >>> DAY(DATE(2011, 4, 15)) 15 >>> DAY(\"5/31/2012\") 31 >>> DAY(datetime.datetime(1900, 1, 1)) 1 DAYS (end_date, start_date) # Retourne le nombre de jours entre deux dates. Identique \u00e0 (end_date - start_date).days . >>> DAYS(\"3/15/11\",\"2/1/11\") 42 >>> DAYS(DATE(2011, 12, 31), DATE(2011, 1, 1)) 364 >>> DAYS(\"2/1/11\", \"3/15/11\") -42 DTIME (value, tz=None) # Retourne la valeur convertie en un objet datetime Python. La valeur peut \u00eatre une cha\u00eene , une date (interpr\u00e9t\u00e9e comme minuit ce jour-l\u00e0), une heure (interpr\u00e9t\u00e9e comme une heure de la journ\u00e9e aujourd\u2019hui), ou un datetime existant. Le datetime retourn\u00e9 aura son fuseau horaire d\u00e9fini sur l\u2019argument tz , ou le fuseau horaire par d\u00e9faut du document lorsque tz est omis ou None. Si l\u2019entr\u00e9e est elle-m\u00eame un datetime avec le fuseau horaire d\u00e9fini, il est retourn\u00e9 sans changement (sans modifications de son fuseau horaire). >>> DTIME(datetime.date(2017, 1, 1)) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DTIME(datetime.date(2017, 1, 1), 'Europe/Paris') datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('Europe/Paris')) >>> DTIME(datetime.datetime(2017, 1, 1)) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DTIME(datetime.datetime(2017, 1, 1, tzinfo=moment.tzinfo('UTC'))) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('UTC')) >>> DTIME(datetime.datetime(2017, 1, 1, tzinfo=moment.tzinfo('UTC')), 'Europe/Paris') datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('UTC')) >>> DTIME(\"1/1/2008\") datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) EDATE (start_date, months) # Retourne la date qui est le nombre donn\u00e9 de mois avant ou apr\u00e8s start_date . Utilisez EDATE pour calculer les dates d\u2019\u00e9ch\u00e9ance ou de maturit\u00e9 qui tombent le m\u00eame jour du mois que la date d\u2019\u00e9mission. >>> EDATE(DATE(2011, 1, 15), 1) datetime.date(2011, 2, 15) >>> EDATE(DATE(2011, 1, 15), -1) datetime.date(2010, 12, 15) >>> EDATE(DATE(2011, 1, 15), 2) datetime.date(2011, 3, 15) >>> EDATE(DATE(2012, 3, 1), 10) datetime.date(2013, 1, 1) >>> EDATE(DATE(2012, 5, 1), -2) datetime.date(2012, 3, 1) EOMONTH (start_date, months) # Retourne la date du dernier jour du mois qui est le nombre indiqu\u00e9 de mois avant ou apr\u00e8s start_date. Utilisez EOMONTH pour calculer les dates d\u2019\u00e9ch\u00e9ance ou de maturit\u00e9 qui tombent le dernier jour du mois. >>> EOMONTH(DATE(2011, 1, 1), 1) datetime.date(2011, 2, 28) >>> EOMONTH(DATE(2011, 1, 15), -3) datetime.date(2010, 10, 31) >>> EOMONTH(DATE(2012, 3, 1), 10) datetime.date(2013, 1, 31) >>> EOMONTH(DATE(2012, 5, 1), -2) datetime.date(2012, 3, 31) HOUR (time) # Identique \u00e0 time.hour . >>> HOUR(XL_TO_DATE(0.75)) 18 >>> HOUR(\"7/18/2011 7:45\") 7 >>> HOUR(\"4/21/2012\") 0 ISOWEEKNUM (date) # Retourne le num\u00e9ro de la semaine ISO de l\u2019ann\u00e9e pour une date donn\u00e9e. >>> ISOWEEKNUM(\"3/9/2012\") 10 >>> [ISOWEEKNUM(DATE(2000 + y, 1, 1)) for y in [0,1,2,3,4,5,6,7,8]] [52, 1, 1, 1, 1, 53, 52, 1, 1] MINUTE (time) # Retourne les minutes d\u2019un datetime , sous forme d\u2019entier de 0 \u00e0 59. Identique \u00e0 time.minute . >>> MINUTE(XL_TO_DATE(0.75)) 0 >>> MINUTE(\"7/18/2011 7:45\") 45 >>> MINUTE(\"12:59:00 PM\") 59 >>> MINUTE(datetime.time(12, 58, 59)) 58 MONTH (date) # Retourne le mois d\u2019une date repr\u00e9sent\u00e9e, sous forme d\u2019entier de 1 (janvier) \u00e0 12 (d\u00e9cembre). Identique \u00e0 date.month . >>> MONTH(DATE(2011, 4, 15)) 4 >>> MONTH(\"5/31/2012\") 5 >>> MONTH(datetime.datetime(1900, 1, 1)) 1 MOONPHASE (date, output=\u2019emoji\u2019) # Retourne la phase de la lune \u00e0 la date donn\u00e9e. La sortie par d\u00e9faut est un emoji de phase lunaire. Avec output=\"days\" , la sortie est l\u2019\u00e2ge de la lune en jours (nouvelle lune \u00e9tant 0). Avec output=\"fraction\" , la sortie est la fraction du mois lunaire depuis la nouvelle lune. Le calcul n\u2019est pas astronomiquement pr\u00e9cis, mais suffisant pour les loups et les marins. NE PAS utiliser output=\"lunacy\" . >>> MOONPHASE(datetime.date(1900, 1, 1), \"days\") 0.0 >>> MOONPHASE(datetime.date(1900, 1, 1), \"fraction\") 0.0 >>> MOONPHASE(datetime.datetime(1900, 1, 1)) == '\ud83c\udf11' True >>> MOONPHASE(datetime.date(1900, 1, 15)) == '\ud83c\udf15' True >>> MOONPHASE(datetime.date(1900, 1, 30)) == '\ud83c\udf11' True >>> [MOONPHASE(DATEADD(datetime.date(2023, 4, 1), days=4*n)) for n in range(8)] == ['\ud83c\udf14', '\ud83c\udf15', '\ud83c\udf16', '\ud83c\udf17', '\ud83c\udf18', '\ud83c\udf11', '\ud83c\udf12', '\ud83c\udf13'] True >>> [round(MOONPHASE(DATEADD(datetime.date(2023, 4, 1), days=4*n)), 1) for n in range(8)] [10.4, 14.4, 18.4, 22.4, 26.4, 0.9, 4.9, 8.9] NOW (tz=None) # Retourne l\u2019objet datetime pour l\u2019heure actuelle. SECOND (time) # Retourne les secondes d\u2019un datetime , sous forme d\u2019entier de 0 \u00e0 59. Identique \u00e0 time.second . >>> SECOND(XL_TO_DATE(0.75)) 0 >>> SECOND(\"7/18/2011 7:45:13\") 13 >>> SECOND(datetime.time(12, 58, 59)) 59 TODAY (tz=None) # Retourne l\u2019objet date pour la date actuelle. WEEKDAY (date, return_type=1) # Retourne le jour de la semaine correspondant \u00e0 une date. Le jour est donn\u00e9 sous forme d\u2019entier, allant de 1 (dimanche) \u00e0 7 (samedi), par d\u00e9faut. Return_type d\u00e9termine le type de la valeur retourn\u00e9e. 1 (par d\u00e9faut) - Retourne 1 (dimanche) \u00e0 7 (samedi). 2 - Retourne 1 (lundi) \u00e0 7 (dimanche). 3 - Retourne 0 (lundi) \u00e0 6 (dimanche). 11 - Retourne 1 (lundi) \u00e0 7 (dimanche). 12 - Retourne 1 (mardi) \u00e0 7 (lundi). 13 - Retourne 1 (mercredi) \u00e0 7 (mardi). 14 - Retourne 1 (jeudi) \u00e0 7 (mercredi). 15 - Retourne 1 (vendredi) \u00e0 7 (jeudi). 16 - Retourne 1 (samedi) \u00e0 7 (vendredi). 17 - Retourne 1 (dimanche) \u00e0 7 (samedi). >>> WEEKDAY(DATE(2008, 2, 14)) 5 >>> WEEKDAY(DATE(2012, 3, 1)) 5 >>> WEEKDAY(DATE(2012, 3, 1), 1) 5 >>> WEEKDAY(DATE(2012, 3, 1), 2) 4 >>> WEEKDAY(\"3/1/2012\", 3) 3 WEEKNUM (date, return_type=1) # Retourne le num\u00e9ro de la semaine d\u2019une date sp\u00e9cifique. Par exemple, la semaine contenant le 1er janvier est la premi\u00e8re semaine de l\u2019ann\u00e9e, et est num\u00e9rot\u00e9e semaine 1. Return_type d\u00e9termine quelle semaine est consid\u00e9r\u00e9e comme la premi\u00e8re semaine de l\u2019ann\u00e9e. 1 (par d\u00e9faut) - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant dimanche qui contient le 1er janvier. 2 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 1er janvier. 11 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 1er janvier. 12 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant mardi qui contient le 1er janvier. 13 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant mercredi qui contient le 1er janvier. 14 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant jeudi qui contient le 1er janvier. 15 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant vendredi qui contient le 1er janvier. 16 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant samedi qui contient le 1er janvier. 17 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant dimanche qui contient le 1er janvier. 21 - Approche ISO 8601 : La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 4 janvier. \u00c9quivalemment, c\u2019est la semaine qui contient le premier jeudi de l\u2019ann\u00e9e. >>> WEEKNUM(DATE(2012, 3, 9)) 10 >>> WEEKNUM(DATE(2012, 3, 9), 2) 11 >>> WEEKNUM('1/1/1900') 1 >>> WEEKNUM('2/1/1900') 5 XL_TO_DATE (value, tz=None) # Convertit un num\u00e9ro de s\u00e9rie Excel fourni repr\u00e9sentant une date en un objet datetime . La valeur est interpr\u00e9t\u00e9e comme le nombre de jours depuis le 30 d\u00e9cembre 1899. (Cela correspond \u00e0 l\u2019interpr\u00e9tation de Google Sheets. Excel commence avec le 31 d\u00e9cembre 1899 mais consid\u00e8re \u00e0 tort 1900 comme une ann\u00e9e bissextile. Excel pour Mac doit \u00eatre configur\u00e9 pour utiliser le syst\u00e8me de date 1900, c\u2019est-\u00e0-dire d\u00e9cocher l\u2019option \u201cUtiliser le syst\u00e8me de date 1904\u201d.) Le datetime retourn\u00e9 aura son fuseau horaire d\u00e9fini sur l\u2019argument tz , ou le fuseau horaire par d\u00e9faut du document lorsque tz est omis ou None. >>> XL_TO_DATE(41100.1875) datetime.datetime(2012, 7, 10, 4, 30, tzinfo=moment.tzinfo('America/New_York')) >>> XL_TO_DATE(39448) datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> XL_TO_DATE(40982.0625) datetime.datetime(2012, 3, 14, 1, 30, tzinfo=moment.tzinfo('America/New_York')) YEAR (date) # Retourne l\u2019ann\u00e9e correspondant \u00e0 une date sous forme d\u2019entier. Identique \u00e0 date.year . >>> YEAR(DATE(2011, 4, 15)) 2011 >>> YEAR(\"5/31/2030\") 2030 >>> YEAR(datetime.datetime(1900, 1, 1)) 1900 YEARFRAC (start_date, end_date, basis=0) # Calcule la fraction de l\u2019ann\u00e9e repr\u00e9sent\u00e9e par le nombre de jours entiers entre deux dates. Basis est le type de base de comptage des jours \u00e0 utiliser. 0 (par d\u00e9faut) - US (NASD) 30/360 1 - Actuel/actuel 2 - Actuel/360 3 - Actuel/365 4 - Europ\u00e9en 30/360 -1 - Actuel/actuel (variation Google Sheets) Cette fonction est utile pour les calculs financiers. Pour la compatibilit\u00e9 avec Excel, elle par d\u00e9faut utilise le calendrier standard NASD. Pour une utilisation dans des contextes non financiers, l\u2019option -1 est probablement le meilleur choix. Voir https://en.wikipedia.org/wiki/360-day_calendar pour l\u2019explication des m\u00e9thodes US 30/360 et Europ\u00e9enne 30/360. Voir pour l\u2019analyse de l\u2019impl\u00e9mentation particuli\u00e8re d\u2019Excel. Fraction de l\u2019ann\u00e9e entre le 1/1/2012 et le 30/7/12, en omettant l\u2019argument Basis. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30)) '0.58055556' Fraction entre les m\u00eames dates, en utilisant l\u2019argument de base Actuel/Actuel. Parce que 2012 est une ann\u00e9e bissextile, elle a une base de 366 jours. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30), 1) '0.57650273' Fraction entre les m\u00eames dates, en utilisant l\u2019argument de base Actuel/365. Utilise une base de 365 jours. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30), 3) '0.57808219' Info # CELL (info_type, reference) # Retourne les informations demand\u00e9es sur la cellule sp\u00e9cifi\u00e9e. Cela n\u2019est pas impl\u00e9ment\u00e9 dans Grist. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ISBLANK (value) # Retourne si une valeur fait r\u00e9f\u00e9rence \u00e0 une cellule vide. Elle n\u2019est pas impl\u00e9ment\u00e9e dans Grist. Pour v\u00e9rifier une cha\u00eene vide, utilisez value == \"\" . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ISEMAIL (value) # Retourne si une valeur est une adresse email valide. Notez que la v\u00e9rification de la validit\u00e9 des emails n\u2019est pas une science exacte. La norme technique consid\u00e8re de nombreuses adresses email comme valides qui ne sont pas utilis\u00e9es dans la pratique, et ne seraient pas consid\u00e9r\u00e9es comme valides par la plupart des utilisateurs. Au lieu de cela, nous suivons l\u2019impl\u00e9mentation de Google Sheets, avec quelques diff\u00e9rences, not\u00e9es ci-dessous. >>> ISEMAIL(\"Abc.123@example.com\") True >>> ISEMAIL(\"Bob_O-Reilly+tag@example.com\") True >>> ISEMAIL(\"John Doe\") False >>> ISEMAIL(\"john@aol...com\") False ISERR (value) # V\u00e9rifie si une valeur est une erreur. En d\u2019autres termes, elle retourne vrai si l\u2019utilisation de value directement provoquerait une exception. NOTE : Grist impl\u00e9mente cela en enveloppant automatiquement l\u2019argument pour utiliser l\u2019\u00e9valuation paresseuse. Une approche plus Pythonique pour v\u00e9rifier les erreurs est : try: ... value ... except Exception, err: ... faire quelque chose \u00e0 propos de l'erreur ... Par exemple : >>> ISERR(\"Hello\") False ISERROR (value) # V\u00e9rifie si une valeur est une erreur ou une valeur invalide. Elle est similaire \u00e0 ISERR , mais retourne \u00e9galement vrai pour une valeur invalide telle que NaN ou une valeur textuelle dans une colonne Num\u00e9rique. NOTE : Grist impl\u00e9mente cela en enveloppant automatiquement l\u2019argument pour utiliser l\u2019\u00e9valuation paresseuse. >>> ISERROR(\"Hello\") False >>> ISERROR(AltText(\"fail\")) True >>> ISERROR(float('nan')) True ISLOGICAL (value) # V\u00e9rifie si une valeur est True ou False . >>> ISLOGICAL(True) True >>> ISLOGICAL(False) True >>> ISLOGICAL(0) False >>> ISLOGICAL(None) False >>> ISLOGICAL(\"Test\") False ISNA (value) # V\u00e9rifie si une valeur est l\u2019erreur #N/A . >>> ISNA(float('nan')) True >>> ISNA(0.0) False >>> ISNA('text') False >>> ISNA(float('-inf')) False ISNONTEXT (value) # V\u00e9rifie si une valeur n\u2019est pas textuelle. >>> ISNONTEXT(\"asdf\") False >>> ISNONTEXT(\"\") False >>> ISNONTEXT(AltText(\"text\")) False >>> ISNONTEXT(17.0) True >>> ISNONTEXT(None) True >>> ISNONTEXT(datetime.date(2011, 1, 1)) True ISNUMBER (value) # V\u00e9rifie si une valeur est un nombre. >>> ISNUMBER(17) True >>> ISNUMBER(-123.123423) True >>> ISNUMBER(False) True >>> ISNUMBER(float('nan')) True >>> ISNUMBER(float('inf')) True >>> ISNUMBER('17') False >>> ISNUMBER(None) False >>> ISNUMBER(datetime.date(2011, 1, 1)) False ISREF (value) # V\u00e9rifie si une valeur est un enregistrement de table. Par exemple, si une colonne personne est de type R\u00e9f\u00e9rence \u00e0 la table Personnes , alors ISREF($personne) est True . De m\u00eame, ISREF(Personnes.lookupOne(name=$name)) est True . Pour tout autre type de valeur, ISREF() \u00e9valuerait \u00e0 False . >>> ISREF(17) False >>> ISREF(\"Roger\") False ISREFLIST (value) # V\u00e9rifie si une valeur est un Ensemble d'Enregistrements , le type de valeurs dans les colonnes de Liste de R\u00e9f\u00e9rences. Par exemple, si une colonne personnes est de type Liste de R\u00e9f\u00e9rences \u00e0 la table Personnes , alors ISREFLIST($personnes) est True . De m\u00eame, ISREFLIST(Personnes.lookupRecords(name=$name)) est True . Pour tout autre type de valeur, ISREFLIST() \u00e9valuerait \u00e0 False . >>> ISREFLIST(17) False >>> ISREFLIST(\"Roger\") False ISTEXT (value) # V\u00e9rifie si une valeur est textuelle. >>> ISTEXT(\"asdf\") True >>> ISTEXT(\"\") True >>> ISTEXT(AltText(\"text\")) True >>> ISTEXT(17.0) False >>> ISTEXT(None) False >>> ISTEXT(datetime.date(2011, 1, 1)) False ISURL (value) # V\u00e9rifie si une valeur est une URL valide. Elle n\u2019a pas besoin d\u2019\u00eatre enti\u00e8rement qualifi\u00e9e, ni d\u2019inclure \u201chttp://\u201d et \u201cwww\u201d. Elle ne suit pas une norme, mais tente de fonctionner de mani\u00e8re similaire \u00e0 ISURL dans Google Sheets, et de retourner True pour du texte qui est probablement une URL. Les protocoles valides incluent ftp, http, https, gopher, mailto, news, telnet et aim. >>> ISURL(\"http://www.getgrist.com\") True >>> ISURL(\"https://foo.com/test_(wikipedia)#cite-1\") True >>> ISURL(\"mailto://user@example.com\") True >>> ISURL(\"http:///a\") False N (value) # Retourne la valeur convertie en un nombre. Vrai/Faux sont convertis en 1/0. Une date est convertie en num\u00e9ro de s\u00e9rie de style Excel de la date. Tout le reste est converti en 0. >>> N(7) 7 >>> N(7.1) 7.1 >>> N(\"Even\") 0 >>> N(\"7\") 0 >>> N(True) 1 >>> N(datetime.datetime(2011, 4, 17)) 40650.0 NA () # Retourne l\u2019erreur \u201cvaleur non disponible\u201d, #N/A . >>> math.isnan(NA()) True PEEK (func) # \u00c9value l\u2019expression donn\u00e9e sans cr\u00e9er de d\u00e9pendances ou n\u00e9cessiter que les valeurs r\u00e9f\u00e9renc\u00e9es soient \u00e0 jour, en utilisant quelle que soit la valeur qu\u2019il trouve dans une cellule. Ceci est utile pour pr\u00e9venir les erreurs de r\u00e9f\u00e9rence circulaire, en particulier dans les formules de d\u00e9clenchement. Par exemple, si la formule pour A d\u00e9pend de $B et la formule pour B d\u00e9pend de $A , cela provoquerait normalement une erreur de r\u00e9f\u00e9rence circulaire car chaque valeur doit \u00eatre calcul\u00e9e avant l\u2019autre. Mais si A utilise PEEK($B) alors il obtiendra simplement la valeur d\u00e9j\u00e0 stock\u00e9e dans $B sans n\u00e9cessiter que $B soit d\u2019abord calcul\u00e9 \u00e0 la derni\u00e8re valeur. Ainsi, A sera calcul\u00e9 en premier, et B pourra utiliser $A sans probl\u00e8mes. RECORD (record_or_list, dates_as_iso=False, expand_refs=0) # Retourne un dictionnaire Python avec tous les champs de l\u2019enregistrement donn\u00e9. Si une liste d\u2019enregistrements est donn\u00e9e, retourne une liste de dictionnaires Python correspondants. Si dates_as_iso est d\u00e9fini, les valeurs Date et DateTime sont converties en cha\u00eene en utilisant le format ISO 8601. Si expand_refs est d\u00e9fini \u00e0 1 ou plus, les valeurs de R\u00e9f\u00e9rence sont remplac\u00e9es par une repr\u00e9sentation RECORD de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9, en d\u00e9veloppant le nombre donn\u00e9 de niveaux. Les valeurs d\u2019erreur pr\u00e9sentes dans les cellules de l\u2019enregistrement sont remplac\u00e9es par une valeur None, et une cl\u00e9 sp\u00e9ciale de \u201c error \u201d est ajout\u00e9e contenant les messages d\u2019erreur pour ces cellules. Par exemple : {\"Ratio\": None, \"_error_\": {\"Ratio\": \"ZeroDivisionError: integer division or modulo by zero\"}} Notez qu\u2019il faut faire attention \u00e0 \u00e9viter les r\u00e9f\u00e9rences circulaires lors de l\u2019utilisation de RECORD(), car cela cr\u00e9e une d\u00e9pendance sur chaque cellule de l\u2019enregistrement. Dans le cas de RECORD(rec), la cellule contenant cet appel sera omise du dictionnaire r\u00e9sultant. Par exemple : RECORD($Personne) RECORD(rec) RECORD(Personnes.lookupOne(Prenom=\"Alice\")) RECORD(Personnes.lookupRecords(D\u00e9partement=\"RH\")) REQUEST (url, params=None, headers=None, method=\u2019GET\u2019, data=None, json=None) # Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TYPE (value) # Retourne un nombre associ\u00e9 au type de donn\u00e9es pass\u00e9 dans la fonction. Cela n\u2019est pas impl\u00e9ment\u00e9 dans Grist. Utilisez isinstance(value, type) ou type(value) . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. Logique # AND (logical_expression, *logical_expressions) # Renvoie True si tous les arguments sont logiquement vrais, et False si l\u2019un d\u2019eux est faux. Identique \u00e0 all([valeur1, valeur2, ...]) . >>> AND(1) True >>> AND(0) False >>> AND(1, 1) True >>> AND(1,2,3,4) True >>> AND(1,2,3,4,0) False FALSE () # Renvoie la valeur logique False . Vous pouvez \u00e9galement utiliser la valeur False directement. Cette fonction est fournie principalement pour la compatibilit\u00e9 avec d\u2019autres programmes de tableur. >>> FALSE() False IF (logical_expression, value_if_true, value_if_false) # Renvoie une valeur si une expression logique est True et une autre si elle est False . L\u2019expression Python \u00e9quivalente est : valeur_si_vrai si expression_logique sinon valeur_si_faux Comme Grist prend en charge les formules multi-lignes, vous pouvez \u00e9galement utiliser des blocs Python tels que : if expression_logique: return valeur_si_vrai else: return valeur_si_faux NOTE : Grist suit le mod\u00e8le Excel en n\u2019\u00e9valuant qu\u2019une des expressions de valeur, en enveloppant automatiquement les expressions pour utiliser l\u2019\u00e9valuation paresseuse. Cela permet \u00e0 IF(False, 1/0, 1) d\u2019\u00e9valuer \u00e0 1 plut\u00f4t que de lever une exception. >>> IF(12, \"Oui\", \"Non\") 'Oui' >>> IF(None, \"Oui\", \"Non\") 'Non' >>> IF(True, 0.85, 0.0) 0.85 >>> IF(False, 0.85, 0.0) 0.0 IFERROR (value, value_if_error=\u2019\u2018) # Renvoie le premier argument s\u2019il n\u2019est pas une valeur d\u2019erreur, sinon renvoie le deuxi\u00e8me argument s\u2019il est pr\u00e9sent, ou une cha\u00eene vide si le deuxi\u00e8me argument est absent. NOTE : Grist g\u00e8re les valeurs qui l\u00e8vent une exception en les enveloppant pour utiliser l\u2019\u00e9valuation paresseuse. >>> IFERROR(float('nan'), \"**NAN**\") '**NAN**' >>> IFERROR(17.17, \"**NAN**\") 17.17 >>> IFERROR(\"Texte\") 'Texte' >>> IFERROR(AltText(\"bonjour\")) '' NOT (logical_expression) # True . Identique \u00e0 not expression_logique . >>> NOT(123) False >>> NOT(0) True OR (logical_expression, *logical_expressions) # Renvoie True si l\u2019un des arguments est logiquement vrai, et faux si tous les arguments sont faux. Identique \u00e0 any([valeur1, valeur2, ...]) . >>> OR(1) True >>> OR(0) False >>> OR(1, 1) True >>> OR(0, 1) True >>> OR(0, 0) False >>> OR(0,False,0.0,\"\",None) False >>> OR(0,None,3,0) True TRUE () # Renvoie la valeur logique True . Vous pouvez \u00e9galement utiliser la valeur True directement. Cette fonction est fournie principalement pour la compatibilit\u00e9 avec d\u2019autres programmes de tableur. >>> TRUE() True Recherche # UserTable. lookupOne (Field_In_Lookup_Table=value, \u2026) # Renvoie un Enregistrement correspondant aux arguments champ=valeur donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ dans la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ). Par exemple : People.lookupOne(First_Name=\"Lewis\", Last_Name=\"Carroll\") People.lookupOne(Email=$Work_Email) En savoir plus sur lookupOne . Si plusieurs enregistrements sont trouv\u00e9s, le premier match est renvoy\u00e9. Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les correspondances, pour d\u00e9terminer lequel d\u2019entre eux est renvoy\u00e9 en premier. Par d\u00e9faut, l\u2019enregistrement avec le plus petit ID de ligne est renvoy\u00e9. Voir lookupRecords pour des d\u00e9tails sur toutes les options disponibles et le comportement de order_by (et de son alternative h\u00e9rit\u00e9e, sort_by ). Par exemple : Tasks.lookupOne(Project=$id, order_by=\"Priority\") # T\u00e2che avec la plus petite priorit\u00e9. Rates.lookupOne(Person=$id, order_by=\"-Date\") # Taux avec la derni\u00e8re date. UserTable. lookupRecords (Field_In_Lookup_Table=value, \u2026) # Renvoie un Ensemble d\u2019Enregistrements correspondant aux arguments champ=valeur donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ dans la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ) (exemples ci-dessous). Par exemple : People.lookupRecords(Email=$Work_Email) People.lookupRecords(First_Name=\"George\", Last_Name=\"Washington\") Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les r\u00e9sultats. Vous pouvez pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Vous pouvez \u00e9galement sp\u00e9cifier plusieurs ID de colonnes sous forme de tuple (par exemple, order_by=(\"Account\", \"-Date\") ). Par exemple : Transactions.lookupRecords(Account=$Account, order_by=\"Date\") Transactions.lookupRecords(Account=$Account, order_by=\"-Date\") Transactions.lookupRecords(Active=True, order_by=(\"Account\", \"-Date\")) Pour les enregistrements avec des champs order_by \u00e9gaux, les r\u00e9sultats sont tri\u00e9s selon leur apparition dans les vues (ce qui est d\u00e9termin\u00e9 par la colonne sp\u00e9ciale manualSort ). Vous pouvez d\u00e9finir order_by=None pour correspondre \u00e0 l\u2019ordre des enregistrements dans des vues non tri\u00e9es. Par d\u00e9faut, sans order_by , les enregistrements sont tri\u00e9s par ID de ligne, comme si avec order_by=\"id\" . Pour des raisons de compatibilit\u00e9, sort_by peut \u00eatre utilis\u00e9 \u00e0 la place de order_by , mais ne permet qu\u2019un seul champ, et revient \u00e0 l\u2019ID de ligne (plut\u00f4t qu\u2019\u00e0 manualSort ). Voir Ensemble d\u2019Enregistrements pour des propri\u00e9t\u00e9s utiles offertes par l\u2019objet renvoy\u00e9. En particulier, des m\u00e9thodes comme .find.le permettent de rechercher les valeurs les plus proches. Voir CONTIENT pour un exemple utilisant UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ d\u2019un type de liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. En savoir plus sur lookupRecords . ADDRESS (row, column, absolute_relative_mode, use_a1_notation, sheet) # Renvoie une r\u00e9f\u00e9rence de cellule sous forme de cha\u00eene. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CHOOSE (index, choice1, choice2) # Renvoie un \u00e9l\u00e9ment d\u2019une liste de choix en fonction de l\u2019index. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. COLUMN (cell_reference=None) # Renvoie le num\u00e9ro de colonne d\u2019une cellule sp\u00e9cifi\u00e9e, avec A=1 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. COLUMNS (range) # Renvoie le nombre de colonnes dans un tableau ou un intervalle sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CONTAINS (value, match_empty=no_match_empty) # Utilisez ce marqueur avec UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ d\u2019un type de liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. Par exemple : MoviesTable.lookupRecords(genre=CONTAINS(\"Drama\")) renverra des enregistrements dans MoviesTable o\u00f9 la colonne genre est une liste ou un autre conteneur tel que [\"Comedy\", \"Drama\"] , c\u2019est-\u00e0-dire \"Drama\" in $genre . Notez que la colonne recherch\u00e9e (par exemple, genre ) doit avoir des valeurs d\u2019un type de conteneur tel que liste, tuple ou ensemble. En particulier, les valeurs ne doivent pas \u00eatre des cha\u00eenes, par exemple \"Comedy-Drama\" ne correspondra pas m\u00eame si \"Drama\" in \"Comedy-Drama\" est True en Python. Cela ne correspondra \u00e9galement pas aux sous-cha\u00eenes dans les \u00e9l\u00e9ments du conteneur, par exemple [\"Comedy-Drama\"] . Vous pouvez \u00e9ventuellement passer un deuxi\u00e8me argument match_empty pour indiquer une valeur qui devrait \u00eatre compar\u00e9e aux listes vides dans la colonne recherch\u00e9e. Par exemple, \u00e9tant donn\u00e9 cette formule : MoviesTable.lookupRecords(genre=CONTAINS(g, match_empty='')) Si g est '' (c\u2019est-\u00e0-dire \u00e9gal \u00e0 match_empty ), alors la colonne genre dans les enregistrements renvoy\u00e9s sera soit une liste vide (ou un autre conteneur) soit une liste contenant g comme d\u2019habitude. GETPIVOTDATA (value_name, any_pivot_table_cell, original_column_1, pivot_item_1=None, *args) # Extrait une valeur agr\u00e9g\u00e9e d\u2019un tableau crois\u00e9 dynamique qui correspond aux en-t\u00eates de ligne et de colonne sp\u00e9cifi\u00e9s. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. HLOOKUP (search_key, range, index, is_sorted) # Recherche horizontale. Recherche dans la premi\u00e8re ligne d\u2019un intervalle pour une cl\u00e9 et renvoie la valeur d\u2019une cellule sp\u00e9cifi\u00e9e dans la colonne trouv\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. HYPERLINK (url, link_label) # Cr\u00e9e un lien hypertexte \u00e0 l\u2019int\u00e9rieur d\u2019une cellule. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. INDEX (reference, row, column) # Renvoie le contenu d\u2019une cellule, sp\u00e9cifi\u00e9 par un d\u00e9calage de ligne et de colonne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. INDIRECT (cell_reference_as_string) # Renvoie une r\u00e9f\u00e9rence de cellule sp\u00e9cifi\u00e9e par une cha\u00eene. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. LOOKUP (search_key, search_range_or_search_result_array, result_range=None) # Recherche dans une ligne ou une colonne pour une cl\u00e9 et renvoie la valeur de la cellule dans une plage de r\u00e9sultats situ\u00e9e \u00e0 la m\u00eame position que la ligne ou la colonne de recherche. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. MATCH (search_key, range, search_type) # Renvoie la position relative d\u2019un \u00e9l\u00e9ment dans un intervalle qui correspond \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. OFFSET (cell_reference, offset_rows, offset_columns, height, width) # Renvoie une r\u00e9f\u00e9rence de plage d\u00e9cal\u00e9e d\u2019un nombre sp\u00e9cifi\u00e9 de lignes et de colonnes \u00e0 partir d\u2019une r\u00e9f\u00e9rence de cellule de d\u00e9part. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ROW (cell_reference) # Renvoie le num\u00e9ro de ligne d\u2019une cellule sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ROWS (range) # Renvoie le nombre de lignes dans un tableau ou un intervalle sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SELF_HYPERLINK (label=None, page=None, **kwargs) # Cr\u00e9e un lien vers le document actuel. Tous les param\u00e8tres sont optionnels. La cha\u00eene renvoy\u00e9e est au format URL, \u00e9ventuellement pr\u00e9c\u00e9d\u00e9e d\u2019une \u00e9tiquette et d\u2019un espace (le format attendu pour les colonnes de texte Grist avec l\u2019option HyperLink activ\u00e9e). Un num\u00e9ro de page num\u00e9rique peut \u00eatre fourni, ce qui cr\u00e9era un lien vers la page sp\u00e9cifi\u00e9e. Pour trouver le num\u00e9ro de page num\u00e9rique dont vous avez besoin, visitez une page et examinez son URL pour une partie /p/NN . Un nombre quelconque d\u2019arguments sous la forme LinkKey_NOM peut \u00eatre fourni, pour d\u00e9finir les valeurs user.LinkKey.NOM qui seront disponibles dans les r\u00e8gles d\u2019acc\u00e8s. Par exemple, si une r\u00e8gle permet aux utilisateurs de voir des lignes lorsque user.LinkKey.Code == rec.Code , nous pourrions vouloir cr\u00e9er des liens avec SELF_HYPERLINK(LinkKey_Code=$Code) . >>> SELF_HYPERLINK() u'https://docs.getgrist.com/sbaltsirg/Example' >>> SELF_HYPERLINK(label='doc') u'doc https://docs.getgrist.com/sbaltsirg/Example' >>> SELF_HYPERLINK(page=2) u'https://docs.getgrist.com/sbaltsirg/Example/p/2' >>> SELF_HYPERLINK(LinkKey_Code='X1234') u'https://docs.getgrist.com/sbaltsirg/Example?Code_=X1234' >>> SELF_HYPERLINK(label='order', page=3, LinkKey_Code='X1234', LinkKey_Name='Bi Ngo') u'order https://docs.getgrist.com/sbaltsirg/Example/p/3?Code_=X1234&Name_=Bi+Ngo' >>> SELF_HYPERLINK(Linky_Link='Link') Traceback (most recent call last): ... TypeError: unexpected keyword argument 'Linky_Link' (not of form LinkKey_NAME) VLOOKUP (table, **field_value_pairs) # Recherche verticale. Recherche dans la table donn\u00e9e pour un enregistrement correspondant aux arguments champ=valeur donn\u00e9s. Si plusieurs enregistrements correspondent, renvoie l\u2019un d\u2019eux. Si aucun ne correspond, renvoie l\u2019enregistrement vide sp\u00e9cial. L\u2019objet renvoy\u00e9 est un enregistrement dont les champs sont disponibles en utilisant la syntaxe .champ . Par exemple, VLOOKUP(Employees, EmployeeID=$EmpID).Salary . Notez que VLOOKUP n\u2019est pas couramment n\u00e9cessaire dans Grist, puisque les Colonnes de R\u00e9f\u00e9rence sont le meilleur moyen de lier des donn\u00e9es entre des tables, et permettent une utilisation simple et efficace telle que $Person.Age . VLOOKUP est exactement \u00e9quivalent \u00e0 table.lookupOne(**champ_valeur_paires) . Voir lookupOne . Par exemple : VLOOKUP(People, First_Name=\"Lewis\", Last_Name=\"Carroll\") VLOOKUP(People, First_Name=\"Lewis\", Last_Name=\"Carroll\").Age Math # ABS (value) # Renvoie la valeur absolue d\u2019un nombre. >>> ABS(2) 2 >>> ABS(-2) 2 >>> ABS(-4) 4 ACOS (value) # Renvoie le cosinus inverse d\u2019une valeur, en radians. >>> round(ACOS(-0.5), 9) 2.094395102 >>> round(ACOS(-0.5)*180/PI(), 10) 120.0 ACOSH (value) # Renvoie le cosinus hyperbolique inverse d\u2019un nombre. >>> ACOSH(1) 0.0 >>> round(ACOSH(10), 7) 2.9932228 ARABIC (roman_numeral) # Calcule la valeur d\u2019un chiffre romain. >>> ARABIC(\"LVII\") 57 >>> ARABIC('mcmxii') 1912 ASIN (value) # Renvoie le sinus inverse d\u2019une valeur, en radians. >>> round(ASIN(-0.5), 9) -0.523598776 >>> round(ASIN(-0.5)*180/PI(), 10) -30.0 >>> round(DEGREES(ASIN(-0.5)), 10) -30.0 ASINH (value) # Renvoie le sinus hyperbolique inverse d\u2019un nombre. >>> round(ASINH(-2.5), 9) -1.647231146 >>> round(ASINH(10), 9) 2.99822295 ATAN (value) # Renvoie l\u2019arc tangente d\u2019une valeur, en radians. >>> round(ATAN(1), 9) 0.785398163 >>> ATAN(1)*180/PI() 45.0 >>> DEGREES(ATAN(1)) 45.0 ATAN2 (x, y) # Renvoie l\u2019angle entre l\u2019axe x et un segment de ligne allant de l\u2019origine (0,0) \u00e0 la paire de coordonn\u00e9es sp\u00e9cifi\u00e9e ( x , y ), en radians. >>> round(ATAN2(1, 1), 9) 0.785398163 >>> round(ATAN2(-1, -1), 9) -2.35619449 >>> ATAN2(-1, -1)*180/PI() -135.0 >>> DEGREES(ATAN2(-1, -1)) -135.0 >>> round(ATAN2(1,2), 9) 1.107148718 ATANH (value) # Renvoie le sinus hyperbolique inverse d\u2019un nombre. >>> round(ATANH(0.76159416), 9) 1.00000001 >>> round(ATANH(-0.1), 9) -0.100335348 CEILING (value, factor=1) # Arrondit un nombre \u00e0 la multiple sup\u00e9rieure la plus proche du facteur, ou \u00e0 l\u2019entier le plus proche si le facteur est ommis ou 1. >>> CEILING(2.5, 1) 3 >>> CEILING(-2.5, -2) -4 >>> CEILING(-2.5, 2) -2 >>> CEILING(1.5, 0.1) 1.5 >>> CEILING(0.234, 0.01) 0.24 COMBIN (n, k) # Renvoie le nombre de fa\u00e7ons de choisir un certain nombre d\u2019objets dans un ensemble d\u2019une taille donn\u00e9e d\u2019objets. >>> COMBIN(8,2) 28 >>> COMBIN(4,2) 6 >>> COMBIN(10,7) 120 COS (angle) # Renvoie le cosinus d\u2019un angle donn\u00e9 en radians. >>> round(COS(1.047), 7) 0.5001711 >>> round(COS(60*PI()/180), 10) 0.5 >>> round(COS(RADIANS(60)), 10) 0.5 COSH (value) # Renvoie le cosinus hyperbolique de tout nombre r\u00e9el. >>> round(COSH(4), 6) 27.308233 >>> round(COSH(EXP(1)), 7) 7.6101251 DEGREES (angle) # Convertit une valeur d\u2019angle en radians en degr\u00e9s. >>> round(DEGREES(ACOS(-0.5)), 10) 120.0 >>> DEGREES(PI()) 180.0 EVEN (value) # Arrondit un nombre \u00e0 l\u2019entier pair sup\u00e9rieur le plus proche, en arrondissant loin de z\u00e9ro. >>> EVEN(1.5) 2 >>> EVEN(3) 4 >>> EVEN(2) 2 >>> EVEN(-1) -2 EXP (exponent) # Renvoie le nombre d\u2019Euler, e (~2.718) \u00e9lev\u00e9 \u00e0 une puissance. >>> round(EXP(1), 8) 2.71828183 >>> round(EXP(2), 7) 7.3890561 FACT (value) # Renvoie la factorielle d\u2019un nombre. >>> FACT(5) 120 >>> FACT(1.9) 1 >>> FACT(0) 1 >>> FACT(1) 1 >>> FACT(-1) Traceback (most recent call last): ... ValueError: factorial() not defined for negative values FACTDOUBLE (value) # Renvoie la \u201cdouble factorielle\u201d d\u2019un nombre. >>> FACTDOUBLE(6) 48 >>> FACTDOUBLE(7) 105 >>> FACTDOUBLE(3) 3 >>> FACTDOUBLE(4) 8 FLOOR (value, factor=1) # Arrondit un nombre \u00e0 l\u2019entier multiple inf\u00e9rieur le plus proche de la signification sp\u00e9cifi\u00e9e. >>> FLOOR(3.7,2) 2 >>> FLOOR(-2.5,-2) -2 >>> FLOOR(2.5,-2) Traceback (most recent call last): ... ValueError: facteur argument invalide >>> FLOOR(1.58,0.1) 1.5 >>> FLOOR(0.234,0.01) 0.23 GCD (value1, *more_values) # Renvoie le plus grand commun diviseur de un ou plusieurs entiers. >>> GCD(5, 2) 1 >>> GCD(24, 36) 12 >>> GCD(7, 1) 1 >>> GCD(5, 0) 5 >>> GCD(0, 5) 5 >>> GCD(5) 5 >>> GCD(14, 42, 21) 7 INT (value) # Arrondit un nombre \u00e0 l\u2019entier le plus proche qui est inf\u00e9rieur ou \u00e9gal \u00e0 lui. >>> INT(8.9) 8 >>> INT(-8.9) -9 >>> 19.5-INT(19.5) 0.5 LCM (value1, *more_values) # Renvoie le plus petit multiple commun de un ou plusieurs entiers. >>> LCM(5, 2) 10 >>> LCM(24, 36) 72 >>> LCM(0, 5) 0 >>> LCM(5) 5 >>> LCM(10, 100) 100 >>> LCM(12, 18) 36 >>> LCM(12, 18, 24) 72 LN (value) # Renvoie le logarithme d\u2019un nombre, base e (nombre d\u2019Euler). >>> round(LN(86), 7) 4.4543473 >>> round(LN(2.7182818), 7) 1.0 >>> round(LN(EXP(3)), 10) 3.0 LOG (value, base=10) # Renvoie le logarithme d\u2019un nombre donn\u00e9 une base. >>> LOG(10) 1.0 >>> LOG(8, 2) 3.0 >>> round(LOG(86, 2.7182818), 7) 4.4543473 LOG10 (value) # Renvoie le logarithme d\u2019un nombre, base 10. >>> round(LOG10(86), 9) 1.934498451 >>> LOG10(10) 1.0 >>> LOG10(100000) 5.0 >>> LOG10(10**5) 5.0 MOD (dividend, divisor) # Renvoie le r\u00e9sultat de l\u2019op\u00e9rateur modulo, le reste apr\u00e8s une op\u00e9ration de division. >>> MOD(3, 2) 1 >>> MOD(-3, 2) 1 >>> MOD(3, -2) -1 >>> MOD(-3, -2) -1 MROUND (value, factor) # Arrondit un nombre \u00e0 l\u2019entier multiple le plus proche d\u2019un autre. >>> MROUND(10, 3) 9 >>> MROUND(-10, -3) -9 >>> round(MROUND(1.3, 0.2), 10) 1.4 >>> MROUND(5, -2) Traceback (most recent call last): ... ValueError: facteur argument invalide MULTINOMIAL (value1, *more_values) # Renvoie la factorielle de la somme des valeurs divis\u00e9e par le produit des factorielles des valeurs. >>> MULTINOMIAL(2, 3, 4) 1260 >>> MULTINOMIAL(3) 1 >>> MULTINOMIAL(1,2,3) 60 >>> MULTINOMIAL(0,2,4,6) 13860 NUM (value) # Pour une valeur flottante Python qui est en fait un entier, renvoie un type entier Python. Sinon, renvoie la valeur inchang\u00e9e. Cela est parfois utile lorsqu\u2019une valeur provient d\u2019une colonne num\u00e9rique Grist (repr\u00e9sent\u00e9e comme des flottants), mais lorsque des valeurs int sont en fait attendues. >>> NUM(-17.0) -17 >>> NUM(1.5) 1.5 >>> NUM(4) 4 >>> NUM(\"NA\") 'NA' ODD (value) # Arrondit un nombre \u00e0 l\u2019entier impair sup\u00e9rieur le plus proche. >>> ODD(1.5) 3 >>> ODD(3) 3 >>> ODD(2) 3 >>> ODD(-1) -1 >>> ODD(-2) -3 PI () # Renvoie la valeur de Pi \u00e0 14 d\u00e9cimales. >>> round(PI(), 9) 3.141592654 >>> round(PI()/2, 9) 1.570796327 >>> round(PI()*9, 8) 28.27433388 POWER (base, exponent) # Renvoie un nombre \u00e9lev\u00e9 \u00e0 une puissance. >>> POWER(5,2) 25.0 >>> round(POWER(98.6,3.2), 3) 2401077.222 >>> round(POWER(4,5.0/4), 9) 5.656854249 PRODUCT (factor1, *more_factors) # Renvoie le r\u00e9sultat de la multiplication d\u2019une s\u00e9rie de nombres. Chaque argument peut \u00eatre un nombre ou un tableau. >>> PRODUCT([5,15,30]) 2250 >>> PRODUCT([5,15,30], 2) 4500 >>> PRODUCT(5,15,[30],[2]) 4500 QUOTIENT (dividend, divisor) # Renvoie un nombre divis\u00e9 par un autre, sans le reste. >>> QUOTIENT(5, 2) 2 >>> QUOTIENT(4.5, 3.1) 1 >>> QUOTIENT(-10, 3) -3 RADIANS (angle) # Convertit une valeur d\u2019angle en degr\u00e9s en radians. >>> round(RADIANS(270), 6) 4.712389 RAND () # Renvoie un nombre al\u00e9atoire entre 0 inclus et 1 exclus. RANDBETWEEN (low, high) # Renvoie un entier al\u00e9atoire uniform\u00e9ment entre deux valeurs, inclusif. ROMAN (number, form_unused=None) # Formate un nombre en chiffres romains. Le deuxi\u00e8me argument est ignor\u00e9 dans cette impl\u00e9mentation. >>> ROMAN(499,0) 'CDXCIX' >>> ROMAN(499.2,0) 'CDXCIX' >>> ROMAN(57) 'LVII' >>> ROMAN(1912) 'MCMXII' ROUND (value, places=0) # Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, par d\u00e9faut au nombre entier le plus proche si le nombre de places n\u2019est pas donn\u00e9. Arrondit loin de z\u00e9ro (\u2018vers le haut\u2019 pour les nombres positifs) en cas d\u2019\u00e9galit\u00e9, c\u2019est-\u00e0-dire lorsque le dernier chiffre est 5. >>> ROUND(1.4) 1.0 >>> ROUND(1.5) 2.0 >>> ROUND(2.5) 3.0 >>> ROUND(-2.5) -3.0 >>> ROUND(2.15, 1) 2.2 >>> ROUND(-1.475, 2) -1.48 >>> ROUND(21.5, -1) 20.0 >>> ROUND(626.3,-3) 1000.0 >>> ROUND(1.98,-1) 0.0 >>> ROUND(-50.55,-2) -100.0 >>> ROUND(0) 0.0 ROUNDDOWN (value, places=0) # Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, en arrondissant toujours vers le bas vers z\u00e9ro. >>> ROUNDDOWN(3.2, 0) 3 >>> ROUNDDOWN(76.9,0) 76 >>> ROUNDDOWN(3.14159, 3) 3.141 >>> ROUNDDOWN(-3.14159, 1) -3.1 >>> ROUNDDOWN(31415.92654, -2) 31400 ROUNDUP (value, places=0) # Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, en arrondissant toujours vers le haut loin de z\u00e9ro. >>> ROUNDUP(3.2,0) 4 >>> ROUNDUP(76.9,0) 77 >>> ROUNDUP(3.14159, 3) 3.142 >>> ROUNDUP(-3.14159, 1) -3.2 >>> ROUNDUP(31415.92654, -2) 31500 SERIESSUM (x, n, m, a) # \u00c9tant donn\u00e9 les param\u00e8tres x, n, m et a, renvoie la somme de la s\u00e9rie de puissance a_1 x^n + a_2 x^(n+m) + \u2026 + a_i*x^(n+(i-1)m), o\u00f9 i est le nombre d\u2019entr\u00e9es dans la plage a . >>> SERIESSUM(1,0,1,1) 1 >>> SERIESSUM(2,1,0,[1,2,3]) 12 >>> SERIESSUM(-3,1,1,[2,4,6]) -132 >>> round(SERIESSUM(PI()/4,0,2,[1,-1./FACT(2),1./FACT(4),-1./FACT(6)]), 6) 0.707103 SIGN (value) # \u00c9tant donn\u00e9 un nombre d\u2019entr\u00e9e, renvoie -1 s\u2019il est n\u00e9gatif, 1 s\u2019il est positif, et 0 s\u2019il est z\u00e9ro. >>> SIGN(10) 1 >>> SIGN(4.0-4.0) 0 >>> SIGN(-0.00001) -1 SIN (angle) # Renvoie le sinus d\u2019un angle donn\u00e9 en radians. >>> round(SIN(PI()), 10) 0.0 >>> SIN(PI()/2) 1.0 >>> round(SIN(30*PI()/180), 10) 0.5 >>> round(SIN(RADIANS(30)), 10) 0.5 SINH (value) # Renvoie le sinus hyperbolique de tout nombre r\u00e9el. >>> round(2.868*SINH(0.0342*1.03), 7) 0.1010491 SQRT (value) # Renvoie la racine carr\u00e9e positive d\u2019un nombre positif. >>> SQRT(16) 4.0 >>> SQRT(-16) Traceback (most recent call last): ... ValueError: math domain error >>> SQRT(ABS(-16)) 4.0 SQRTPI (value) # Renvoie la racine carr\u00e9e positive du produit de Pi et du nombre positif donn\u00e9. >>> round(SQRTPI(1), 6) 1.772454 >>> round(SQRTPI(2), 6) 2.506628 SUBTOTAL (function_code, range1, range2) # Renvoie un sous-total pour une plage verticale de cellules en utilisant une fonction d\u2019agr\u00e9gation sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SUM (value1, *more_values) # Renvoie la somme d\u2019une s\u00e9rie de nombres. Chaque argument peut \u00eatre un nombre ou un tableau. Les valeurs non num\u00e9riques sont ignor\u00e9es. >>> SUM([5,15,30]) 50 >>> SUM([5.,15,30], 2) 52.0 >>> SUM(5,15,[30],[2]) 52 SUMIF (records, criterion, sum_range) # Renvoie une somme conditionnelle sur une plage. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SUMIFS (sum_range, criteria_range1, criterion1, *args) # Renvoie la somme d\u2019une plage en fonction de plusieurs crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SUMPRODUCT (array1, *more_arrays) # Multiplie les composants correspondants dans deux tableaux de taille \u00e9gale, et renvoie la somme de ces produits. >>> SUMPRODUCT([3,8,1,4,6,9], [2,6,5,7,7,3]) 156 >>> SUMPRODUCT([], [], []) 0 >>> SUMPRODUCT([-0.25], [-2], [-3]) -1.5 >>> SUMPRODUCT([-0.25, -0.25], [-2, -2], [-3, -3]) -3.0 SUMSQ (value1, value2) # Renvoie la somme des carr\u00e9s d\u2019une s\u00e9rie de nombres et/ou de cellules. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TAN (angle) # Renvoie la tangente d\u2019un angle donn\u00e9 en radians. >>> round(TAN(0.785), 8) 0.99920399 >>> round(TAN(45*PI()/180), 10) 1.0 >>> round(TAN(RADIANS(45)), 10) 1.0 TANH (value) # Renvoie la tangente hyperbolique de tout nombre r\u00e9el. >>> round(TANH(-2), 6) -0.964028 >>> TANH(0) 0.0 >>> round(TANH(0.5), 6) 0.462117 TRUNC (value, places=0) # Tronque un nombre \u00e0 un certain nombre de chiffres significatifs en omettant les chiffres moins significatifs. >>> TRUNC(8.9) 8 >>> TRUNC(-8.9) -8 >>> TRUNC(0.45) 0 UUID () # G\u00e9n\u00e8re un identifiant de cha\u00eene format\u00e9 UUID al\u00e9atoire. Puisque UUID() produit une valeur diff\u00e9rente chaque fois qu\u2019il est appel\u00e9, il est pr\u00e9f\u00e9rable de l\u2019utiliser dans formule de d\u00e9clenchement pour de nouveaux enregistrements. Cela ne calculerait UUID() qu\u2019une seule fois et figerait la valeur calcul\u00e9e. En revanche, une formule ordinaire peut \u00eatre recalcul\u00e9e \u00e0 chaque fois que le document est recharg\u00e9, produisant une valeur diff\u00e9rente pour UUID() \u00e0 chaque fois. Horaire # SCHEDULE (schedule, start=None, count=10, end=None) # Renvoie la liste des objets datetime g\u00e9n\u00e9r\u00e9s selon la cha\u00eene horaire . Commence \u00e0 d\u00e9but , qui par d\u00e9faut est NOW(). G\u00e9n\u00e8re au maximum compte r\u00e9sultats (10 par d\u00e9faut). Si fin est donn\u00e9, s\u2019arr\u00eate l\u00e0. L\u2019horaire a le format \u201cINTERVALLE : SLOTS, \u2026\u201d. Par exemple : annuel : Jan-15, Apr-15, Jul-15 -- Trois fois par an aux dates donn\u00e9es \u00e0 minuit. annuel : 1/15, 4/15, 7/15 -- Identique \u00e0 ce qui pr\u00e9c\u00e8de. mensuel : /1 14h, /15 14h -- Le 1er et le 15 de chaque mois, \u00e0 14h. 3-mois : /10, +1m /20 -- Tous les 3 mois le 10 du mois 1, le 20 du mois 2. hebdomadaire : Lu 9h, Ma 9h, Ve 14h -- Trois fois par semaine \u00e0 des heures sp\u00e9cifi\u00e9es. 2-semaines : Lu, +1s Ma -- Toutes les 2 semaines le lundi de la semaine 1, le mardi de la semaine 2. quotidien : 07:30, 21:00 -- Deux fois par jour \u00e0 des heures sp\u00e9cifi\u00e9es. 2-jours : 00h, 16h, +1j 08h -- Trois fois tous les deux jours, espac\u00e9s uniform\u00e9ment. horaire : :15, :45 -- 15 minutes avant et apr\u00e8s chaque heure. 4-heures : :00, 1:20, 2:40 -- Trois fois toutes les 4 heures, espac\u00e9s uniform\u00e9ment. 10-minutes : +0s -- Toutes les 10 minutes \u00e0 la minute. L\u2019INTERVALLE doit \u00eatre soit de la forme N-unit\u00e9 o\u00f9 N est un nombre et unit\u00e9 est l\u2019un des ann\u00e9e , mois , semaine , jour , heure ; ou l\u2019un des alias : annuel , mensuel , hebdomadaire , quotidien , horaire , qui signifient 1-ann\u00e9e , 1-mois , etc. Les SLOTS prennent en charge les unit\u00e9s suivantes : `Jan-15` ou `1/15` -- Mois et jour du mois ; disponible lorsque l'INTERVALLE est bas\u00e9 sur l'ann\u00e9e. `/15` -- Jour du mois, disponible lorsque l'INTERVALLE est bas\u00e9 sur le mois. `Lun`, `Lu`, `Vendredi` -- Jour de la semaine (ou abr\u00e9viation), lorsque l'INTERVALLE est bas\u00e9 sur la semaine. 10h, 13h30, 15h45 -- Heure de la journ\u00e9e, disponible pour des intervalles bas\u00e9s sur le jour ou plus longs. :45, :00 -- Minutes de l'heure, disponibles lorsque l'INTERVALLE est bas\u00e9 sur l'heure. +1j, +15j -- Combien de jours ajouter au d\u00e9but de l'INTERVALLE. +1s -- Combien de semaines ajouter au d\u00e9but de l'INTERVALLE. +1m -- Combien de mois ajouter au d\u00e9but de l'INTERVALLE. Les SLOTS sont toujours relatifs \u00e0 l\u2019INTERVALLE plut\u00f4t qu\u2019\u00e0 d\u00e9but . Les intervalles bas\u00e9s sur la semaine commencent le dimanche. Par exemple, hebdomadaire : +1j, +4j est identique \u00e0 hebdomadaire : Lun, Jeu , et g\u00e9n\u00e8re des heures les lundis et jeudis, quel que soit d\u00e9but . Le premier temps g\u00e9n\u00e9r\u00e9 est d\u00e9termin\u00e9 par l\u2019 unit\u00e9 de l\u2019INTERVALLE sans tenir compte du multiple. Par exemple, \u00e0 la fois \u201c2-semaine : Lun\u201d et \u201c3-semaine : Lun\u201d commencent le premier lundi apr\u00e8s d\u00e9but , et g\u00e9n\u00e8rent ensuite soit tous les deuxi\u00e8mes soit tous les troisi\u00e8mes lundis apr\u00e8s cela. De m\u00eame, 24-heures : :00 commence avec le premier d\u00e9but d\u2019heure apr\u00e8s d\u00e9but (pas avec minuit), puis se r\u00e9p\u00e8te toutes les 24 heures. Pour commencer avec la minuit apr\u00e8s d\u00e9but , utilisez quotidien : 0:00 . Pour les unit\u00e9s d\u2019intervalle d\u2019un jour ou plus, si l\u2019heure de la journ\u00e9e n\u2019est pas sp\u00e9cifi\u00e9e, elle par d\u00e9faut \u00e0 minuit. Le fuseau horaire de d\u00e9but d\u00e9termine le fuseau horaire des temps g\u00e9n\u00e9r\u00e9s. >>> def show(dates): return [d.strftime(\"%Y-%m-%d %H:%M\") for d in dates] >>> start = datetime(2018, 9, 4, 14, 0); # 14h le mardi 4 septembre 2018. >>> show(SCHEDULE('annual: Jan-15, Apr-15, Jul-15, Oct-15', start=start, count=4)) ['2018-10-15 00:00', '2019-01-15 00:00', '2019-04-15 00:00', '2019-07-15 00:00'] >>> show(SCHEDULE('annual: 1/15, 4/15, 7/15', start=start, count=4)) ['2019-01-15 00:00', '2019-04-15 00:00', '2019-07-15 00:00', '2020-01-15 00:00'] >>> show(SCHEDULE('monthly: /1 14h, /15 17h', start=start, count=4)) ['2018-09-15 17:00', '2018-10-01 14:00', '2018-10-15 17:00', '2018-11-01 14:00'] >>> show(SCHEDULE('3-months: /10, +1m /20', start=start, count=4)) ['2018-09-10 00:00', '2018-10-20 00:00', '2018-12-10 00:00', '2019-01-20 00:00'] >>> show(SCHEDULE('weekly: Lu 9h, Ma 9h, Ve 14h', start=start, count=4)) ['2018-09-07 14:00', '2018-09-10 09:00', '2018-09-11 09:00', '2018-09-14 14:00'] >>> show(SCHEDULE('2-semaines: Lu, +1s Ma', start=start, count=4)) ['2018-09-11 00:00', '2018-09-17 00:00', '2018-09-25 00:00', '2018-10-01 00:00'] >>> show(SCHEDULE('quotidien: 07:30, 21:00', start=start, count=4)) ['2018-09-04 21:00', '2018-09-05 07:30', '2018-09-05 21:00', '2018-09-06 07:30'] >>> show(SCHEDULE('2-jours: 00h, 16h, +1j 08h', start=start, count=4)) ['2018-09-04 16:00', '2018-09-05 08:00', '2018-09-06 00:00', '2018-09-06 16:00'] >>> show(SCHEDULE('horaire: :15, :45', start=start, count=4)) ['2018-09-04 14:15', '2018-09-04 14:45', '2018-09-04 15:15', '2018-09-04 15:45'] >>> show(SCHEDULE('4-heures: :00, +1H :20, +2H :40', start=start, count=4)) ['2018-09-04 14:00', '2018-09-04 15:20', '2018-09-04 16:40', '2018-09-04 18:00'] Statistiques # AVEDEV (value1, value2) # Calcule la moyenne des magnitudes des \u00e9carts des donn\u00e9es par rapport \u00e0 la moyenne d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. AVERAGE (value, *more_values) # Renvoie la valeur moyenne num\u00e9rique dans un ensemble de donn\u00e9es, en ignorant les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les valeurs logiques et vides, et les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. >>> AVERAGE([2, -1.0, 11]) 4.0 >>> AVERAGE([2, -1, 11, \"Bonjour\"]) 4.0 >>> AVERAGE([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11]) 4.0 >>> AVERAGE(False, True) Traceback (most recent call last): ... ZeroDivisionError: float division by zero AVERAGEA (value, *more_values) # Renvoie la valeur moyenne num\u00e9rique dans un ensemble de donn\u00e9es, en comptant les valeurs non num\u00e9riques comme 0. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. >>> AVERAGEA([2, -1.0, 11]) 4.0 >>> AVERAGEA([2, -1, 11, \"Bonjour\"]) 3.0 >>> AVERAGEA([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 1.5 >>> AVERAGEA(False, True) 0.5 AVERAGEIF (criteria_range, criterion, average_range=None) # Renvoie la moyenne d\u2019une plage en fonction de crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. AVERAGEIFS (average_range, criteria_range1, criterion1, *args) # Renvoie la moyenne d\u2019une plage en fonction de plusieurs crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. AVERAGE_WEIGHTED (pairs) # \u00c9tant donn\u00e9 une liste de paires (valeur, poids), trouve la moyenne des valeurs pond\u00e9r\u00e9es par les poids correspondants. Ignore toutes les paires avec une valeur ou un poids non num\u00e9rique. Si vous avez deux listes, de valeurs et de poids, utilisez la fonction int\u00e9gr\u00e9e Python zip() pour cr\u00e9er une liste de paires. >>> AVERAGE_WEIGHTED(((95, .25), (90, .1), (\"X\", .5), (85, .15), (88, .2), (82, .3), (70, None))) 87.7 >>> AVERAGE_WEIGHTED(zip([95, 90, \"X\", 85, 88, 82, 70], [25, 10, 50, 15, 20, 30, None])) 87.7 >>> AVERAGE_WEIGHTED(zip([95, 90, False, 85, 88, 82, 70], [.25, .1, .5, .15, .2, .3, True])) 87.7 BINOMDIST (num_successes, num_trials, prob_success, cumulative) # Calcule la probabilit\u00e9 de tirer un certain nombre de succ\u00e8s (ou un nombre maximum de succ\u00e8s) dans un certain nombre d\u2019essais donn\u00e9 une population d\u2019une certaine taille contenant un certain nombre de succ\u00e8s, avec remplacement des tirages. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CONFIDENCE (alpha, standard_deviation, pop_size) # Calcule la largeur de la moiti\u00e9 de l\u2019intervalle de confiance pour une distribution normale. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CORREL (data_y, data_x) # Calcule r, le coefficient de corr\u00e9lation de produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. COUNT (value, *more_values) # Renvoie le nombre de valeurs num\u00e9riques et de dates/datetime dans un ensemble de donn\u00e9es, ignorant d\u2019autres types de valeurs. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et vides, et les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. >>> COUNT([2, -1.0, 11]) 3 >>> COUNT([2, -1, 11, \"Bonjour\"]) 3 >>> COUNT([DATE(2000, 1, 1), DATE(2000, 1, 2), DATE(2000, 1, 3), \"Bonjour\"]) 3 >>> COUNT([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 4 >>> COUNT(False, True) 0 COUNTA (value, *more_values) # Renvoie le nombre de toutes les valeurs dans un ensemble de donn\u00e9es, y compris les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. >>> COUNTA([2, -1.0, 11]) 3 >>> COUNTA([2, -1, 11, \"Bonjour\"]) 4 >>> COUNTA([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 9 >>> COUNTA(False, True) 2 COVAR (data_y, data_x) # Calcule la covariance d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CRITBINOM (num_trials, prob_success, target_prob) # Calcule la plus petite valeur pour laquelle la distribution binomiale cumulative est sup\u00e9rieure ou \u00e9gale \u00e0 un crit\u00e8re sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. DEVSQ (value1, value2) # Calcule la somme des carr\u00e9s des \u00e9carts bas\u00e9s sur un \u00e9chantillon. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. EXPONDIST (x, lambda_, cumulative) # Renvoie la valeur de la fonction de distribution exponentielle avec un lambda sp\u00e9cifi\u00e9 \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. FDIST (x, degrees_freedom1, degrees_freedom2) # Calcule la distribution de probabilit\u00e9 F \u00e0 droite (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. FISHER (value) # Renvoie la transformation de Fisher d\u2019une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. FISHERINV (value) # Renvoie la transformation inverse de Fisher d\u2019une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. FORECAST (x, data_y, data_x) # Calcule la valeur y attendue pour un x sp\u00e9cifi\u00e9 bas\u00e9 sur une r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. F_DIST (x, degrees_freedom1, degrees_freedom2, cumulative) # Calcule la distribution de probabilit\u00e9 F \u00e0 gauche (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. F_DIST_RT (x, degrees_freedom1, degrees_freedom2) # Calcule la distribution de probabilit\u00e9 F \u00e0 droite (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. GEOMEAN (value1, value2) # Calcule la moyenne g\u00e9om\u00e9trique d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. HARMEAN (value1, value2) # Calcule la moyenne harmonique d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. HYPGEOMDIST (num_successes, num_draws, successes_in_pop, pop_size) # Calcule la probabilit\u00e9 de tirer un certain nombre de succ\u00e8s dans un certain nombre d\u2019essais, \u00e9tant donn\u00e9 une population d\u2019une certaine taille contenant un certain nombre de succ\u00e8s, sans remplacement des tirages. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. INTERCEPT (data_y, data_x) # Calcule la valeur y \u00e0 laquelle la ligne r\u00e9sultant de la r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es va intersecter l\u2019axe y (x=0). Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. KURT (value1, value2) # Calcule la kurtose d\u2019un ensemble de donn\u00e9es, qui d\u00e9crit la forme, et en particulier le \u201cpic\u201d de cet ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. LARGE (data, n) # Renvoie le n-i\u00e8me plus grand \u00e9l\u00e9ment d\u2019un ensemble de donn\u00e9es, o\u00f9 n est d\u00e9fini par l\u2019utilisateur. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. LOGINV (x, mean, standard_deviation) # Renvoie la valeur de la distribution cumulative log-normale inverse avec une moyenne et un \u00e9cart type donn\u00e9s \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. LOGNORMDIST (x, mean, standard_deviation) # Renvoie la valeur de la distribution cumulative log-normale avec une moyenne et un \u00e9cart type donn\u00e9s \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. MAX (value, *more_values) # Renvoie la valeur maximale d\u2019un ensemble de donn\u00e9es, en ignorant les valeurs autres que les nombres et les dates/datetime. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Renvoie 0 si les arguments ne contiennent aucun nombre ou date. >>> MAX([2, -1.5, 11.5]) 11.5 >>> MAX([2, -1.5, \"Hello\"], True, [False, \"123\", \"\", 11.5]) 11.5 >>> MAX(True, -123) -123 >>> MAX(\"123\", -123) -123 >>> MAX(\"Hello\", \"123\", True, False) 0 >>> MAX(DATE(2015, 1, 1), DATE(2015, 1, 2)) datetime.date(2015, 1, 2) >>> MAX(DATE(2015, 1, 1), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.datetime(2015, 1, 1, 12, 34, 56) >>> MAX(DATE(2015, 1, 2), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.date(2015, 1, 2) MAXA (value, *more_values) # Renvoie la valeur num\u00e9rique maximale d\u2019un ensemble de donn\u00e9es. Chaque argument peut \u00eatre une valeur d\u2019un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. Renvoie 0 si les arguments ne contiennent aucun nombre. >>> MAXA([2, -1.5, 11.5]) 11.5 >>> MAXA([2, -1.5, \"Hello\", DATE(2015, 1, 1)], True, [False, \"123\", \"\", 11.5]) 11.5 >>> MAXA(True, -123) 1 >>> MAXA(\"123\", -123) 0 >>> MAXA(\"Hello\", \"123\", DATE(2015, 1, 1)) 0 MEDIAN (value, *more_values) # Renvoie la valeur m\u00e9diane d\u2019un ensemble de donn\u00e9es num\u00e9riques, en ignorant les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Produit une erreur si les arguments ne contiennent aucun nombre. La m\u00e9diane est le nombre du milieu lorsque toutes les valeurs sont tri\u00e9es. Ainsi, la moiti\u00e9 des valeurs dans l\u2019ensemble de donn\u00e9es sont inf\u00e9rieures \u00e0 la m\u00e9diane, et l\u2019autre moiti\u00e9 est sup\u00e9rieure. S\u2019il y a un nombre pair de valeurs dans l\u2019ensemble de donn\u00e9es, renvoie la moyenne des deux nombres du milieu. >>> MEDIAN(1, 2, 3, 4, 5) 3 >>> MEDIAN(3, 5, 1, 4, 2) 3 >>> MEDIAN(range(10)) 4.5 >>> MEDIAN(\"Hello\", \"123\", DATE(2015, 1, 1), 12.3) 12.3 >>> MEDIAN(\"Hello\", \"123\", DATE(2015, 1, 1)) Traceback (most recent call last): ... ValueError: MEDIAN requires at least one number MIN (value, *more_values) # Renvoie la valeur minimale d\u2019un ensemble de donn\u00e9es, en ignorant les valeurs autres que les nombres et les dates/datetimes. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Renvoie 0 si les arguments ne contiennent aucun nombre ou date. >>> MIN([2, -1.5, 11.5]) -1.5 >>> MIN([2, -1.5, \"Hello\"], True, [False, \"123\", \"\", 11.5]) -1.5 >>> MIN(True, 123) 123 >>> MIN(\"-123\", 123) 123 >>> MIN(\"Hello\", \"123\", True, False) 0 >>> MIN(DATE(2015, 1, 1), DATE(2015, 1, 2)) datetime.date(2015, 1, 1) >>> MIN(DATE(2015, 1, 1), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.date(2015, 1, 1) >>> MIN(DATE(2015, 1, 2), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.datetime(2015, 1, 1, 12, 34, 56) MINA (value, *more_values) # Renvoie la valeur num\u00e9rique minimale d\u2019un ensemble de donn\u00e9es. Chaque argument peut \u00eatre une valeur d\u2019un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. Renvoie 0 si les arguments ne contiennent aucun nombre. >>> MINA([2, -1.5, 11.5]) -1.5 >>> MINA([2, -1.5, \"Hello\", DATE(2015, 1, 1)], True, [False, \"123\", \"\", 11.5]) -1.5 >>> MINA(True, 123) 1 >>> MINA(\"-123\", 123) 0 >>> MINA(\"Hello\", \"123\", DATE(2015, 1, 1)) 0 MODE (value1, value2) # Renvoie la valeur la plus courante dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NEGBINOMDIST (num_failures, num_successes, prob_success) # Calcule la probabilit\u00e9 de tirer un certain nombre d\u2019\u00e9checs avant un certain nombre de succ\u00e8s, \u00e9tant donn\u00e9 une probabilit\u00e9 de succ\u00e8s dans des essais ind\u00e9pendants. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NORMDIST (x, mean, standard_deviation, cumulative) # Renvoie la valeur de la fonction de distribution normale (ou fonction de distribution cumulative normale) pour une valeur sp\u00e9cifi\u00e9e, une moyenne et un \u00e9cart type. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NORMINV (x, mean, standard_deviation) # Renvoie la valeur de la fonction de distribution normale inverse pour une valeur sp\u00e9cifi\u00e9e, une moyenne et un \u00e9cart type. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NORMSDIST (x) # Renvoie la valeur de la fonction de distribution cumulative normale standard pour une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NORMSINV (x) # Renvoie la valeur de la fonction de distribution normale standard inverse pour une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PEARSON (data_y, data_x) # Calcule r, le coefficient de corr\u00e9lation produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERCENTILE (data, percentile) # Renvoie la valeur \u00e0 un certain percentile d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERCENTRANK (data, value, significant_digits=None) # Renvoie le rang en pourcentage (percentile) d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERCENTRANK_EXC (data, value, significant_digits=None) # Renvoie le rang en pourcentage (percentile) de 0 \u00e0 1 exclusif d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERCENTRANK_INC (data, value, significant_digits=None) # Renvoie le rang en pourcentage (percentile) de 0 \u00e0 1 inclusif d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERMUT (n, k) # Renvoie le nombre de fa\u00e7ons de choisir un certain nombre d\u2019objets \u00e0 partir d\u2019un ensemble d\u2019une taille donn\u00e9e d\u2019objets, en tenant compte de l\u2019ordre. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. POISSON (x, mean, cumulative) # Renvoie la valeur de la fonction de distribution de Poisson (ou fonction de distribution cumulative de Poisson) pour une valeur et une moyenne sp\u00e9cifi\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PROB (data, probabilities, low_limit, high_limit=None) # \u00c9tant donn\u00e9 un ensemble de valeurs et des probabilit\u00e9s correspondantes, calcule la probabilit\u00e9 qu\u2019une valeur choisie au hasard tombe entre deux limites. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. QUARTILE (data, quartile_number) # Renvoie une valeur la plus proche d\u2019un certain quartile d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. RANK_AVG (value, data, is_ascending=None) # Renvoie le rang d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. S\u2019il y a plus d\u2019une entr\u00e9e de la m\u00eame valeur dans l\u2019ensemble de donn\u00e9es, le rang moyen des entr\u00e9es sera renvoy\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. RANK_EQ (value, data, is_ascending=None) # Renvoie le rang d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. S\u2019il y a plus d\u2019une entr\u00e9e de la m\u00eame valeur dans l\u2019ensemble de donn\u00e9es, le meilleur rang des entr\u00e9es sera renvoy\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. RSQ (data_y, data_x) # Calcule le carr\u00e9 de r, le coefficient de corr\u00e9lation produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SKEW (value1, value2) # Calcule l\u2019asym\u00e9trie d\u2019un ensemble de donn\u00e9es, qui d\u00e9crit la sym\u00e9trie de cet ensemble de donn\u00e9es par rapport \u00e0 la moyenne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SLOPE (data_y, data_x) # Calcule la pente de la ligne r\u00e9sultant de la r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SMALL (data, n) # Renvoie le n-i\u00e8me plus petit \u00e9l\u00e9ment d\u2019un ensemble de donn\u00e9es, o\u00f9 n est d\u00e9fini par l\u2019utilisateur. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. STANDARDIZE (value, mean, standard_deviation) # Calcule l\u2019\u00e9quivalent normalis\u00e9 d\u2019une variable al\u00e9atoire donn\u00e9e la moyenne et l\u2019\u00e9cart type de la distribution. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. STDEV (value, *more_values) # Calcule l\u2019\u00e9cart type bas\u00e9 sur un \u00e9chantillon, en ignorant les valeurs non num\u00e9riques. >>> STDEV([2, 5, 8, 13, 10]) 4.277849927241488 >>> STDEV([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.277849927241488 >>> STDEV([2, 5, 8, 13, 10], 3, 12, 15) 4.810702354423639 >>> STDEV([2, 5, 8, 13, 10], [3, 12, 15]) 4.810702354423639 >>> STDEV([5]) Traceback (most recent call last): ... ZeroDivisionError: float division by zero STDEVA (value, *more_values) # Calcule l\u2019\u00e9cart type bas\u00e9 sur un \u00e9chantillon, en consid\u00e9rant le texte comme la valeur 0 . >>> STDEVA([2, 5, 8, 13, 10]) 4.277849927241488 >>> STDEVA([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.969550137731641 >>> STDEVA([2, 5, 8, 13, 10], 1, 0, 0) 4.969550137731641 >>> STDEVA([2, 5, 8, 13, 10], [1, 0, 0]) 4.969550137731641 >>> STDEVA([5]) Traceback (most recent call last): ... ZeroDivisionError: float division by zero STDEVP (value, *more_values) # Calcule l\u2019\u00e9cart type bas\u00e9 sur une population enti\u00e8re, en ignorant les valeurs non num\u00e9riques. >>> STDEVP([2, 5, 8, 13, 10]) 3.8262252939417984 >>> STDEVP([2, 5, 8, 13, 10, True, False, \"Test\"]) 3.8262252939417984 >>> STDEVP([2, 5, 8, 13, 10], 3, 12, 15) 4.5 >>> STDEVP([2, 5, 8, 13, 10], [3, 12, 15]) 4.5 >>> STDEVP([5]) 0.0 STDEVPA (value, *more_values) # Calcule l\u2019\u00e9cart type bas\u00e9 sur une population enti\u00e8re, en consid\u00e9rant le texte comme la valeur 0 . >>> STDEVPA([2, 5, 8, 13, 10]) 3.8262252939417984 >>> STDEVPA([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.648588495446763 >>> STDEVPA([2, 5, 8, 13, 10], 1, 0, 0) 4.648588495446763 >>> STDEVPA([2, 5, 8, 13, 10], [1, 0, 0]) 4.648588495446763 >>> STDEVPA([5]) 0.0 STEYX (data_y, data_x) # Calcule l\u2019erreur standard de la valeur y pr\u00e9dite pour chaque x dans la r\u00e9gression d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TDIST (x, degrees_freedom, tails) # Calcule la probabilit\u00e9 pour la distribution t de Student avec une entr\u00e9e donn\u00e9e (x). Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TINV (probability, degrees_freedom) # Calcule l\u2019inverse de la fonction TDIST \u00e0 deux queues. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TRIMMEAN (data, exclude_proportion) # Calcule la moyenne d\u2019un ensemble de donn\u00e9es en excluant une certaine proportion de donn\u00e9es des extr\u00e9mit\u00e9s haute et basse de l\u2019ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TTEST (range1, range2, tails, type) # Renvoie la probabilit\u00e9 associ\u00e9e au test t. D\u00e9termine si deux \u00e9chantillons sont susceptibles de provenir des m\u00eames deux populations sous-jacentes ayant la m\u00eame moyenne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. T_INV (probability, degrees_freedom) # Calcule l\u2019inverse n\u00e9gatif de la fonction TDIST \u00e0 une queue. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. T_INV_2T (probability, degrees_freedom) # Calcule l\u2019inverse de la fonction TDIST \u00e0 deux queues. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. VAR (value1, value2) # Calcule la variance bas\u00e9e sur un \u00e9chantillon. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. VARA (value1, value2) # Calcule une estimation de la variance bas\u00e9e sur un \u00e9chantillon, en consid\u00e9rant le texte comme la valeur 0 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. VARP (value1, value2) # Calcule la variance bas\u00e9e sur une population enti\u00e8re. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. VARPA (value1, value2) # Calcule la variance bas\u00e9e sur une population enti\u00e8re, en consid\u00e9rant le texte comme la valeur 0 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. WEIBULL (x, shape, scale, cumulative) # Renvoie la valeur de la fonction de distribution de Weibull (ou fonction de distribution cumulative de Weibull) pour une forme et une \u00e9chelle sp\u00e9cifi\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ZTEST (data, value, standard_deviation) # Renvoie la valeur P \u00e0 deux queues d\u2019un test Z avec distribution standard. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. Texte # CHAR (table_number) # Convertit un nombre en un caract\u00e8re selon la table Unicode actuelle. Identique \u00e0 unichr(number) . >>> CHAR(65) u'A' >>> CHAR(33) u'!' CLEAN (text) # Renvoie le texte avec les caract\u00e8res non imprimables supprim\u00e9s. Cela supprime \u00e0 la fois les caract\u00e8res avec des valeurs de 0 \u00e0 31, et d\u2019autres caract\u00e8res Unicode dans la cat\u00e9gorie \u201ccaract\u00e8res de contr\u00f4le\u201d. >>> CLEAN(CHAR(9) + \"Rapport mensuel\" + CHAR(10)) u'Rapport mensuel' CODE (string) # Renvoie la valeur de la carte Unicode num\u00e9rique du premier caract\u00e8re de la cha\u00eene fournie. Identique \u00e0 ord(string[0]) . >>> CODE(\"A\") 65 >>> CODE(\"!\") 33 >>> CODE(\"!A\") 33 CONCAT (string, *more_strings) # Joint ensemble de cha\u00eenes de texte en une seule cha\u00eene. \u00c9galement disponible sous le nom CONCATENATE . Semblable \u00e0 l\u2019expression Python \"\".join(array_of_strings) . >>> CONCAT(\"Population de ruisseau pour \", \"truite\", \" \", \"esp\u00e8ces\", \" est \", 32, \"/mile.\") u'Population de ruisseau pour truite esp\u00e8ces est 32/mile.' >>> CONCAT(\"Dans \", 4, \" jours, c'est \", datetime.date(2016,1,1)) u'Dans 4 jours, c'est 2016-01-01' >>> CONCAT(\"abc\") u'abc' >>> CONCAT(0, \"abc\") u'0abc' >>> assert CONCAT(2, u\" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' CONCATENATE (string, *more_strings) # Joint ensemble de cha\u00eenes de texte en une seule cha\u00eene. \u00c9galement disponible sous le nom CONCAT . Semblable \u00e0 l\u2019expression Python \"\".join(array_of_strings) . >>> CONCATENATE(\"Population de ruisseau pour \", \"truite\", \" \", \"esp\u00e8ces\", \" est \", 32, \"/mile.\") u'Population de ruisseau pour truite esp\u00e8ces est 32/mile.' >>> CONCATENATE(\"Dans \", 4, \" jours, c'est \", datetime.date(2016,1,1)) u'Dans 4 jours, c'est 2016-01-01' >>> CONCATENATE(\"abc\") u'abc' >>> CONCATENATE(0, \"abc\") u'0abc' >>> assert CONCATENATE(2, u\" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' >>> assert CONCATENATE(2, \" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' >>> assert CONCATENATE(2, \" cr\u00e8me \", \"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' DOLLAR (number, decimals=2) # Formate un nombre en un montant en dollars format\u00e9, avec des d\u00e9cimales arrondies \u00e0 la place sp\u00e9cifi\u00e9e (. Si la valeur des d\u00e9cimales est omise, elle est par d\u00e9faut \u00e0 2. >>> DOLLAR(1234.567) '$1,234.57' >>> DOLLAR(1234.567, -2) '$1,200' >>> DOLLAR(-1234.567, -2) '($1,200)' >>> DOLLAR(-0.123, 4) '($0.1230)' >>> DOLLAR(99.888) '$99.89' >>> DOLLAR(0) '$0.00' >>> DOLLAR(10, 0) '$10' EXACT (string1, string2) # Teste si deux cha\u00eenes sont identiques. Identique \u00e0 string2 == string2 . >>> EXACT(\"mot\", \"mot\") True >>> EXACT(\"Mot\", \"mot\") False >>> EXACT(\"m ot\", \"mot\") False FIND (find_text, within_text, start_num=1) # Renvoie la position \u00e0 laquelle une cha\u00eene est d\u2019abord trouv\u00e9e dans le texte. La recherche est sensible \u00e0 la casse. La position renvoy\u00e9e est 1 si within_text commence par find_text. start_num sp\u00e9cifie le caract\u00e8re \u00e0 partir duquel commencer la recherche, par d\u00e9faut \u00e0 1 (le premier caract\u00e8re de within_text). Si find_text n\u2019est pas trouv\u00e9, ou si start_num est invalide, l\u00e8ve une ValueError. >>> FIND(\"M\", \"Miriam McGovern\") 1 >>> FIND(\"m\", \"Miriam McGovern\") 6 >>> FIND(\"M\", \"Miriam McGovern\", 3) 8 >>> FIND(\" #\", \"Hello world # Test\") 12 >>> FIND(\"gle\", \"Google\", 1) 4 >>> FIND(\"GLE\", \"Google\", 1) Traceback (most recent call last): ... ValueError: substring not found >>> FIND(\"page\", \"homepage\") 5 >>> FIND(\"page\", \"homepage\", 6) Traceback (most recent call last): ... ValueError: substring not found FIXED (number, decimals=2, no_commas=False) # Formate un nombre avec un nombre fixe de d\u00e9cimales (2 par d\u00e9faut), et des virgules. Si no_commas est True, alors omet les virgules. >>> FIXED(1234.567, 1) '1,234.6' >>> FIXED(1234.567, -1) '1,230' >>> FIXED(-1234.567, -1, True) '-1230' >>> FIXED(44.332) '44.33' >>> FIXED(3521.478, 2, False) '3,521.48' >>> FIXED(-3521.478, 1, True) '-3521.5' >>> FIXED(3521.478, 0, True) '3521' >>> FIXED(3521.478, -2, True) '3500' LEFT (string, num_chars=1) # Renvoie une sous-cha\u00eene de longueur num_chars \u00e0 partir du d\u00e9but de la cha\u00eene donn\u00e9e. Si num_chars est omise, elle est suppos\u00e9e \u00eatre 1. Identique \u00e0 string[:num_chars] . >>> LEFT(\"Prix de vente\", 4) 'Sale' >>> LEFT('Su\u00e8de') 'S' >>> LEFT('Texte', -1) Traceback (most recent call last): ... ValueError: num_chars invalid LEN (text) # Renvoie le nombre de caract\u00e8res dans une cha\u00eene de texte, ou le nombre d\u2019\u00e9l\u00e9ments dans une liste. Identique \u00e0 len en python. Voir Ensemble d\u2019enregistrements pour un exemple d\u2019utilisation de len sur une liste d\u2019enregistrements. >>> LEN(\"Phoenix, AZ\") 11 >>> LEN(\"\") 0 >>> LEN(\" Un \") 11 LOWER (text) # Convertit une cha\u00eene sp\u00e9cifi\u00e9e en minuscules. Identique \u00e0 text.lower() . >>> LOWER(\"E. E. Cummings\") 'e. e. cummings' >>> LOWER(\"Apt. 2B\") 'apt. 2b' MID (text, start_num, num_chars) # Renvoie un segment d\u2019une cha\u00eene, commen\u00e7ant \u00e0 start_num. Le premier caract\u00e8re dans le texte a start_num 1. >>> MID(\"Flux de fluide\", 1, 5) 'Fluid' >>> MID(\"Flux de fluide\", 7, 20) 'Flow' >>> MID(\"Flux de fluide\", 20, 5) '' >>> MID(\"Flux de fluide\", 0, 5) Traceback (most recent call last): ... ValueError: start_num invalid PHONE_FORMAT (value, country=None, format=None) # Formate un num\u00e9ro de t\u00e9l\u00e9phone. Sans arguments optionnels, le num\u00e9ro doit commencer par \u201c+\u201d et le pr\u00e9fixe d\u2019appel international, et sera format\u00e9 comme un num\u00e9ro international, par exemple +12345678901 devient +1 234-567-8901 . L\u2019argument country permet de sp\u00e9cifier un code de pays \u00e0 2 lettres (par exemple \u201cUS\u201d ou \u201cGB\u201d) pour interpr\u00e9ter les num\u00e9ros de t\u00e9l\u00e9phone qui ne commencent pas par \u201c+\u201d. Par exemple, PHONE_FORMAT('2025555555', 'US') serait consid\u00e9r\u00e9 comme un num\u00e9ro am\u00e9ricain et format\u00e9 comme \u201c(202) 555-5555\u201d. Les num\u00e9ros de t\u00e9l\u00e9phone qui commencent par \u201c+\u201d ignorent country . Par exemple, PHONE_FORMAT('+33555555555', 'US') est un num\u00e9ro fran\u00e7ais car \u2018+33\u2019 est le pr\u00e9fixe international pour la France. L\u2019argument format sp\u00e9cifie le format de sortie, selon ce tableau : \"#\" ou \"NATL\" (par d\u00e9faut) - utilise le format national, sans le pr\u00e9fixe d\u2019appel international, lorsque c\u2019est possible. Par exemple (234) 567-8901 pour \u201cUS\u201d, ou 02 34 56 78 90 pour \u201cFR\u201d. Si country est omis, ou le num\u00e9ro ne correspond pas au pays donn\u00e9, le format international est utilis\u00e9 \u00e0 la place. \"+\" ou \"INTL\" - format international, par exemple +1 234-567-8901 ou +33 2 34 56 78 90 . \"*\" ou \"E164\" - format E164, comme international mais sans s\u00e9parateurs, par exemple +12345678901 . \"tel\" ou \"RFC3966\" - format adapt\u00e9 \u00e0 utiliser comme un hyperlien , par exemple \u2018tel:+1-234-567-8901\u2019. Lorsque vous sp\u00e9cifiez l\u2019argument format , vous pouvez omettre l\u2019argument country . C\u2019est-\u00e0-dire PHONE_FORMAT(value, \"tel\") est \u00e9quivalent \u00e0 PHONE_FORMAT(value, None, \"tel\") . Pour plus de d\u00e9tails, voir la biblioth\u00e8que Python phonenumbers qui sous-tend cette fonction. >>> PHONE_FORMAT(\"+12345678901\") u'+1 234-567-8901' >>> PHONE_FORMAT(\"2345678901\", \"US\") u'(234) 567-8901' >>> PHONE_FORMAT(\"2345678901\", \"GB\") u'023 4567 8901' >>> PHONE_FORMAT(\"2345678901\", \"GB\", \"+\") u'+44 23 4567 8901' >>> PHONE_FORMAT(\"+442345678901\", \"GB\") u'023 4567 8901' >>> PHONE_FORMAT(\"+12345678901\", \"GB\") u'+1 234-567-8901' >>> PHONE_FORMAT(\"(234) 567-8901\") Traceback (most recent call last): ... NumberParseException: (0) Missing or invalid default region. >>> PHONE_FORMAT(\"(234)567 89-01\", \"US\", \"tel\") u'tel:+1-234-567-8901' >>> PHONE_FORMAT(\"2/3456/7890\", \"FR\", '#') u'02 34 56 78 90' >>> PHONE_FORMAT(\"+33234567890\", '#') u'+33 2 34 56 78 90' >>> PHONE_FORMAT(\"+33234567890\", 'tel') u'tel:+33-2-34-56-78-90' >>> PHONE_FORMAT(\"tel:+1-234-567-8901\", country=\"US\", format=\"*\") u'+12345678901' >>> PHONE_FORMAT(33234567890) Traceback (most recent call last): ... TypeError: Le num\u00e9ro de t\u00e9l\u00e9phone doit \u00eatre une valeur textuelle. Si vous formatez une valeur d'une colonne Num\u00e9rique, convertissez d'abord cette colonne en Texte. PROPER (text) # Met en majuscule chaque mot dans une cha\u00eene sp\u00e9cifi\u00e9e. Il convertit la premi\u00e8re lettre de chaque mot en majuscule, et toutes les autres lettres en minuscules. Identique \u00e0 text.title() . >>> PROPER('ceci est un TITRE') 'Ceci Est Un Titre' >>> PROPER('2-way street') '2-Way Street' >>> PROPER('76BudGet') '76Budget' REGEXEXTRACT (text, regular_expression) # Extrait la premi\u00e8re partie du texte qui correspond \u00e0 l\u2019expression r\u00e9guli\u00e8re. >>> REGEXEXTRACT(\"Google Doc 101\", \"[0-9]+\") '101' >>> REGEXEXTRACT(\"Le prix aujourd'hui est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\") '826.25' S\u2019il y a une expression entre parenth\u00e8ses, elle est renvoy\u00e9e au lieu de la correspondance enti\u00e8re. >>> REGEXEXTRACT(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\") 'Content' >>> REGEXEXTRACT(\"Foo\", \"Bar\") Traceback (most recent call last): ... ValueError: REGEXEXTRACT text does not match REGEXMATCH (text, regular_expression) # Renvoie si un morceau de texte correspond \u00e0 une expression r\u00e9guli\u00e8re. >>> REGEXMATCH(\"Google Doc 101\", \"[0-9]+\") True >>> REGEXMATCH(\"Google Doc\", \"[0-9]+\") False >>> REGEXMATCH(\"Le prix aujourd'hui est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\") True >>> REGEXMATCH(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\") True >>> REGEXMATCH(\"Foo\", \"Bar\") False REGEXREPLACE (text, regular_expression, replacement) # Remplace toutes les parties du texte correspondant \u00e0 l\u2019expression r\u00e9guli\u00e8re donn\u00e9e par le texte de remplacement. >>> REGEXREPLACE(\"Google Doc 101\", \"[0-9]+\", \"777\") 'Google Doc 777' >>> REGEXREPLACE(\"Google Doc\", \"[0-9]+\", \"777\") 'Google Doc' >>> REGEXREPLACE(\"Le prix est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\", \"315.75\") 'Le prix est de $315.75' >>> REGEXREPLACE(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\", \"Mot\") 'Mot entre crochets' >>> REGEXREPLACE(\"Foo\", \"Bar\", \"Baz\") 'Foo' REPLACE (text, position, length, new_text) # Remplace une partie d\u2019une cha\u00eene de texte par une cha\u00eene de texte diff\u00e9rente. La position est compt\u00e9e \u00e0 partir de 1. >>> REPLACE(\"abcdefghijk\", 6, 5, \"*\") 'abcde*k' >>> REPLACE(\"2009\", 3, 2, \"10\") '2010' >>> REPLACE('123456', 1, 3, '@') '@456' >>> REPLACE('foo', 1, 0, 'bar') 'barfoo' >>> REPLACE('foo', 0, 1, 'bar') Traceback (most recent call last): ... ValueError: position invalid REPT (text, number_times) # Renvoie le texte sp\u00e9cifi\u00e9 r\u00e9p\u00e9t\u00e9 un certain nombre de fois. Identique \u00e0 text * number_times . Le r\u00e9sultat de la fonction REPT ne peut pas d\u00e9passer 32767 caract\u00e8res, sinon cela l\u00e8ve une ValueError. >>> REPT(\"*-\", 3) '*-*-*-' >>> REPT('-', 10) '----------' >>> REPT('-', 0) '' >>> len(REPT('---', 10000)) 30000 >>> REPT('---', 11000) Traceback (most recent call last): ... ValueError: number_times invalid >>> REPT('-', -1) Traceback (most recent call last): ... ValueError: number_times invalid RIGHT (string, num_chars=1) # Renvoie une sous-cha\u00eene de longueur num_chars \u00e0 partir de la fin d\u2019une cha\u00eene sp\u00e9cifi\u00e9e. Si num_chars est omise, elle est suppos\u00e9e \u00eatre 1. Identique \u00e0 string[-num_chars:] . >>> RIGHT(\"Prix de vente\", 5) 'Price' >>> RIGHT('Num\u00e9ro de stock') 'r' >>> RIGHT('Texte', 100) 'Texte' >>> RIGHT('Texte', -1) Traceback (most recent call last): ... ValueError: num_chars invalid SEARCH (find_text, within_text, start_num=1) # Renvoie la position \u00e0 laquelle une cha\u00eene est d\u2019abord trouv\u00e9e dans le texte, en ignorant la casse. La recherche est sensible \u00e0 la casse. La position renvoy\u00e9e est 1 si within_text commence par find_text. start_num sp\u00e9cifie le caract\u00e8re \u00e0 partir duquel commencer la recherche, par d\u00e9faut \u00e0 1 (le premier caract\u00e8re de within_text). Si find_text n\u2019est pas trouv\u00e9, ou si start_num est invalide, l\u00e8ve une ValueError. >>> SEARCH(\"e\", \"D\u00e9clarations\", 6) 7 >>> SEARCH(\"marge\", \"Marge b\u00e9n\u00e9ficiaire\") 8 >>> SEARCH(\" \", \"Marge b\u00e9n\u00e9ficiaire\") 7 >>> SEARCH('\"', 'Le \"patron\" est ici.') 5 >>> SEARCH(\"gle\", \"Google\") 4 >>> SEARCH(\"GLE\", \"Google\") 4 SUBSTITUTE (text, old_text, new_text, instance_num=None) # Remplace le texte existant par du nouveau texte dans une cha\u00eene. Il est utile lorsque vous connaissez le sous-texte \u00e0 remplacer. Utilisez REPLACE lorsque vous connaissez la position du texte \u00e0 remplacer. Si instance_num est donn\u00e9, il sp\u00e9cifie quelle occurrence de old_text remplacer. Si omis, toutes les occurrences sont remplac\u00e9es. Identique \u00e0 text.replace(old_text, new_text) lorsque instance_num est omis. >>> SUBSTITUTE(\"Donn\u00e9es de vente\", \"Ventes\", \"Co\u00fbt\") u'Donn\u00e9es de co\u00fbt' >>> SUBSTITUTE(\"Trimestre 1, 2008\", \"1\", \"2\", 1) u'Trimestre 2, 2008' >>> SUBSTITUTE(\"Trimestre 1, 2011\", \"1\", \"2\", 3) u'Trimestre 1, 2012' T (value) # Renvoie la valeur si la valeur est du texte, ou la cha\u00eene vide lorsque la valeur n\u2019est pas du texte. >>> T('Texte') u'Texte' >>> T(826) u'' >>> T('826') u'826' >>> T(False) u'' >>> T('100 points') u'100 points' >>> T(AltText('Texte')) u'Texte' >>> T(float('nan')) u'' TASTEME (food) # Pour un morceau de texte donn\u00e9, d\u00e9cide s\u2019il est savoureux ou non. Ce n\u2019est pas s\u00e9rieux. Cela est apparu comme un \u0153uf de P\u00e2ques, et est conserv\u00e9 en tant que tel. C\u2019est en fait un puzzle pour comprendre la r\u00e8gle simple sous-jacente. Cela a \u00e9t\u00e9 \u00e9tonnamment rarement r\u00e9solu, m\u00eame apr\u00e8s avoir lu le code source, qui est librement disponible et peut divertir les fans de Python. >>> TASTEME('Banane') True >>> TASTEME('Ail') False TEXT (number, format_type) # Convertit un nombre en texte selon un format sp\u00e9cifi\u00e9. Il n\u2019est pas encore impl\u00e9ment\u00e9 dans Grist. Vous pouvez utiliser les fonctions Python similaires str() pour convertir des nombres en cha\u00eenes, et optionnellement format() pour sp\u00e9cifier le format du nombre. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TRIM (text) # Supprime tous les espaces du texte sauf pour les espaces simples entre les mots. Notez que TRIM ne supprime pas d\u2019autres espaces blancs tels que les caract\u00e8res de tabulation ou de nouvelle ligne. >>> TRIM(\" Premier trimestre\\n B\u00e9n\u00e9fices \") 'Premier trimestre\\n B\u00e9n\u00e9fices' >>> TRIM(\"\") '' UPPER (text) # Convertit une cha\u00eene sp\u00e9cifi\u00e9e en majuscules. Identique \u00e0 text.upper() . >>> UPPER(\"e. e. cummings\") 'E. E. CUMMINGS' >>> UPPER(\"Apt. 2B\") 'APT. 2B' VALUE (text) # Convertit une cha\u00eene dans des formats de date, d\u2019heure ou de nombre accept\u00e9s en un nombre ou une date. >>> VALUE(\"$1,000\") 1000 >>> assert VALUE(\"16:48:00\") - VALUE(\"12:00:00\") == datetime.timedelta(0, 17280) >>> VALUE(\"01/01/2012\") datetime.datetime(2012, 1, 1, 0, 0) >>> VALUE(\"\") 0 >>> VALUE(0) 0 >>> VALUE(\"826\") 826 >>> VALUE(\"-826.123123123\") -826.123123123 >>> VALUE(float('nan')) nan >>> VALUE(\"Invalid\") Traceback (most recent call last): ... ValueError: le texte ne peut pas \u00eatre analys\u00e9 en un nombre >>> VALUE(\"13/13/13\") Traceback (most recent call last): ... ValueError: le texte ne peut pas \u00eatre analys\u00e9 en un nombre","title":"Function reference"},{"location":"functions/#reference-des-fonctions","text":"Les formules Grist prennent en charge la plupart des fonctions Excel, ainsi que le langage de programmation Python. Le tableau ci-dessous r\u00e9pertorie les fonctions sp\u00e9cifiques \u00e0 Grist, ainsi que l\u2019ensemble des fonctions similaires \u00e0 Excel incluses. De plus, l\u2019ensemble de la biblioth\u00e8que standard Python est disponible. Pour en savoir plus sur l\u2019utilisation des formules dans Grist, consultez Introduction aux Formules . Grist utilise Python (version 3.11) pour les formules. Vous pouvez utiliser presque toutes les fonctionnalit\u00e9s de Python (voir documentation Python ). Voici quelques notes utiles : Python est sensible \u00e0 la casse, y compris pour les noms de table et de colonne Grist. Les fonctions similaires \u00e0 Excel sont toujours en majuscules. Par exemple, if est un mot-cl\u00e9 Python, tandis que IF est une fonction similaire \u00e0 Excel. Comparez pour l\u2019\u00e9galit\u00e9 en utilisant == , \u00e0 la place du = unique d\u2019Excel (qui en Python signifie l\u2019assignation). \u201cDiff\u00e9rent\u201d utilise != \u00e0 la place de <> d\u2019Excel. Vous pouvez \u00e9crire du Python multi-lignes dans les formules (utilisez Shift + Enter pour ajouter des lignes), y compris des d\u00e9clarations, des variables, des imports, etc. Le code Grist s\u2019ex\u00e9cute dans un sandbox s\u00e9curis\u00e9, sans acc\u00e8s \u00e0 quoi que ce soit en dehors de votre document. Category Functions Grist Record ou rec , $Field ou rec.Field , $group ou rec.group , RecordSet , find.* , UserTable , all , lookupOne , lookupRecords Cumulatif NEXT , PREVIOUS , RANK Date DATE , DATEADD , DATEDIF , DATEVALUE , DATE_TO_XL , DAY , DAYS , DTIME , EDATE , EOMONTH , HOUR , ISOWEEKNUM , MINUTE , MONTH , MOONPHASE , NOW , SECOND , TODAY , WEEKDAY , WEEKNUM , XL_TO_DATE , YEAR , YEARFRAC Info CELL , ISBLANK , ISEMAIL , ISERR , ISERROR , ISLOGICAL , ISNA , ISNONTEXT , ISNUMBER , ISREF , ISREFLIST , ISTEXT , ISURL , N , NA , PEEK , RECORD , REQUEST , TYPE Logique AND , FALSE , IF , IFERROR , NOT , OR , TRUE Lookup lookupOne , lookupRecords , ADDRESS , CHOOSE , COLUMN , COLUMNS , CONTAINS , GETPIVOTDATA , HLOOKUP , HYPERLINK , INDEX , INDIRECT , LOOKUP , MATCH , OFFSET , ROW , ROWS , SELF_HYPERLINK , VLOOKUP Maths ABS , ACOS , ACOSH , ARABIC , ASIN , ASINH , ATAN , ATAN2 , ATANH , CEILING , COMBIN , COS , COSH , DEGREES , EVEN , EXP , FACT , FACTDOUBLE , FLOOR , GCD , INT , LCM , LN , LOG , LOG10 , MOD , MROUND , MULTINOMIAL , NUM , ODD , PI , POWER , PRODUCT , QUOTIENT , RADIANS , RAND , RANDBETWEEN , ROMAN , ROUND , ROUNDDOWN , ROUNDUP , SERIESSUM , SIGN , SIN , SINH , SQRT , SQRTPI , SUBTOTAL , SUM , SUMIF , SUMIFS , SUMPRODUCT , SUMSQ , TAN , TANH , TRUNC , UUID Horaire SCHEDULE Statistiques AVEDEV , AVERAGE , AVERAGEA , AVERAGEIF , AVERAGEIFS , AVERAGE_WEIGHTED , BINOMDIST , CONFIDENCE , CORREL , COUNT , COUNTA , COVAR , CRITBINOM , DEVSQ , EXPONDIST , FDIST , FISHER , FISHERINV , FORECAST , F_DIST , F_DIST_RT , GEOMEAN , HARMEAN , HYPGEOMDIST , INTERCEPT , KURT , LARGE , LOGINV , LOGNORMDIST , MAX , MAXA , MEDIAN , MIN , MINA , MODE , NEGBINOMDIST , NORMDIST , NORMINV , NORMSDIST , NORMSINV , PEARSON , PERCENTILE , PERCENTRANK , PERCENTRANK_EXC , PERCENTRANK_INC , PERMUT , POISSON , PROB , QUARTILE , RANK_AVG , RANK_EQ , RSQ , SKEW , SLOPE , SMALL , STANDARDIZE , STDEV , STDEVA , STDEVP , STDEVPA , STEYX , TDIST , TINV , TRIMMEAN , TTEST , T_INV , T_INV_2T , VAR , VARA , VARP , VARPA , WEIBULL , ZTEST Texte CHAR , CLEAN , CODE , CONCAT , CONCATENATE , DOLLAR , EXACT , FIND , FIXED , LEFT , LEN , LOWER , MID , PHONE_FORMAT , PROPER , REGEXEXTRACT , REGEXMATCH , REGEXREPLACE , REPLACE , REPT , RIGHT , SEARCH , SUBSTITUTE , T , TASTEME , TEXT , TRIM , UPPER , VALUE","title":""},{"location":"functions/#grist","text":"","title":"Grist"},{"location":"functions/#record","text":"Un Enregistrement repr\u00e9sente un enregistrement de donn\u00e9es. C\u2019est le principal moyen d\u2019acc\u00e9der aux valeurs dans les formules. Un Enregistrement pour une table particuli\u00e8re a une propri\u00e9t\u00e9 pour chaque colonne de donn\u00e9es et de formule dans la table. Dans une formule, $field est traduit en rec.field , o\u00f9 rec est l\u2019Enregistrement pour lequel la formule est \u00e9valu\u00e9e. Par exemple : def Nom_Complet(rec, table): return rec.Prenom + ' ' + rec.NomDeFamille def Longueur_Nom(rec, table): return len(rec.Nom_Complet)","title":"Record"},{"location":"functions/#_field","text":"Acc\u00e8de au champ nomm\u00e9 \u201cField\u201d de l\u2019enregistrement actuel. Par exemple, $Prenom ou rec.Prenom .","title":"$Field"},{"location":"functions/#_group","text":"Dans une table de r\u00e9sum\u00e9 , $group est un champ sp\u00e9cial contenant la liste des Enregistrements qui sont r\u00e9sum\u00e9s par la ligne de r\u00e9sum\u00e9 actuelle. Par exemple, la formule len($group) compte le nombre de ces enregistrements \u00e9tant r\u00e9sum\u00e9s dans chaque ligne. Voir Ensemble d\u2019Enregistrements pour les propri\u00e9t\u00e9s utiles offertes par l\u2019objet retourn\u00e9. Exemples : sum($group.Montant) # Somme du champ Montant dans les enregistrements correspondants sum(r.Montant for r in $group) # M\u00eame que sum($group.Montant) sum(r.Montant for r in $group if r > 0) # Somme uniquement des montants positifs sum(r.Actions * r.Prix for r in $group) # Somme des produits actions * prix","title":"$group"},{"location":"functions/#recordset","text":"Un Ensemble d\u2019Enregistrements repr\u00e9sente une collection d\u2019enregistrements, comme retourn\u00e9 par Table.lookupRecords() ou la propri\u00e9t\u00e9 $group dans les vues de r\u00e9sum\u00e9. Un Ensemble d\u2019Enregistrements permet d\u2019it\u00e9rer \u00e0 travers les enregistrements : sum(r.Montant for r in Etudiants.lookupRecords(Prenom=\"John\", NomDeFamille=\"Doe\")) min(r.DateEcheance for r in T\u00e2ches.lookupRecords(Propri\u00e9taire=\"Bob\")) Les Ensembles d\u2019Enregistrements fournissent \u00e9galement un moyen pratique d\u2019acc\u00e9der \u00e0 la liste des valeurs pour un champ particulier pour tous les enregistrements, comme record_set.Field . Par exemple, les exemples ci-dessus sont \u00e9quivalents \u00e0 : sum(Etudiants.lookupRecords(Prenom=\"John\", NomDeFamille=\"Doe\").Montant) min(T\u00e2ches.lookupRecords(Propri\u00e9taire=\"Bob\").DateEcheance) Vous pouvez obtenir le nombre d\u2019enregistrements dans un Ensemble d\u2019Enregistrements en utilisant len , par exemple len($group) .","title":"RecordSet"},{"location":"functions/#find_","text":"Un ensemble de m\u00e9thodes pour trouver des valeurs dans des ensembles d\u2019enregistrements tri\u00e9s, comme retourn\u00e9 par lookupRecords . Par exemple : Transactions.lookupRecords(..., order_by=\"Date\").find.lt($Date) Table.lookupRecords(..., order_by=(\"Foo\", \"Bar\")).find.le(foo, bar) Si l\u2019attribut find est masqu\u00e9 par une colonne utilisateur du m\u00eame nom, vous pouvez utiliser _find \u00e0 la place. Les m\u00e9thodes disponibles sont : lt : (moins que) trouver l\u2019enregistrement le plus proche avec des valeurs de tri < les valeurs donn\u00e9es le : (moins que ou \u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri <= les valeurs donn\u00e9es gt : (plus que) trouver l\u2019enregistrement le plus proche avec des valeurs de tri > les valeurs donn\u00e9es ge : (plus que ou \u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri >= les valeurs donn\u00e9es eq : (\u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri == les valeurs donn\u00e9es Exemple de notre mod\u00e8le de Paie . Chaque personne a un historique de taux de paiement, dans la table Taux. Pour trouver un taux applicable \u00e0 une date donn\u00e9e, voici comment vous pouvez le faire \u00e0 l\u2019ancienne : # Obtenez tous les taux pour la Personne et le R\u00f4le dans cette ligne. taux = Taux.lookupRecords(Personne=$Personne, R\u00f4le=$R\u00f4le) # S\u00e9lectionnez uniquement les taux dont le D\u00e9but_Taux est \u00e0 ou avant la Date de cette ligne. taux_pass\u00e9s = [r for r in taux if r.D\u00e9but_Taux <= $Date] # S\u00e9lectionnez le dernier des taux_pass\u00e9s, c'est-\u00e0-dire le maximum par D\u00e9but_Taux. taux = max(taux_pass\u00e9s, key=lambda r: r.D\u00e9but_Taux) # Retournez le Taux_Horaire du taux pertinent. return taux.Taux_Horaire Avec les nouvelles m\u00e9thodes, c\u2019est beaucoup plus simple : taux = Taux.lookupRecords(Personne=$Personne, R\u00f4le=$R\u00f4le, order_by=\"D\u00e9but_Taux\") taux = taux.find.le($Date) return taux.Taux_Horaire Notez que cela est \u00e9galement beaucoup plus rapide lorsqu\u2019il y a de nombreux taux pour la m\u00eame Personne et R\u00f4le.","title":"find.*"},{"location":"functions/#usertable","text":"Chaque table de donn\u00e9es dans le document est repr\u00e9sent\u00e9e dans le code par une instance de la classe UserTable . Ces noms sont toujours en majuscules. Une UserTable fournit un acc\u00e8s \u00e0 tous les enregistrements dans la table, ainsi que des m\u00e9thodes pour rechercher des enregistrements particuliers. Chaque table dans le document est disponible pour toutes les formules.","title":"UserTable"},{"location":"functions/#all","text":"La liste de tous les enregistrements dans cette table. Par exemple, cela \u00e9value le nombre d\u2019enregistrements dans la table Etudiants . len(Etudiants.all) Cela \u00e9value la somme du champ Population pour chaque enregistrement dans la table Pays . sum(r.Population for r in Pays.all)","title":"all"},{"location":"functions/#lookupone","text":"Retourne un Enregistrement correspondant aux arguments field=value donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ de la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ). Par exemple : Personnes.lookupOne(Prenom=\"Lewis\", NomDeFamille=\"Carroll\") Personnes.lookupOne(Email=$Email_Travail) En savoir plus sur lookupOne . Si plusieurs enregistrements sont trouv\u00e9s, le premier match est retourn\u00e9. Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les correspondances, pour d\u00e9terminer lequel d\u2019entre eux est retourn\u00e9 en premier. Par d\u00e9faut, l\u2019enregistrement avec le plus petit ID de ligne est retourn\u00e9. Voir lookupRecords pour les d\u00e9tails de toutes les options disponibles et du comportement de order_by (et de son alternative h\u00e9rit\u00e9e, sort_by ). Par exemple : T\u00e2ches.lookupOne(Projet=$id, order_by=\"Priorit\u00e9\") # T\u00e2che avec la plus petite Priorit\u00e9. Taux.lookupOne(Personne=$id, order_by=\"-Date\") # Taux avec la derni\u00e8re Date.","title":"lookupOne"},{"location":"functions/#lookuprecords","text":"Retourne un Ensemble d\u2019Enregistrements correspondant aux arguments field=value donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ de la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ) (exemples ci-dessous). Par exemple : Personnes.lookupRecords(Email=$Email_Travail) Personnes.lookupRecords(Prenom=\"George\", NomDeFamille=\"Washington\") Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les r\u00e9sultats. Vous pouvez pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Vous pouvez \u00e9galement sp\u00e9cifier plusieurs IDs de colonnes sous forme de tuple (par exemple, order_by=(\"Compte\", \"-Date\") ). Par exemple : Transactions.lookupRecords(Compte=$Compte, order_by=\"Date\") Transactions.lookupRecords(Compte=$Compte, order_by=\"-Date\") Transactions.lookupRecords(Actif=True, order_by=(\"Compte\", \"-Date\")) Pour les enregistrements avec des champs order_by \u00e9gaux, les r\u00e9sultats sont tri\u00e9s selon leur apparence dans les vues (ce qui est d\u00e9termin\u00e9 par la colonne sp\u00e9ciale manualSort ). Vous pouvez d\u00e9finir order_by=None pour correspondre \u00e0 l\u2019ordre des enregistrements dans des vues non tri\u00e9es. Par d\u00e9faut, sans order_by , les enregistrements sont tri\u00e9s par ID de ligne, comme si avec order_by=\"id\" . Pour des raisons de compatibilit\u00e9, sort_by peut \u00eatre utilis\u00e9 \u00e0 la place de order_by , mais ne permet qu\u2019un seul champ, et revient \u00e0 l\u2019ID de ligne (plut\u00f4t qu\u2019\u00e0 manualSort ). Voir Ensemble d\u2019Enregistrements pour les propri\u00e9t\u00e9s utiles offertes par l\u2019objet retourn\u00e9. En particulier, des m\u00e9thodes comme .find.le permettent de rechercher des valeurs les plus proches. Voir CONTIENT pour un exemple utilisant UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ de type liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. En savoir plus sur lookupRecords .","title":"lookupRecords"},{"location":"functions/#cumulatif","text":"","title":"Cumulatif"},{"location":"functions/#next","text":"Trouve l\u2019enregistrement suivant dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Voir PR\u00c9C\u00c9DENT pour plus de d\u00e9tails.","title":"NEXT"},{"location":"functions/#previous","text":"Trouve l\u2019enregistrement pr\u00e9c\u00e9dent dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Chacun de ces arguments peut \u00eatre un ID de colonne ou un tuple de IDs de colonnes, et order_by permet aux IDs de colonnes d\u2019\u00eatre pr\u00e9fix\u00e9s par \u201c-\u201d pour inverser l\u2019ordre de tri. Par exemple, PR\u00c9C\u00c9DENT(rec, order_by=\"Date\") # L'enregistrement pr\u00e9c\u00e9dent lorsqu'il est tri\u00e9 par date croissante. PR\u00c9C\u00c9DENT(rec, order_by=\"-Date\") # L'enregistrement pr\u00e9c\u00e9dent lorsqu'il est tri\u00e9 par date d\u00e9croissante. Vous pouvez utiliser group_by pour rechercher l\u2019enregistrement pr\u00e9c\u00e9dent dans un groupe filtr\u00e9. Par exemple, cela trouve l\u2019enregistrement pr\u00e9c\u00e9dent avec le m\u00eame Compte que rec , lorsque les enregistrements sont filtr\u00e9s par le Compte de rec et tri\u00e9s par date croissante : PR\u00c9C\u00c9DENT(rec, group_by=\"Compte\", order_by=\"Date\") Lorsque plusieurs enregistrements ont les m\u00eames valeurs order_by (par exemple, la m\u00eame Date dans les exemples ci-dessus), l\u2019ordre est d\u00e9termin\u00e9 par la position relative des lignes dans les vues. Cela se fait en interne en retombant sur la colonne sp\u00e9ciale manualSort et la colonne ID de ligne id . Utilisez order_by=None pour trouver l\u2019enregistrement pr\u00e9c\u00e9dent dans une table non tri\u00e9e (lorsque les lignes peuvent \u00eatre r\u00e9arrang\u00e9es en les faisant glisser manuellement). Par exemple : PR\u00c9C\u00c9DENT(rec, order_by=None) # L'enregistrement pr\u00e9c\u00e9dent dans la liste non tri\u00e9e des enregistrements. Vous pouvez sp\u00e9cifier plusieurs IDs de colonnes sous forme de tuple, pour group_by et order_by . Cela peut \u00eatre utilis\u00e9 pour correspondre aux vues tri\u00e9es par plusieurs colonnes. Par exemple : PR\u00c9C\u00c9DENT(rec, group_by=(\"Compte\", \"Ann\u00e9e\"), order_by=(\"Date\", \"-Montant\"))","title":"PREVIOUS"},{"location":"functions/#rank","text":"Retourne le rang (ou la position) de cet enregistrement dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Voir PR\u00c9C\u00c9DENT pour les d\u00e9tails de ces param\u00e8tres. Le param\u00e8tre order peut \u00eatre \"asc\" (qui est la valeur par d\u00e9faut) ou \"desc\" . Lorsque order est \"asc\" ou omis, le premier enregistrement dans le groupe dans l\u2019ordre tri\u00e9 aurait le rang de 1. Lorsque order est \"desc\" , le dernier enregistrement dans l\u2019ordre tri\u00e9 aurait le rang de 1. S\u2019il y a plusieurs groupes, il y aura plusieurs enregistrements avec le m\u00eame rang. En particulier, chaque groupe aura un enregistrement avec le rang 1. Par exemple, RANG(rec, group_by=\"Ann\u00e9e\", order_by=\"Score\", order=\"desc\") retournera le rang de l\u2019enregistrement actuel ( rec ) parmi tous les enregistrements de sa table pour la m\u00eame ann\u00e9e, ordonn\u00e9 par score d\u00e9croissant.","title":"RANK"},{"location":"functions/#date_1","text":"","title":"Date"},{"location":"functions/#date","text":"Retourne l\u2019objet datetime.datetime qui repr\u00e9sente une date particuli\u00e8re. La fonction DATE est la plus utile dans les formules o\u00f9 l\u2019ann\u00e9e, le mois et le jour sont des formules, pas des constantes. Si l\u2019ann\u00e9e est comprise entre 0 et 1899 (inclus), ajoute 1900 pour calculer l\u2019ann\u00e9e. >>> DATE(108, 1, 2) datetime.date(2008, 1, 2) >>> DATE(2008, 1, 2) datetime.date(2008, 1, 2) Si le mois est sup\u00e9rieur \u00e0 12, passe \u00e0 l\u2019ann\u00e9e suivante. >>> DATE(2008, 14, 2) datetime.date(2009, 2, 2) Si le mois est inf\u00e9rieur \u00e0 1, soustrait ce nombre de mois plus 1, du premier mois de l\u2019ann\u00e9e. >>> DATE(2008, -3, 2) datetime.date(2007, 9, 2) Si le jour est sup\u00e9rieur au nombre de jours dans le mois donn\u00e9, passe aux mois suivants. >>> DATE(2008, 1, 35) datetime.date(2008, 2, 4) Si le jour est inf\u00e9rieur \u00e0 1, soustrait ce nombre de jours plus 1, du premier jour du mois donn\u00e9. >>> DATE(2008, 1, -15) datetime.date(2007, 12, 16)","title":"DATE"},{"location":"functions/#dateadd","text":"Retourne la date un certain nombre de jours, mois, ann\u00e9es ou semaines \u00e0 partir de start_date . Vous pouvez sp\u00e9cifier les arguments dans n\u2019importe quel ordre si vous sp\u00e9cifiez les noms des arguments. Utilisez des valeurs n\u00e9gatives pour soustraire. Par exemple, DATEADD(date, 1) est identique \u00e0 DATEADD(date, days=1) , et ajoute un jour \u00e0 date . DATEADD(date, years=1, days=-1) ajoute un an moins un jour. >>> DATEADD(DATE(2011, 1, 15), 1) datetime.date(2011, 1, 16) >>> DATEADD(DATE(2011, 1, 15), months=1, days=-1) datetime.date(2011, 2, 14) >>> DATEADD(DATE(2011, 1, 15), years=-2, months=1, days=3, weeks=2) datetime.date(2009, 3, 4) >>> DATEADD(DATE(1975, 4, 30), years=50, weeks=-5) datetime.date(2025, 3, 26)","title":"DATEADD"},{"location":"functions/#datedif","text":"Calcule le nombre de jours, mois ou ann\u00e9es entre deux dates. L\u2019unit\u00e9 indique le type d\u2019information que vous souhaitez retourner : \u201cY\u201d : Le nombre d\u2019ann\u00e9es compl\u00e8tes dans la p\u00e9riode. \u201cM\u201d : Le nombre de mois complets dans la p\u00e9riode. \u201cD\u201d : Le nombre de jours dans la p\u00e9riode. \u201cMD\u201d : La diff\u00e9rence entre les jours dans start_date et end_date. Les mois et ann\u00e9es des dates sont ignor\u00e9s. \u201cYM\u201d : La diff\u00e9rence entre les mois dans start_date et end_date. Les jours et ann\u00e9es des dates sont ignor\u00e9s. \u201cYD\u201d : La diff\u00e9rence entre les jours de start_date et end_date. Les ann\u00e9es des dates sont ignor\u00e9es. Deux ann\u00e9es compl\u00e8tes dans la p\u00e9riode (2) >>> DATEDIF(DATE(2001, 1, 1), DATE(2003, 1, 1), \"Y\") 2 440 jours entre le 1er juin 2001 et le 15 ao\u00fbt 2002 (440) >>> DATEDIF(DATE(2001, 6, 1), DATE(2002, 8, 15), \"D\") 440 75 jours entre le 1er juin et le 15 ao\u00fbt, en ignorant les ann\u00e9es des dates (75) >>> DATEDIF(DATE(2001, 6, 1), DATE(2012, 8, 15), \"YD\") 75 La diff\u00e9rence entre 1 et 15, en ignorant les mois et les ann\u00e9es des dates (14) >>> DATEDIF(DATE(2001, 6, 1), DATE(2002, 8, 15), \"MD\") 14","title":"DATEDIF"},{"location":"functions/#datevalue","text":"Convertit une date qui est stock\u00e9e sous forme de texte en un objet datetime . >>> DATEVALUE(\"1/1/2008\") datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"30-Jan-2008\") datetime.datetime(2008, 1, 30, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"2008-12-11\") datetime.datetime(2008, 12, 11, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"5-JUL\").replace(year=2000) datetime.datetime(2000, 7, 5, 0, 0, tzinfo=moment.tzinfo('America/New_York')) En cas d\u2019ambigu\u00eft\u00e9, pr\u00e9f\u00e9rez le format M/J/A. >>> DATEVALUE(\"1/2/3\") datetime.datetime(2003, 1, 2, 0, 0, tzinfo=moment.tzinfo('America/New_York'))","title":"DATEVALUE"},{"location":"functions/#date_to_xl","text":"Convertit un objet date ou datetime Python en le num\u00e9ro de s\u00e9rie utilis\u00e9 par Excel, avec le 30 d\u00e9cembre 1899 comme num\u00e9ro de s\u00e9rie 1. Voir XL_TO_DATE pour plus d\u2019explications. >>> DATE_TO_XL(datetime.date(2008, 1, 1)) 39448.0 >>> DATE_TO_XL(datetime.date(2012, 3, 14)) 40982.0 >>> DATE_TO_XL(datetime.datetime(2012, 3, 14, 1, 30)) 40982.0625","title":"DATE_TO_XL"},{"location":"functions/#day","text":"Retourne le jour d\u2019une date, sous forme d\u2019entier allant de 1 \u00e0 31. Identique \u00e0 date.day . >>> DAY(DATE(2011, 4, 15)) 15 >>> DAY(\"5/31/2012\") 31 >>> DAY(datetime.datetime(1900, 1, 1)) 1","title":"DAY"},{"location":"functions/#days","text":"Retourne le nombre de jours entre deux dates. Identique \u00e0 (end_date - start_date).days . >>> DAYS(\"3/15/11\",\"2/1/11\") 42 >>> DAYS(DATE(2011, 12, 31), DATE(2011, 1, 1)) 364 >>> DAYS(\"2/1/11\", \"3/15/11\") -42","title":"DAYS"},{"location":"functions/#dtime","text":"Retourne la valeur convertie en un objet datetime Python. La valeur peut \u00eatre une cha\u00eene , une date (interpr\u00e9t\u00e9e comme minuit ce jour-l\u00e0), une heure (interpr\u00e9t\u00e9e comme une heure de la journ\u00e9e aujourd\u2019hui), ou un datetime existant. Le datetime retourn\u00e9 aura son fuseau horaire d\u00e9fini sur l\u2019argument tz , ou le fuseau horaire par d\u00e9faut du document lorsque tz est omis ou None. Si l\u2019entr\u00e9e est elle-m\u00eame un datetime avec le fuseau horaire d\u00e9fini, il est retourn\u00e9 sans changement (sans modifications de son fuseau horaire). >>> DTIME(datetime.date(2017, 1, 1)) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DTIME(datetime.date(2017, 1, 1), 'Europe/Paris') datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('Europe/Paris')) >>> DTIME(datetime.datetime(2017, 1, 1)) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DTIME(datetime.datetime(2017, 1, 1, tzinfo=moment.tzinfo('UTC'))) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('UTC')) >>> DTIME(datetime.datetime(2017, 1, 1, tzinfo=moment.tzinfo('UTC')), 'Europe/Paris') datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('UTC')) >>> DTIME(\"1/1/2008\") datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York'))","title":"DTIME"},{"location":"functions/#edate","text":"Retourne la date qui est le nombre donn\u00e9 de mois avant ou apr\u00e8s start_date . Utilisez EDATE pour calculer les dates d\u2019\u00e9ch\u00e9ance ou de maturit\u00e9 qui tombent le m\u00eame jour du mois que la date d\u2019\u00e9mission. >>> EDATE(DATE(2011, 1, 15), 1) datetime.date(2011, 2, 15) >>> EDATE(DATE(2011, 1, 15), -1) datetime.date(2010, 12, 15) >>> EDATE(DATE(2011, 1, 15), 2) datetime.date(2011, 3, 15) >>> EDATE(DATE(2012, 3, 1), 10) datetime.date(2013, 1, 1) >>> EDATE(DATE(2012, 5, 1), -2) datetime.date(2012, 3, 1)","title":"EDATE"},{"location":"functions/#eomonth","text":"Retourne la date du dernier jour du mois qui est le nombre indiqu\u00e9 de mois avant ou apr\u00e8s start_date. Utilisez EOMONTH pour calculer les dates d\u2019\u00e9ch\u00e9ance ou de maturit\u00e9 qui tombent le dernier jour du mois. >>> EOMONTH(DATE(2011, 1, 1), 1) datetime.date(2011, 2, 28) >>> EOMONTH(DATE(2011, 1, 15), -3) datetime.date(2010, 10, 31) >>> EOMONTH(DATE(2012, 3, 1), 10) datetime.date(2013, 1, 31) >>> EOMONTH(DATE(2012, 5, 1), -2) datetime.date(2012, 3, 31)","title":"EOMONTH"},{"location":"functions/#hour","text":"Identique \u00e0 time.hour . >>> HOUR(XL_TO_DATE(0.75)) 18 >>> HOUR(\"7/18/2011 7:45\") 7 >>> HOUR(\"4/21/2012\") 0","title":"HOUR"},{"location":"functions/#isoweeknum","text":"Retourne le num\u00e9ro de la semaine ISO de l\u2019ann\u00e9e pour une date donn\u00e9e. >>> ISOWEEKNUM(\"3/9/2012\") 10 >>> [ISOWEEKNUM(DATE(2000 + y, 1, 1)) for y in [0,1,2,3,4,5,6,7,8]] [52, 1, 1, 1, 1, 53, 52, 1, 1]","title":"ISOWEEKNUM"},{"location":"functions/#minute","text":"Retourne les minutes d\u2019un datetime , sous forme d\u2019entier de 0 \u00e0 59. Identique \u00e0 time.minute . >>> MINUTE(XL_TO_DATE(0.75)) 0 >>> MINUTE(\"7/18/2011 7:45\") 45 >>> MINUTE(\"12:59:00 PM\") 59 >>> MINUTE(datetime.time(12, 58, 59)) 58","title":"MINUTE"},{"location":"functions/#month","text":"Retourne le mois d\u2019une date repr\u00e9sent\u00e9e, sous forme d\u2019entier de 1 (janvier) \u00e0 12 (d\u00e9cembre). Identique \u00e0 date.month . >>> MONTH(DATE(2011, 4, 15)) 4 >>> MONTH(\"5/31/2012\") 5 >>> MONTH(datetime.datetime(1900, 1, 1)) 1","title":"MONTH"},{"location":"functions/#moonphase","text":"Retourne la phase de la lune \u00e0 la date donn\u00e9e. La sortie par d\u00e9faut est un emoji de phase lunaire. Avec output=\"days\" , la sortie est l\u2019\u00e2ge de la lune en jours (nouvelle lune \u00e9tant 0). Avec output=\"fraction\" , la sortie est la fraction du mois lunaire depuis la nouvelle lune. Le calcul n\u2019est pas astronomiquement pr\u00e9cis, mais suffisant pour les loups et les marins. NE PAS utiliser output=\"lunacy\" . >>> MOONPHASE(datetime.date(1900, 1, 1), \"days\") 0.0 >>> MOONPHASE(datetime.date(1900, 1, 1), \"fraction\") 0.0 >>> MOONPHASE(datetime.datetime(1900, 1, 1)) == '\ud83c\udf11' True >>> MOONPHASE(datetime.date(1900, 1, 15)) == '\ud83c\udf15' True >>> MOONPHASE(datetime.date(1900, 1, 30)) == '\ud83c\udf11' True >>> [MOONPHASE(DATEADD(datetime.date(2023, 4, 1), days=4*n)) for n in range(8)] == ['\ud83c\udf14', '\ud83c\udf15', '\ud83c\udf16', '\ud83c\udf17', '\ud83c\udf18', '\ud83c\udf11', '\ud83c\udf12', '\ud83c\udf13'] True >>> [round(MOONPHASE(DATEADD(datetime.date(2023, 4, 1), days=4*n)), 1) for n in range(8)] [10.4, 14.4, 18.4, 22.4, 26.4, 0.9, 4.9, 8.9]","title":"MOONPHASE"},{"location":"functions/#now","text":"Retourne l\u2019objet datetime pour l\u2019heure actuelle.","title":"NOW"},{"location":"functions/#second","text":"Retourne les secondes d\u2019un datetime , sous forme d\u2019entier de 0 \u00e0 59. Identique \u00e0 time.second . >>> SECOND(XL_TO_DATE(0.75)) 0 >>> SECOND(\"7/18/2011 7:45:13\") 13 >>> SECOND(datetime.time(12, 58, 59)) 59","title":"SECOND"},{"location":"functions/#today","text":"Retourne l\u2019objet date pour la date actuelle.","title":"TODAY"},{"location":"functions/#weekday","text":"Retourne le jour de la semaine correspondant \u00e0 une date. Le jour est donn\u00e9 sous forme d\u2019entier, allant de 1 (dimanche) \u00e0 7 (samedi), par d\u00e9faut. Return_type d\u00e9termine le type de la valeur retourn\u00e9e. 1 (par d\u00e9faut) - Retourne 1 (dimanche) \u00e0 7 (samedi). 2 - Retourne 1 (lundi) \u00e0 7 (dimanche). 3 - Retourne 0 (lundi) \u00e0 6 (dimanche). 11 - Retourne 1 (lundi) \u00e0 7 (dimanche). 12 - Retourne 1 (mardi) \u00e0 7 (lundi). 13 - Retourne 1 (mercredi) \u00e0 7 (mardi). 14 - Retourne 1 (jeudi) \u00e0 7 (mercredi). 15 - Retourne 1 (vendredi) \u00e0 7 (jeudi). 16 - Retourne 1 (samedi) \u00e0 7 (vendredi). 17 - Retourne 1 (dimanche) \u00e0 7 (samedi). >>> WEEKDAY(DATE(2008, 2, 14)) 5 >>> WEEKDAY(DATE(2012, 3, 1)) 5 >>> WEEKDAY(DATE(2012, 3, 1), 1) 5 >>> WEEKDAY(DATE(2012, 3, 1), 2) 4 >>> WEEKDAY(\"3/1/2012\", 3) 3","title":"WEEKDAY"},{"location":"functions/#weeknum","text":"Retourne le num\u00e9ro de la semaine d\u2019une date sp\u00e9cifique. Par exemple, la semaine contenant le 1er janvier est la premi\u00e8re semaine de l\u2019ann\u00e9e, et est num\u00e9rot\u00e9e semaine 1. Return_type d\u00e9termine quelle semaine est consid\u00e9r\u00e9e comme la premi\u00e8re semaine de l\u2019ann\u00e9e. 1 (par d\u00e9faut) - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant dimanche qui contient le 1er janvier. 2 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 1er janvier. 11 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 1er janvier. 12 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant mardi qui contient le 1er janvier. 13 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant mercredi qui contient le 1er janvier. 14 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant jeudi qui contient le 1er janvier. 15 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant vendredi qui contient le 1er janvier. 16 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant samedi qui contient le 1er janvier. 17 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant dimanche qui contient le 1er janvier. 21 - Approche ISO 8601 : La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 4 janvier. \u00c9quivalemment, c\u2019est la semaine qui contient le premier jeudi de l\u2019ann\u00e9e. >>> WEEKNUM(DATE(2012, 3, 9)) 10 >>> WEEKNUM(DATE(2012, 3, 9), 2) 11 >>> WEEKNUM('1/1/1900') 1 >>> WEEKNUM('2/1/1900') 5","title":"WEEKNUM"},{"location":"functions/#xl_to_date","text":"Convertit un num\u00e9ro de s\u00e9rie Excel fourni repr\u00e9sentant une date en un objet datetime . La valeur est interpr\u00e9t\u00e9e comme le nombre de jours depuis le 30 d\u00e9cembre 1899. (Cela correspond \u00e0 l\u2019interpr\u00e9tation de Google Sheets. Excel commence avec le 31 d\u00e9cembre 1899 mais consid\u00e8re \u00e0 tort 1900 comme une ann\u00e9e bissextile. Excel pour Mac doit \u00eatre configur\u00e9 pour utiliser le syst\u00e8me de date 1900, c\u2019est-\u00e0-dire d\u00e9cocher l\u2019option \u201cUtiliser le syst\u00e8me de date 1904\u201d.) Le datetime retourn\u00e9 aura son fuseau horaire d\u00e9fini sur l\u2019argument tz , ou le fuseau horaire par d\u00e9faut du document lorsque tz est omis ou None. >>> XL_TO_DATE(41100.1875) datetime.datetime(2012, 7, 10, 4, 30, tzinfo=moment.tzinfo('America/New_York')) >>> XL_TO_DATE(39448) datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> XL_TO_DATE(40982.0625) datetime.datetime(2012, 3, 14, 1, 30, tzinfo=moment.tzinfo('America/New_York'))","title":"XL_TO_DATE"},{"location":"functions/#year","text":"Retourne l\u2019ann\u00e9e correspondant \u00e0 une date sous forme d\u2019entier. Identique \u00e0 date.year . >>> YEAR(DATE(2011, 4, 15)) 2011 >>> YEAR(\"5/31/2030\") 2030 >>> YEAR(datetime.datetime(1900, 1, 1)) 1900","title":"YEAR"},{"location":"functions/#yearfrac","text":"Calcule la fraction de l\u2019ann\u00e9e repr\u00e9sent\u00e9e par le nombre de jours entiers entre deux dates. Basis est le type de base de comptage des jours \u00e0 utiliser. 0 (par d\u00e9faut) - US (NASD) 30/360 1 - Actuel/actuel 2 - Actuel/360 3 - Actuel/365 4 - Europ\u00e9en 30/360 -1 - Actuel/actuel (variation Google Sheets) Cette fonction est utile pour les calculs financiers. Pour la compatibilit\u00e9 avec Excel, elle par d\u00e9faut utilise le calendrier standard NASD. Pour une utilisation dans des contextes non financiers, l\u2019option -1 est probablement le meilleur choix. Voir https://en.wikipedia.org/wiki/360-day_calendar pour l\u2019explication des m\u00e9thodes US 30/360 et Europ\u00e9enne 30/360. Voir pour l\u2019analyse de l\u2019impl\u00e9mentation particuli\u00e8re d\u2019Excel. Fraction de l\u2019ann\u00e9e entre le 1/1/2012 et le 30/7/12, en omettant l\u2019argument Basis. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30)) '0.58055556' Fraction entre les m\u00eames dates, en utilisant l\u2019argument de base Actuel/Actuel. Parce que 2012 est une ann\u00e9e bissextile, elle a une base de 366 jours. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30), 1) '0.57650273' Fraction entre les m\u00eames dates, en utilisant l\u2019argument de base Actuel/365. Utilise une base de 365 jours. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30), 3) '0.57808219'","title":"YEARFRAC"},{"location":"functions/#info","text":"","title":"Info"},{"location":"functions/#cell","text":"Retourne les informations demand\u00e9es sur la cellule sp\u00e9cifi\u00e9e. Cela n\u2019est pas impl\u00e9ment\u00e9 dans Grist. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CELL"},{"location":"functions/#isblank","text":"Retourne si une valeur fait r\u00e9f\u00e9rence \u00e0 une cellule vide. Elle n\u2019est pas impl\u00e9ment\u00e9e dans Grist. Pour v\u00e9rifier une cha\u00eene vide, utilisez value == \"\" . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ISBLANK"},{"location":"functions/#isemail","text":"Retourne si une valeur est une adresse email valide. Notez que la v\u00e9rification de la validit\u00e9 des emails n\u2019est pas une science exacte. La norme technique consid\u00e8re de nombreuses adresses email comme valides qui ne sont pas utilis\u00e9es dans la pratique, et ne seraient pas consid\u00e9r\u00e9es comme valides par la plupart des utilisateurs. Au lieu de cela, nous suivons l\u2019impl\u00e9mentation de Google Sheets, avec quelques diff\u00e9rences, not\u00e9es ci-dessous. >>> ISEMAIL(\"Abc.123@example.com\") True >>> ISEMAIL(\"Bob_O-Reilly+tag@example.com\") True >>> ISEMAIL(\"John Doe\") False >>> ISEMAIL(\"john@aol...com\") False","title":"ISEMAIL"},{"location":"functions/#iserr","text":"V\u00e9rifie si une valeur est une erreur. En d\u2019autres termes, elle retourne vrai si l\u2019utilisation de value directement provoquerait une exception. NOTE : Grist impl\u00e9mente cela en enveloppant automatiquement l\u2019argument pour utiliser l\u2019\u00e9valuation paresseuse. Une approche plus Pythonique pour v\u00e9rifier les erreurs est : try: ... value ... except Exception, err: ... faire quelque chose \u00e0 propos de l'erreur ... Par exemple : >>> ISERR(\"Hello\") False","title":"ISERR"},{"location":"functions/#iserror","text":"V\u00e9rifie si une valeur est une erreur ou une valeur invalide. Elle est similaire \u00e0 ISERR , mais retourne \u00e9galement vrai pour une valeur invalide telle que NaN ou une valeur textuelle dans une colonne Num\u00e9rique. NOTE : Grist impl\u00e9mente cela en enveloppant automatiquement l\u2019argument pour utiliser l\u2019\u00e9valuation paresseuse. >>> ISERROR(\"Hello\") False >>> ISERROR(AltText(\"fail\")) True >>> ISERROR(float('nan')) True","title":"ISERROR"},{"location":"functions/#islogical","text":"V\u00e9rifie si une valeur est True ou False . >>> ISLOGICAL(True) True >>> ISLOGICAL(False) True >>> ISLOGICAL(0) False >>> ISLOGICAL(None) False >>> ISLOGICAL(\"Test\") False","title":"ISLOGICAL"},{"location":"functions/#isna","text":"V\u00e9rifie si une valeur est l\u2019erreur #N/A . >>> ISNA(float('nan')) True >>> ISNA(0.0) False >>> ISNA('text') False >>> ISNA(float('-inf')) False","title":"ISNA"},{"location":"functions/#isnontext","text":"V\u00e9rifie si une valeur n\u2019est pas textuelle. >>> ISNONTEXT(\"asdf\") False >>> ISNONTEXT(\"\") False >>> ISNONTEXT(AltText(\"text\")) False >>> ISNONTEXT(17.0) True >>> ISNONTEXT(None) True >>> ISNONTEXT(datetime.date(2011, 1, 1)) True","title":"ISNONTEXT"},{"location":"functions/#isnumber","text":"V\u00e9rifie si une valeur est un nombre. >>> ISNUMBER(17) True >>> ISNUMBER(-123.123423) True >>> ISNUMBER(False) True >>> ISNUMBER(float('nan')) True >>> ISNUMBER(float('inf')) True >>> ISNUMBER('17') False >>> ISNUMBER(None) False >>> ISNUMBER(datetime.date(2011, 1, 1)) False","title":"ISNUMBER"},{"location":"functions/#isref","text":"V\u00e9rifie si une valeur est un enregistrement de table. Par exemple, si une colonne personne est de type R\u00e9f\u00e9rence \u00e0 la table Personnes , alors ISREF($personne) est True . De m\u00eame, ISREF(Personnes.lookupOne(name=$name)) est True . Pour tout autre type de valeur, ISREF() \u00e9valuerait \u00e0 False . >>> ISREF(17) False >>> ISREF(\"Roger\") False","title":"ISREF"},{"location":"functions/#isreflist","text":"V\u00e9rifie si une valeur est un Ensemble d'Enregistrements , le type de valeurs dans les colonnes de Liste de R\u00e9f\u00e9rences. Par exemple, si une colonne personnes est de type Liste de R\u00e9f\u00e9rences \u00e0 la table Personnes , alors ISREFLIST($personnes) est True . De m\u00eame, ISREFLIST(Personnes.lookupRecords(name=$name)) est True . Pour tout autre type de valeur, ISREFLIST() \u00e9valuerait \u00e0 False . >>> ISREFLIST(17) False >>> ISREFLIST(\"Roger\") False","title":"ISREFLIST"},{"location":"functions/#istext","text":"V\u00e9rifie si une valeur est textuelle. >>> ISTEXT(\"asdf\") True >>> ISTEXT(\"\") True >>> ISTEXT(AltText(\"text\")) True >>> ISTEXT(17.0) False >>> ISTEXT(None) False >>> ISTEXT(datetime.date(2011, 1, 1)) False","title":"ISTEXT"},{"location":"functions/#isurl","text":"V\u00e9rifie si une valeur est une URL valide. Elle n\u2019a pas besoin d\u2019\u00eatre enti\u00e8rement qualifi\u00e9e, ni d\u2019inclure \u201chttp://\u201d et \u201cwww\u201d. Elle ne suit pas une norme, mais tente de fonctionner de mani\u00e8re similaire \u00e0 ISURL dans Google Sheets, et de retourner True pour du texte qui est probablement une URL. Les protocoles valides incluent ftp, http, https, gopher, mailto, news, telnet et aim. >>> ISURL(\"http://www.getgrist.com\") True >>> ISURL(\"https://foo.com/test_(wikipedia)#cite-1\") True >>> ISURL(\"mailto://user@example.com\") True >>> ISURL(\"http:///a\") False","title":"ISURL"},{"location":"functions/#n","text":"Retourne la valeur convertie en un nombre. Vrai/Faux sont convertis en 1/0. Une date est convertie en num\u00e9ro de s\u00e9rie de style Excel de la date. Tout le reste est converti en 0. >>> N(7) 7 >>> N(7.1) 7.1 >>> N(\"Even\") 0 >>> N(\"7\") 0 >>> N(True) 1 >>> N(datetime.datetime(2011, 4, 17)) 40650.0","title":"N"},{"location":"functions/#na","text":"Retourne l\u2019erreur \u201cvaleur non disponible\u201d, #N/A . >>> math.isnan(NA()) True","title":"NA"},{"location":"functions/#peek","text":"\u00c9value l\u2019expression donn\u00e9e sans cr\u00e9er de d\u00e9pendances ou n\u00e9cessiter que les valeurs r\u00e9f\u00e9renc\u00e9es soient \u00e0 jour, en utilisant quelle que soit la valeur qu\u2019il trouve dans une cellule. Ceci est utile pour pr\u00e9venir les erreurs de r\u00e9f\u00e9rence circulaire, en particulier dans les formules de d\u00e9clenchement. Par exemple, si la formule pour A d\u00e9pend de $B et la formule pour B d\u00e9pend de $A , cela provoquerait normalement une erreur de r\u00e9f\u00e9rence circulaire car chaque valeur doit \u00eatre calcul\u00e9e avant l\u2019autre. Mais si A utilise PEEK($B) alors il obtiendra simplement la valeur d\u00e9j\u00e0 stock\u00e9e dans $B sans n\u00e9cessiter que $B soit d\u2019abord calcul\u00e9 \u00e0 la derni\u00e8re valeur. Ainsi, A sera calcul\u00e9 en premier, et B pourra utiliser $A sans probl\u00e8mes.","title":"PEEK"},{"location":"functions/#record_2","text":"Retourne un dictionnaire Python avec tous les champs de l\u2019enregistrement donn\u00e9. Si une liste d\u2019enregistrements est donn\u00e9e, retourne une liste de dictionnaires Python correspondants. Si dates_as_iso est d\u00e9fini, les valeurs Date et DateTime sont converties en cha\u00eene en utilisant le format ISO 8601. Si expand_refs est d\u00e9fini \u00e0 1 ou plus, les valeurs de R\u00e9f\u00e9rence sont remplac\u00e9es par une repr\u00e9sentation RECORD de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9, en d\u00e9veloppant le nombre donn\u00e9 de niveaux. Les valeurs d\u2019erreur pr\u00e9sentes dans les cellules de l\u2019enregistrement sont remplac\u00e9es par une valeur None, et une cl\u00e9 sp\u00e9ciale de \u201c error \u201d est ajout\u00e9e contenant les messages d\u2019erreur pour ces cellules. Par exemple : {\"Ratio\": None, \"_error_\": {\"Ratio\": \"ZeroDivisionError: integer division or modulo by zero\"}} Notez qu\u2019il faut faire attention \u00e0 \u00e9viter les r\u00e9f\u00e9rences circulaires lors de l\u2019utilisation de RECORD(), car cela cr\u00e9e une d\u00e9pendance sur chaque cellule de l\u2019enregistrement. Dans le cas de RECORD(rec), la cellule contenant cet appel sera omise du dictionnaire r\u00e9sultant. Par exemple : RECORD($Personne) RECORD(rec) RECORD(Personnes.lookupOne(Prenom=\"Alice\")) RECORD(Personnes.lookupRecords(D\u00e9partement=\"RH\"))","title":"RECORD"},{"location":"functions/#request","text":"Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"REQUEST"},{"location":"functions/#type","text":"Retourne un nombre associ\u00e9 au type de donn\u00e9es pass\u00e9 dans la fonction. Cela n\u2019est pas impl\u00e9ment\u00e9 dans Grist. Utilisez isinstance(value, type) ou type(value) . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TYPE"},{"location":"functions/#logique","text":"","title":"Logique"},{"location":"functions/#and","text":"Renvoie True si tous les arguments sont logiquement vrais, et False si l\u2019un d\u2019eux est faux. Identique \u00e0 all([valeur1, valeur2, ...]) . >>> AND(1) True >>> AND(0) False >>> AND(1, 1) True >>> AND(1,2,3,4) True >>> AND(1,2,3,4,0) False","title":"AND"},{"location":"functions/#false","text":"Renvoie la valeur logique False . Vous pouvez \u00e9galement utiliser la valeur False directement. Cette fonction est fournie principalement pour la compatibilit\u00e9 avec d\u2019autres programmes de tableur. >>> FALSE() False","title":"FALSE"},{"location":"functions/#if","text":"Renvoie une valeur si une expression logique est True et une autre si elle est False . L\u2019expression Python \u00e9quivalente est : valeur_si_vrai si expression_logique sinon valeur_si_faux Comme Grist prend en charge les formules multi-lignes, vous pouvez \u00e9galement utiliser des blocs Python tels que : if expression_logique: return valeur_si_vrai else: return valeur_si_faux NOTE : Grist suit le mod\u00e8le Excel en n\u2019\u00e9valuant qu\u2019une des expressions de valeur, en enveloppant automatiquement les expressions pour utiliser l\u2019\u00e9valuation paresseuse. Cela permet \u00e0 IF(False, 1/0, 1) d\u2019\u00e9valuer \u00e0 1 plut\u00f4t que de lever une exception. >>> IF(12, \"Oui\", \"Non\") 'Oui' >>> IF(None, \"Oui\", \"Non\") 'Non' >>> IF(True, 0.85, 0.0) 0.85 >>> IF(False, 0.85, 0.0) 0.0","title":"IF"},{"location":"functions/#iferror","text":"Renvoie le premier argument s\u2019il n\u2019est pas une valeur d\u2019erreur, sinon renvoie le deuxi\u00e8me argument s\u2019il est pr\u00e9sent, ou une cha\u00eene vide si le deuxi\u00e8me argument est absent. NOTE : Grist g\u00e8re les valeurs qui l\u00e8vent une exception en les enveloppant pour utiliser l\u2019\u00e9valuation paresseuse. >>> IFERROR(float('nan'), \"**NAN**\") '**NAN**' >>> IFERROR(17.17, \"**NAN**\") 17.17 >>> IFERROR(\"Texte\") 'Texte' >>> IFERROR(AltText(\"bonjour\")) ''","title":"IFERROR"},{"location":"functions/#not","text":"True . Identique \u00e0 not expression_logique . >>> NOT(123) False >>> NOT(0) True","title":"NOT"},{"location":"functions/#or","text":"Renvoie True si l\u2019un des arguments est logiquement vrai, et faux si tous les arguments sont faux. Identique \u00e0 any([valeur1, valeur2, ...]) . >>> OR(1) True >>> OR(0) False >>> OR(1, 1) True >>> OR(0, 1) True >>> OR(0, 0) False >>> OR(0,False,0.0,\"\",None) False >>> OR(0,None,3,0) True","title":"OR"},{"location":"functions/#true","text":"Renvoie la valeur logique True . Vous pouvez \u00e9galement utiliser la valeur True directement. Cette fonction est fournie principalement pour la compatibilit\u00e9 avec d\u2019autres programmes de tableur. >>> TRUE() True","title":"TRUE"},{"location":"functions/#recherche","text":"","title":"Recherche"},{"location":"functions/#lookupone_2","text":"Renvoie un Enregistrement correspondant aux arguments champ=valeur donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ dans la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ). Par exemple : People.lookupOne(First_Name=\"Lewis\", Last_Name=\"Carroll\") People.lookupOne(Email=$Work_Email) En savoir plus sur lookupOne . Si plusieurs enregistrements sont trouv\u00e9s, le premier match est renvoy\u00e9. Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les correspondances, pour d\u00e9terminer lequel d\u2019entre eux est renvoy\u00e9 en premier. Par d\u00e9faut, l\u2019enregistrement avec le plus petit ID de ligne est renvoy\u00e9. Voir lookupRecords pour des d\u00e9tails sur toutes les options disponibles et le comportement de order_by (et de son alternative h\u00e9rit\u00e9e, sort_by ). Par exemple : Tasks.lookupOne(Project=$id, order_by=\"Priority\") # T\u00e2che avec la plus petite priorit\u00e9. Rates.lookupOne(Person=$id, order_by=\"-Date\") # Taux avec la derni\u00e8re date.","title":"lookupOne"},{"location":"functions/#lookuprecords_2","text":"Renvoie un Ensemble d\u2019Enregistrements correspondant aux arguments champ=valeur donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ dans la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ) (exemples ci-dessous). Par exemple : People.lookupRecords(Email=$Work_Email) People.lookupRecords(First_Name=\"George\", Last_Name=\"Washington\") Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les r\u00e9sultats. Vous pouvez pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Vous pouvez \u00e9galement sp\u00e9cifier plusieurs ID de colonnes sous forme de tuple (par exemple, order_by=(\"Account\", \"-Date\") ). Par exemple : Transactions.lookupRecords(Account=$Account, order_by=\"Date\") Transactions.lookupRecords(Account=$Account, order_by=\"-Date\") Transactions.lookupRecords(Active=True, order_by=(\"Account\", \"-Date\")) Pour les enregistrements avec des champs order_by \u00e9gaux, les r\u00e9sultats sont tri\u00e9s selon leur apparition dans les vues (ce qui est d\u00e9termin\u00e9 par la colonne sp\u00e9ciale manualSort ). Vous pouvez d\u00e9finir order_by=None pour correspondre \u00e0 l\u2019ordre des enregistrements dans des vues non tri\u00e9es. Par d\u00e9faut, sans order_by , les enregistrements sont tri\u00e9s par ID de ligne, comme si avec order_by=\"id\" . Pour des raisons de compatibilit\u00e9, sort_by peut \u00eatre utilis\u00e9 \u00e0 la place de order_by , mais ne permet qu\u2019un seul champ, et revient \u00e0 l\u2019ID de ligne (plut\u00f4t qu\u2019\u00e0 manualSort ). Voir Ensemble d\u2019Enregistrements pour des propri\u00e9t\u00e9s utiles offertes par l\u2019objet renvoy\u00e9. En particulier, des m\u00e9thodes comme .find.le permettent de rechercher les valeurs les plus proches. Voir CONTIENT pour un exemple utilisant UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ d\u2019un type de liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. En savoir plus sur lookupRecords .","title":"lookupRecords"},{"location":"functions/#address","text":"Renvoie une r\u00e9f\u00e9rence de cellule sous forme de cha\u00eene. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ADDRESS"},{"location":"functions/#choose","text":"Renvoie un \u00e9l\u00e9ment d\u2019une liste de choix en fonction de l\u2019index. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CHOOSE"},{"location":"functions/#column","text":"Renvoie le num\u00e9ro de colonne d\u2019une cellule sp\u00e9cifi\u00e9e, avec A=1 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"COLUMN"},{"location":"functions/#columns","text":"Renvoie le nombre de colonnes dans un tableau ou un intervalle sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"COLUMNS"},{"location":"functions/#contains","text":"Utilisez ce marqueur avec UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ d\u2019un type de liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. Par exemple : MoviesTable.lookupRecords(genre=CONTAINS(\"Drama\")) renverra des enregistrements dans MoviesTable o\u00f9 la colonne genre est une liste ou un autre conteneur tel que [\"Comedy\", \"Drama\"] , c\u2019est-\u00e0-dire \"Drama\" in $genre . Notez que la colonne recherch\u00e9e (par exemple, genre ) doit avoir des valeurs d\u2019un type de conteneur tel que liste, tuple ou ensemble. En particulier, les valeurs ne doivent pas \u00eatre des cha\u00eenes, par exemple \"Comedy-Drama\" ne correspondra pas m\u00eame si \"Drama\" in \"Comedy-Drama\" est True en Python. Cela ne correspondra \u00e9galement pas aux sous-cha\u00eenes dans les \u00e9l\u00e9ments du conteneur, par exemple [\"Comedy-Drama\"] . Vous pouvez \u00e9ventuellement passer un deuxi\u00e8me argument match_empty pour indiquer une valeur qui devrait \u00eatre compar\u00e9e aux listes vides dans la colonne recherch\u00e9e. Par exemple, \u00e9tant donn\u00e9 cette formule : MoviesTable.lookupRecords(genre=CONTAINS(g, match_empty='')) Si g est '' (c\u2019est-\u00e0-dire \u00e9gal \u00e0 match_empty ), alors la colonne genre dans les enregistrements renvoy\u00e9s sera soit une liste vide (ou un autre conteneur) soit une liste contenant g comme d\u2019habitude.","title":"CONTAINS"},{"location":"functions/#getpivotdata","text":"Extrait une valeur agr\u00e9g\u00e9e d\u2019un tableau crois\u00e9 dynamique qui correspond aux en-t\u00eates de ligne et de colonne sp\u00e9cifi\u00e9s. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"GETPIVOTDATA"},{"location":"functions/#hlookup","text":"Recherche horizontale. Recherche dans la premi\u00e8re ligne d\u2019un intervalle pour une cl\u00e9 et renvoie la valeur d\u2019une cellule sp\u00e9cifi\u00e9e dans la colonne trouv\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"HLOOKUP"},{"location":"functions/#hyperlink","text":"Cr\u00e9e un lien hypertexte \u00e0 l\u2019int\u00e9rieur d\u2019une cellule. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"HYPERLINK"},{"location":"functions/#index","text":"Renvoie le contenu d\u2019une cellule, sp\u00e9cifi\u00e9 par un d\u00e9calage de ligne et de colonne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"INDEX"},{"location":"functions/#indirect","text":"Renvoie une r\u00e9f\u00e9rence de cellule sp\u00e9cifi\u00e9e par une cha\u00eene. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"INDIRECT"},{"location":"functions/#lookup","text":"Recherche dans une ligne ou une colonne pour une cl\u00e9 et renvoie la valeur de la cellule dans une plage de r\u00e9sultats situ\u00e9e \u00e0 la m\u00eame position que la ligne ou la colonne de recherche. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"LOOKUP"},{"location":"functions/#match","text":"Renvoie la position relative d\u2019un \u00e9l\u00e9ment dans un intervalle qui correspond \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"MATCH"},{"location":"functions/#offset","text":"Renvoie une r\u00e9f\u00e9rence de plage d\u00e9cal\u00e9e d\u2019un nombre sp\u00e9cifi\u00e9 de lignes et de colonnes \u00e0 partir d\u2019une r\u00e9f\u00e9rence de cellule de d\u00e9part. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"OFFSET"},{"location":"functions/#row","text":"Renvoie le num\u00e9ro de ligne d\u2019une cellule sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ROW"},{"location":"functions/#rows","text":"Renvoie le nombre de lignes dans un tableau ou un intervalle sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ROWS"},{"location":"functions/#self_hyperlink","text":"Cr\u00e9e un lien vers le document actuel. Tous les param\u00e8tres sont optionnels. La cha\u00eene renvoy\u00e9e est au format URL, \u00e9ventuellement pr\u00e9c\u00e9d\u00e9e d\u2019une \u00e9tiquette et d\u2019un espace (le format attendu pour les colonnes de texte Grist avec l\u2019option HyperLink activ\u00e9e). Un num\u00e9ro de page num\u00e9rique peut \u00eatre fourni, ce qui cr\u00e9era un lien vers la page sp\u00e9cifi\u00e9e. Pour trouver le num\u00e9ro de page num\u00e9rique dont vous avez besoin, visitez une page et examinez son URL pour une partie /p/NN . Un nombre quelconque d\u2019arguments sous la forme LinkKey_NOM peut \u00eatre fourni, pour d\u00e9finir les valeurs user.LinkKey.NOM qui seront disponibles dans les r\u00e8gles d\u2019acc\u00e8s. Par exemple, si une r\u00e8gle permet aux utilisateurs de voir des lignes lorsque user.LinkKey.Code == rec.Code , nous pourrions vouloir cr\u00e9er des liens avec SELF_HYPERLINK(LinkKey_Code=$Code) . >>> SELF_HYPERLINK() u'https://docs.getgrist.com/sbaltsirg/Example' >>> SELF_HYPERLINK(label='doc') u'doc https://docs.getgrist.com/sbaltsirg/Example' >>> SELF_HYPERLINK(page=2) u'https://docs.getgrist.com/sbaltsirg/Example/p/2' >>> SELF_HYPERLINK(LinkKey_Code='X1234') u'https://docs.getgrist.com/sbaltsirg/Example?Code_=X1234' >>> SELF_HYPERLINK(label='order', page=3, LinkKey_Code='X1234', LinkKey_Name='Bi Ngo') u'order https://docs.getgrist.com/sbaltsirg/Example/p/3?Code_=X1234&Name_=Bi+Ngo' >>> SELF_HYPERLINK(Linky_Link='Link') Traceback (most recent call last): ... TypeError: unexpected keyword argument 'Linky_Link' (not of form LinkKey_NAME)","title":"SELF_HYPERLINK"},{"location":"functions/#vlookup","text":"Recherche verticale. Recherche dans la table donn\u00e9e pour un enregistrement correspondant aux arguments champ=valeur donn\u00e9s. Si plusieurs enregistrements correspondent, renvoie l\u2019un d\u2019eux. Si aucun ne correspond, renvoie l\u2019enregistrement vide sp\u00e9cial. L\u2019objet renvoy\u00e9 est un enregistrement dont les champs sont disponibles en utilisant la syntaxe .champ . Par exemple, VLOOKUP(Employees, EmployeeID=$EmpID).Salary . Notez que VLOOKUP n\u2019est pas couramment n\u00e9cessaire dans Grist, puisque les Colonnes de R\u00e9f\u00e9rence sont le meilleur moyen de lier des donn\u00e9es entre des tables, et permettent une utilisation simple et efficace telle que $Person.Age . VLOOKUP est exactement \u00e9quivalent \u00e0 table.lookupOne(**champ_valeur_paires) . Voir lookupOne . Par exemple : VLOOKUP(People, First_Name=\"Lewis\", Last_Name=\"Carroll\") VLOOKUP(People, First_Name=\"Lewis\", Last_Name=\"Carroll\").Age","title":"VLOOKUP"},{"location":"functions/#math","text":"","title":"Math"},{"location":"functions/#abs","text":"Renvoie la valeur absolue d\u2019un nombre. >>> ABS(2) 2 >>> ABS(-2) 2 >>> ABS(-4) 4","title":"ABS"},{"location":"functions/#acos","text":"Renvoie le cosinus inverse d\u2019une valeur, en radians. >>> round(ACOS(-0.5), 9) 2.094395102 >>> round(ACOS(-0.5)*180/PI(), 10) 120.0","title":"ACOS"},{"location":"functions/#acosh","text":"Renvoie le cosinus hyperbolique inverse d\u2019un nombre. >>> ACOSH(1) 0.0 >>> round(ACOSH(10), 7) 2.9932228","title":"ACOSH"},{"location":"functions/#arabic","text":"Calcule la valeur d\u2019un chiffre romain. >>> ARABIC(\"LVII\") 57 >>> ARABIC('mcmxii') 1912","title":"ARABIC"},{"location":"functions/#asin","text":"Renvoie le sinus inverse d\u2019une valeur, en radians. >>> round(ASIN(-0.5), 9) -0.523598776 >>> round(ASIN(-0.5)*180/PI(), 10) -30.0 >>> round(DEGREES(ASIN(-0.5)), 10) -30.0","title":"ASIN"},{"location":"functions/#asinh","text":"Renvoie le sinus hyperbolique inverse d\u2019un nombre. >>> round(ASINH(-2.5), 9) -1.647231146 >>> round(ASINH(10), 9) 2.99822295","title":"ASINH"},{"location":"functions/#atan","text":"Renvoie l\u2019arc tangente d\u2019une valeur, en radians. >>> round(ATAN(1), 9) 0.785398163 >>> ATAN(1)*180/PI() 45.0 >>> DEGREES(ATAN(1)) 45.0","title":"ATAN"},{"location":"functions/#atan2","text":"Renvoie l\u2019angle entre l\u2019axe x et un segment de ligne allant de l\u2019origine (0,0) \u00e0 la paire de coordonn\u00e9es sp\u00e9cifi\u00e9e ( x , y ), en radians. >>> round(ATAN2(1, 1), 9) 0.785398163 >>> round(ATAN2(-1, -1), 9) -2.35619449 >>> ATAN2(-1, -1)*180/PI() -135.0 >>> DEGREES(ATAN2(-1, -1)) -135.0 >>> round(ATAN2(1,2), 9) 1.107148718","title":"ATAN2"},{"location":"functions/#atanh","text":"Renvoie le sinus hyperbolique inverse d\u2019un nombre. >>> round(ATANH(0.76159416), 9) 1.00000001 >>> round(ATANH(-0.1), 9) -0.100335348","title":"ATANH"},{"location":"functions/#ceiling","text":"Arrondit un nombre \u00e0 la multiple sup\u00e9rieure la plus proche du facteur, ou \u00e0 l\u2019entier le plus proche si le facteur est ommis ou 1. >>> CEILING(2.5, 1) 3 >>> CEILING(-2.5, -2) -4 >>> CEILING(-2.5, 2) -2 >>> CEILING(1.5, 0.1) 1.5 >>> CEILING(0.234, 0.01) 0.24","title":"CEILING"},{"location":"functions/#combin","text":"Renvoie le nombre de fa\u00e7ons de choisir un certain nombre d\u2019objets dans un ensemble d\u2019une taille donn\u00e9e d\u2019objets. >>> COMBIN(8,2) 28 >>> COMBIN(4,2) 6 >>> COMBIN(10,7) 120","title":"COMBIN"},{"location":"functions/#cos","text":"Renvoie le cosinus d\u2019un angle donn\u00e9 en radians. >>> round(COS(1.047), 7) 0.5001711 >>> round(COS(60*PI()/180), 10) 0.5 >>> round(COS(RADIANS(60)), 10) 0.5","title":"COS"},{"location":"functions/#cosh","text":"Renvoie le cosinus hyperbolique de tout nombre r\u00e9el. >>> round(COSH(4), 6) 27.308233 >>> round(COSH(EXP(1)), 7) 7.6101251","title":"COSH"},{"location":"functions/#degrees","text":"Convertit une valeur d\u2019angle en radians en degr\u00e9s. >>> round(DEGREES(ACOS(-0.5)), 10) 120.0 >>> DEGREES(PI()) 180.0","title":"DEGREES"},{"location":"functions/#even","text":"Arrondit un nombre \u00e0 l\u2019entier pair sup\u00e9rieur le plus proche, en arrondissant loin de z\u00e9ro. >>> EVEN(1.5) 2 >>> EVEN(3) 4 >>> EVEN(2) 2 >>> EVEN(-1) -2","title":"EVEN"},{"location":"functions/#exp","text":"Renvoie le nombre d\u2019Euler, e (~2.718) \u00e9lev\u00e9 \u00e0 une puissance. >>> round(EXP(1), 8) 2.71828183 >>> round(EXP(2), 7) 7.3890561","title":"EXP"},{"location":"functions/#fact","text":"Renvoie la factorielle d\u2019un nombre. >>> FACT(5) 120 >>> FACT(1.9) 1 >>> FACT(0) 1 >>> FACT(1) 1 >>> FACT(-1) Traceback (most recent call last): ... ValueError: factorial() not defined for negative values","title":"FACT"},{"location":"functions/#factdouble","text":"Renvoie la \u201cdouble factorielle\u201d d\u2019un nombre. >>> FACTDOUBLE(6) 48 >>> FACTDOUBLE(7) 105 >>> FACTDOUBLE(3) 3 >>> FACTDOUBLE(4) 8","title":"FACTDOUBLE"},{"location":"functions/#floor","text":"Arrondit un nombre \u00e0 l\u2019entier multiple inf\u00e9rieur le plus proche de la signification sp\u00e9cifi\u00e9e. >>> FLOOR(3.7,2) 2 >>> FLOOR(-2.5,-2) -2 >>> FLOOR(2.5,-2) Traceback (most recent call last): ... ValueError: facteur argument invalide >>> FLOOR(1.58,0.1) 1.5 >>> FLOOR(0.234,0.01) 0.23","title":"FLOOR"},{"location":"functions/#gcd","text":"Renvoie le plus grand commun diviseur de un ou plusieurs entiers. >>> GCD(5, 2) 1 >>> GCD(24, 36) 12 >>> GCD(7, 1) 1 >>> GCD(5, 0) 5 >>> GCD(0, 5) 5 >>> GCD(5) 5 >>> GCD(14, 42, 21) 7","title":"GCD"},{"location":"functions/#int","text":"Arrondit un nombre \u00e0 l\u2019entier le plus proche qui est inf\u00e9rieur ou \u00e9gal \u00e0 lui. >>> INT(8.9) 8 >>> INT(-8.9) -9 >>> 19.5-INT(19.5) 0.5","title":"INT"},{"location":"functions/#lcm","text":"Renvoie le plus petit multiple commun de un ou plusieurs entiers. >>> LCM(5, 2) 10 >>> LCM(24, 36) 72 >>> LCM(0, 5) 0 >>> LCM(5) 5 >>> LCM(10, 100) 100 >>> LCM(12, 18) 36 >>> LCM(12, 18, 24) 72","title":"LCM"},{"location":"functions/#ln","text":"Renvoie le logarithme d\u2019un nombre, base e (nombre d\u2019Euler). >>> round(LN(86), 7) 4.4543473 >>> round(LN(2.7182818), 7) 1.0 >>> round(LN(EXP(3)), 10) 3.0","title":"LN"},{"location":"functions/#log","text":"Renvoie le logarithme d\u2019un nombre donn\u00e9 une base. >>> LOG(10) 1.0 >>> LOG(8, 2) 3.0 >>> round(LOG(86, 2.7182818), 7) 4.4543473","title":"LOG"},{"location":"functions/#log10","text":"Renvoie le logarithme d\u2019un nombre, base 10. >>> round(LOG10(86), 9) 1.934498451 >>> LOG10(10) 1.0 >>> LOG10(100000) 5.0 >>> LOG10(10**5) 5.0","title":"LOG10"},{"location":"functions/#mod","text":"Renvoie le r\u00e9sultat de l\u2019op\u00e9rateur modulo, le reste apr\u00e8s une op\u00e9ration de division. >>> MOD(3, 2) 1 >>> MOD(-3, 2) 1 >>> MOD(3, -2) -1 >>> MOD(-3, -2) -1","title":"MOD"},{"location":"functions/#mround","text":"Arrondit un nombre \u00e0 l\u2019entier multiple le plus proche d\u2019un autre. >>> MROUND(10, 3) 9 >>> MROUND(-10, -3) -9 >>> round(MROUND(1.3, 0.2), 10) 1.4 >>> MROUND(5, -2) Traceback (most recent call last): ... ValueError: facteur argument invalide","title":"MROUND"},{"location":"functions/#multinomial","text":"Renvoie la factorielle de la somme des valeurs divis\u00e9e par le produit des factorielles des valeurs. >>> MULTINOMIAL(2, 3, 4) 1260 >>> MULTINOMIAL(3) 1 >>> MULTINOMIAL(1,2,3) 60 >>> MULTINOMIAL(0,2,4,6) 13860","title":"MULTINOMIAL"},{"location":"functions/#num","text":"Pour une valeur flottante Python qui est en fait un entier, renvoie un type entier Python. Sinon, renvoie la valeur inchang\u00e9e. Cela est parfois utile lorsqu\u2019une valeur provient d\u2019une colonne num\u00e9rique Grist (repr\u00e9sent\u00e9e comme des flottants), mais lorsque des valeurs int sont en fait attendues. >>> NUM(-17.0) -17 >>> NUM(1.5) 1.5 >>> NUM(4) 4 >>> NUM(\"NA\") 'NA'","title":"NUM"},{"location":"functions/#odd","text":"Arrondit un nombre \u00e0 l\u2019entier impair sup\u00e9rieur le plus proche. >>> ODD(1.5) 3 >>> ODD(3) 3 >>> ODD(2) 3 >>> ODD(-1) -1 >>> ODD(-2) -3","title":"ODD"},{"location":"functions/#pi","text":"Renvoie la valeur de Pi \u00e0 14 d\u00e9cimales. >>> round(PI(), 9) 3.141592654 >>> round(PI()/2, 9) 1.570796327 >>> round(PI()*9, 8) 28.27433388","title":"PI"},{"location":"functions/#power","text":"Renvoie un nombre \u00e9lev\u00e9 \u00e0 une puissance. >>> POWER(5,2) 25.0 >>> round(POWER(98.6,3.2), 3) 2401077.222 >>> round(POWER(4,5.0/4), 9) 5.656854249","title":"POWER"},{"location":"functions/#product","text":"Renvoie le r\u00e9sultat de la multiplication d\u2019une s\u00e9rie de nombres. Chaque argument peut \u00eatre un nombre ou un tableau. >>> PRODUCT([5,15,30]) 2250 >>> PRODUCT([5,15,30], 2) 4500 >>> PRODUCT(5,15,[30],[2]) 4500","title":"PRODUCT"},{"location":"functions/#quotient","text":"Renvoie un nombre divis\u00e9 par un autre, sans le reste. >>> QUOTIENT(5, 2) 2 >>> QUOTIENT(4.5, 3.1) 1 >>> QUOTIENT(-10, 3) -3","title":"QUOTIENT"},{"location":"functions/#radians","text":"Convertit une valeur d\u2019angle en degr\u00e9s en radians. >>> round(RADIANS(270), 6) 4.712389","title":"RADIANS"},{"location":"functions/#rand","text":"Renvoie un nombre al\u00e9atoire entre 0 inclus et 1 exclus.","title":"RAND"},{"location":"functions/#randbetween","text":"Renvoie un entier al\u00e9atoire uniform\u00e9ment entre deux valeurs, inclusif.","title":"RANDBETWEEN"},{"location":"functions/#roman","text":"Formate un nombre en chiffres romains. Le deuxi\u00e8me argument est ignor\u00e9 dans cette impl\u00e9mentation. >>> ROMAN(499,0) 'CDXCIX' >>> ROMAN(499.2,0) 'CDXCIX' >>> ROMAN(57) 'LVII' >>> ROMAN(1912) 'MCMXII'","title":"ROMAN"},{"location":"functions/#round","text":"Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, par d\u00e9faut au nombre entier le plus proche si le nombre de places n\u2019est pas donn\u00e9. Arrondit loin de z\u00e9ro (\u2018vers le haut\u2019 pour les nombres positifs) en cas d\u2019\u00e9galit\u00e9, c\u2019est-\u00e0-dire lorsque le dernier chiffre est 5. >>> ROUND(1.4) 1.0 >>> ROUND(1.5) 2.0 >>> ROUND(2.5) 3.0 >>> ROUND(-2.5) -3.0 >>> ROUND(2.15, 1) 2.2 >>> ROUND(-1.475, 2) -1.48 >>> ROUND(21.5, -1) 20.0 >>> ROUND(626.3,-3) 1000.0 >>> ROUND(1.98,-1) 0.0 >>> ROUND(-50.55,-2) -100.0 >>> ROUND(0) 0.0","title":"ROUND"},{"location":"functions/#rounddown","text":"Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, en arrondissant toujours vers le bas vers z\u00e9ro. >>> ROUNDDOWN(3.2, 0) 3 >>> ROUNDDOWN(76.9,0) 76 >>> ROUNDDOWN(3.14159, 3) 3.141 >>> ROUNDDOWN(-3.14159, 1) -3.1 >>> ROUNDDOWN(31415.92654, -2) 31400","title":"ROUNDDOWN"},{"location":"functions/#roundup","text":"Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, en arrondissant toujours vers le haut loin de z\u00e9ro. >>> ROUNDUP(3.2,0) 4 >>> ROUNDUP(76.9,0) 77 >>> ROUNDUP(3.14159, 3) 3.142 >>> ROUNDUP(-3.14159, 1) -3.2 >>> ROUNDUP(31415.92654, -2) 31500","title":"ROUNDUP"},{"location":"functions/#seriessum","text":"\u00c9tant donn\u00e9 les param\u00e8tres x, n, m et a, renvoie la somme de la s\u00e9rie de puissance a_1 x^n + a_2 x^(n+m) + \u2026 + a_i*x^(n+(i-1)m), o\u00f9 i est le nombre d\u2019entr\u00e9es dans la plage a . >>> SERIESSUM(1,0,1,1) 1 >>> SERIESSUM(2,1,0,[1,2,3]) 12 >>> SERIESSUM(-3,1,1,[2,4,6]) -132 >>> round(SERIESSUM(PI()/4,0,2,[1,-1./FACT(2),1./FACT(4),-1./FACT(6)]), 6) 0.707103","title":"SERIESSUM"},{"location":"functions/#sign","text":"\u00c9tant donn\u00e9 un nombre d\u2019entr\u00e9e, renvoie -1 s\u2019il est n\u00e9gatif, 1 s\u2019il est positif, et 0 s\u2019il est z\u00e9ro. >>> SIGN(10) 1 >>> SIGN(4.0-4.0) 0 >>> SIGN(-0.00001) -1","title":"SIGN"},{"location":"functions/#sin","text":"Renvoie le sinus d\u2019un angle donn\u00e9 en radians. >>> round(SIN(PI()), 10) 0.0 >>> SIN(PI()/2) 1.0 >>> round(SIN(30*PI()/180), 10) 0.5 >>> round(SIN(RADIANS(30)), 10) 0.5","title":"SIN"},{"location":"functions/#sinh","text":"Renvoie le sinus hyperbolique de tout nombre r\u00e9el. >>> round(2.868*SINH(0.0342*1.03), 7) 0.1010491","title":"SINH"},{"location":"functions/#sqrt","text":"Renvoie la racine carr\u00e9e positive d\u2019un nombre positif. >>> SQRT(16) 4.0 >>> SQRT(-16) Traceback (most recent call last): ... ValueError: math domain error >>> SQRT(ABS(-16)) 4.0","title":"SQRT"},{"location":"functions/#sqrtpi","text":"Renvoie la racine carr\u00e9e positive du produit de Pi et du nombre positif donn\u00e9. >>> round(SQRTPI(1), 6) 1.772454 >>> round(SQRTPI(2), 6) 2.506628","title":"SQRTPI"},{"location":"functions/#subtotal","text":"Renvoie un sous-total pour une plage verticale de cellules en utilisant une fonction d\u2019agr\u00e9gation sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SUBTOTAL"},{"location":"functions/#sum","text":"Renvoie la somme d\u2019une s\u00e9rie de nombres. Chaque argument peut \u00eatre un nombre ou un tableau. Les valeurs non num\u00e9riques sont ignor\u00e9es. >>> SUM([5,15,30]) 50 >>> SUM([5.,15,30], 2) 52.0 >>> SUM(5,15,[30],[2]) 52","title":"SUM"},{"location":"functions/#sumif","text":"Renvoie une somme conditionnelle sur une plage. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SUMIF"},{"location":"functions/#sumifs","text":"Renvoie la somme d\u2019une plage en fonction de plusieurs crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SUMIFS"},{"location":"functions/#sumproduct","text":"Multiplie les composants correspondants dans deux tableaux de taille \u00e9gale, et renvoie la somme de ces produits. >>> SUMPRODUCT([3,8,1,4,6,9], [2,6,5,7,7,3]) 156 >>> SUMPRODUCT([], [], []) 0 >>> SUMPRODUCT([-0.25], [-2], [-3]) -1.5 >>> SUMPRODUCT([-0.25, -0.25], [-2, -2], [-3, -3]) -3.0","title":"SUMPRODUCT"},{"location":"functions/#sumsq","text":"Renvoie la somme des carr\u00e9s d\u2019une s\u00e9rie de nombres et/ou de cellules. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SUMSQ"},{"location":"functions/#tan","text":"Renvoie la tangente d\u2019un angle donn\u00e9 en radians. >>> round(TAN(0.785), 8) 0.99920399 >>> round(TAN(45*PI()/180), 10) 1.0 >>> round(TAN(RADIANS(45)), 10) 1.0","title":"TAN"},{"location":"functions/#tanh","text":"Renvoie la tangente hyperbolique de tout nombre r\u00e9el. >>> round(TANH(-2), 6) -0.964028 >>> TANH(0) 0.0 >>> round(TANH(0.5), 6) 0.462117","title":"TANH"},{"location":"functions/#trunc","text":"Tronque un nombre \u00e0 un certain nombre de chiffres significatifs en omettant les chiffres moins significatifs. >>> TRUNC(8.9) 8 >>> TRUNC(-8.9) -8 >>> TRUNC(0.45) 0","title":"TRUNC"},{"location":"functions/#uuid","text":"G\u00e9n\u00e8re un identifiant de cha\u00eene format\u00e9 UUID al\u00e9atoire. Puisque UUID() produit une valeur diff\u00e9rente chaque fois qu\u2019il est appel\u00e9, il est pr\u00e9f\u00e9rable de l\u2019utiliser dans formule de d\u00e9clenchement pour de nouveaux enregistrements. Cela ne calculerait UUID() qu\u2019une seule fois et figerait la valeur calcul\u00e9e. En revanche, une formule ordinaire peut \u00eatre recalcul\u00e9e \u00e0 chaque fois que le document est recharg\u00e9, produisant une valeur diff\u00e9rente pour UUID() \u00e0 chaque fois.","title":"UUID"},{"location":"functions/#horaire","text":"","title":"Horaire"},{"location":"functions/#schedule","text":"Renvoie la liste des objets datetime g\u00e9n\u00e9r\u00e9s selon la cha\u00eene horaire . Commence \u00e0 d\u00e9but , qui par d\u00e9faut est NOW(). G\u00e9n\u00e8re au maximum compte r\u00e9sultats (10 par d\u00e9faut). Si fin est donn\u00e9, s\u2019arr\u00eate l\u00e0. L\u2019horaire a le format \u201cINTERVALLE : SLOTS, \u2026\u201d. Par exemple : annuel : Jan-15, Apr-15, Jul-15 -- Trois fois par an aux dates donn\u00e9es \u00e0 minuit. annuel : 1/15, 4/15, 7/15 -- Identique \u00e0 ce qui pr\u00e9c\u00e8de. mensuel : /1 14h, /15 14h -- Le 1er et le 15 de chaque mois, \u00e0 14h. 3-mois : /10, +1m /20 -- Tous les 3 mois le 10 du mois 1, le 20 du mois 2. hebdomadaire : Lu 9h, Ma 9h, Ve 14h -- Trois fois par semaine \u00e0 des heures sp\u00e9cifi\u00e9es. 2-semaines : Lu, +1s Ma -- Toutes les 2 semaines le lundi de la semaine 1, le mardi de la semaine 2. quotidien : 07:30, 21:00 -- Deux fois par jour \u00e0 des heures sp\u00e9cifi\u00e9es. 2-jours : 00h, 16h, +1j 08h -- Trois fois tous les deux jours, espac\u00e9s uniform\u00e9ment. horaire : :15, :45 -- 15 minutes avant et apr\u00e8s chaque heure. 4-heures : :00, 1:20, 2:40 -- Trois fois toutes les 4 heures, espac\u00e9s uniform\u00e9ment. 10-minutes : +0s -- Toutes les 10 minutes \u00e0 la minute. L\u2019INTERVALLE doit \u00eatre soit de la forme N-unit\u00e9 o\u00f9 N est un nombre et unit\u00e9 est l\u2019un des ann\u00e9e , mois , semaine , jour , heure ; ou l\u2019un des alias : annuel , mensuel , hebdomadaire , quotidien , horaire , qui signifient 1-ann\u00e9e , 1-mois , etc. Les SLOTS prennent en charge les unit\u00e9s suivantes : `Jan-15` ou `1/15` -- Mois et jour du mois ; disponible lorsque l'INTERVALLE est bas\u00e9 sur l'ann\u00e9e. `/15` -- Jour du mois, disponible lorsque l'INTERVALLE est bas\u00e9 sur le mois. `Lun`, `Lu`, `Vendredi` -- Jour de la semaine (ou abr\u00e9viation), lorsque l'INTERVALLE est bas\u00e9 sur la semaine. 10h, 13h30, 15h45 -- Heure de la journ\u00e9e, disponible pour des intervalles bas\u00e9s sur le jour ou plus longs. :45, :00 -- Minutes de l'heure, disponibles lorsque l'INTERVALLE est bas\u00e9 sur l'heure. +1j, +15j -- Combien de jours ajouter au d\u00e9but de l'INTERVALLE. +1s -- Combien de semaines ajouter au d\u00e9but de l'INTERVALLE. +1m -- Combien de mois ajouter au d\u00e9but de l'INTERVALLE. Les SLOTS sont toujours relatifs \u00e0 l\u2019INTERVALLE plut\u00f4t qu\u2019\u00e0 d\u00e9but . Les intervalles bas\u00e9s sur la semaine commencent le dimanche. Par exemple, hebdomadaire : +1j, +4j est identique \u00e0 hebdomadaire : Lun, Jeu , et g\u00e9n\u00e8re des heures les lundis et jeudis, quel que soit d\u00e9but . Le premier temps g\u00e9n\u00e9r\u00e9 est d\u00e9termin\u00e9 par l\u2019 unit\u00e9 de l\u2019INTERVALLE sans tenir compte du multiple. Par exemple, \u00e0 la fois \u201c2-semaine : Lun\u201d et \u201c3-semaine : Lun\u201d commencent le premier lundi apr\u00e8s d\u00e9but , et g\u00e9n\u00e8rent ensuite soit tous les deuxi\u00e8mes soit tous les troisi\u00e8mes lundis apr\u00e8s cela. De m\u00eame, 24-heures : :00 commence avec le premier d\u00e9but d\u2019heure apr\u00e8s d\u00e9but (pas avec minuit), puis se r\u00e9p\u00e8te toutes les 24 heures. Pour commencer avec la minuit apr\u00e8s d\u00e9but , utilisez quotidien : 0:00 . Pour les unit\u00e9s d\u2019intervalle d\u2019un jour ou plus, si l\u2019heure de la journ\u00e9e n\u2019est pas sp\u00e9cifi\u00e9e, elle par d\u00e9faut \u00e0 minuit. Le fuseau horaire de d\u00e9but d\u00e9termine le fuseau horaire des temps g\u00e9n\u00e9r\u00e9s. >>> def show(dates): return [d.strftime(\"%Y-%m-%d %H:%M\") for d in dates] >>> start = datetime(2018, 9, 4, 14, 0); # 14h le mardi 4 septembre 2018. >>> show(SCHEDULE('annual: Jan-15, Apr-15, Jul-15, Oct-15', start=start, count=4)) ['2018-10-15 00:00', '2019-01-15 00:00', '2019-04-15 00:00', '2019-07-15 00:00'] >>> show(SCHEDULE('annual: 1/15, 4/15, 7/15', start=start, count=4)) ['2019-01-15 00:00', '2019-04-15 00:00', '2019-07-15 00:00', '2020-01-15 00:00'] >>> show(SCHEDULE('monthly: /1 14h, /15 17h', start=start, count=4)) ['2018-09-15 17:00', '2018-10-01 14:00', '2018-10-15 17:00', '2018-11-01 14:00'] >>> show(SCHEDULE('3-months: /10, +1m /20', start=start, count=4)) ['2018-09-10 00:00', '2018-10-20 00:00', '2018-12-10 00:00', '2019-01-20 00:00'] >>> show(SCHEDULE('weekly: Lu 9h, Ma 9h, Ve 14h', start=start, count=4)) ['2018-09-07 14:00', '2018-09-10 09:00', '2018-09-11 09:00', '2018-09-14 14:00'] >>> show(SCHEDULE('2-semaines: Lu, +1s Ma', start=start, count=4)) ['2018-09-11 00:00', '2018-09-17 00:00', '2018-09-25 00:00', '2018-10-01 00:00'] >>> show(SCHEDULE('quotidien: 07:30, 21:00', start=start, count=4)) ['2018-09-04 21:00', '2018-09-05 07:30', '2018-09-05 21:00', '2018-09-06 07:30'] >>> show(SCHEDULE('2-jours: 00h, 16h, +1j 08h', start=start, count=4)) ['2018-09-04 16:00', '2018-09-05 08:00', '2018-09-06 00:00', '2018-09-06 16:00'] >>> show(SCHEDULE('horaire: :15, :45', start=start, count=4)) ['2018-09-04 14:15', '2018-09-04 14:45', '2018-09-04 15:15', '2018-09-04 15:45'] >>> show(SCHEDULE('4-heures: :00, +1H :20, +2H :40', start=start, count=4)) ['2018-09-04 14:00', '2018-09-04 15:20', '2018-09-04 16:40', '2018-09-04 18:00']","title":"SCHEDULE"},{"location":"functions/#statistiques","text":"","title":"Statistiques"},{"location":"functions/#avedev","text":"Calcule la moyenne des magnitudes des \u00e9carts des donn\u00e9es par rapport \u00e0 la moyenne d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"AVEDEV"},{"location":"functions/#average","text":"Renvoie la valeur moyenne num\u00e9rique dans un ensemble de donn\u00e9es, en ignorant les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les valeurs logiques et vides, et les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. >>> AVERAGE([2, -1.0, 11]) 4.0 >>> AVERAGE([2, -1, 11, \"Bonjour\"]) 4.0 >>> AVERAGE([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11]) 4.0 >>> AVERAGE(False, True) Traceback (most recent call last): ... ZeroDivisionError: float division by zero","title":"AVERAGE"},{"location":"functions/#averagea","text":"Renvoie la valeur moyenne num\u00e9rique dans un ensemble de donn\u00e9es, en comptant les valeurs non num\u00e9riques comme 0. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. >>> AVERAGEA([2, -1.0, 11]) 4.0 >>> AVERAGEA([2, -1, 11, \"Bonjour\"]) 3.0 >>> AVERAGEA([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 1.5 >>> AVERAGEA(False, True) 0.5","title":"AVERAGEA"},{"location":"functions/#averageif","text":"Renvoie la moyenne d\u2019une plage en fonction de crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"AVERAGEIF"},{"location":"functions/#averageifs","text":"Renvoie la moyenne d\u2019une plage en fonction de plusieurs crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"AVERAGEIFS"},{"location":"functions/#average_weighted","text":"\u00c9tant donn\u00e9 une liste de paires (valeur, poids), trouve la moyenne des valeurs pond\u00e9r\u00e9es par les poids correspondants. Ignore toutes les paires avec une valeur ou un poids non num\u00e9rique. Si vous avez deux listes, de valeurs et de poids, utilisez la fonction int\u00e9gr\u00e9e Python zip() pour cr\u00e9er une liste de paires. >>> AVERAGE_WEIGHTED(((95, .25), (90, .1), (\"X\", .5), (85, .15), (88, .2), (82, .3), (70, None))) 87.7 >>> AVERAGE_WEIGHTED(zip([95, 90, \"X\", 85, 88, 82, 70], [25, 10, 50, 15, 20, 30, None])) 87.7 >>> AVERAGE_WEIGHTED(zip([95, 90, False, 85, 88, 82, 70], [.25, .1, .5, .15, .2, .3, True])) 87.7","title":"AVERAGE_WEIGHTED"},{"location":"functions/#binomdist","text":"Calcule la probabilit\u00e9 de tirer un certain nombre de succ\u00e8s (ou un nombre maximum de succ\u00e8s) dans un certain nombre d\u2019essais donn\u00e9 une population d\u2019une certaine taille contenant un certain nombre de succ\u00e8s, avec remplacement des tirages. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"BINOMDIST"},{"location":"functions/#confidence","text":"Calcule la largeur de la moiti\u00e9 de l\u2019intervalle de confiance pour une distribution normale. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CONFIDENCE"},{"location":"functions/#correl","text":"Calcule r, le coefficient de corr\u00e9lation de produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CORREL"},{"location":"functions/#count","text":"Renvoie le nombre de valeurs num\u00e9riques et de dates/datetime dans un ensemble de donn\u00e9es, ignorant d\u2019autres types de valeurs. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et vides, et les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. >>> COUNT([2, -1.0, 11]) 3 >>> COUNT([2, -1, 11, \"Bonjour\"]) 3 >>> COUNT([DATE(2000, 1, 1), DATE(2000, 1, 2), DATE(2000, 1, 3), \"Bonjour\"]) 3 >>> COUNT([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 4 >>> COUNT(False, True) 0","title":"COUNT"},{"location":"functions/#counta","text":"Renvoie le nombre de toutes les valeurs dans un ensemble de donn\u00e9es, y compris les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. >>> COUNTA([2, -1.0, 11]) 3 >>> COUNTA([2, -1, 11, \"Bonjour\"]) 4 >>> COUNTA([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 9 >>> COUNTA(False, True) 2","title":"COUNTA"},{"location":"functions/#covar","text":"Calcule la covariance d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"COVAR"},{"location":"functions/#critbinom","text":"Calcule la plus petite valeur pour laquelle la distribution binomiale cumulative est sup\u00e9rieure ou \u00e9gale \u00e0 un crit\u00e8re sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CRITBINOM"},{"location":"functions/#devsq","text":"Calcule la somme des carr\u00e9s des \u00e9carts bas\u00e9s sur un \u00e9chantillon. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"DEVSQ"},{"location":"functions/#expondist","text":"Renvoie la valeur de la fonction de distribution exponentielle avec un lambda sp\u00e9cifi\u00e9 \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"EXPONDIST"},{"location":"functions/#fdist","text":"Calcule la distribution de probabilit\u00e9 F \u00e0 droite (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"FDIST"},{"location":"functions/#fisher","text":"Renvoie la transformation de Fisher d\u2019une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"FISHER"},{"location":"functions/#fisherinv","text":"Renvoie la transformation inverse de Fisher d\u2019une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"FISHERINV"},{"location":"functions/#forecast","text":"Calcule la valeur y attendue pour un x sp\u00e9cifi\u00e9 bas\u00e9 sur une r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"FORECAST"},{"location":"functions/#f_dist","text":"Calcule la distribution de probabilit\u00e9 F \u00e0 gauche (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"F_DIST"},{"location":"functions/#f_dist_rt","text":"Calcule la distribution de probabilit\u00e9 F \u00e0 droite (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"F_DIST_RT"},{"location":"functions/#geomean","text":"Calcule la moyenne g\u00e9om\u00e9trique d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"GEOMEAN"},{"location":"functions/#harmean","text":"Calcule la moyenne harmonique d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"HARMEAN"},{"location":"functions/#hypgeomdist","text":"Calcule la probabilit\u00e9 de tirer un certain nombre de succ\u00e8s dans un certain nombre d\u2019essais, \u00e9tant donn\u00e9 une population d\u2019une certaine taille contenant un certain nombre de succ\u00e8s, sans remplacement des tirages. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"HYPGEOMDIST"},{"location":"functions/#intercept","text":"Calcule la valeur y \u00e0 laquelle la ligne r\u00e9sultant de la r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es va intersecter l\u2019axe y (x=0). Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"INTERCEPT"},{"location":"functions/#kurt","text":"Calcule la kurtose d\u2019un ensemble de donn\u00e9es, qui d\u00e9crit la forme, et en particulier le \u201cpic\u201d de cet ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"KURT"},{"location":"functions/#large","text":"Renvoie le n-i\u00e8me plus grand \u00e9l\u00e9ment d\u2019un ensemble de donn\u00e9es, o\u00f9 n est d\u00e9fini par l\u2019utilisateur. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"LARGE"},{"location":"functions/#loginv","text":"Renvoie la valeur de la distribution cumulative log-normale inverse avec une moyenne et un \u00e9cart type donn\u00e9s \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"LOGINV"},{"location":"functions/#lognormdist","text":"Renvoie la valeur de la distribution cumulative log-normale avec une moyenne et un \u00e9cart type donn\u00e9s \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"LOGNORMDIST"},{"location":"functions/#max","text":"Renvoie la valeur maximale d\u2019un ensemble de donn\u00e9es, en ignorant les valeurs autres que les nombres et les dates/datetime. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Renvoie 0 si les arguments ne contiennent aucun nombre ou date. >>> MAX([2, -1.5, 11.5]) 11.5 >>> MAX([2, -1.5, \"Hello\"], True, [False, \"123\", \"\", 11.5]) 11.5 >>> MAX(True, -123) -123 >>> MAX(\"123\", -123) -123 >>> MAX(\"Hello\", \"123\", True, False) 0 >>> MAX(DATE(2015, 1, 1), DATE(2015, 1, 2)) datetime.date(2015, 1, 2) >>> MAX(DATE(2015, 1, 1), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.datetime(2015, 1, 1, 12, 34, 56) >>> MAX(DATE(2015, 1, 2), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.date(2015, 1, 2)","title":"MAX"},{"location":"functions/#maxa","text":"Renvoie la valeur num\u00e9rique maximale d\u2019un ensemble de donn\u00e9es. Chaque argument peut \u00eatre une valeur d\u2019un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. Renvoie 0 si les arguments ne contiennent aucun nombre. >>> MAXA([2, -1.5, 11.5]) 11.5 >>> MAXA([2, -1.5, \"Hello\", DATE(2015, 1, 1)], True, [False, \"123\", \"\", 11.5]) 11.5 >>> MAXA(True, -123) 1 >>> MAXA(\"123\", -123) 0 >>> MAXA(\"Hello\", \"123\", DATE(2015, 1, 1)) 0","title":"MAXA"},{"location":"functions/#median","text":"Renvoie la valeur m\u00e9diane d\u2019un ensemble de donn\u00e9es num\u00e9riques, en ignorant les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Produit une erreur si les arguments ne contiennent aucun nombre. La m\u00e9diane est le nombre du milieu lorsque toutes les valeurs sont tri\u00e9es. Ainsi, la moiti\u00e9 des valeurs dans l\u2019ensemble de donn\u00e9es sont inf\u00e9rieures \u00e0 la m\u00e9diane, et l\u2019autre moiti\u00e9 est sup\u00e9rieure. S\u2019il y a un nombre pair de valeurs dans l\u2019ensemble de donn\u00e9es, renvoie la moyenne des deux nombres du milieu. >>> MEDIAN(1, 2, 3, 4, 5) 3 >>> MEDIAN(3, 5, 1, 4, 2) 3 >>> MEDIAN(range(10)) 4.5 >>> MEDIAN(\"Hello\", \"123\", DATE(2015, 1, 1), 12.3) 12.3 >>> MEDIAN(\"Hello\", \"123\", DATE(2015, 1, 1)) Traceback (most recent call last): ... ValueError: MEDIAN requires at least one number","title":"MEDIAN"},{"location":"functions/#min","text":"Renvoie la valeur minimale d\u2019un ensemble de donn\u00e9es, en ignorant les valeurs autres que les nombres et les dates/datetimes. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Renvoie 0 si les arguments ne contiennent aucun nombre ou date. >>> MIN([2, -1.5, 11.5]) -1.5 >>> MIN([2, -1.5, \"Hello\"], True, [False, \"123\", \"\", 11.5]) -1.5 >>> MIN(True, 123) 123 >>> MIN(\"-123\", 123) 123 >>> MIN(\"Hello\", \"123\", True, False) 0 >>> MIN(DATE(2015, 1, 1), DATE(2015, 1, 2)) datetime.date(2015, 1, 1) >>> MIN(DATE(2015, 1, 1), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.date(2015, 1, 1) >>> MIN(DATE(2015, 1, 2), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.datetime(2015, 1, 1, 12, 34, 56)","title":"MIN"},{"location":"functions/#mina","text":"Renvoie la valeur num\u00e9rique minimale d\u2019un ensemble de donn\u00e9es. Chaque argument peut \u00eatre une valeur d\u2019un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. Renvoie 0 si les arguments ne contiennent aucun nombre. >>> MINA([2, -1.5, 11.5]) -1.5 >>> MINA([2, -1.5, \"Hello\", DATE(2015, 1, 1)], True, [False, \"123\", \"\", 11.5]) -1.5 >>> MINA(True, 123) 1 >>> MINA(\"-123\", 123) 0 >>> MINA(\"Hello\", \"123\", DATE(2015, 1, 1)) 0","title":"MINA"},{"location":"functions/#mode","text":"Renvoie la valeur la plus courante dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"MODE"},{"location":"functions/#negbinomdist","text":"Calcule la probabilit\u00e9 de tirer un certain nombre d\u2019\u00e9checs avant un certain nombre de succ\u00e8s, \u00e9tant donn\u00e9 une probabilit\u00e9 de succ\u00e8s dans des essais ind\u00e9pendants. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NEGBINOMDIST"},{"location":"functions/#normdist","text":"Renvoie la valeur de la fonction de distribution normale (ou fonction de distribution cumulative normale) pour une valeur sp\u00e9cifi\u00e9e, une moyenne et un \u00e9cart type. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NORMDIST"},{"location":"functions/#norminv","text":"Renvoie la valeur de la fonction de distribution normale inverse pour une valeur sp\u00e9cifi\u00e9e, une moyenne et un \u00e9cart type. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NORMINV"},{"location":"functions/#normsdist","text":"Renvoie la valeur de la fonction de distribution cumulative normale standard pour une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NORMSDIST"},{"location":"functions/#normsinv","text":"Renvoie la valeur de la fonction de distribution normale standard inverse pour une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NORMSINV"},{"location":"functions/#pearson","text":"Calcule r, le coefficient de corr\u00e9lation produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PEARSON"},{"location":"functions/#percentile","text":"Renvoie la valeur \u00e0 un certain percentile d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERCENTILE"},{"location":"functions/#percentrank","text":"Renvoie le rang en pourcentage (percentile) d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERCENTRANK"},{"location":"functions/#percentrank_exc","text":"Renvoie le rang en pourcentage (percentile) de 0 \u00e0 1 exclusif d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERCENTRANK_EXC"},{"location":"functions/#percentrank_inc","text":"Renvoie le rang en pourcentage (percentile) de 0 \u00e0 1 inclusif d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERCENTRANK_INC"},{"location":"functions/#permut","text":"Renvoie le nombre de fa\u00e7ons de choisir un certain nombre d\u2019objets \u00e0 partir d\u2019un ensemble d\u2019une taille donn\u00e9e d\u2019objets, en tenant compte de l\u2019ordre. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERMUT"},{"location":"functions/#poisson","text":"Renvoie la valeur de la fonction de distribution de Poisson (ou fonction de distribution cumulative de Poisson) pour une valeur et une moyenne sp\u00e9cifi\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"POISSON"},{"location":"functions/#prob","text":"\u00c9tant donn\u00e9 un ensemble de valeurs et des probabilit\u00e9s correspondantes, calcule la probabilit\u00e9 qu\u2019une valeur choisie au hasard tombe entre deux limites. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PROB"},{"location":"functions/#quartile","text":"Renvoie une valeur la plus proche d\u2019un certain quartile d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"QUARTILE"},{"location":"functions/#rank_avg","text":"Renvoie le rang d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. S\u2019il y a plus d\u2019une entr\u00e9e de la m\u00eame valeur dans l\u2019ensemble de donn\u00e9es, le rang moyen des entr\u00e9es sera renvoy\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"RANK_AVG"},{"location":"functions/#rank_eq","text":"Renvoie le rang d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. S\u2019il y a plus d\u2019une entr\u00e9e de la m\u00eame valeur dans l\u2019ensemble de donn\u00e9es, le meilleur rang des entr\u00e9es sera renvoy\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"RANK_EQ"},{"location":"functions/#rsq","text":"Calcule le carr\u00e9 de r, le coefficient de corr\u00e9lation produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"RSQ"},{"location":"functions/#skew","text":"Calcule l\u2019asym\u00e9trie d\u2019un ensemble de donn\u00e9es, qui d\u00e9crit la sym\u00e9trie de cet ensemble de donn\u00e9es par rapport \u00e0 la moyenne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SKEW"},{"location":"functions/#slope","text":"Calcule la pente de la ligne r\u00e9sultant de la r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SLOPE"},{"location":"functions/#small","text":"Renvoie le n-i\u00e8me plus petit \u00e9l\u00e9ment d\u2019un ensemble de donn\u00e9es, o\u00f9 n est d\u00e9fini par l\u2019utilisateur. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SMALL"},{"location":"functions/#standardize","text":"Calcule l\u2019\u00e9quivalent normalis\u00e9 d\u2019une variable al\u00e9atoire donn\u00e9e la moyenne et l\u2019\u00e9cart type de la distribution. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"STANDARDIZE"},{"location":"functions/#stdev","text":"Calcule l\u2019\u00e9cart type bas\u00e9 sur un \u00e9chantillon, en ignorant les valeurs non num\u00e9riques. >>> STDEV([2, 5, 8, 13, 10]) 4.277849927241488 >>> STDEV([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.277849927241488 >>> STDEV([2, 5, 8, 13, 10], 3, 12, 15) 4.810702354423639 >>> STDEV([2, 5, 8, 13, 10], [3, 12, 15]) 4.810702354423639 >>> STDEV([5]) Traceback (most recent call last): ... ZeroDivisionError: float division by zero","title":"STDEV"},{"location":"functions/#stdeva","text":"Calcule l\u2019\u00e9cart type bas\u00e9 sur un \u00e9chantillon, en consid\u00e9rant le texte comme la valeur 0 . >>> STDEVA([2, 5, 8, 13, 10]) 4.277849927241488 >>> STDEVA([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.969550137731641 >>> STDEVA([2, 5, 8, 13, 10], 1, 0, 0) 4.969550137731641 >>> STDEVA([2, 5, 8, 13, 10], [1, 0, 0]) 4.969550137731641 >>> STDEVA([5]) Traceback (most recent call last): ... ZeroDivisionError: float division by zero","title":"STDEVA"},{"location":"functions/#stdevp","text":"Calcule l\u2019\u00e9cart type bas\u00e9 sur une population enti\u00e8re, en ignorant les valeurs non num\u00e9riques. >>> STDEVP([2, 5, 8, 13, 10]) 3.8262252939417984 >>> STDEVP([2, 5, 8, 13, 10, True, False, \"Test\"]) 3.8262252939417984 >>> STDEVP([2, 5, 8, 13, 10], 3, 12, 15) 4.5 >>> STDEVP([2, 5, 8, 13, 10], [3, 12, 15]) 4.5 >>> STDEVP([5]) 0.0","title":"STDEVP"},{"location":"functions/#stdevpa","text":"Calcule l\u2019\u00e9cart type bas\u00e9 sur une population enti\u00e8re, en consid\u00e9rant le texte comme la valeur 0 . >>> STDEVPA([2, 5, 8, 13, 10]) 3.8262252939417984 >>> STDEVPA([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.648588495446763 >>> STDEVPA([2, 5, 8, 13, 10], 1, 0, 0) 4.648588495446763 >>> STDEVPA([2, 5, 8, 13, 10], [1, 0, 0]) 4.648588495446763 >>> STDEVPA([5]) 0.0","title":"STDEVPA"},{"location":"functions/#steyx","text":"Calcule l\u2019erreur standard de la valeur y pr\u00e9dite pour chaque x dans la r\u00e9gression d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"STEYX"},{"location":"functions/#tdist","text":"Calcule la probabilit\u00e9 pour la distribution t de Student avec une entr\u00e9e donn\u00e9e (x). Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TDIST"},{"location":"functions/#tinv","text":"Calcule l\u2019inverse de la fonction TDIST \u00e0 deux queues. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TINV"},{"location":"functions/#trimmean","text":"Calcule la moyenne d\u2019un ensemble de donn\u00e9es en excluant une certaine proportion de donn\u00e9es des extr\u00e9mit\u00e9s haute et basse de l\u2019ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TRIMMEAN"},{"location":"functions/#ttest","text":"Renvoie la probabilit\u00e9 associ\u00e9e au test t. D\u00e9termine si deux \u00e9chantillons sont susceptibles de provenir des m\u00eames deux populations sous-jacentes ayant la m\u00eame moyenne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TTEST"},{"location":"functions/#t_inv","text":"Calcule l\u2019inverse n\u00e9gatif de la fonction TDIST \u00e0 une queue. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"T_INV"},{"location":"functions/#t_inv_2t","text":"Calcule l\u2019inverse de la fonction TDIST \u00e0 deux queues. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"T_INV_2T"},{"location":"functions/#var","text":"Calcule la variance bas\u00e9e sur un \u00e9chantillon. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"VAR"},{"location":"functions/#vara","text":"Calcule une estimation de la variance bas\u00e9e sur un \u00e9chantillon, en consid\u00e9rant le texte comme la valeur 0 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"VARA"},{"location":"functions/#varp","text":"Calcule la variance bas\u00e9e sur une population enti\u00e8re. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"VARP"},{"location":"functions/#varpa","text":"Calcule la variance bas\u00e9e sur une population enti\u00e8re, en consid\u00e9rant le texte comme la valeur 0 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"VARPA"},{"location":"functions/#weibull","text":"Renvoie la valeur de la fonction de distribution de Weibull (ou fonction de distribution cumulative de Weibull) pour une forme et une \u00e9chelle sp\u00e9cifi\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"WEIBULL"},{"location":"functions/#ztest","text":"Renvoie la valeur P \u00e0 deux queues d\u2019un test Z avec distribution standard. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ZTEST"},{"location":"functions/#texte","text":"","title":"Texte"},{"location":"functions/#char","text":"Convertit un nombre en un caract\u00e8re selon la table Unicode actuelle. Identique \u00e0 unichr(number) . >>> CHAR(65) u'A' >>> CHAR(33) u'!'","title":"CHAR"},{"location":"functions/#clean","text":"Renvoie le texte avec les caract\u00e8res non imprimables supprim\u00e9s. Cela supprime \u00e0 la fois les caract\u00e8res avec des valeurs de 0 \u00e0 31, et d\u2019autres caract\u00e8res Unicode dans la cat\u00e9gorie \u201ccaract\u00e8res de contr\u00f4le\u201d. >>> CLEAN(CHAR(9) + \"Rapport mensuel\" + CHAR(10)) u'Rapport mensuel'","title":"CLEAN"},{"location":"functions/#code","text":"Renvoie la valeur de la carte Unicode num\u00e9rique du premier caract\u00e8re de la cha\u00eene fournie. Identique \u00e0 ord(string[0]) . >>> CODE(\"A\") 65 >>> CODE(\"!\") 33 >>> CODE(\"!A\") 33","title":"CODE"},{"location":"functions/#concat","text":"Joint ensemble de cha\u00eenes de texte en une seule cha\u00eene. \u00c9galement disponible sous le nom CONCATENATE . Semblable \u00e0 l\u2019expression Python \"\".join(array_of_strings) . >>> CONCAT(\"Population de ruisseau pour \", \"truite\", \" \", \"esp\u00e8ces\", \" est \", 32, \"/mile.\") u'Population de ruisseau pour truite esp\u00e8ces est 32/mile.' >>> CONCAT(\"Dans \", 4, \" jours, c'est \", datetime.date(2016,1,1)) u'Dans 4 jours, c'est 2016-01-01' >>> CONCAT(\"abc\") u'abc' >>> CONCAT(0, \"abc\") u'0abc' >>> assert CONCAT(2, u\" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e'","title":"CONCAT"},{"location":"functions/#concatenate","text":"Joint ensemble de cha\u00eenes de texte en une seule cha\u00eene. \u00c9galement disponible sous le nom CONCAT . Semblable \u00e0 l\u2019expression Python \"\".join(array_of_strings) . >>> CONCATENATE(\"Population de ruisseau pour \", \"truite\", \" \", \"esp\u00e8ces\", \" est \", 32, \"/mile.\") u'Population de ruisseau pour truite esp\u00e8ces est 32/mile.' >>> CONCATENATE(\"Dans \", 4, \" jours, c'est \", datetime.date(2016,1,1)) u'Dans 4 jours, c'est 2016-01-01' >>> CONCATENATE(\"abc\") u'abc' >>> CONCATENATE(0, \"abc\") u'0abc' >>> assert CONCATENATE(2, u\" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' >>> assert CONCATENATE(2, \" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' >>> assert CONCATENATE(2, \" cr\u00e8me \", \"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e'","title":"CONCATENATE"},{"location":"functions/#dollar","text":"Formate un nombre en un montant en dollars format\u00e9, avec des d\u00e9cimales arrondies \u00e0 la place sp\u00e9cifi\u00e9e (. Si la valeur des d\u00e9cimales est omise, elle est par d\u00e9faut \u00e0 2. >>> DOLLAR(1234.567) '$1,234.57' >>> DOLLAR(1234.567, -2) '$1,200' >>> DOLLAR(-1234.567, -2) '($1,200)' >>> DOLLAR(-0.123, 4) '($0.1230)' >>> DOLLAR(99.888) '$99.89' >>> DOLLAR(0) '$0.00' >>> DOLLAR(10, 0) '$10'","title":"DOLLAR"},{"location":"functions/#exact","text":"Teste si deux cha\u00eenes sont identiques. Identique \u00e0 string2 == string2 . >>> EXACT(\"mot\", \"mot\") True >>> EXACT(\"Mot\", \"mot\") False >>> EXACT(\"m ot\", \"mot\") False","title":"EXACT"},{"location":"functions/#find","text":"Renvoie la position \u00e0 laquelle une cha\u00eene est d\u2019abord trouv\u00e9e dans le texte. La recherche est sensible \u00e0 la casse. La position renvoy\u00e9e est 1 si within_text commence par find_text. start_num sp\u00e9cifie le caract\u00e8re \u00e0 partir duquel commencer la recherche, par d\u00e9faut \u00e0 1 (le premier caract\u00e8re de within_text). Si find_text n\u2019est pas trouv\u00e9, ou si start_num est invalide, l\u00e8ve une ValueError. >>> FIND(\"M\", \"Miriam McGovern\") 1 >>> FIND(\"m\", \"Miriam McGovern\") 6 >>> FIND(\"M\", \"Miriam McGovern\", 3) 8 >>> FIND(\" #\", \"Hello world # Test\") 12 >>> FIND(\"gle\", \"Google\", 1) 4 >>> FIND(\"GLE\", \"Google\", 1) Traceback (most recent call last): ... ValueError: substring not found >>> FIND(\"page\", \"homepage\") 5 >>> FIND(\"page\", \"homepage\", 6) Traceback (most recent call last): ... ValueError: substring not found","title":"FIND"},{"location":"functions/#fixed","text":"Formate un nombre avec un nombre fixe de d\u00e9cimales (2 par d\u00e9faut), et des virgules. Si no_commas est True, alors omet les virgules. >>> FIXED(1234.567, 1) '1,234.6' >>> FIXED(1234.567, -1) '1,230' >>> FIXED(-1234.567, -1, True) '-1230' >>> FIXED(44.332) '44.33' >>> FIXED(3521.478, 2, False) '3,521.48' >>> FIXED(-3521.478, 1, True) '-3521.5' >>> FIXED(3521.478, 0, True) '3521' >>> FIXED(3521.478, -2, True) '3500'","title":"FIXED"},{"location":"functions/#left","text":"Renvoie une sous-cha\u00eene de longueur num_chars \u00e0 partir du d\u00e9but de la cha\u00eene donn\u00e9e. Si num_chars est omise, elle est suppos\u00e9e \u00eatre 1. Identique \u00e0 string[:num_chars] . >>> LEFT(\"Prix de vente\", 4) 'Sale' >>> LEFT('Su\u00e8de') 'S' >>> LEFT('Texte', -1) Traceback (most recent call last): ... ValueError: num_chars invalid","title":"LEFT"},{"location":"functions/#len","text":"Renvoie le nombre de caract\u00e8res dans une cha\u00eene de texte, ou le nombre d\u2019\u00e9l\u00e9ments dans une liste. Identique \u00e0 len en python. Voir Ensemble d\u2019enregistrements pour un exemple d\u2019utilisation de len sur une liste d\u2019enregistrements. >>> LEN(\"Phoenix, AZ\") 11 >>> LEN(\"\") 0 >>> LEN(\" Un \") 11","title":"LEN"},{"location":"functions/#lower","text":"Convertit une cha\u00eene sp\u00e9cifi\u00e9e en minuscules. Identique \u00e0 text.lower() . >>> LOWER(\"E. E. Cummings\") 'e. e. cummings' >>> LOWER(\"Apt. 2B\") 'apt. 2b'","title":"LOWER"},{"location":"functions/#mid","text":"Renvoie un segment d\u2019une cha\u00eene, commen\u00e7ant \u00e0 start_num. Le premier caract\u00e8re dans le texte a start_num 1. >>> MID(\"Flux de fluide\", 1, 5) 'Fluid' >>> MID(\"Flux de fluide\", 7, 20) 'Flow' >>> MID(\"Flux de fluide\", 20, 5) '' >>> MID(\"Flux de fluide\", 0, 5) Traceback (most recent call last): ... ValueError: start_num invalid","title":"MID"},{"location":"functions/#phone_format","text":"Formate un num\u00e9ro de t\u00e9l\u00e9phone. Sans arguments optionnels, le num\u00e9ro doit commencer par \u201c+\u201d et le pr\u00e9fixe d\u2019appel international, et sera format\u00e9 comme un num\u00e9ro international, par exemple +12345678901 devient +1 234-567-8901 . L\u2019argument country permet de sp\u00e9cifier un code de pays \u00e0 2 lettres (par exemple \u201cUS\u201d ou \u201cGB\u201d) pour interpr\u00e9ter les num\u00e9ros de t\u00e9l\u00e9phone qui ne commencent pas par \u201c+\u201d. Par exemple, PHONE_FORMAT('2025555555', 'US') serait consid\u00e9r\u00e9 comme un num\u00e9ro am\u00e9ricain et format\u00e9 comme \u201c(202) 555-5555\u201d. Les num\u00e9ros de t\u00e9l\u00e9phone qui commencent par \u201c+\u201d ignorent country . Par exemple, PHONE_FORMAT('+33555555555', 'US') est un num\u00e9ro fran\u00e7ais car \u2018+33\u2019 est le pr\u00e9fixe international pour la France. L\u2019argument format sp\u00e9cifie le format de sortie, selon ce tableau : \"#\" ou \"NATL\" (par d\u00e9faut) - utilise le format national, sans le pr\u00e9fixe d\u2019appel international, lorsque c\u2019est possible. Par exemple (234) 567-8901 pour \u201cUS\u201d, ou 02 34 56 78 90 pour \u201cFR\u201d. Si country est omis, ou le num\u00e9ro ne correspond pas au pays donn\u00e9, le format international est utilis\u00e9 \u00e0 la place. \"+\" ou \"INTL\" - format international, par exemple +1 234-567-8901 ou +33 2 34 56 78 90 . \"*\" ou \"E164\" - format E164, comme international mais sans s\u00e9parateurs, par exemple +12345678901 . \"tel\" ou \"RFC3966\" - format adapt\u00e9 \u00e0 utiliser comme un hyperlien , par exemple \u2018tel:+1-234-567-8901\u2019. Lorsque vous sp\u00e9cifiez l\u2019argument format , vous pouvez omettre l\u2019argument country . C\u2019est-\u00e0-dire PHONE_FORMAT(value, \"tel\") est \u00e9quivalent \u00e0 PHONE_FORMAT(value, None, \"tel\") . Pour plus de d\u00e9tails, voir la biblioth\u00e8que Python phonenumbers qui sous-tend cette fonction. >>> PHONE_FORMAT(\"+12345678901\") u'+1 234-567-8901' >>> PHONE_FORMAT(\"2345678901\", \"US\") u'(234) 567-8901' >>> PHONE_FORMAT(\"2345678901\", \"GB\") u'023 4567 8901' >>> PHONE_FORMAT(\"2345678901\", \"GB\", \"+\") u'+44 23 4567 8901' >>> PHONE_FORMAT(\"+442345678901\", \"GB\") u'023 4567 8901' >>> PHONE_FORMAT(\"+12345678901\", \"GB\") u'+1 234-567-8901' >>> PHONE_FORMAT(\"(234) 567-8901\") Traceback (most recent call last): ... NumberParseException: (0) Missing or invalid default region. >>> PHONE_FORMAT(\"(234)567 89-01\", \"US\", \"tel\") u'tel:+1-234-567-8901' >>> PHONE_FORMAT(\"2/3456/7890\", \"FR\", '#') u'02 34 56 78 90' >>> PHONE_FORMAT(\"+33234567890\", '#') u'+33 2 34 56 78 90' >>> PHONE_FORMAT(\"+33234567890\", 'tel') u'tel:+33-2-34-56-78-90' >>> PHONE_FORMAT(\"tel:+1-234-567-8901\", country=\"US\", format=\"*\") u'+12345678901' >>> PHONE_FORMAT(33234567890) Traceback (most recent call last): ... TypeError: Le num\u00e9ro de t\u00e9l\u00e9phone doit \u00eatre une valeur textuelle. Si vous formatez une valeur d'une colonne Num\u00e9rique, convertissez d'abord cette colonne en Texte.","title":"PHONE_FORMAT"},{"location":"functions/#proper","text":"Met en majuscule chaque mot dans une cha\u00eene sp\u00e9cifi\u00e9e. Il convertit la premi\u00e8re lettre de chaque mot en majuscule, et toutes les autres lettres en minuscules. Identique \u00e0 text.title() . >>> PROPER('ceci est un TITRE') 'Ceci Est Un Titre' >>> PROPER('2-way street') '2-Way Street' >>> PROPER('76BudGet') '76Budget'","title":"PROPER"},{"location":"functions/#regexextract","text":"Extrait la premi\u00e8re partie du texte qui correspond \u00e0 l\u2019expression r\u00e9guli\u00e8re. >>> REGEXEXTRACT(\"Google Doc 101\", \"[0-9]+\") '101' >>> REGEXEXTRACT(\"Le prix aujourd'hui est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\") '826.25' S\u2019il y a une expression entre parenth\u00e8ses, elle est renvoy\u00e9e au lieu de la correspondance enti\u00e8re. >>> REGEXEXTRACT(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\") 'Content' >>> REGEXEXTRACT(\"Foo\", \"Bar\") Traceback (most recent call last): ... ValueError: REGEXEXTRACT text does not match","title":"REGEXEXTRACT"},{"location":"functions/#regexmatch","text":"Renvoie si un morceau de texte correspond \u00e0 une expression r\u00e9guli\u00e8re. >>> REGEXMATCH(\"Google Doc 101\", \"[0-9]+\") True >>> REGEXMATCH(\"Google Doc\", \"[0-9]+\") False >>> REGEXMATCH(\"Le prix aujourd'hui est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\") True >>> REGEXMATCH(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\") True >>> REGEXMATCH(\"Foo\", \"Bar\") False","title":"REGEXMATCH"},{"location":"functions/#regexreplace","text":"Remplace toutes les parties du texte correspondant \u00e0 l\u2019expression r\u00e9guli\u00e8re donn\u00e9e par le texte de remplacement. >>> REGEXREPLACE(\"Google Doc 101\", \"[0-9]+\", \"777\") 'Google Doc 777' >>> REGEXREPLACE(\"Google Doc\", \"[0-9]+\", \"777\") 'Google Doc' >>> REGEXREPLACE(\"Le prix est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\", \"315.75\") 'Le prix est de $315.75' >>> REGEXREPLACE(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\", \"Mot\") 'Mot entre crochets' >>> REGEXREPLACE(\"Foo\", \"Bar\", \"Baz\") 'Foo'","title":"REGEXREPLACE"},{"location":"functions/#replace","text":"Remplace une partie d\u2019une cha\u00eene de texte par une cha\u00eene de texte diff\u00e9rente. La position est compt\u00e9e \u00e0 partir de 1. >>> REPLACE(\"abcdefghijk\", 6, 5, \"*\") 'abcde*k' >>> REPLACE(\"2009\", 3, 2, \"10\") '2010' >>> REPLACE('123456', 1, 3, '@') '@456' >>> REPLACE('foo', 1, 0, 'bar') 'barfoo' >>> REPLACE('foo', 0, 1, 'bar') Traceback (most recent call last): ... ValueError: position invalid","title":"REPLACE"},{"location":"functions/#rept","text":"Renvoie le texte sp\u00e9cifi\u00e9 r\u00e9p\u00e9t\u00e9 un certain nombre de fois. Identique \u00e0 text * number_times . Le r\u00e9sultat de la fonction REPT ne peut pas d\u00e9passer 32767 caract\u00e8res, sinon cela l\u00e8ve une ValueError. >>> REPT(\"*-\", 3) '*-*-*-' >>> REPT('-', 10) '----------' >>> REPT('-', 0) '' >>> len(REPT('---', 10000)) 30000 >>> REPT('---', 11000) Traceback (most recent call last): ... ValueError: number_times invalid >>> REPT('-', -1) Traceback (most recent call last): ... ValueError: number_times invalid","title":"REPT"},{"location":"functions/#right","text":"Renvoie une sous-cha\u00eene de longueur num_chars \u00e0 partir de la fin d\u2019une cha\u00eene sp\u00e9cifi\u00e9e. Si num_chars est omise, elle est suppos\u00e9e \u00eatre 1. Identique \u00e0 string[-num_chars:] . >>> RIGHT(\"Prix de vente\", 5) 'Price' >>> RIGHT('Num\u00e9ro de stock') 'r' >>> RIGHT('Texte', 100) 'Texte' >>> RIGHT('Texte', -1) Traceback (most recent call last): ... ValueError: num_chars invalid","title":"RIGHT"},{"location":"functions/#search","text":"Renvoie la position \u00e0 laquelle une cha\u00eene est d\u2019abord trouv\u00e9e dans le texte, en ignorant la casse. La recherche est sensible \u00e0 la casse. La position renvoy\u00e9e est 1 si within_text commence par find_text. start_num sp\u00e9cifie le caract\u00e8re \u00e0 partir duquel commencer la recherche, par d\u00e9faut \u00e0 1 (le premier caract\u00e8re de within_text). Si find_text n\u2019est pas trouv\u00e9, ou si start_num est invalide, l\u00e8ve une ValueError. >>> SEARCH(\"e\", \"D\u00e9clarations\", 6) 7 >>> SEARCH(\"marge\", \"Marge b\u00e9n\u00e9ficiaire\") 8 >>> SEARCH(\" \", \"Marge b\u00e9n\u00e9ficiaire\") 7 >>> SEARCH('\"', 'Le \"patron\" est ici.') 5 >>> SEARCH(\"gle\", \"Google\") 4 >>> SEARCH(\"GLE\", \"Google\") 4","title":"SEARCH"},{"location":"functions/#substitute","text":"Remplace le texte existant par du nouveau texte dans une cha\u00eene. Il est utile lorsque vous connaissez le sous-texte \u00e0 remplacer. Utilisez REPLACE lorsque vous connaissez la position du texte \u00e0 remplacer. Si instance_num est donn\u00e9, il sp\u00e9cifie quelle occurrence de old_text remplacer. Si omis, toutes les occurrences sont remplac\u00e9es. Identique \u00e0 text.replace(old_text, new_text) lorsque instance_num est omis. >>> SUBSTITUTE(\"Donn\u00e9es de vente\", \"Ventes\", \"Co\u00fbt\") u'Donn\u00e9es de co\u00fbt' >>> SUBSTITUTE(\"Trimestre 1, 2008\", \"1\", \"2\", 1) u'Trimestre 2, 2008' >>> SUBSTITUTE(\"Trimestre 1, 2011\", \"1\", \"2\", 3) u'Trimestre 1, 2012'","title":"SUBSTITUTE"},{"location":"functions/#t","text":"Renvoie la valeur si la valeur est du texte, ou la cha\u00eene vide lorsque la valeur n\u2019est pas du texte. >>> T('Texte') u'Texte' >>> T(826) u'' >>> T('826') u'826' >>> T(False) u'' >>> T('100 points') u'100 points' >>> T(AltText('Texte')) u'Texte' >>> T(float('nan')) u''","title":"T"},{"location":"functions/#tasteme","text":"Pour un morceau de texte donn\u00e9, d\u00e9cide s\u2019il est savoureux ou non. Ce n\u2019est pas s\u00e9rieux. Cela est apparu comme un \u0153uf de P\u00e2ques, et est conserv\u00e9 en tant que tel. C\u2019est en fait un puzzle pour comprendre la r\u00e8gle simple sous-jacente. Cela a \u00e9t\u00e9 \u00e9tonnamment rarement r\u00e9solu, m\u00eame apr\u00e8s avoir lu le code source, qui est librement disponible et peut divertir les fans de Python. >>> TASTEME('Banane') True >>> TASTEME('Ail') False","title":"TASTEME"},{"location":"functions/#text","text":"Convertit un nombre en texte selon un format sp\u00e9cifi\u00e9. Il n\u2019est pas encore impl\u00e9ment\u00e9 dans Grist. Vous pouvez utiliser les fonctions Python similaires str() pour convertir des nombres en cha\u00eenes, et optionnellement format() pour sp\u00e9cifier le format du nombre. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TEXT"},{"location":"functions/#trim","text":"Supprime tous les espaces du texte sauf pour les espaces simples entre les mots. Notez que TRIM ne supprime pas d\u2019autres espaces blancs tels que les caract\u00e8res de tabulation ou de nouvelle ligne. >>> TRIM(\" Premier trimestre\\n B\u00e9n\u00e9fices \") 'Premier trimestre\\n B\u00e9n\u00e9fices' >>> TRIM(\"\") ''","title":"TRIM"},{"location":"functions/#upper","text":"Convertit une cha\u00eene sp\u00e9cifi\u00e9e en majuscules. Identique \u00e0 text.upper() . >>> UPPER(\"e. e. cummings\") 'E. E. CUMMINGS' >>> UPPER(\"Apt. 2B\") 'APT. 2B'","title":"UPPER"},{"location":"functions/#value","text":"Convertit une cha\u00eene dans des formats de date, d\u2019heure ou de nombre accept\u00e9s en un nombre ou une date. >>> VALUE(\"$1,000\") 1000 >>> assert VALUE(\"16:48:00\") - VALUE(\"12:00:00\") == datetime.timedelta(0, 17280) >>> VALUE(\"01/01/2012\") datetime.datetime(2012, 1, 1, 0, 0) >>> VALUE(\"\") 0 >>> VALUE(0) 0 >>> VALUE(\"826\") 826 >>> VALUE(\"-826.123123123\") -826.123123123 >>> VALUE(float('nan')) nan >>> VALUE(\"Invalid\") Traceback (most recent call last): ... ValueError: le texte ne peut pas \u00eatre analys\u00e9 en un nombre >>> VALUE(\"13/13/13\") Traceback (most recent call last): ... ValueError: le texte ne peut pas \u00eatre analys\u00e9 en un nombre","title":"VALUE"},{"location":"glossary/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Glossaire # Diagramme \u00e0 Barres # Il s\u2019agit d\u2019un type de diagramme classique, o\u00f9 les valeurs d\u2019une colonne sont repr\u00e9sent\u00e9es par la hauteur d\u2019une s\u00e9rie de rectangles. Colonne # Une colonne est une s\u00e9rie verticale de cellules dans une table. Les colonnes dans Grist ont des noms. Chaque cellule d\u2019une colonne se trouve dans une ligne diff\u00e9rente. Lorsque les donn\u00e9es d\u2019une colonne sont pr\u00e9sentes dans une fiche, nous l\u2019appelons un champ. Lorsqu\u2019une table de donn\u00e9es est repr\u00e9sent\u00e9e sous forme de graphique, nous nous r\u00e9f\u00e9rons \u00e0 chaque colonne comme une s\u00e9rie. D\u2019un point de vue mod\u00e9lisation des donn\u00e9es, les colonnes contiennent g\u00e9n\u00e9ralement des donn\u00e9es sur un seul aspect de nombreuses entit\u00e9s du monde r\u00e9el, tandis que les lignes contiennent des donn\u00e9es sur de nombreux aspects d\u2019une seule entit\u00e9. Options de Colonne # L\u2019apparence et le comportement de chaque colonne peuvent \u00eatre personnalis\u00e9s en cliquant sur l\u2019en-t\u00eate de la colonne, en cliquant sur le menu d\u00e9roulant, et en s\u00e9lectionnant \u201cOptions de Colonne\u201d. Type de Colonne # Les colonnes ont des types, qui contr\u00f4lent l\u2019apparence des cellules dans cette colonne et la m\u00e9thode utilis\u00e9e pour les \u00e9diter. Vous pouvez changer le type de colonne \u00e0 volont\u00e9. Le Type de Colonne Texte est adapt\u00e9 aux cha\u00eenes de caract\u00e8res de toute longueur; le Type de Colonne Date est sp\u00e9cialis\u00e9 pour stocker et \u00e9diter des dates de calendrier; le Type de Colonne R\u00e9f\u00e9rence est destin\u00e9 \u00e0 stocker et \u00e9diter des liens vers d\u2019autres tables; le Type de Colonne Num\u00e9rique est pour tout type de nombre, etc. Panneau de Cr\u00e9ation # Le panneau de cr\u00e9ation est le menu de configuration \u00e0 droite pour les vues et les colonnes. Tableau de Bord # Un tableau de bord est simplement un autre nom pour une page, g\u00e9n\u00e9ralement organis\u00e9e pour donner un r\u00e9sum\u00e9 ou un aper\u00e7u des donn\u00e9es d\u2019un document. Grist est bien adapt\u00e9 \u00e0 la construction de tableaux de bord, en cr\u00e9ant des pages avec des vues li\u00e9es de mani\u00e8re appropri\u00e9e. Table de Donn\u00e9es # Les donn\u00e9es sont stock\u00e9es dans des tables. Les tables ont des colonnes nomm\u00e9es, et une s\u00e9quence de lignes contenant des valeurs pour ces colonnes. Chaque ligne a un identifiant num\u00e9rique (disponible sous la forme $id dans les formules) qui est unique dans cette table. La page des donn\u00e9es sources liste toutes les tables de donn\u00e9es dans votre document. Document # Un document Grist est une collection de donn\u00e9es connexes. Si vous travaillez avec des bases de donn\u00e9es, pensez-y comme une seule base de donn\u00e9es. Si vous travaillez avec des feuilles de calcul, pensez-y comme une seule feuille de calcul. Comme les bases de donn\u00e9es et les feuilles de calcul, les donn\u00e9es dans un document Grist sont organis\u00e9es en un ensemble de tables. La mani\u00e8re dont ces donn\u00e9es sont visualis\u00e9es et \u00e9dit\u00e9es est exceptionnellement flexible. Les documents Grist sont organis\u00e9s visuellement en pages. Les pages contiennent des vues qui offrent diff\u00e9rentes mani\u00e8res de visualiser et d\u2019\u00e9diter les tables. Pour travailler avec Grist, la premi\u00e8re \u00e9tape est g\u00e9n\u00e9ralement de cr\u00e9er un document . Poign\u00e9e de D\u00e9placement # C\u2019est une ic\u00f4ne pour faciliter la r\u00e9organisation visuelle des vues ou des listes. Sur un ordinateur de bureau, lorsque vous survolez une poign\u00e9e de d\u00e9placement, le curseur de la souris change. La poign\u00e9e de d\u00e9placement pour une vue est juste \u00e0 gauche du titre de la vue. Il y a un exemple d\u2019utilisation de cette poign\u00e9e de d\u00e9placement dans la d\u00e9monstration de recherche d\u2019investissement . Mode Fiddle # Le mode fiddle est un mode sp\u00e9cial dans lequel certains documents Grist, tels que ceux de la page des Exemples & Mod\u00e8les , s\u2019ouvrent. Un document ouvert en mode fiddle aura une \u00e9tiquette \u201cfiddle\u201d \u00e0 c\u00f4t\u00e9 du titre du document dans la barre sup\u00e9rieure. En mode fiddle, toute modification d\u2019un document entra\u00eenera la cr\u00e9ation d\u2019une nouvelle copie non enregistr\u00e9e (a.k.a \u201cfork\u201d) de ce document; le document original restera inchang\u00e9. La copie peut \u00eatre enregistr\u00e9e via le bouton ou l\u2019option de menu \u201cEnregistrer la Copie\u201d. Vous pouvez ajouter /m/fork \u00e0 la fin de l\u2019URL de n\u2019importe quel document pour ouvrir ce document en mode fiddle (par exemple https://public.getgrist.com/3NsoHE2mWtEp/Lead-list/m/fork ). Champ # Un champ est une colonne affich\u00e9e dans une Vue Fiche. Les termes colonne, champ et s\u00e9rie ne sont pas diff\u00e9rents en substance, mais sont des termes diff\u00e9rents qui ont plus de sens pour diff\u00e9rentes vues. Dans une Vue Tableau, nous parlons de colonnes. Dans une Vue Graphique, nous parlons de s\u00e9ries. Et dans une Vue Fiche, nous parlons de champs. Un champ a des propri\u00e9t\u00e9s de mise en page qui sont significatives dans une Fiche, mais qui ne seraient pas significatives dans d\u2019autres contextes. Importer # Importer dans Grist signifie prendre des donn\u00e9es d\u2019autres sources (sur votre ordinateur ou sur Internet) et placer ces donn\u00e9es dans un document Grist. Des exemples d\u2019importation incluent : Prendre un fichier CSV sur votre ordinateur et cr\u00e9er un document Grist avec le m\u00eame contenu (voir : commencer un nouveau document Grist ). Prendre un fichier Excel sur votre ordinateur et ajouter les donn\u00e9es de celui-ci \u00e0 un document Grist existant (voir : importer plus de donn\u00e9es ). Prendre un fichier JSON sur Internet et ajouter les donn\u00e9es de celui-ci \u00e0 un document Grist existant (voir : importer plus de donn\u00e9es ). Appeler l\u2019API de Grist depuis un programme et ajouter des donn\u00e9es lues \u00e0 partir d\u2019une autre source (voir : API Grist ). Recherches # Les formules de recherche vous permettent de \u201crechercher\u201d des donn\u00e9es dans d\u2019autres tables. lookupOne vous permet de rechercher un seul enregistrement dans une autre table en faisant correspondre certaines donn\u00e9es entre deux tables, similaire \u00e0 VLOOKUP d\u2019Excel. lookupRecords vous permet de rechercher plusieurs enregistrements dans une autre table en faisant correspondre certaines donn\u00e9es entre deux tables. Les recherches peuvent \u00eatre combin\u00e9es avec la notation point\u00e9e pour extraire des donn\u00e9es des enregistrements r\u00e9f\u00e9renc\u00e9s. Apprenez comment. Page # Les documents Grist sont organis\u00e9s visuellement en pages. Chaque page vous permet de visualiser ou d\u2019\u00e9diter une ou plusieurs tables. La nature de ces visualiseurs et \u00e9diteurs (appel\u00e9s \u201cvues de page\u201d) est flexible, tout comme leur disposition. Une seule table peut \u00eatre visualis\u00e9e (ou \u00e9dit\u00e9e) \u00e0 partir de plusieurs vues dans une ou plusieurs pages. Et une seule page peut contenir des vues pour visualiser (ou \u00e9diter) de nombreuses tables. Les pages sont list\u00e9es dans le document ( dans le panneau \u00e0 gauche ). Dans cette liste, elles peuvent \u00eatre r\u00e9organis\u00e9es et regroup\u00e9es, avec plusieurs \u201csous-pages\u201d imbriqu\u00e9es dans une seule page. Diagramme \u00e0 Secteurs # Il s\u2019agit d\u2019un type de diagramme classique, o\u00f9 un cercle est d\u00e9coup\u00e9 en tranches selon les valeurs d\u2019une colonne. Enregistrement # Un enregistrement est les donn\u00e9es d\u2019une ligne d\u2019une table, comprenant les donn\u00e9es dans les cellules individuelles de cette ligne. Il a un identifiant unique, g\u00e9n\u00e9ralement cach\u00e9 mais disponible dans les formules sous la forme id . Dans une Vue Fiche ou une Vue Liste de Fiches, un enregistrement est repr\u00e9sent\u00e9 par une seule fiche. Ligne # Une s\u00e9rie horizontale de cellules dans une table. Chaque cellule d\u2019une ligne appartient \u00e0 une colonne diff\u00e9rente. Les donn\u00e9es stock\u00e9es dans une ligne sont \u00e9galement appel\u00e9es un enregistrement. Typiquement, les lignes contiennent des donn\u00e9es sur diff\u00e9rents aspects d\u2019une seule entit\u00e9, tandis que les colonnes contiennent des donn\u00e9es sur un seul aspect de nombreuses entit\u00e9s. S\u00e9rie # Les donn\u00e9es d\u2019une seule colonne affich\u00e9es dans une Vue Graphique sont appel\u00e9es une s\u00e9rie. Les m\u00eames donn\u00e9es dans une Vue Fiche sont appel\u00e9es un champ, et dans une Vue Tableau sont appel\u00e9es une colonne. Trier # L\u2019ordre dans lequel les lignes d\u2019une table sont affich\u00e9es est appel\u00e9 l\u2019ordre de tri. Un exemple de changement de l\u2019ordre de tri d\u2019une table est donn\u00e9 dans le tutoriel CRM . Formules de D\u00e9clenchement # Une formule d\u2019initialisation est une formule qui recalcule vos donn\u00e9es en fonction d\u2019un ensemble de conditions que vous d\u00e9cidez. Elles permettent \u00e9galement de nettoyer les donn\u00e9es lorsqu\u2019une nouvelle valeur est entr\u00e9e ( regarder le webinaire ), de fournir une valeur par d\u00e9faut sens\u00e9e pour une colonne ou de cr\u00e9er des tampons de temps et d\u2019auteur . Menu Utilisateur # Le menu utilisateur est le menu qui s\u2019ouvre en cliquant sur votre ic\u00f4ne de profil en haut \u00e0 droite de Grist. De l\u00e0, vous pouvez g\u00e9rer votre profil, ajouter des comptes Grist suppl\u00e9mentaires que vous poss\u00e9dez, et voir une liste des espaces d\u2019\u00e9quipe auxquels vous avez acc\u00e8s. Selon l\u2019endroit o\u00f9 vous vous trouvez, le menu utilisateur contiendra des options suppl\u00e9mentaires. Par exemple, depuis un espace personnel vous verrez l\u2019option de mettre \u00e0 niveau votre plan vers un espace d\u2019\u00e9quipe . Depuis un espace d\u2019\u00e9quipe, selon votre r\u00f4le et vos permissions, vous pourrez peut-\u00eatre g\u00e9rer la facturation ou \u00e9diter les membres de l\u2019\u00e9quipe . Depuis un document, vous trouverez une option pour \u00e9diter les param\u00e8tres du document. Vue # Une page contient des sections, telles que des grilles de tableaux ou des graphiques, que nous appelons \u201cvues de page\u201d. Elles sont utilis\u00e9es pour visualiser ou \u00e9diter des donn\u00e9es dans des tables. Les types de vues de page incluent les Vues Fiche , les Vues Graphique , ainsi que la grille de tableau de style feuille de calcul classique (appel\u00e9e Vue Tableau ). Options de Vue # Chaque vue de page peut avoir son apparence et son comportement personnalis\u00e9s. La mani\u00e8re dont cela est fait varie selon la vue, mais peut toujours \u00eatre fait syst\u00e9matiquement en cliquant sur le menu \u00e0 trois points en haut \u00e0 droite d\u2019une vue et en s\u00e9lectionnant \u201cOptions de Vue\u201d. Retour \u00e0 la Ligne # Normalement, le contenu qui ne tient pas dans la largeur d\u2019une cellule est tronqu\u00e9, avec \u201c\u2026\u201d indiquant qu\u2019une partie des donn\u00e9es est cach\u00e9e. Lorsque le param\u00e8tre \u201cRetour \u00e0 la Ligne\u201d est activ\u00e9, les longues lignes seront renvoy\u00e9es \u00e0 la ligne suivante, et la cellule deviendra plus haute pour inclure tout le contenu. Un exemple de retour \u00e0 la ligne est donn\u00e9 dans le tutoriel CRM .","title":"Glossary"},{"location":"glossary/#glossaire","text":"","title":"Glossaire"},{"location":"glossary/#diagramme-a-barres","text":"Il s\u2019agit d\u2019un type de diagramme classique, o\u00f9 les valeurs d\u2019une colonne sont repr\u00e9sent\u00e9es par la hauteur d\u2019une s\u00e9rie de rectangles.","title":"Diagramme \u00e0 Barres"},{"location":"glossary/#colonne","text":"Une colonne est une s\u00e9rie verticale de cellules dans une table. Les colonnes dans Grist ont des noms. Chaque cellule d\u2019une colonne se trouve dans une ligne diff\u00e9rente. Lorsque les donn\u00e9es d\u2019une colonne sont pr\u00e9sentes dans une fiche, nous l\u2019appelons un champ. Lorsqu\u2019une table de donn\u00e9es est repr\u00e9sent\u00e9e sous forme de graphique, nous nous r\u00e9f\u00e9rons \u00e0 chaque colonne comme une s\u00e9rie. D\u2019un point de vue mod\u00e9lisation des donn\u00e9es, les colonnes contiennent g\u00e9n\u00e9ralement des donn\u00e9es sur un seul aspect de nombreuses entit\u00e9s du monde r\u00e9el, tandis que les lignes contiennent des donn\u00e9es sur de nombreux aspects d\u2019une seule entit\u00e9.","title":"Colonne"},{"location":"glossary/#options-de-colonne","text":"L\u2019apparence et le comportement de chaque colonne peuvent \u00eatre personnalis\u00e9s en cliquant sur l\u2019en-t\u00eate de la colonne, en cliquant sur le menu d\u00e9roulant, et en s\u00e9lectionnant \u201cOptions de Colonne\u201d.","title":"Options de Colonne"},{"location":"glossary/#type-de-colonne","text":"Les colonnes ont des types, qui contr\u00f4lent l\u2019apparence des cellules dans cette colonne et la m\u00e9thode utilis\u00e9e pour les \u00e9diter. Vous pouvez changer le type de colonne \u00e0 volont\u00e9. Le Type de Colonne Texte est adapt\u00e9 aux cha\u00eenes de caract\u00e8res de toute longueur; le Type de Colonne Date est sp\u00e9cialis\u00e9 pour stocker et \u00e9diter des dates de calendrier; le Type de Colonne R\u00e9f\u00e9rence est destin\u00e9 \u00e0 stocker et \u00e9diter des liens vers d\u2019autres tables; le Type de Colonne Num\u00e9rique est pour tout type de nombre, etc.","title":"Type de Colonne"},{"location":"glossary/#panneau-de-creation","text":"Le panneau de cr\u00e9ation est le menu de configuration \u00e0 droite pour les vues et les colonnes.","title":"Panneau de Cr\u00e9ation"},{"location":"glossary/#tableau-de-bord","text":"Un tableau de bord est simplement un autre nom pour une page, g\u00e9n\u00e9ralement organis\u00e9e pour donner un r\u00e9sum\u00e9 ou un aper\u00e7u des donn\u00e9es d\u2019un document. Grist est bien adapt\u00e9 \u00e0 la construction de tableaux de bord, en cr\u00e9ant des pages avec des vues li\u00e9es de mani\u00e8re appropri\u00e9e.","title":"Tableau de Bord"},{"location":"glossary/#table-de-donnees","text":"Les donn\u00e9es sont stock\u00e9es dans des tables. Les tables ont des colonnes nomm\u00e9es, et une s\u00e9quence de lignes contenant des valeurs pour ces colonnes. Chaque ligne a un identifiant num\u00e9rique (disponible sous la forme $id dans les formules) qui est unique dans cette table. La page des donn\u00e9es sources liste toutes les tables de donn\u00e9es dans votre document.","title":"Table de Donn\u00e9es"},{"location":"glossary/#document","text":"Un document Grist est une collection de donn\u00e9es connexes. Si vous travaillez avec des bases de donn\u00e9es, pensez-y comme une seule base de donn\u00e9es. Si vous travaillez avec des feuilles de calcul, pensez-y comme une seule feuille de calcul. Comme les bases de donn\u00e9es et les feuilles de calcul, les donn\u00e9es dans un document Grist sont organis\u00e9es en un ensemble de tables. La mani\u00e8re dont ces donn\u00e9es sont visualis\u00e9es et \u00e9dit\u00e9es est exceptionnellement flexible. Les documents Grist sont organis\u00e9s visuellement en pages. Les pages contiennent des vues qui offrent diff\u00e9rentes mani\u00e8res de visualiser et d\u2019\u00e9diter les tables. Pour travailler avec Grist, la premi\u00e8re \u00e9tape est g\u00e9n\u00e9ralement de cr\u00e9er un document .","title":"Document"},{"location":"glossary/#poignee-de-deplacement","text":"C\u2019est une ic\u00f4ne pour faciliter la r\u00e9organisation visuelle des vues ou des listes. Sur un ordinateur de bureau, lorsque vous survolez une poign\u00e9e de d\u00e9placement, le curseur de la souris change. La poign\u00e9e de d\u00e9placement pour une vue est juste \u00e0 gauche du titre de la vue. Il y a un exemple d\u2019utilisation de cette poign\u00e9e de d\u00e9placement dans la d\u00e9monstration de recherche d\u2019investissement .","title":"Poign\u00e9e de D\u00e9placement"},{"location":"glossary/#mode-fiddle","text":"Le mode fiddle est un mode sp\u00e9cial dans lequel certains documents Grist, tels que ceux de la page des Exemples & Mod\u00e8les , s\u2019ouvrent. Un document ouvert en mode fiddle aura une \u00e9tiquette \u201cfiddle\u201d \u00e0 c\u00f4t\u00e9 du titre du document dans la barre sup\u00e9rieure. En mode fiddle, toute modification d\u2019un document entra\u00eenera la cr\u00e9ation d\u2019une nouvelle copie non enregistr\u00e9e (a.k.a \u201cfork\u201d) de ce document; le document original restera inchang\u00e9. La copie peut \u00eatre enregistr\u00e9e via le bouton ou l\u2019option de menu \u201cEnregistrer la Copie\u201d. Vous pouvez ajouter /m/fork \u00e0 la fin de l\u2019URL de n\u2019importe quel document pour ouvrir ce document en mode fiddle (par exemple https://public.getgrist.com/3NsoHE2mWtEp/Lead-list/m/fork ).","title":"Mode Fiddle"},{"location":"glossary/#champ","text":"Un champ est une colonne affich\u00e9e dans une Vue Fiche. Les termes colonne, champ et s\u00e9rie ne sont pas diff\u00e9rents en substance, mais sont des termes diff\u00e9rents qui ont plus de sens pour diff\u00e9rentes vues. Dans une Vue Tableau, nous parlons de colonnes. Dans une Vue Graphique, nous parlons de s\u00e9ries. Et dans une Vue Fiche, nous parlons de champs. Un champ a des propri\u00e9t\u00e9s de mise en page qui sont significatives dans une Fiche, mais qui ne seraient pas significatives dans d\u2019autres contextes.","title":"Champ"},{"location":"glossary/#importer","text":"Importer dans Grist signifie prendre des donn\u00e9es d\u2019autres sources (sur votre ordinateur ou sur Internet) et placer ces donn\u00e9es dans un document Grist. Des exemples d\u2019importation incluent : Prendre un fichier CSV sur votre ordinateur et cr\u00e9er un document Grist avec le m\u00eame contenu (voir : commencer un nouveau document Grist ). Prendre un fichier Excel sur votre ordinateur et ajouter les donn\u00e9es de celui-ci \u00e0 un document Grist existant (voir : importer plus de donn\u00e9es ). Prendre un fichier JSON sur Internet et ajouter les donn\u00e9es de celui-ci \u00e0 un document Grist existant (voir : importer plus de donn\u00e9es ). Appeler l\u2019API de Grist depuis un programme et ajouter des donn\u00e9es lues \u00e0 partir d\u2019une autre source (voir : API Grist ).","title":"Importer"},{"location":"glossary/#recherches","text":"Les formules de recherche vous permettent de \u201crechercher\u201d des donn\u00e9es dans d\u2019autres tables. lookupOne vous permet de rechercher un seul enregistrement dans une autre table en faisant correspondre certaines donn\u00e9es entre deux tables, similaire \u00e0 VLOOKUP d\u2019Excel. lookupRecords vous permet de rechercher plusieurs enregistrements dans une autre table en faisant correspondre certaines donn\u00e9es entre deux tables. Les recherches peuvent \u00eatre combin\u00e9es avec la notation point\u00e9e pour extraire des donn\u00e9es des enregistrements r\u00e9f\u00e9renc\u00e9s. Apprenez comment.","title":"Recherches"},{"location":"glossary/#page","text":"Les documents Grist sont organis\u00e9s visuellement en pages. Chaque page vous permet de visualiser ou d\u2019\u00e9diter une ou plusieurs tables. La nature de ces visualiseurs et \u00e9diteurs (appel\u00e9s \u201cvues de page\u201d) est flexible, tout comme leur disposition. Une seule table peut \u00eatre visualis\u00e9e (ou \u00e9dit\u00e9e) \u00e0 partir de plusieurs vues dans une ou plusieurs pages. Et une seule page peut contenir des vues pour visualiser (ou \u00e9diter) de nombreuses tables. Les pages sont list\u00e9es dans le document ( dans le panneau \u00e0 gauche ). Dans cette liste, elles peuvent \u00eatre r\u00e9organis\u00e9es et regroup\u00e9es, avec plusieurs \u201csous-pages\u201d imbriqu\u00e9es dans une seule page.","title":"Page"},{"location":"glossary/#diagramme-a-secteurs","text":"Il s\u2019agit d\u2019un type de diagramme classique, o\u00f9 un cercle est d\u00e9coup\u00e9 en tranches selon les valeurs d\u2019une colonne.","title":"Diagramme \u00e0 Secteurs"},{"location":"glossary/#enregistrement","text":"Un enregistrement est les donn\u00e9es d\u2019une ligne d\u2019une table, comprenant les donn\u00e9es dans les cellules individuelles de cette ligne. Il a un identifiant unique, g\u00e9n\u00e9ralement cach\u00e9 mais disponible dans les formules sous la forme id . Dans une Vue Fiche ou une Vue Liste de Fiches, un enregistrement est repr\u00e9sent\u00e9 par une seule fiche.","title":"Enregistrement"},{"location":"glossary/#ligne","text":"Une s\u00e9rie horizontale de cellules dans une table. Chaque cellule d\u2019une ligne appartient \u00e0 une colonne diff\u00e9rente. Les donn\u00e9es stock\u00e9es dans une ligne sont \u00e9galement appel\u00e9es un enregistrement. Typiquement, les lignes contiennent des donn\u00e9es sur diff\u00e9rents aspects d\u2019une seule entit\u00e9, tandis que les colonnes contiennent des donn\u00e9es sur un seul aspect de nombreuses entit\u00e9s.","title":"Ligne"},{"location":"glossary/#serie","text":"Les donn\u00e9es d\u2019une seule colonne affich\u00e9es dans une Vue Graphique sont appel\u00e9es une s\u00e9rie. Les m\u00eames donn\u00e9es dans une Vue Fiche sont appel\u00e9es un champ, et dans une Vue Tableau sont appel\u00e9es une colonne.","title":"S\u00e9rie"},{"location":"glossary/#trier","text":"L\u2019ordre dans lequel les lignes d\u2019une table sont affich\u00e9es est appel\u00e9 l\u2019ordre de tri. Un exemple de changement de l\u2019ordre de tri d\u2019une table est donn\u00e9 dans le tutoriel CRM .","title":"Trier"},{"location":"glossary/#formules-de-declenchement","text":"Une formule d\u2019initialisation est une formule qui recalcule vos donn\u00e9es en fonction d\u2019un ensemble de conditions que vous d\u00e9cidez. Elles permettent \u00e9galement de nettoyer les donn\u00e9es lorsqu\u2019une nouvelle valeur est entr\u00e9e ( regarder le webinaire ), de fournir une valeur par d\u00e9faut sens\u00e9e pour une colonne ou de cr\u00e9er des tampons de temps et d\u2019auteur .","title":"Formules de D\u00e9clenchement"},{"location":"glossary/#menu-utilisateur","text":"Le menu utilisateur est le menu qui s\u2019ouvre en cliquant sur votre ic\u00f4ne de profil en haut \u00e0 droite de Grist. De l\u00e0, vous pouvez g\u00e9rer votre profil, ajouter des comptes Grist suppl\u00e9mentaires que vous poss\u00e9dez, et voir une liste des espaces d\u2019\u00e9quipe auxquels vous avez acc\u00e8s. Selon l\u2019endroit o\u00f9 vous vous trouvez, le menu utilisateur contiendra des options suppl\u00e9mentaires. Par exemple, depuis un espace personnel vous verrez l\u2019option de mettre \u00e0 niveau votre plan vers un espace d\u2019\u00e9quipe . Depuis un espace d\u2019\u00e9quipe, selon votre r\u00f4le et vos permissions, vous pourrez peut-\u00eatre g\u00e9rer la facturation ou \u00e9diter les membres de l\u2019\u00e9quipe . Depuis un document, vous trouverez une option pour \u00e9diter les param\u00e8tres du document.","title":"Menu Utilisateur"},{"location":"glossary/#vue","text":"Une page contient des sections, telles que des grilles de tableaux ou des graphiques, que nous appelons \u201cvues de page\u201d. Elles sont utilis\u00e9es pour visualiser ou \u00e9diter des donn\u00e9es dans des tables. Les types de vues de page incluent les Vues Fiche , les Vues Graphique , ainsi que la grille de tableau de style feuille de calcul classique (appel\u00e9e Vue Tableau ).","title":"Vue"},{"location":"glossary/#options-de-vue","text":"Chaque vue de page peut avoir son apparence et son comportement personnalis\u00e9s. La mani\u00e8re dont cela est fait varie selon la vue, mais peut toujours \u00eatre fait syst\u00e9matiquement en cliquant sur le menu \u00e0 trois points en haut \u00e0 droite d\u2019une vue et en s\u00e9lectionnant \u201cOptions de Vue\u201d.","title":"Options de Vue"},{"location":"glossary/#retour-a-la-ligne","text":"Normalement, le contenu qui ne tient pas dans la largeur d\u2019une cellule est tronqu\u00e9, avec \u201c\u2026\u201d indiquant qu\u2019une partie des donn\u00e9es est cach\u00e9e. Lorsque le param\u00e8tre \u201cRetour \u00e0 la Ligne\u201d est activ\u00e9, les longues lignes seront renvoy\u00e9es \u00e0 la ligne suivante, et la cellule deviendra plus haute pour inclure tout le contenu. Un exemple de retour \u00e0 la ligne est donn\u00e9 dans le tutoriel CRM .","title":"Retour \u00e0 la Ligne"},{"location":"imports/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Importer plus de donn\u00e9es # Vous pouvez importer un fichier pour cr\u00e9er un nouveau document Grist ou pour ajouter des donn\u00e9es \u00e0 un document existant. Grist prend en charge les importations de fichiers Excel, CSV, JSON, tabul\u00e9s et depuis Google Drive . Pour cr\u00e9er un nouveau document Grist, cliquez sur le bouton \u201cAjouter Nouveau\u201d sur l\u2019\u00e9cran d\u2019accueil et choisissez \u201cImporter un document\u201d, comme d\u00e9crit dans cr\u00e9er un nouveau document Grist . Pour ajouter \u00e0 un document existant, ouvrez ce document, cliquez sur le bouton \u201cAjouter Nouveau\u201d puis sur \u201cImporter depuis un fichier\u201d. Par d\u00e9faut, chaque table import\u00e9e est ajout\u00e9e comme une nouvelle table Grist, mais en examinant la bo\u00eete de dialogue de pr\u00e9visualisation pour une importation, vous avez la possibilit\u00e9 de changer la destination vers une table Grist existante. Vous pouvez \u00e9galement importer n\u2019importe lequel des m\u00eames formats depuis une URL, en utilisant l\u2019option \u201cImporter depuis une URL\u201d. La bo\u00eete de dialogue d\u2019importation # Lorsque vous importez des donn\u00e9es dans un document existant, Grist ouvre une bo\u00eete de dialogue d\u2019importation pour vous montrer ce qui sera import\u00e9. Cette bo\u00eete de dialogue offre des options d\u2019importation disponibles, vous permet de choisir de cr\u00e9er une nouvelle table ou d\u2019ajouter \u00e0 une table existante, et affiche un aper\u00e7u des donn\u00e9es. Le lien \u201cOptions d\u2019importation\u201d en haut \u00e0 droite est parfois utile lors de l\u2019importation de fichiers d\u00e9limit\u00e9s. Grist devine les param\u00e8tres pour analyser les donn\u00e9es (comme le d\u00e9limiteur de champ), mais si cela devine incorrectement, vous pouvez ajuster les param\u00e8tres. Deviner la structure des donn\u00e9es # Dans tous les cas, lorsque vous importez un fichier, Grist fait des suppositions sur la structure du fichier. Pour les fichiers Excel, Grist traite chaque feuille comme une table s\u00e9par\u00e9e. Pour les fichiers CSV et autres formats d\u00e9limit\u00e9s, un fichier devient une table. Pour les fichiers Excel et d\u00e9limit\u00e9s, Grist essaie de d\u00e9tecter si les en-t\u00eates sont inclus et \u00e0 quelle ligne ils se trouvent. Si Grist d\u00e9tecte qu\u2019il n\u2019y a pas d\u2019en-t\u00eates, il nommera les colonnes comme \u201cA\u201d, \u201cB\u201d, \u201cC\u201d, etc. Grist essaie automatiquement de parser les nombres, les dates et les champs bool\u00e9ens pour d\u00e9tecter le type le plus appropri\u00e9 pour chaque colonne. Il essaie d\u2019\u00eatre sans perte : par exemple, s\u2019il marque une colonne comme num\u00e9rique, toutes les valeurs textuelles qu\u2019elle contient (comme \u201cN/A\u201d) resteront dans la table import\u00e9e, mais seront mises en \u00e9vidence en raison de l\u2019incompatibilit\u00e9 de type. Vous pouvez toujours renommer les tables et les colonnes apr\u00e8s une importation, ainsi que convertir les types. Importer depuis Google Drive # Importer depuis Google Drive est aussi simple que d\u2019importer depuis un fichier Excel ou un fichier CSV. Vous pouvez soit fournir une URL d\u2019un fichier stock\u00e9 dans Google Drive, soit utiliser un s\u00e9lecteur de fichiers Google pour choisir un fichier de votre propre drive. Pour utiliser un s\u00e9lecteur, cliquez sur le bouton \u201cAjouter Nouveau\u201d et choisissez \u201cImporter depuis Google Drive\u201d. Pour importer, connectez-vous \u00e0 votre compte Google en cliquant sur le bouton \u201cSe connecter\u201d et en suivant le processus de connexion. Grist vous demandera l\u2019autorisation de lire le fichier que vous importerez depuis Google Drive. Nous ne lirons aucun autre fichier sur votre drive \u2014 juste le fichier unique que vous choisissez d\u2019importer. Une fois le fichier choisi, le reste du processus est le m\u00eame que pour importer depuis un fichier Excel. Dans la bo\u00eete de dialogue d\u2019importation , vous pouvez configurer quelles donn\u00e9es importer et dans quelle table de destination les ajouter. Si vous avez une URL vers un fichier ou une feuille de calcul stock\u00e9e sur votre Google Drive ou un fichier accessible publiquement, vous pouvez l\u2019importer directement en utilisant l\u2019option \u201cImporter depuis une URL\u201d du menu \u201cAjouter Nouveau\u201d. Si le fichier n\u2019est pas partag\u00e9 publiquement, Grist vous demandera l\u2019autorisation de lire les fichiers de votre Google Drive. Si vous ne souhaitez pas autoriser Grist \u00e0 lire vos fichiers, il ouvrira le s\u00e9lecteur de fichiers Google o\u00f9 vous pourrez s\u00e9lectionner le fichier que vous souhaitez importer. Importer dans une table existante # Par d\u00e9faut, Grist importe de nouvelles donn\u00e9es en tant que nouvelles tables, mais la bo\u00eete de dialogue d\u2019importation vous permet de changer la destination et d\u2019importer des donn\u00e9es dans une table existante. Lors de l\u2019importation dans une table existante, Grist tentera de faire correspondre les colonnes de votre fichier import\u00e9 aux colonnes de la table de destination. Pour sp\u00e9cifier manuellement la correspondance des colonnes, cliquez sur le menu d\u00e9roulant \u2018Colonne source\u2019 pour ouvrir un menu avec une liste de colonnes inutilis\u00e9es de votre fichier import\u00e9. Cliquez sur un nom de colonne pour le faire correspondre \u00e0 une colonne de destination, ou s\u00e9lectionnez \u2018Ignorer\u2019 pour ignorer l\u2019importation des donn\u00e9es de cette colonne. Vous pouvez \u00e9galement sp\u00e9cifier une formule pour chaque colonne import\u00e9e en cliquant sur \u2018Appliquer une formule\u2019 dans le menu d\u00e9roulant \u2018Colonne source\u2019. Les formules peuvent r\u00e9f\u00e9rencer une ou plusieurs colonnes import\u00e9es, et le r\u00e9sultat de l\u2019\u00e9valuation de la formule sera affich\u00e9 dans l\u2019aper\u00e7u apr\u00e8s la fermeture de l\u2019\u00e9diteur. L\u2019importation dans une table existante est mieux adapt\u00e9e pour importer plusieurs ensembles de donn\u00e9es contenant une structure similaire. Par exemple, vous pourriez importer un relev\u00e9 bancaire en tant que nouvelle table, puis importer d\u2019autres relev\u00e9s d\u2019autres mois dans la m\u00eame table. Pour les d\u00e9veloppeurs, l\u2019 API Grist offre un moyen plus puissant d\u2019ajouter des donn\u00e9es \u00e0 un document Grist. Mise \u00e0 jour des enregistrements existants # Supposons que la table dans laquelle nous importons contient d\u00e9j\u00e0 certaines des donn\u00e9es de notre fichier. Nous aimerions que Grist mette \u00e0 jour ces enregistrements existants plut\u00f4t que de les dupliquer. Nous pouvons dire \u00e0 Grist de mettre \u00e0 jour ces enregistrements en cochant l\u2019option \u201cMettre \u00e0 jour les enregistrements existants\u201d et en sp\u00e9cifiant quels champs utiliser pour faire correspondre les donn\u00e9es entrantes avec les enregistrements existants. Une ligne import\u00e9e et un enregistrement existant qui ont les m\u00eames valeurs pour tous les champs de fusion s\u00e9lectionn\u00e9s sont consid\u00e9r\u00e9s comme le m\u00eame enregistrement. Dans ce cas, l\u2019importation mettra \u00e0 jour les champs de l\u2019enregistrement avec les donn\u00e9es import\u00e9es. Les valeurs vides des donn\u00e9es import\u00e9es seront ignor\u00e9es, laissant les champs correspondants dans l\u2019enregistrement original inchang\u00e9s. Remarque : Si plusieurs lignes import\u00e9es ont les m\u00eames valeurs pour les champs de fusion s\u00e9lectionn\u00e9s, la derni\u00e8re ligne sera utilis\u00e9e pour la correspondance et la mise \u00e0 jour. Si plusieurs enregistrements existants ont les m\u00eames valeurs pour les champs de fusion s\u00e9lectionn\u00e9s, seul le premier enregistrement sera mis \u00e0 jour si une ligne import\u00e9e correspondante est trouv\u00e9e. Chaque fois que les champs de fusion sont modifi\u00e9s, Grist g\u00e9n\u00e9rera un aper\u00e7u des mises \u00e0 jour qui seront apport\u00e9es \u00e0 la table de destination et les affichera dans la table d\u2019aper\u00e7u. Les modifications sont mises en \u00e9vidence comme suit : Les nouveaux enregistrements ont tous leurs champs mis en \u00e9vidence en vert. Les enregistrements mis \u00e0 jour ont une mise en \u00e9vidence rouge et verte pour tous les champs modifi\u00e9s : rouge (avec une barre oblique) pour les valeurs existantes de la destination, et vert pour les nouvelles valeurs du fichier import\u00e9. Les enregistrements inchang\u00e9s n\u2019ont pas de mise en \u00e9vidence. Les valeurs des champs qui existent dans la table de destination, mais sont vides dans le fichier import\u00e9, sont distingu\u00e9es par une couleur de police gris clair.","title":"Importing more data"},{"location":"imports/#importer-plus-de-donnees","text":"Vous pouvez importer un fichier pour cr\u00e9er un nouveau document Grist ou pour ajouter des donn\u00e9es \u00e0 un document existant. Grist prend en charge les importations de fichiers Excel, CSV, JSON, tabul\u00e9s et depuis Google Drive . Pour cr\u00e9er un nouveau document Grist, cliquez sur le bouton \u201cAjouter Nouveau\u201d sur l\u2019\u00e9cran d\u2019accueil et choisissez \u201cImporter un document\u201d, comme d\u00e9crit dans cr\u00e9er un nouveau document Grist . Pour ajouter \u00e0 un document existant, ouvrez ce document, cliquez sur le bouton \u201cAjouter Nouveau\u201d puis sur \u201cImporter depuis un fichier\u201d. Par d\u00e9faut, chaque table import\u00e9e est ajout\u00e9e comme une nouvelle table Grist, mais en examinant la bo\u00eete de dialogue de pr\u00e9visualisation pour une importation, vous avez la possibilit\u00e9 de changer la destination vers une table Grist existante. Vous pouvez \u00e9galement importer n\u2019importe lequel des m\u00eames formats depuis une URL, en utilisant l\u2019option \u201cImporter depuis une URL\u201d.","title":"Importer plus de donn\u00e9es"},{"location":"imports/#la-boite-de-dialogue-dimportation","text":"Lorsque vous importez des donn\u00e9es dans un document existant, Grist ouvre une bo\u00eete de dialogue d\u2019importation pour vous montrer ce qui sera import\u00e9. Cette bo\u00eete de dialogue offre des options d\u2019importation disponibles, vous permet de choisir de cr\u00e9er une nouvelle table ou d\u2019ajouter \u00e0 une table existante, et affiche un aper\u00e7u des donn\u00e9es. Le lien \u201cOptions d\u2019importation\u201d en haut \u00e0 droite est parfois utile lors de l\u2019importation de fichiers d\u00e9limit\u00e9s. Grist devine les param\u00e8tres pour analyser les donn\u00e9es (comme le d\u00e9limiteur de champ), mais si cela devine incorrectement, vous pouvez ajuster les param\u00e8tres.","title":"La bo\u00eete de dialogue d’importation"},{"location":"imports/#deviner-la-structure-des-donnees","text":"Dans tous les cas, lorsque vous importez un fichier, Grist fait des suppositions sur la structure du fichier. Pour les fichiers Excel, Grist traite chaque feuille comme une table s\u00e9par\u00e9e. Pour les fichiers CSV et autres formats d\u00e9limit\u00e9s, un fichier devient une table. Pour les fichiers Excel et d\u00e9limit\u00e9s, Grist essaie de d\u00e9tecter si les en-t\u00eates sont inclus et \u00e0 quelle ligne ils se trouvent. Si Grist d\u00e9tecte qu\u2019il n\u2019y a pas d\u2019en-t\u00eates, il nommera les colonnes comme \u201cA\u201d, \u201cB\u201d, \u201cC\u201d, etc. Grist essaie automatiquement de parser les nombres, les dates et les champs bool\u00e9ens pour d\u00e9tecter le type le plus appropri\u00e9 pour chaque colonne. Il essaie d\u2019\u00eatre sans perte : par exemple, s\u2019il marque une colonne comme num\u00e9rique, toutes les valeurs textuelles qu\u2019elle contient (comme \u201cN/A\u201d) resteront dans la table import\u00e9e, mais seront mises en \u00e9vidence en raison de l\u2019incompatibilit\u00e9 de type. Vous pouvez toujours renommer les tables et les colonnes apr\u00e8s une importation, ainsi que convertir les types.","title":"Deviner la structure des donn\u00e9es"},{"location":"imports/#importer-depuis-google-drive","text":"Importer depuis Google Drive est aussi simple que d\u2019importer depuis un fichier Excel ou un fichier CSV. Vous pouvez soit fournir une URL d\u2019un fichier stock\u00e9 dans Google Drive, soit utiliser un s\u00e9lecteur de fichiers Google pour choisir un fichier de votre propre drive. Pour utiliser un s\u00e9lecteur, cliquez sur le bouton \u201cAjouter Nouveau\u201d et choisissez \u201cImporter depuis Google Drive\u201d. Pour importer, connectez-vous \u00e0 votre compte Google en cliquant sur le bouton \u201cSe connecter\u201d et en suivant le processus de connexion. Grist vous demandera l\u2019autorisation de lire le fichier que vous importerez depuis Google Drive. Nous ne lirons aucun autre fichier sur votre drive \u2014 juste le fichier unique que vous choisissez d\u2019importer. Une fois le fichier choisi, le reste du processus est le m\u00eame que pour importer depuis un fichier Excel. Dans la bo\u00eete de dialogue d\u2019importation , vous pouvez configurer quelles donn\u00e9es importer et dans quelle table de destination les ajouter. Si vous avez une URL vers un fichier ou une feuille de calcul stock\u00e9e sur votre Google Drive ou un fichier accessible publiquement, vous pouvez l\u2019importer directement en utilisant l\u2019option \u201cImporter depuis une URL\u201d du menu \u201cAjouter Nouveau\u201d. Si le fichier n\u2019est pas partag\u00e9 publiquement, Grist vous demandera l\u2019autorisation de lire les fichiers de votre Google Drive. Si vous ne souhaitez pas autoriser Grist \u00e0 lire vos fichiers, il ouvrira le s\u00e9lecteur de fichiers Google o\u00f9 vous pourrez s\u00e9lectionner le fichier que vous souhaitez importer.","title":"Importer depuis Google Drive"},{"location":"imports/#importer-dans-une-table-existante","text":"Par d\u00e9faut, Grist importe de nouvelles donn\u00e9es en tant que nouvelles tables, mais la bo\u00eete de dialogue d\u2019importation vous permet de changer la destination et d\u2019importer des donn\u00e9es dans une table existante. Lors de l\u2019importation dans une table existante, Grist tentera de faire correspondre les colonnes de votre fichier import\u00e9 aux colonnes de la table de destination. Pour sp\u00e9cifier manuellement la correspondance des colonnes, cliquez sur le menu d\u00e9roulant \u2018Colonne source\u2019 pour ouvrir un menu avec une liste de colonnes inutilis\u00e9es de votre fichier import\u00e9. Cliquez sur un nom de colonne pour le faire correspondre \u00e0 une colonne de destination, ou s\u00e9lectionnez \u2018Ignorer\u2019 pour ignorer l\u2019importation des donn\u00e9es de cette colonne. Vous pouvez \u00e9galement sp\u00e9cifier une formule pour chaque colonne import\u00e9e en cliquant sur \u2018Appliquer une formule\u2019 dans le menu d\u00e9roulant \u2018Colonne source\u2019. Les formules peuvent r\u00e9f\u00e9rencer une ou plusieurs colonnes import\u00e9es, et le r\u00e9sultat de l\u2019\u00e9valuation de la formule sera affich\u00e9 dans l\u2019aper\u00e7u apr\u00e8s la fermeture de l\u2019\u00e9diteur. L\u2019importation dans une table existante est mieux adapt\u00e9e pour importer plusieurs ensembles de donn\u00e9es contenant une structure similaire. Par exemple, vous pourriez importer un relev\u00e9 bancaire en tant que nouvelle table, puis importer d\u2019autres relev\u00e9s d\u2019autres mois dans la m\u00eame table. Pour les d\u00e9veloppeurs, l\u2019 API Grist offre un moyen plus puissant d\u2019ajouter des donn\u00e9es \u00e0 un document Grist.","title":"Importer dans une table existante"},{"location":"imports/#mise-a-jour-des-enregistrements-existants","text":"Supposons que la table dans laquelle nous importons contient d\u00e9j\u00e0 certaines des donn\u00e9es de notre fichier. Nous aimerions que Grist mette \u00e0 jour ces enregistrements existants plut\u00f4t que de les dupliquer. Nous pouvons dire \u00e0 Grist de mettre \u00e0 jour ces enregistrements en cochant l\u2019option \u201cMettre \u00e0 jour les enregistrements existants\u201d et en sp\u00e9cifiant quels champs utiliser pour faire correspondre les donn\u00e9es entrantes avec les enregistrements existants. Une ligne import\u00e9e et un enregistrement existant qui ont les m\u00eames valeurs pour tous les champs de fusion s\u00e9lectionn\u00e9s sont consid\u00e9r\u00e9s comme le m\u00eame enregistrement. Dans ce cas, l\u2019importation mettra \u00e0 jour les champs de l\u2019enregistrement avec les donn\u00e9es import\u00e9es. Les valeurs vides des donn\u00e9es import\u00e9es seront ignor\u00e9es, laissant les champs correspondants dans l\u2019enregistrement original inchang\u00e9s. Remarque : Si plusieurs lignes import\u00e9es ont les m\u00eames valeurs pour les champs de fusion s\u00e9lectionn\u00e9s, la derni\u00e8re ligne sera utilis\u00e9e pour la correspondance et la mise \u00e0 jour. Si plusieurs enregistrements existants ont les m\u00eames valeurs pour les champs de fusion s\u00e9lectionn\u00e9s, seul le premier enregistrement sera mis \u00e0 jour si une ligne import\u00e9e correspondante est trouv\u00e9e. Chaque fois que les champs de fusion sont modifi\u00e9s, Grist g\u00e9n\u00e9rera un aper\u00e7u des mises \u00e0 jour qui seront apport\u00e9es \u00e0 la table de destination et les affichera dans la table d\u2019aper\u00e7u. Les modifications sont mises en \u00e9vidence comme suit : Les nouveaux enregistrements ont tous leurs champs mis en \u00e9vidence en vert. Les enregistrements mis \u00e0 jour ont une mise en \u00e9vidence rouge et verte pour tous les champs modifi\u00e9s : rouge (avec une barre oblique) pour les valeurs existantes de la destination, et vert pour les nouvelles valeurs du fichier import\u00e9. Les enregistrements inchang\u00e9s n\u2019ont pas de mise en \u00e9vidence. Les valeurs des champs qui existent dans la table de destination, mais sont vides dans le fichier import\u00e9, sont distingu\u00e9es par une couleur de police gris clair.","title":"Mise \u00e0 jour des enregistrements existants"},{"location":"integrators/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Services d\u2019Int\u00e9gration # Grist peut \u00eatre connect\u00e9 \u00e0 des milliers d\u2019autres services via des int\u00e9grateurs avec le support de Grist. Ceux-ci incluent : Zapier Integrately Pabbly Connect KonnectzIT n8n Make Configuration des Int\u00e9grateurs # Chaque int\u00e9grateur fournit sa propre m\u00e9thode pour configurer la connexion entre Grist et d\u2019autres services. Pabbly Connect a cr\u00e9\u00e9 quelques vid\u00e9os expliquant comment configurer une int\u00e9gration avec Grist en utilisant Pabbly Connect. Pabbly Connect Youtube - Playlist Grist Ci-dessous est inclus un guide d\u2019exemple sur la fa\u00e7on dont une int\u00e9gration avec Grist peut \u00eatre configur\u00e9e en utilisant Zapier . Grist peut d\u00e9clencher un flux de travail chaque fois qu\u2019il y a un nouvel enregistrement ou une mise \u00e0 jour dans une table, entra\u00eenant une action dans un autre service. Inversement, les flux de travail d\u00e9clench\u00e9s par d\u2019autres services peuvent consulter, ajouter ou mettre \u00e0 jour des enregistrements dans les tables Grist. Exemple : Stockage des soumissions de formulaires # Supposons que nous ayons un formulaire pour collecter des votes sur la couleur d\u2019un nouveau hangar \u00e0 v\u00e9los propos\u00e9 : Le formulaire est configur\u00e9 en utilisant Google Forms (pour cet exemple), et nous voulons que les r\u00e9ponses soient stock\u00e9es dans un document Grist : Une fa\u00e7on de r\u00e9aliser cela est avec Zapier . Connectons-nous donc sur le site de Zapier, puis visitons la page d\u2019int\u00e9gration Grist : Nous aimerions associer Grist avec Google Forms. Zapier prend en charge plusieurs fournisseurs de formulaires, et le processus global d\u2019int\u00e9gration est similaire pour tous. Il suffit de taper le fournisseur que vous souhaitez. Pour ce tutoriel, nous choisissons Google Forms. Une fois que nous avons choisi le fournisseur \u00e0 int\u00e9grer, nous devons pr\u00e9ciser exactement ce que nous voulons qu\u2019il fasse, parmi les \u201cd\u00e9clencheurs\u201d et \u201cactions\u201d disponibles. Dans ce cas, nous choisissons que lorsqu\u2019il y a un d\u00e9clencheur Nouvelle R\u00e9ponse dans la Feuille de Calcul pour Google Forms, nous effectuerons l\u2019action Cr\u00e9er un Enregistrement dans Grist. Nous cliquons sur le bouton de construction pour commencer \u00e0 remplir les d\u00e9tails : \u00c9tant donn\u00e9 que l\u2019\u00e9v\u00e9nement d\u00e9clencheur pour l\u2019int\u00e9gration se produira dans Google Forms, nous sommes d\u2019abord invit\u00e9s \u00e0 donner \u00e0 Zapier certains droits d\u2019acc\u00e8s \u00e0 vos formulaires. Une fois cela fait, nous sommes invit\u00e9s \u00e0 confirmer quelle feuille de calcul utiliser : Ensuite, nous sp\u00e9cifions quelle feuille de travail au sein de la feuille de calcul utiliser (facile s\u2019il n\u2019y en a qu\u2019une). Pour le b\u00e9n\u00e9fice de Zapier \u00e0 une \u00e9tape ult\u00e9rieure, il est important qu\u2019il y ait au moins une r\u00e9ponse d\u2019exemple d\u00e9j\u00e0 dans la feuille de calcul. C\u2019est la partie Google termin\u00e9e. Maintenant pour la partie Grist. Nous sommes invit\u00e9s \u00e0 donner une cl\u00e9 API pour Grist, donc nous configurons une cl\u00e9 API si ce n\u2019est pas d\u00e9j\u00e0 fait. Pour donner des droits d\u2019acc\u00e8s pr\u00e9cis, nous pourrions configurer un compte utilisateur juste pour l\u2019int\u00e9gration, et lui donner acc\u00e8s uniquement \u00e0 ce dont il a besoin, et fournir sa cl\u00e9 API. Nous confirmons maintenant l\u2019\u00e9quipe \u00e0 utiliser - documents personnels ou un espace d\u2019\u00e9quipe auquel nous avons acc\u00e8s : Ensuite, nous choisissons le document Grist pour envoyer les r\u00e9ponses du formulaire : Et ensuite, nous choisissons la table \u00e0 utiliser dans ce document. Elle doit avoir des colonnes pour stocker les parties du formulaire que nous voulons conserver. Il est important de cr\u00e9er cette table si elle n\u2019existe pas d\u00e9j\u00e0 ; elle ne sera pas cr\u00e9\u00e9e automatiquement. Il n\u2019est pas important de faire correspondre les noms de colonnes avec les questions. Zapier permet une cartographie flexible des champs entre les services. Dans notre cas, une correspondance un-\u00e0-un fonctionne bien : Ok ! Maintenant, nous pouvons cliquer sur notre bouton pour que Zap teste notre int\u00e9gration. Tout va bien, nous pouvons activer le \u201cZap\u201d et le laisser fonctionner. Il est maintenant temps de faire quelques soumissions, et d\u2019aller prendre une tasse de quelque chose. Les \u201cZaps\u201d gratuits peuvent s\u2019ex\u00e9cuter p\u00e9riodiquement pour v\u00e9rifier les nouvelles soumissions, donc ne vous attendez pas \u00e0 des r\u00e9sultats imm\u00e9diats dans tous les cas. Mais finalement, vous devriez voir les votes affluer ! Exemple : Envoi d\u2019alertes par email # Nous avons vu un exemple de service externe envoyant des donn\u00e9es \u00e0 Grist. Maintenant, regardons un exemple de Grist envoyant des donn\u00e9es \u00e0 un service externe. En continuant notre exemple de formulaire, o\u00f9 un document Grist accumule des votes pour une couleur pr\u00e9f\u00e9r\u00e9e : supposons maintenant qu\u2019\u00e0 chaque fois qu\u2019un nouveau vote arrive, nous voulons envoyer un email r\u00e9sumant quelle option est en t\u00eate. Nous \u00e9crivons une formule pour pr\u00e9parer le texte dans une cellule Texte : Revenons \u00e0 nouveau \u00e0 la page d\u2019int\u00e9gration Grist sur Zapier. Il y a plusieurs int\u00e9grations de messagerie. Pour cet exemple, nous choisissons Gmail : Une fois que nous avons choisi le service \u00e0 connecter, nous choisissons maintenant exactement ce que nous voulons qu\u2019il fasse. Dans ce cas, nous choisissons que lorsqu\u2019il y a un Nouvel Enregistrement ou Enregistrement Mis \u00e0 Jour (Instantan\u00e9) dans Grist, nous Envoyons un Email dans Gmail. Notez le Instantan\u00e9 ici. Les d\u00e9clencheurs dans Zapier peuvent \u00eatre soit du type r\u00e9gulier o\u00f9 Zapier v\u00e9rifie p\u00e9riodiquement les changements (c\u2019est relativement lent), soit un type sp\u00e9cial \u201cinstantan\u00e9\u201d qui n\u00e9cessite un support sp\u00e9cial du service d\u00e9clencheur mais est beaucoup plus rapide. Grist prend en charge les deux types de d\u00e9clencheurs, et nous recommandons fortement \u201cinstantan\u00e9\u201d si vous pr\u00e9f\u00e9rez des r\u00e9sultats en secondes plut\u00f4t qu\u2019en minutes, et surtout si vous \u00eates du genre \u00e0 vous inqui\u00e9ter si quelqu\u2019un ne r\u00e9pond pas imm\u00e9diatement \u00e0 vos messages instantan\u00e9s. Une fois que nous avons choisi un compte Grist \u00e0 utiliser comme avant, nous pouvons choisir une table dans un document \u00e0 surveiller. Pour les d\u00e9clencheurs instantan\u00e9s, nous pouvons \u00e9ventuellement sp\u00e9cifier une colonne de \u201cdisponibilit\u00e9\u201d . Si nous laissons cela vide, chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9 ou modifi\u00e9 dans la table s\u00e9lectionn\u00e9e, Grist en informera Zapier. Si nous la configurons, elle devrait g\u00e9n\u00e9ralement \u00eatre une colonne de bascule , et Grist informera Zapier uniquement pour les enregistrements lorsque cette colonne est activ\u00e9e. Cela est pratique pour les enregistrements qui ont de nombreuses colonnes remplies manuellement, lorsque nous ne voulons pas d\u00e9clencher avant qu\u2019ils ne soient complets. Pour cet exemple, il est bien de laisser la colonne de disponibilit\u00e9 vide. (Pour les d\u00e9clencheurs non instantan\u00e9s r\u00e9guliers, nous devrions choisir une colonne sp\u00e9cifique \u00e0 surveiller. Id\u00e9alement, ce serait une colonne Mis \u00e0 Jour \u00c0 , voir Colonnes de Timestamp ). Du c\u00f4t\u00e9 de Gmail, nous pouvons envoyer des emails \u00e0 des adresses pr\u00e9d\u00e9finies, ou cela pourrait \u00eatre configur\u00e9 dynamiquement (nous verrons un exemple de comment dans un instant) : Nous choisissons de d\u00e9finir le corps de l\u2019email pour contenir du contenu \u201cPersonnalis\u00e9\u201d, dans ce cas la cellule Texte que nous avons calcul\u00e9e plus t\u00f4t. Et nous avons termin\u00e9 ! Zapier proposera de faire un test rapide pour v\u00e9rifier que les emails sont envoy\u00e9s correctement : Ensuite, vous pouvez faire quelques votes et regarder le syst\u00e8me fonctionner. Pour les d\u00e9clencheurs instantan\u00e9s, les r\u00e9sultats devraient appara\u00eetre assez rapidement. Sinon, Zapier dispose d\u2019une fonctionnalit\u00e9 \u201cex\u00e9cuter zap\u201d pour forcer une mise \u00e0 jour imm\u00e9diate de l\u2019int\u00e9gration : Et les emails devraient commencer \u00e0 appara\u00eetre dans les bo\u00eetes de r\u00e9ception souhait\u00e9es. Que le meilleur nuance presque indiscernable gagne ! Colonne de Disponibilit\u00e9 # Grist dispose d\u2019un m\u00e9canisme pour alerter d\u2019autres services lorsque des donn\u00e9es changent dans un document. Cela sert de base aux d\u00e9clencheurs instantan\u00e9s de Zapier. \u00c9tant donn\u00e9 que Grist est une feuille de calcul, il est courant que les enregistrements (lignes) soient cr\u00e9\u00e9s vides, et que les cellules soient ensuite remplies une par une. Cela cr\u00e9e une nuance importante pour les notifications. Habituellement, il ne sera pas souhaitable d\u2019envoyer une notification avant que l\u2019enregistrement ne soit en quelque sorte \u201cpr\u00eat\u201d, mais quand exactement est-ce ? Grist laisse l\u2019utilisateur d\u00e9cider par lui-m\u00eame, en cr\u00e9ant une colonne de bascule (bool\u00e9enne) qui est activ\u00e9e lorsque l\u2019enregistrement est pr\u00eat. La colonne peut \u00eatre d\u00e9finie manuellement ou via une formule. Cela s\u2019appelle une colonne de disponibilit\u00e9. Par exemple, si vous ne voulez activer un d\u00e9clencheur que lorsque les colonnes appel\u00e9es Nom et Email ne sont pas vides, votre colonne de disponibilit\u00e9 peut avoir la formule suivante : bool($Name and $Email) Vous feriez en sorte que la colonne prenne effet en la fournissant dans l\u2019option Colonne de Disponibilit\u00e9 d\u00e9crite dans l\u2019 exemple d\u2019alerte par email . D\u00e9clenchement (ou \u00e9vitement du d\u00e9clenchement) sur des enregistrements pr\u00e9existants # L\u2019ordre des \u00e9tapes est important lors de la configuration d\u2019une int\u00e9gration qui utilise une colonne de disponibilit\u00e9. Si vous avez des donn\u00e9es existantes, r\u00e9fl\u00e9chissez \u00e0 si vous voulez que l\u2019int\u00e9gration affecte toutes les donn\u00e9es existantes ou seulement les mises \u00e0 jour et nouvelles donn\u00e9es. Par exemple, si vous envoyez des donn\u00e9es de Grist \u00e0 Google Sheets en utilisant une int\u00e9gration Zapier, vous voudrez probablement envoyer vos donn\u00e9es existantes. Dans ce cas, configurez et activez d\u2019abord votre Zap avec une colonne de disponibilit\u00e9 vide, puis activez toutes les cellules de disponibilit\u00e9. Si vous voulez envoyer une notification uniquement lorsque quelque chose est ajout\u00e9 \u00e0 Grist, et non pour les enregistrements pr\u00e9existants, assurez-vous que toutes vos cellules de disponibilit\u00e9 sont activ\u00e9es avant d\u2019activer l\u2019int\u00e9gration, sinon une fois qu\u2019elles sont activ\u00e9es, des notifications seront envoy\u00e9es pour toutes. Cela peut \u00eatre beaucoup !","title":"Integrator services"},{"location":"integrators/#services-dintegration","text":"Grist peut \u00eatre connect\u00e9 \u00e0 des milliers d\u2019autres services via des int\u00e9grateurs avec le support de Grist. Ceux-ci incluent : Zapier Integrately Pabbly Connect KonnectzIT n8n Make","title":"Services d’Int\u00e9gration"},{"location":"integrators/#configuration-des-integrateurs","text":"Chaque int\u00e9grateur fournit sa propre m\u00e9thode pour configurer la connexion entre Grist et d\u2019autres services. Pabbly Connect a cr\u00e9\u00e9 quelques vid\u00e9os expliquant comment configurer une int\u00e9gration avec Grist en utilisant Pabbly Connect. Pabbly Connect Youtube - Playlist Grist Ci-dessous est inclus un guide d\u2019exemple sur la fa\u00e7on dont une int\u00e9gration avec Grist peut \u00eatre configur\u00e9e en utilisant Zapier . Grist peut d\u00e9clencher un flux de travail chaque fois qu\u2019il y a un nouvel enregistrement ou une mise \u00e0 jour dans une table, entra\u00eenant une action dans un autre service. Inversement, les flux de travail d\u00e9clench\u00e9s par d\u2019autres services peuvent consulter, ajouter ou mettre \u00e0 jour des enregistrements dans les tables Grist.","title":"Configuration des Int\u00e9grateurs"},{"location":"integrators/#exemple-stockage-des-soumissions-de-formulaires","text":"Supposons que nous ayons un formulaire pour collecter des votes sur la couleur d\u2019un nouveau hangar \u00e0 v\u00e9los propos\u00e9 : Le formulaire est configur\u00e9 en utilisant Google Forms (pour cet exemple), et nous voulons que les r\u00e9ponses soient stock\u00e9es dans un document Grist : Une fa\u00e7on de r\u00e9aliser cela est avec Zapier . Connectons-nous donc sur le site de Zapier, puis visitons la page d\u2019int\u00e9gration Grist : Nous aimerions associer Grist avec Google Forms. Zapier prend en charge plusieurs fournisseurs de formulaires, et le processus global d\u2019int\u00e9gration est similaire pour tous. Il suffit de taper le fournisseur que vous souhaitez. Pour ce tutoriel, nous choisissons Google Forms. Une fois que nous avons choisi le fournisseur \u00e0 int\u00e9grer, nous devons pr\u00e9ciser exactement ce que nous voulons qu\u2019il fasse, parmi les \u201cd\u00e9clencheurs\u201d et \u201cactions\u201d disponibles. Dans ce cas, nous choisissons que lorsqu\u2019il y a un d\u00e9clencheur Nouvelle R\u00e9ponse dans la Feuille de Calcul pour Google Forms, nous effectuerons l\u2019action Cr\u00e9er un Enregistrement dans Grist. Nous cliquons sur le bouton de construction pour commencer \u00e0 remplir les d\u00e9tails : \u00c9tant donn\u00e9 que l\u2019\u00e9v\u00e9nement d\u00e9clencheur pour l\u2019int\u00e9gration se produira dans Google Forms, nous sommes d\u2019abord invit\u00e9s \u00e0 donner \u00e0 Zapier certains droits d\u2019acc\u00e8s \u00e0 vos formulaires. Une fois cela fait, nous sommes invit\u00e9s \u00e0 confirmer quelle feuille de calcul utiliser : Ensuite, nous sp\u00e9cifions quelle feuille de travail au sein de la feuille de calcul utiliser (facile s\u2019il n\u2019y en a qu\u2019une). Pour le b\u00e9n\u00e9fice de Zapier \u00e0 une \u00e9tape ult\u00e9rieure, il est important qu\u2019il y ait au moins une r\u00e9ponse d\u2019exemple d\u00e9j\u00e0 dans la feuille de calcul. C\u2019est la partie Google termin\u00e9e. Maintenant pour la partie Grist. Nous sommes invit\u00e9s \u00e0 donner une cl\u00e9 API pour Grist, donc nous configurons une cl\u00e9 API si ce n\u2019est pas d\u00e9j\u00e0 fait. Pour donner des droits d\u2019acc\u00e8s pr\u00e9cis, nous pourrions configurer un compte utilisateur juste pour l\u2019int\u00e9gration, et lui donner acc\u00e8s uniquement \u00e0 ce dont il a besoin, et fournir sa cl\u00e9 API. Nous confirmons maintenant l\u2019\u00e9quipe \u00e0 utiliser - documents personnels ou un espace d\u2019\u00e9quipe auquel nous avons acc\u00e8s : Ensuite, nous choisissons le document Grist pour envoyer les r\u00e9ponses du formulaire : Et ensuite, nous choisissons la table \u00e0 utiliser dans ce document. Elle doit avoir des colonnes pour stocker les parties du formulaire que nous voulons conserver. Il est important de cr\u00e9er cette table si elle n\u2019existe pas d\u00e9j\u00e0 ; elle ne sera pas cr\u00e9\u00e9e automatiquement. Il n\u2019est pas important de faire correspondre les noms de colonnes avec les questions. Zapier permet une cartographie flexible des champs entre les services. Dans notre cas, une correspondance un-\u00e0-un fonctionne bien : Ok ! Maintenant, nous pouvons cliquer sur notre bouton pour que Zap teste notre int\u00e9gration. Tout va bien, nous pouvons activer le \u201cZap\u201d et le laisser fonctionner. Il est maintenant temps de faire quelques soumissions, et d\u2019aller prendre une tasse de quelque chose. Les \u201cZaps\u201d gratuits peuvent s\u2019ex\u00e9cuter p\u00e9riodiquement pour v\u00e9rifier les nouvelles soumissions, donc ne vous attendez pas \u00e0 des r\u00e9sultats imm\u00e9diats dans tous les cas. Mais finalement, vous devriez voir les votes affluer !","title":"Exemple : Stockage des soumissions de formulaires"},{"location":"integrators/#exemple-envoi-dalertes-par-email","text":"Nous avons vu un exemple de service externe envoyant des donn\u00e9es \u00e0 Grist. Maintenant, regardons un exemple de Grist envoyant des donn\u00e9es \u00e0 un service externe. En continuant notre exemple de formulaire, o\u00f9 un document Grist accumule des votes pour une couleur pr\u00e9f\u00e9r\u00e9e : supposons maintenant qu\u2019\u00e0 chaque fois qu\u2019un nouveau vote arrive, nous voulons envoyer un email r\u00e9sumant quelle option est en t\u00eate. Nous \u00e9crivons une formule pour pr\u00e9parer le texte dans une cellule Texte : Revenons \u00e0 nouveau \u00e0 la page d\u2019int\u00e9gration Grist sur Zapier. Il y a plusieurs int\u00e9grations de messagerie. Pour cet exemple, nous choisissons Gmail : Une fois que nous avons choisi le service \u00e0 connecter, nous choisissons maintenant exactement ce que nous voulons qu\u2019il fasse. Dans ce cas, nous choisissons que lorsqu\u2019il y a un Nouvel Enregistrement ou Enregistrement Mis \u00e0 Jour (Instantan\u00e9) dans Grist, nous Envoyons un Email dans Gmail. Notez le Instantan\u00e9 ici. Les d\u00e9clencheurs dans Zapier peuvent \u00eatre soit du type r\u00e9gulier o\u00f9 Zapier v\u00e9rifie p\u00e9riodiquement les changements (c\u2019est relativement lent), soit un type sp\u00e9cial \u201cinstantan\u00e9\u201d qui n\u00e9cessite un support sp\u00e9cial du service d\u00e9clencheur mais est beaucoup plus rapide. Grist prend en charge les deux types de d\u00e9clencheurs, et nous recommandons fortement \u201cinstantan\u00e9\u201d si vous pr\u00e9f\u00e9rez des r\u00e9sultats en secondes plut\u00f4t qu\u2019en minutes, et surtout si vous \u00eates du genre \u00e0 vous inqui\u00e9ter si quelqu\u2019un ne r\u00e9pond pas imm\u00e9diatement \u00e0 vos messages instantan\u00e9s. Une fois que nous avons choisi un compte Grist \u00e0 utiliser comme avant, nous pouvons choisir une table dans un document \u00e0 surveiller. Pour les d\u00e9clencheurs instantan\u00e9s, nous pouvons \u00e9ventuellement sp\u00e9cifier une colonne de \u201cdisponibilit\u00e9\u201d . Si nous laissons cela vide, chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9 ou modifi\u00e9 dans la table s\u00e9lectionn\u00e9e, Grist en informera Zapier. Si nous la configurons, elle devrait g\u00e9n\u00e9ralement \u00eatre une colonne de bascule , et Grist informera Zapier uniquement pour les enregistrements lorsque cette colonne est activ\u00e9e. Cela est pratique pour les enregistrements qui ont de nombreuses colonnes remplies manuellement, lorsque nous ne voulons pas d\u00e9clencher avant qu\u2019ils ne soient complets. Pour cet exemple, il est bien de laisser la colonne de disponibilit\u00e9 vide. (Pour les d\u00e9clencheurs non instantan\u00e9s r\u00e9guliers, nous devrions choisir une colonne sp\u00e9cifique \u00e0 surveiller. Id\u00e9alement, ce serait une colonne Mis \u00e0 Jour \u00c0 , voir Colonnes de Timestamp ). Du c\u00f4t\u00e9 de Gmail, nous pouvons envoyer des emails \u00e0 des adresses pr\u00e9d\u00e9finies, ou cela pourrait \u00eatre configur\u00e9 dynamiquement (nous verrons un exemple de comment dans un instant) : Nous choisissons de d\u00e9finir le corps de l\u2019email pour contenir du contenu \u201cPersonnalis\u00e9\u201d, dans ce cas la cellule Texte que nous avons calcul\u00e9e plus t\u00f4t. Et nous avons termin\u00e9 ! Zapier proposera de faire un test rapide pour v\u00e9rifier que les emails sont envoy\u00e9s correctement : Ensuite, vous pouvez faire quelques votes et regarder le syst\u00e8me fonctionner. Pour les d\u00e9clencheurs instantan\u00e9s, les r\u00e9sultats devraient appara\u00eetre assez rapidement. Sinon, Zapier dispose d\u2019une fonctionnalit\u00e9 \u201cex\u00e9cuter zap\u201d pour forcer une mise \u00e0 jour imm\u00e9diate de l\u2019int\u00e9gration : Et les emails devraient commencer \u00e0 appara\u00eetre dans les bo\u00eetes de r\u00e9ception souhait\u00e9es. Que le meilleur nuance presque indiscernable gagne !","title":"Exemple : Envoi d’alertes par email"},{"location":"integrators/#colonne-de-disponibilite","text":"Grist dispose d\u2019un m\u00e9canisme pour alerter d\u2019autres services lorsque des donn\u00e9es changent dans un document. Cela sert de base aux d\u00e9clencheurs instantan\u00e9s de Zapier. \u00c9tant donn\u00e9 que Grist est une feuille de calcul, il est courant que les enregistrements (lignes) soient cr\u00e9\u00e9s vides, et que les cellules soient ensuite remplies une par une. Cela cr\u00e9e une nuance importante pour les notifications. Habituellement, il ne sera pas souhaitable d\u2019envoyer une notification avant que l\u2019enregistrement ne soit en quelque sorte \u201cpr\u00eat\u201d, mais quand exactement est-ce ? Grist laisse l\u2019utilisateur d\u00e9cider par lui-m\u00eame, en cr\u00e9ant une colonne de bascule (bool\u00e9enne) qui est activ\u00e9e lorsque l\u2019enregistrement est pr\u00eat. La colonne peut \u00eatre d\u00e9finie manuellement ou via une formule. Cela s\u2019appelle une colonne de disponibilit\u00e9. Par exemple, si vous ne voulez activer un d\u00e9clencheur que lorsque les colonnes appel\u00e9es Nom et Email ne sont pas vides, votre colonne de disponibilit\u00e9 peut avoir la formule suivante : bool($Name and $Email) Vous feriez en sorte que la colonne prenne effet en la fournissant dans l\u2019option Colonne de Disponibilit\u00e9 d\u00e9crite dans l\u2019 exemple d\u2019alerte par email .","title":"Colonne de Disponibilit\u00e9"},{"location":"integrators/#declenchement-ou-evitement-du-declenchement-sur-des-enregistrements-preexistants","text":"L\u2019ordre des \u00e9tapes est important lors de la configuration d\u2019une int\u00e9gration qui utilise une colonne de disponibilit\u00e9. Si vous avez des donn\u00e9es existantes, r\u00e9fl\u00e9chissez \u00e0 si vous voulez que l\u2019int\u00e9gration affecte toutes les donn\u00e9es existantes ou seulement les mises \u00e0 jour et nouvelles donn\u00e9es. Par exemple, si vous envoyez des donn\u00e9es de Grist \u00e0 Google Sheets en utilisant une int\u00e9gration Zapier, vous voudrez probablement envoyer vos donn\u00e9es existantes. Dans ce cas, configurez et activez d\u2019abord votre Zap avec une colonne de disponibilit\u00e9 vide, puis activez toutes les cellules de disponibilit\u00e9. Si vous voulez envoyer une notification uniquement lorsque quelque chose est ajout\u00e9 \u00e0 Grist, et non pour les enregistrements pr\u00e9existants, assurez-vous que toutes vos cellules de disponibilit\u00e9 sont activ\u00e9es avant d\u2019activer l\u2019int\u00e9gration, sinon une fois qu\u2019elles sont activ\u00e9es, des notifications seront envoy\u00e9es pour toutes. Cela peut \u00eatre beaucoup !","title":"D\u00e9clenchement (ou \u00e9vitement du d\u00e9clenchement) sur des enregistrements pr\u00e9existants"},{"location":"investment-research/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Comment analyser et visualiser des donn\u00e9es # Grist offre plusieurs moyens puissants d\u2019analyser et de visualiser des donn\u00e9es. Dans ce tutoriel, vous apprendrez \u00e0 : Cr\u00e9er des tables de synth\u00e8se Cr\u00e9er et configurer des graphiques Lier des graphiques de mani\u00e8re dynamique Pour expliquer ces fonctionnalit\u00e9s, nous utiliserons le document d\u2019exemple \u201cRecherche d\u2019Investissement\u201d 1 qui inclut des entreprises et les investissements dans celles-ci jusqu\u2019en 2013. Jetons un coup d\u2019\u0153il au document d\u2019exemple, puis nous parlerons de la mani\u00e8re de le construire afin que vous puissiez appliquer ces outils \u00e0 vos propres donn\u00e9es. Explorer l\u2019exemple # Ouvrez le document \u201c Recherche d\u2019Investissement \u201d, trouv\u00e9 dans Exemples & Mod\u00e8les sur votre page d\u2019accueil Grist. La premi\u00e8re chose que vous verrez est \u201cAper\u00e7u\u201d. Cette page contient deux graphiques \u00e0 c\u00f4t\u00e9 de deux tables. En haut \u00e0 gauche, il y a un graphique circulaire montrant la r\u00e9partition des investissements par cat\u00e9gorie. La table \u00e0 c\u00f4t\u00e9 contient les m\u00eames donn\u00e9es sous forme tabulaire. En dessous du graphique circulaire se trouve un graphique \u00e0 barres montrant le total des investissements lev\u00e9s par ann\u00e9e. Il est \u00e9galement accompagn\u00e9 des m\u00eames donn\u00e9es dans la table \u00e0 c\u00f4t\u00e9 sous forme tabulaire. Tous ces graphiques et tables sont des exemples de \u201ctables de synth\u00e8se\u201d, que nous d\u00e9crirons ci-dessous. La page suivante, \u201cR\u00e9partitions\u201d, contient \u00e9galement deux tables et deux graphiques, mais ceux-ci sont li\u00e9s de mani\u00e8re dynamique et offrent des informations beaucoup plus d\u00e9taill\u00e9es sur les donn\u00e9es. En haut \u00e0 gauche se trouve une table montrant le financement total par ann\u00e9e (la m\u00eame table que nous avons vue sur la page pr\u00e9c\u00e9dente). Cette table sert de moteur pour le graphique \u00e0 c\u00f4t\u00e9. Lorsque vous cliquez sur une ann\u00e9e dans la table, le graphique circulaire se met \u00e0 jour pour montrer la r\u00e9partition des investissements cette ann\u00e9e-l\u00e0. De m\u00eame, la table du bas montre les investissements par cat\u00e9gorie. Lorsque vous cliquez sur une cat\u00e9gorie, le graphique lin\u00e9aire \u00e0 c\u00f4t\u00e9 se met \u00e0 jour pour montrer l\u2019historique du financement dans cette cat\u00e9gorie au fil des ans. Notez \u00e0 quel point cela est puissant et combien d\u2019informations vous pouvez en tirer. Par exemple, vous pouvez voir que la cat\u00e9gorie Publicit\u00e9 a re\u00e7u beaucoup d\u2019investissements \u00e0 New York depuis 2007, mais a \u00e9t\u00e9 d\u00e9pass\u00e9e par le E-commerce en 2013, tandis que la cat\u00e9gorie Mode a connu un pic majeur en 2011. Sur la page suivante, \u201cD\u00e9tails de l\u2019Entreprise\u201d, nous pouvons voir les donn\u00e9es granulaires de cet ensemble de donn\u00e9es. Ici, nous voyons une liste d\u2019entreprises et les cat\u00e9gories auxquelles elles appartiennent. Chaque entreprise affich\u00e9e a un lien pointant vers son inscription sur le site Crunchbase. S\u00e9lectionner une entreprise affiche une fiche avec ses d\u00e9tails, ainsi qu\u2019une liste de tous les investissements qu\u2019elle a re\u00e7us. C\u2019est ici que nous commen\u00e7ons \u00e0 voir la puissance de Grist. L\u2019ensemble de donn\u00e9es original est une feuille de calcul plate d\u2019entreprises, et une feuille de calcul encore plus grande d\u2019investissements. En affichant les donn\u00e9es graphiquement, les donn\u00e9es prennent vie, les rendant puissantes et utiles. Comment puis-je faire cela ? # Avec Grist, pr\u00e9senter vos propres donn\u00e9es sous forme graphique est \u00e0 quelques \u00e9tapes faciles. Commen\u00e7ons par la premi\u00e8re \u00e9tape. Obtenir les donn\u00e9es # Importons les donn\u00e9es sources. Nous allons importer deux fichiers CSV, chacun devenant sa propre table. Pour suivre, enregistrez d\u2019abord les fichiers de crunchbase_companies_ny.csv et crunchbase_investments_ny.csv sur votre ordinateur. Ensuite, cr\u00e9ez un document Grist en important le premier fichier depuis la page d\u2019accueil. Ensuite, importez la deuxi\u00e8me table en utilisant le bouton \u201cAjouter Nouveau\u201d et l\u2019option \u201cImporter depuis un fichier\u201d. Dans la bo\u00eete de dialogue d\u2019importation, terminez en cliquant sur \u201cImporter\u201d en bas \u00e0 gauche. Les tables que vous avez import\u00e9es seront nomm\u00e9es \u201ccrunchbase_companies_ny\u201d et \u201ccrunchbase_investments_ny\u201d. Cliquez sur le nom en haut de la table pour ouvrir la bo\u00eete de dialogue et renommer chacune des tables en \u201cEntreprises\u201d et \u201cInvestissements\u201d. Rendre cela relationnel # La puissance de Grist provient de la structuration des donn\u00e9es. Regardez la table \u201cInvestissements\u201d. Triez par la premi\u00e8re colonne et vous remarquerez combien il y a de r\u00e9p\u00e9titions : chaque ligne contient les informations compl\u00e8tes de l\u2019entreprise, ce qui duplique les donn\u00e9es dans la table \u201cEntreprises\u201d et est r\u00e9p\u00e9t\u00e9 plusieurs fois lorsque plusieurs investissements s\u2019appliquent \u00e0 la m\u00eame entreprise. 2 La r\u00e9alit\u00e9 est que chaque investissement s\u2019applique \u00e0 une seule entreprise. Chaque ligne d\u2019investissement n\u2019a besoin de contenir qu\u2019une r\u00e9f\u00e9rence \u00e0 une entreprise, et les donn\u00e9es sp\u00e9cifiques \u00e0 cet investissement. Pour ce faire, trouvez une colonne qui identifie une entreprise de mani\u00e8re unique. Dans cet ensemble de donn\u00e9es, la premi\u00e8re colonne, \u201ccompany_permalink\u201d, le fait le mieux 3 . Cliquez sur la fl\u00e8che dans l\u2019en-t\u00eate de la colonne et cliquez sur \u201cOptions de colonne\u201d. Cliquez sur la fl\u00e8che \u00e0 c\u00f4t\u00e9 de \u201cTexte\u201d sous le \u201cType de colonne\u201d dans la bo\u00eete de dialogue \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cR\u00e9f\u00e9rence\u201d dans la liste. Grist sugg\u00e9rera automatiquement de le faire une \u201cR\u00e9f\u00e9rence\u201d \u00e0 la table \u201cEntreprises\u201d, et d\u2019afficher le \u201cpermalink\u201d de l\u2019entreprise r\u00e9f\u00e9renc\u00e9e. Cliquez sur \u201cAppliquer\u201d pour enregistrer cette conversion. Renommons \u00e9galement cette colonne en \u201cEntreprise\u201d. Dans Grist, les donn\u00e9es dupliqu\u00e9es ne sont pas n\u00e9cessaires et nous recommandons de les supprimer. Utiliser le raccourci Option-Minus (Mac) ou Alt-Minus (Windows) est un moyen rapide de supprimer des colonnes. Apr\u00e8s avoir supprim\u00e9 les colonnes de \u201ccompany_name\u201d \u00e0 \u201ccompany_city\u201d, voici ce qui reste : Les donn\u00e9es que vous avez supprim\u00e9es ne sont pas perdues puisqu\u2019elles \u00e9taient dupliqu\u00e9es \u2013 elles sont toujours disponibles dans la table \u201cEntreprises\u201d et peuvent \u00eatre utilis\u00e9es dans la formule d\u2019un enregistrement d\u2019Investissement comme, par exemple, $Company.company_xxx . En fait, il existe un moyen pratique de cr\u00e9er ce type de formule. Cr\u00e9ons-en une dont nous aurons besoin plus tard. Cliquez sur l\u2019en-t\u00eate de la colonne \u201cEntreprise\u201d. Dans l\u2019onglet Colonne du panneau de droite, vous verrez une section \u2018Ajouter des colonnes r\u00e9f\u00e9renc\u00e9es\u2019. Cliquez sur \u2018Ajouter une colonne\u2019 pour ajouter la colonne \u201ccategory_code\u201d. Une nouvelle colonne sera ajout\u00e9e \u00e0 la table avec la formule $Company.category_code . Pour chaque investissement, elle affiche le \u201ccategory_code\u201d de l\u2019entreprise li\u00e9e \u00e0 son enregistrement d\u2019investissement. R\u00e9sumer # La fonctionnalit\u00e9 puissante que vous attendiez est celle qui r\u00e9sume les donn\u00e9es. Les tables de synth\u00e8se r\u00e9sument chaque colonne num\u00e9rique dans une table de donn\u00e9es. Nous voulons trouver la somme pour la colonne funding_total_usd dans la table Entreprises. V\u00e9rifiez que le type de colonne est d\u00e9fini sur \u2018Num\u00e9rique\u2019 et format\u00e9 avec $ . Pour utiliser cela, ajoutons une table montrant les entreprises regroup\u00e9es par \u201ccategory_code\u201d. Dans le menu \u201cAjouter Nouveau\u201d en haut \u00e0 gauche, s\u00e9lectionnez \u201cAjouter une Page\u201d. Dans la bo\u00eete de dialogue, s\u00e9lectionnez \u201cTable\u201d et \u201cEntreprises\u201d, puis utilisez l\u2019ic\u00f4ne de sommation ( ) pour s\u00e9lectionner les colonnes \u201cGrouper par\u201d \u2013 c\u2019est-\u00e0-dire les colonnes par lesquelles r\u00e9sumer. Si vous ne s\u00e9lectionnez aucune colonne, vous obtiendrez simplement une seule ligne de totaux. Si vous r\u00e9sumez par \u201ccategory_code\u201d, vous obtiendrez une ligne pour chaque valeur distincte de \u201ccategory_code\u201d. Faisons cela puis cliquons sur \u201cAjouter Page\u201d. Ceci est similaire aux tableaux crois\u00e9s dynamiques d\u2019Excel. Chaque ligne repr\u00e9sente le groupe d\u2019enregistrements de la table source (\u201cEntreprises\u201d) qui ont une valeur particuli\u00e8re de \u201ccategory_code\u201d. Il y a un rappel de cela dans le titre de la table (\u201cENTREPRISES [par category_code]\u201d). De telles tables de synth\u00e8se peuvent (et doivent !) utiliser des formules. Les colonnes que vous choisissez lors de la cr\u00e9ation de la table sont les identifiants des groupes. Toutes les autres colonnes sont des colonnes de formule \u2013 elles sont calcul\u00e9es. Dans les formules, le groupe d\u2019enregistrements source r\u00e9sum\u00e9 par une ligne est disponible sous la valeur \u201c$group\u201d. Par exemple, vous verrez une colonne cr\u00e9\u00e9e automatiquement appel\u00e9e \u201ccount\u201d. Si vous appuyez sur \u201cEntr\u00e9e\u201d, vous verrez la formule qui s\u2019y trouve \u2013 len($group) \u2013 qui est juste le nombre d\u2019enregistrements dans ce groupe d\u2019enregistrements, c\u2019est-\u00e0-dire le nombre d\u2019entreprises dans cette cat\u00e9gorie. Pour les colonnes num\u00e9riques dans la table source, les tables de synth\u00e8se obtiennent automatiquement une colonne num\u00e9rique du m\u00eame nom contenant une somme, avec une formule telle que SUM($group.funding_total_usd) . Une note pour les fans de Python $group est un objet Python sp\u00e9cial. C\u2019est une collection it\u00e9rable d\u2019enregistrements. Utiliser un attribut comme $group.A est un raccourci pour la liste des valeurs dans la colonne A de tous les enregistrements du groupe, c\u2019est-\u00e0-dire que c\u2019est \u00e0 peu pr\u00e8s \u00e9quivalent \u00e0 [r.A for r in $group] . Parfois, ajouter les valeurs n\u2019a pas de sens. Par exemple, la somme de \u201cfounded_year\u201d est d\u00e9nu\u00e9e de sens. Il est pr\u00e9f\u00e9rable de supprimer cela et toute autre colonne dont nous n\u2019avons pas besoin, ce qui nous laisse avec la colonne \u201cfunding_total_usd\u201d. Puisque cette colonne contient de grands nombres, il est temps de regarder la section \u201cFormat de Nombre\u201d de sa configuration, et de cliquer sur , (ou peut-\u00eatre $ ) pour formater les nombres afin qu\u2019ils soient plus lisibles. Ajoutons une deuxi\u00e8me table de synth\u00e8se. S\u00e9lectionnez \u00e0 nouveau \u201cAjouter Nouveau\u201d pour \u201cAjouter un Widget \u00e0 la Page\u201d. Pour obtenir un r\u00e9sum\u00e9 par ann\u00e9e, s\u00e9lectionnez la table \u201cInvestissements\u201d sous \u201cS\u00e9lectionner les Donn\u00e9es\u201d, et utilisez \u00e0 nouveau son symbole de somme (\u2211) pour s\u00e9lectionner la colonne par laquelle r\u00e9sumer : \u201cfunded_year\u201d puis cliquez sur \u201cAjouter \u00e0 la page\u201d. Cela produit une deuxi\u00e8me table de synth\u00e8se qui montre un enregistrement pour chaque ann\u00e9e, chacun repr\u00e9sentant un groupe de lignes \u201cInvestissements\u201d pour cette ann\u00e9e. La colonne la plus utile est \u201craised_amount_usd\u201d, ajoutant tous les investissements r\u00e9alis\u00e9s cette ann\u00e9e-l\u00e0. Supprimons les colonnes non n\u00e9cessaires. Vous remarquerez des valeurs roses dans \u201craised_amount_usd\u201d. C\u2019est parce que Grist devine que le type de colonne est un entier. Les sommes roses sont des instances o\u00f9 les nombres d\u00e9passent la capacit\u00e9 de Javascript \u00e0 g\u00e9rer de grands entiers. Pour corriger cela, le type de la colonne doit \u00eatre chang\u00e9 en \u201cNum\u00e9rique\u201d (ce qui \u00e9change la pr\u00e9cision contre la capacit\u00e9 \u00e0 repr\u00e9senter des nombres tr\u00e8s grands et tr\u00e8s petits). Changez le type en \u201cNum\u00e9rique\u201c sous \u201cOptions de colonne\u201d. C\u2019est encore un bon moment pour choisir un format de nombre plus convivial pour la colonne, et pour l\u2019\u00e9largir afin d\u2019adapter les nombres plus longs. Graphique, diagramme, trac\u00e9 # Vous pouvez cr\u00e9er un graphique \u00e0 partir de n\u2019importe quelles donn\u00e9es. Pour cette page, nous voulons ajouter une version graphique de chaque table de synth\u00e8se. S\u00e9lectionnez \u00e0 nouveau le bouton \u201cAjouter Nouveau\u201d, choisissez \u201cAjouter un Widget \u00e0 la Page\u201d, s\u00e9lectionnez \u201cGraphique\u201d comme widget, et la m\u00eame table (Entreprises) et colonne de synth\u00e8se (category_code) qu\u2019auparavant. Puis cliquez sur \u201cAjouter \u00e0 la Page\u201d. Pour un graphique, vous devrez toujours le personnaliser par la suite. Ouvrez le panneau de droite, et s\u00e9lectionnez l\u2019onglet \u201cGraphique\u201d / sous-onglet \u201cWidget\u201d. Pour ce premier graphique, sous \u201cType de Graphique\u201d, s\u00e9lectionnez \u201cGraphique Circulaire\u201d. Pour construire ce graphique, s\u00e9lectionnez d\u2019abord une \u00e9tiquette, puis s\u00e9lectionnez une s\u00e9rie \u00e0 r\u00e9sumer dans le graphique circulaire. Puisque nous voulons que le graphique montre \u201ccategory_code\u201d comme \u00e9tiquettes, s\u00e9lectionnez cette s\u00e9rie dans le menu d\u00e9roulant \u201c\u00c9tiquette\u201d. Nous voulons utiliser \u201cfunding_total_usd\u201d comme valeurs, donc cela devrait \u00eatre list\u00e9 en haut de la liste \u201cs\u00e9ries\u201d dans le panneau de configuration. Lorsque vous d\u00e9placez votre souris sur les \u00e9l\u00e9ments de cette liste, utilisez les doubles barres verticales qui apparaissent pour faire glisser et d\u00e9poser une s\u00e9rie en haut de la liste. Alternativement, vous pouvez masquer les autres s\u00e9ries de la liste en cliquant sur l\u2019ic\u00f4ne de corbeille. Ajoutons maintenant un graphique montrant une tendance par ann\u00e9e. Ajoutez un autre \u201cWidget \u00e0 la page\u201d, s\u00e9lectionnez \u201cGraphique\u201d sous \u201cWidget\u201d, s\u00e9lectionnez \u201cInvestissements\u201d sous \u201cS\u00e9lectionner les Donn\u00e9es\u201d, cliquez sur la sommation ( ) pour grouper par \u201cfunded_year\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Pour personnaliser ce graphique, restez avec le type de graphique \u201cGraphique \u00e0 Barres\u201d. Dans le menu d\u00e9roulant \u201cAxe X\u201d, s\u00e9lectionnez la colonne \u00e0 utiliser pour les valeurs de l\u2019axe X (horizontal). Sous \u2018S\u00e9ries\u2019, s\u00e9lectionnez une deuxi\u00e8me (et \u00e9ventuellement d\u2019autres) colonne pour \u00eatre les valeurs de l\u2019axe Y (vertical). Vous pouvez r\u00e9organiser les sections \u00e0 l\u2019\u00e9cran dans une configuration que vous aimeriez voir pour un tableau de bord. D\u00e9placez votre souris vers le coin sup\u00e9rieur gauche de chaque section jusqu\u2019\u00e0 ce que vous voyiez une ic\u00f4ne \u201cpoign\u00e9e de tirage\u201d. Utilisez cette ic\u00f4ne pour faire glisser chaque section \u00e0 l\u2019endroit souhait\u00e9 par rapport aux autres sections. Une fois que vous avez termin\u00e9, renommez la page en survolant le nom de la page, puis en cliquant sur l\u2019ic\u00f4ne \u00e0 trois points pour ouvrir le menu. S\u00e9lectionnez \u201cRenommer\u201d et renommez en \u201cAper\u00e7u\u201d. Graphiques dynamiques # Si vous avez lu nos autres tutoriels sur le lien des donn\u00e9es, cela viendra naturellement. Les graphiques sont simplement une autre fa\u00e7on de montrer des donn\u00e9es, et ils peuvent \u00eatre li\u00e9s de la m\u00eame mani\u00e8re que les tables. Pour notre exemple, nous allons ajouter une nouvelle page avec une table de synth\u00e8se : s\u00e9lectionnez le widget \u201cTable\u201d, les donn\u00e9es \u201cInvestissements\u201d, groupez par \u201cfunded_year\u201d, cliquez sur \u201cAjouter Page\u201d. Renommons cette nouvelle page \u201cR\u00e9partitions\u201d. Ensuite, ajoutez un widget \u00e0 cette page, en s\u00e9lectionnant le widget \u201cGraphique\u201d, les donn\u00e9es \u201cInvestissements\u201d. Pour \u201cGrouper par\u201d, nous choisissons deux colonnes : \u201cCompany_category_code\u201d et \u201cfunded_year\u201d. C\u2019est pourquoi nous avons ajout\u00e9 la colonne \u201cCompany_category_code\u201d plus t\u00f4t. Nous ne pouvons grouper les enregistrements d\u2019investissement par le code de cat\u00e9gorie que si nous avons ce code pour chaque investissement. Le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d en bas \u00e0 gauche de la bo\u00eete de dialogue r\u00e9pertorie les widgets d\u00e9j\u00e0 \u00e0 l\u2019\u00e9cran qui peuvent contr\u00f4ler la s\u00e9lection des donn\u00e9es dans le graphique que nous ajoutons. Dans \u201cS\u00e9lectionner par\u201d, choisissez \u201cINVESTISSEMENTS [par funded_year]\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Remarque : Si vous devez apporter des modifications \u00e0 un widget que vous avez d\u00e9j\u00e0 ajout\u00e9, comme changer son type, ses param\u00e8tres \u201cGrouper par\u201d ou \u201cS\u00e9lectionner par\u201d, vous pouvez toujours le faire depuis l\u2019onglet \u201cDonn\u00e9es\u201d dans les param\u00e8tres du widget, en utilisant le bouton \u201cModifier la S\u00e9lection de Donn\u00e9es\u201d. Nous voulons pouvoir s\u00e9lectionner une ann\u00e9e, puis afficher un graphique circulaire pour cette ann\u00e9e qui affiche le total pour chaque code de cat\u00e9gorie. L\u2019option \u201cS\u00e9lectionner par\u201d que nous avons choisie garantit que seules les donn\u00e9es de l\u2019ann\u00e9e s\u00e9lectionn\u00e9e sont utilis\u00e9es. Tout ce qui reste est de changer le type de graphique en \u201cGraphique Circulaire\u201d, et de d\u00e9finir \u201c\u00c9tiquette\u201d sur \u201cCompany_category_code\u201d et \u201cS\u00e9rie\u201d sur \u201craised_amount_usd\u201d. Remarque : Les graphiques ont besoin de plus d\u2019espace \u00e0 l\u2019\u00e9cran, donc nos petites captures d\u2019\u00e9cran auront meilleure allure si nous fermons les panneaux lat\u00e9raux en cliquant sur les ic\u00f4nes d\u2019ouverture ( , ). Ajoutons \u00e9galement un tri de la table par \u201cfunded_year\u201d. En ce qui concerne le tri, le bouton mis en surbrillance au-dessus de la table vous rappelle que les param\u00e8tres de tri ne sont pas enregistr\u00e9s automatiquement. Cliquez sur le bouton vert et s\u00e9lectionnez \u201cEnregistrer\u201d pour le faire. Quel est le r\u00e9sultat ? Nous pouvons cliquer \u00e0 travers les ann\u00e9es (ou utiliser les touches fl\u00e9ch\u00e9es), et voir la r\u00e9partition par cat\u00e9gorie changer. Remarque : Si cliquer \u00e0 travers les ann\u00e9es n\u2019affecte pas le graphique, le graphique ne doit pas \u00eatre li\u00e9. Vous pouvez v\u00e9rifier et corriger cela en utilisant le menu \u201ctrois points\u201d en haut \u00e0 droite du graphique, en cliquant sur \u201cS\u00e9lection de donn\u00e9es\u201d, et en vous assurant que le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d affiche \u201cINVESTISSEMENTS [par funded_year]\u201d. Pour compl\u00e9ter l\u2019exemple, nous allons ajouter deux sections suppl\u00e9mentaires \u00e0 cette page \u201cR\u00e9partitions\u201d. L\u2019une sera une table r\u00e9pertoriant les cat\u00e9gories d\u2019entreprises, et li\u00e9e \u00e0 cela sera un graphique montrant le montant de l\u2019investissement dans cette cat\u00e9gorie au fil des ans. Pour ajouter la table des cat\u00e9gories, utilisez \u201cAjouter un Widget \u00e0 la Page\u201d, et s\u00e9lectionnez le widget \u201cTable\u201d, les donn\u00e9es \u201cInvestissements\u201d, regroup\u00e9es par \u201cCompany_category_code\u201d. La colonne \u201cfunded_year\u201d dans la table r\u00e9sultante est d\u00e9nu\u00e9e de sens et doit \u00eatre supprim\u00e9e. Pour la derni\u00e8re \u00e9tape, ajoutons un autre graphique. Nous devons nous rappeler de grouper par \u00e0 la fois \u201cCompany_category_code\u201d et \u201cfunded_year\u201d, et de d\u00e9finir un widget \u201cS\u00e9lectionner par\u201d appropri\u00e9 pour cela. Puisqu\u2019il y a deux tables sur cette page, vous avez le choix de laquelle contr\u00f4lera les donn\u00e9es dans ce graphique. Dans ce cas, choisissez le widget que nous venons d\u2019ajouter : \u201cINVESTISSEMENTS [par Company_category_code]\u201d. Comme dans la section pr\u00e9c\u00e9dente, nous configurons le graphique en s\u00e9lectionnant \u201cType de Graphique\u201d comme \u201cGraphique \u00e0 Barres\u201d, et dans le menu d\u00e9roulant \u201cAxe X\u201d, en s\u00e9lectionnant \u201cfunded_year\u201d et sous \u201cS\u00e9rie\u201d, en s\u00e9lectionnant \u201craised_amount_usd\u201d et en masquant le reste. Nous pouvons maintenant cliquer \u00e0 travers les cat\u00e9gories, et voir l\u2019historique des investissements dans chacune. Prochaines \u00e9tapes # Si vous n\u2019\u00eates pas familier avec la mani\u00e8re dont nous avons cr\u00e9\u00e9 la page \u201cD\u00e9tails de l\u2019Entreprise\u201d qui est pr\u00e9sente dans l\u2019exemple, visitez l\u2019un de ces tutoriels pr\u00e9c\u00e9dents pour apprendre comment : \u2018Comment construire un CRM l\u00e9ger\u2019, ou \u2018G\u00e9rer votre entreprise dans Grist\u2019. C\u2019est tout ! Maintenant, allez analyser des donn\u00e9es ! T\u00e9l\u00e9chargez crunchbase_companies_ny.csv et crunchbase_investments_ny.csv . Les donn\u00e9es d\u2019exemple incluent uniquement les donn\u00e9es sur les \u201centreprises\u201d et les \u201cinvestissements\u201d, et incluent uniquement des entreprises de New York pour les rendre plus petites et plus rapides. L\u2019ensemble de donn\u00e9es provient de Kaggle . \u21a9 Une telle duplication est couramment observ\u00e9e dans les feuilles de calcul. Les donn\u00e9es sous cette forme sont appel\u00e9es \u201cd\u00e9normalis\u00e9es\u201d. \u21a9 Si vous n\u2019avez pas de colonne d\u2019identification unique, vous pouvez en construire une avec une formule. \u21a9","title":"Analyze and visualize"},{"location":"investment-research/#comment-analyser-et-visualiser-des-donnees","text":"Grist offre plusieurs moyens puissants d\u2019analyser et de visualiser des donn\u00e9es. Dans ce tutoriel, vous apprendrez \u00e0 : Cr\u00e9er des tables de synth\u00e8se Cr\u00e9er et configurer des graphiques Lier des graphiques de mani\u00e8re dynamique Pour expliquer ces fonctionnalit\u00e9s, nous utiliserons le document d\u2019exemple \u201cRecherche d\u2019Investissement\u201d 1 qui inclut des entreprises et les investissements dans celles-ci jusqu\u2019en 2013. Jetons un coup d\u2019\u0153il au document d\u2019exemple, puis nous parlerons de la mani\u00e8re de le construire afin que vous puissiez appliquer ces outils \u00e0 vos propres donn\u00e9es.","title":""},{"location":"investment-research/#explorer-lexemple","text":"Ouvrez le document \u201c Recherche d\u2019Investissement \u201d, trouv\u00e9 dans Exemples & Mod\u00e8les sur votre page d\u2019accueil Grist. La premi\u00e8re chose que vous verrez est \u201cAper\u00e7u\u201d. Cette page contient deux graphiques \u00e0 c\u00f4t\u00e9 de deux tables. En haut \u00e0 gauche, il y a un graphique circulaire montrant la r\u00e9partition des investissements par cat\u00e9gorie. La table \u00e0 c\u00f4t\u00e9 contient les m\u00eames donn\u00e9es sous forme tabulaire. En dessous du graphique circulaire se trouve un graphique \u00e0 barres montrant le total des investissements lev\u00e9s par ann\u00e9e. Il est \u00e9galement accompagn\u00e9 des m\u00eames donn\u00e9es dans la table \u00e0 c\u00f4t\u00e9 sous forme tabulaire. Tous ces graphiques et tables sont des exemples de \u201ctables de synth\u00e8se\u201d, que nous d\u00e9crirons ci-dessous. La page suivante, \u201cR\u00e9partitions\u201d, contient \u00e9galement deux tables et deux graphiques, mais ceux-ci sont li\u00e9s de mani\u00e8re dynamique et offrent des informations beaucoup plus d\u00e9taill\u00e9es sur les donn\u00e9es. En haut \u00e0 gauche se trouve une table montrant le financement total par ann\u00e9e (la m\u00eame table que nous avons vue sur la page pr\u00e9c\u00e9dente). Cette table sert de moteur pour le graphique \u00e0 c\u00f4t\u00e9. Lorsque vous cliquez sur une ann\u00e9e dans la table, le graphique circulaire se met \u00e0 jour pour montrer la r\u00e9partition des investissements cette ann\u00e9e-l\u00e0. De m\u00eame, la table du bas montre les investissements par cat\u00e9gorie. Lorsque vous cliquez sur une cat\u00e9gorie, le graphique lin\u00e9aire \u00e0 c\u00f4t\u00e9 se met \u00e0 jour pour montrer l\u2019historique du financement dans cette cat\u00e9gorie au fil des ans. Notez \u00e0 quel point cela est puissant et combien d\u2019informations vous pouvez en tirer. Par exemple, vous pouvez voir que la cat\u00e9gorie Publicit\u00e9 a re\u00e7u beaucoup d\u2019investissements \u00e0 New York depuis 2007, mais a \u00e9t\u00e9 d\u00e9pass\u00e9e par le E-commerce en 2013, tandis que la cat\u00e9gorie Mode a connu un pic majeur en 2011. Sur la page suivante, \u201cD\u00e9tails de l\u2019Entreprise\u201d, nous pouvons voir les donn\u00e9es granulaires de cet ensemble de donn\u00e9es. Ici, nous voyons une liste d\u2019entreprises et les cat\u00e9gories auxquelles elles appartiennent. Chaque entreprise affich\u00e9e a un lien pointant vers son inscription sur le site Crunchbase. S\u00e9lectionner une entreprise affiche une fiche avec ses d\u00e9tails, ainsi qu\u2019une liste de tous les investissements qu\u2019elle a re\u00e7us. C\u2019est ici que nous commen\u00e7ons \u00e0 voir la puissance de Grist. L\u2019ensemble de donn\u00e9es original est une feuille de calcul plate d\u2019entreprises, et une feuille de calcul encore plus grande d\u2019investissements. En affichant les donn\u00e9es graphiquement, les donn\u00e9es prennent vie, les rendant puissantes et utiles.","title":"Explorer l’exemple"},{"location":"investment-research/#comment-puis-je-faire-cela","text":"Avec Grist, pr\u00e9senter vos propres donn\u00e9es sous forme graphique est \u00e0 quelques \u00e9tapes faciles. Commen\u00e7ons par la premi\u00e8re \u00e9tape.","title":""},{"location":"investment-research/#obtenir-les-donnees","text":"Importons les donn\u00e9es sources. Nous allons importer deux fichiers CSV, chacun devenant sa propre table. Pour suivre, enregistrez d\u2019abord les fichiers de crunchbase_companies_ny.csv et crunchbase_investments_ny.csv sur votre ordinateur. Ensuite, cr\u00e9ez un document Grist en important le premier fichier depuis la page d\u2019accueil. Ensuite, importez la deuxi\u00e8me table en utilisant le bouton \u201cAjouter Nouveau\u201d et l\u2019option \u201cImporter depuis un fichier\u201d. Dans la bo\u00eete de dialogue d\u2019importation, terminez en cliquant sur \u201cImporter\u201d en bas \u00e0 gauche. Les tables que vous avez import\u00e9es seront nomm\u00e9es \u201ccrunchbase_companies_ny\u201d et \u201ccrunchbase_investments_ny\u201d. Cliquez sur le nom en haut de la table pour ouvrir la bo\u00eete de dialogue et renommer chacune des tables en \u201cEntreprises\u201d et \u201cInvestissements\u201d.","title":"Obtenir les donn\u00e9es"},{"location":"investment-research/#rendre-cela-relationnel","text":"La puissance de Grist provient de la structuration des donn\u00e9es. Regardez la table \u201cInvestissements\u201d. Triez par la premi\u00e8re colonne et vous remarquerez combien il y a de r\u00e9p\u00e9titions : chaque ligne contient les informations compl\u00e8tes de l\u2019entreprise, ce qui duplique les donn\u00e9es dans la table \u201cEntreprises\u201d et est r\u00e9p\u00e9t\u00e9 plusieurs fois lorsque plusieurs investissements s\u2019appliquent \u00e0 la m\u00eame entreprise. 2 La r\u00e9alit\u00e9 est que chaque investissement s\u2019applique \u00e0 une seule entreprise. Chaque ligne d\u2019investissement n\u2019a besoin de contenir qu\u2019une r\u00e9f\u00e9rence \u00e0 une entreprise, et les donn\u00e9es sp\u00e9cifiques \u00e0 cet investissement. Pour ce faire, trouvez une colonne qui identifie une entreprise de mani\u00e8re unique. Dans cet ensemble de donn\u00e9es, la premi\u00e8re colonne, \u201ccompany_permalink\u201d, le fait le mieux 3 . Cliquez sur la fl\u00e8che dans l\u2019en-t\u00eate de la colonne et cliquez sur \u201cOptions de colonne\u201d. Cliquez sur la fl\u00e8che \u00e0 c\u00f4t\u00e9 de \u201cTexte\u201d sous le \u201cType de colonne\u201d dans la bo\u00eete de dialogue \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cR\u00e9f\u00e9rence\u201d dans la liste. Grist sugg\u00e9rera automatiquement de le faire une \u201cR\u00e9f\u00e9rence\u201d \u00e0 la table \u201cEntreprises\u201d, et d\u2019afficher le \u201cpermalink\u201d de l\u2019entreprise r\u00e9f\u00e9renc\u00e9e. Cliquez sur \u201cAppliquer\u201d pour enregistrer cette conversion. Renommons \u00e9galement cette colonne en \u201cEntreprise\u201d. Dans Grist, les donn\u00e9es dupliqu\u00e9es ne sont pas n\u00e9cessaires et nous recommandons de les supprimer. Utiliser le raccourci Option-Minus (Mac) ou Alt-Minus (Windows) est un moyen rapide de supprimer des colonnes. Apr\u00e8s avoir supprim\u00e9 les colonnes de \u201ccompany_name\u201d \u00e0 \u201ccompany_city\u201d, voici ce qui reste : Les donn\u00e9es que vous avez supprim\u00e9es ne sont pas perdues puisqu\u2019elles \u00e9taient dupliqu\u00e9es \u2013 elles sont toujours disponibles dans la table \u201cEntreprises\u201d et peuvent \u00eatre utilis\u00e9es dans la formule d\u2019un enregistrement d\u2019Investissement comme, par exemple, $Company.company_xxx . En fait, il existe un moyen pratique de cr\u00e9er ce type de formule. Cr\u00e9ons-en une dont nous aurons besoin plus tard. Cliquez sur l\u2019en-t\u00eate de la colonne \u201cEntreprise\u201d. Dans l\u2019onglet Colonne du panneau de droite, vous verrez une section \u2018Ajouter des colonnes r\u00e9f\u00e9renc\u00e9es\u2019. Cliquez sur \u2018Ajouter une colonne\u2019 pour ajouter la colonne \u201ccategory_code\u201d. Une nouvelle colonne sera ajout\u00e9e \u00e0 la table avec la formule $Company.category_code . Pour chaque investissement, elle affiche le \u201ccategory_code\u201d de l\u2019entreprise li\u00e9e \u00e0 son enregistrement d\u2019investissement.","title":"Rendre cela relationnel"},{"location":"investment-research/#resumer","text":"La fonctionnalit\u00e9 puissante que vous attendiez est celle qui r\u00e9sume les donn\u00e9es. Les tables de synth\u00e8se r\u00e9sument chaque colonne num\u00e9rique dans une table de donn\u00e9es. Nous voulons trouver la somme pour la colonne funding_total_usd dans la table Entreprises. V\u00e9rifiez que le type de colonne est d\u00e9fini sur \u2018Num\u00e9rique\u2019 et format\u00e9 avec $ . Pour utiliser cela, ajoutons une table montrant les entreprises regroup\u00e9es par \u201ccategory_code\u201d. Dans le menu \u201cAjouter Nouveau\u201d en haut \u00e0 gauche, s\u00e9lectionnez \u201cAjouter une Page\u201d. Dans la bo\u00eete de dialogue, s\u00e9lectionnez \u201cTable\u201d et \u201cEntreprises\u201d, puis utilisez l\u2019ic\u00f4ne de sommation ( ) pour s\u00e9lectionner les colonnes \u201cGrouper par\u201d \u2013 c\u2019est-\u00e0-dire les colonnes par lesquelles r\u00e9sumer. Si vous ne s\u00e9lectionnez aucune colonne, vous obtiendrez simplement une seule ligne de totaux. Si vous r\u00e9sumez par \u201ccategory_code\u201d, vous obtiendrez une ligne pour chaque valeur distincte de \u201ccategory_code\u201d. Faisons cela puis cliquons sur \u201cAjouter Page\u201d. Ceci est similaire aux tableaux crois\u00e9s dynamiques d\u2019Excel. Chaque ligne repr\u00e9sente le groupe d\u2019enregistrements de la table source (\u201cEntreprises\u201d) qui ont une valeur particuli\u00e8re de \u201ccategory_code\u201d. Il y a un rappel de cela dans le titre de la table (\u201cENTREPRISES [par category_code]\u201d). De telles tables de synth\u00e8se peuvent (et doivent !) utiliser des formules. Les colonnes que vous choisissez lors de la cr\u00e9ation de la table sont les identifiants des groupes. Toutes les autres colonnes sont des colonnes de formule \u2013 elles sont calcul\u00e9es. Dans les formules, le groupe d\u2019enregistrements source r\u00e9sum\u00e9 par une ligne est disponible sous la valeur \u201c$group\u201d. Par exemple, vous verrez une colonne cr\u00e9\u00e9e automatiquement appel\u00e9e \u201ccount\u201d. Si vous appuyez sur \u201cEntr\u00e9e\u201d, vous verrez la formule qui s\u2019y trouve \u2013 len($group) \u2013 qui est juste le nombre d\u2019enregistrements dans ce groupe d\u2019enregistrements, c\u2019est-\u00e0-dire le nombre d\u2019entreprises dans cette cat\u00e9gorie. Pour les colonnes num\u00e9riques dans la table source, les tables de synth\u00e8se obtiennent automatiquement une colonne num\u00e9rique du m\u00eame nom contenant une somme, avec une formule telle que SUM($group.funding_total_usd) . Une note pour les fans de Python $group est un objet Python sp\u00e9cial. C\u2019est une collection it\u00e9rable d\u2019enregistrements. Utiliser un attribut comme $group.A est un raccourci pour la liste des valeurs dans la colonne A de tous les enregistrements du groupe, c\u2019est-\u00e0-dire que c\u2019est \u00e0 peu pr\u00e8s \u00e9quivalent \u00e0 [r.A for r in $group] . Parfois, ajouter les valeurs n\u2019a pas de sens. Par exemple, la somme de \u201cfounded_year\u201d est d\u00e9nu\u00e9e de sens. Il est pr\u00e9f\u00e9rable de supprimer cela et toute autre colonne dont nous n\u2019avons pas besoin, ce qui nous laisse avec la colonne \u201cfunding_total_usd\u201d. Puisque cette colonne contient de grands nombres, il est temps de regarder la section \u201cFormat de Nombre\u201d de sa configuration, et de cliquer sur , (ou peut-\u00eatre $ ) pour formater les nombres afin qu\u2019ils soient plus lisibles. Ajoutons une deuxi\u00e8me table de synth\u00e8se. S\u00e9lectionnez \u00e0 nouveau \u201cAjouter Nouveau\u201d pour \u201cAjouter un Widget \u00e0 la Page\u201d. Pour obtenir un r\u00e9sum\u00e9 par ann\u00e9e, s\u00e9lectionnez la table \u201cInvestissements\u201d sous \u201cS\u00e9lectionner les Donn\u00e9es\u201d, et utilisez \u00e0 nouveau son symbole de somme (\u2211) pour s\u00e9lectionner la colonne par laquelle r\u00e9sumer : \u201cfunded_year\u201d puis cliquez sur \u201cAjouter \u00e0 la page\u201d. Cela produit une deuxi\u00e8me table de synth\u00e8se qui montre un enregistrement pour chaque ann\u00e9e, chacun repr\u00e9sentant un groupe de lignes \u201cInvestissements\u201d pour cette ann\u00e9e. La colonne la plus utile est \u201craised_amount_usd\u201d, ajoutant tous les investissements r\u00e9alis\u00e9s cette ann\u00e9e-l\u00e0. Supprimons les colonnes non n\u00e9cessaires. Vous remarquerez des valeurs roses dans \u201craised_amount_usd\u201d. C\u2019est parce que Grist devine que le type de colonne est un entier. Les sommes roses sont des instances o\u00f9 les nombres d\u00e9passent la capacit\u00e9 de Javascript \u00e0 g\u00e9rer de grands entiers. Pour corriger cela, le type de la colonne doit \u00eatre chang\u00e9 en \u201cNum\u00e9rique\u201d (ce qui \u00e9change la pr\u00e9cision contre la capacit\u00e9 \u00e0 repr\u00e9senter des nombres tr\u00e8s grands et tr\u00e8s petits). Changez le type en \u201cNum\u00e9rique\u201c sous \u201cOptions de colonne\u201d. C\u2019est encore un bon moment pour choisir un format de nombre plus convivial pour la colonne, et pour l\u2019\u00e9largir afin d\u2019adapter les nombres plus longs.","title":"R\u00e9sumer"},{"location":"investment-research/#graphique-diagramme-trace","text":"Vous pouvez cr\u00e9er un graphique \u00e0 partir de n\u2019importe quelles donn\u00e9es. Pour cette page, nous voulons ajouter une version graphique de chaque table de synth\u00e8se. S\u00e9lectionnez \u00e0 nouveau le bouton \u201cAjouter Nouveau\u201d, choisissez \u201cAjouter un Widget \u00e0 la Page\u201d, s\u00e9lectionnez \u201cGraphique\u201d comme widget, et la m\u00eame table (Entreprises) et colonne de synth\u00e8se (category_code) qu\u2019auparavant. Puis cliquez sur \u201cAjouter \u00e0 la Page\u201d. Pour un graphique, vous devrez toujours le personnaliser par la suite. Ouvrez le panneau de droite, et s\u00e9lectionnez l\u2019onglet \u201cGraphique\u201d / sous-onglet \u201cWidget\u201d. Pour ce premier graphique, sous \u201cType de Graphique\u201d, s\u00e9lectionnez \u201cGraphique Circulaire\u201d. Pour construire ce graphique, s\u00e9lectionnez d\u2019abord une \u00e9tiquette, puis s\u00e9lectionnez une s\u00e9rie \u00e0 r\u00e9sumer dans le graphique circulaire. Puisque nous voulons que le graphique montre \u201ccategory_code\u201d comme \u00e9tiquettes, s\u00e9lectionnez cette s\u00e9rie dans le menu d\u00e9roulant \u201c\u00c9tiquette\u201d. Nous voulons utiliser \u201cfunding_total_usd\u201d comme valeurs, donc cela devrait \u00eatre list\u00e9 en haut de la liste \u201cs\u00e9ries\u201d dans le panneau de configuration. Lorsque vous d\u00e9placez votre souris sur les \u00e9l\u00e9ments de cette liste, utilisez les doubles barres verticales qui apparaissent pour faire glisser et d\u00e9poser une s\u00e9rie en haut de la liste. Alternativement, vous pouvez masquer les autres s\u00e9ries de la liste en cliquant sur l\u2019ic\u00f4ne de corbeille. Ajoutons maintenant un graphique montrant une tendance par ann\u00e9e. Ajoutez un autre \u201cWidget \u00e0 la page\u201d, s\u00e9lectionnez \u201cGraphique\u201d sous \u201cWidget\u201d, s\u00e9lectionnez \u201cInvestissements\u201d sous \u201cS\u00e9lectionner les Donn\u00e9es\u201d, cliquez sur la sommation ( ) pour grouper par \u201cfunded_year\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Pour personnaliser ce graphique, restez avec le type de graphique \u201cGraphique \u00e0 Barres\u201d. Dans le menu d\u00e9roulant \u201cAxe X\u201d, s\u00e9lectionnez la colonne \u00e0 utiliser pour les valeurs de l\u2019axe X (horizontal). Sous \u2018S\u00e9ries\u2019, s\u00e9lectionnez une deuxi\u00e8me (et \u00e9ventuellement d\u2019autres) colonne pour \u00eatre les valeurs de l\u2019axe Y (vertical). Vous pouvez r\u00e9organiser les sections \u00e0 l\u2019\u00e9cran dans une configuration que vous aimeriez voir pour un tableau de bord. D\u00e9placez votre souris vers le coin sup\u00e9rieur gauche de chaque section jusqu\u2019\u00e0 ce que vous voyiez une ic\u00f4ne \u201cpoign\u00e9e de tirage\u201d. Utilisez cette ic\u00f4ne pour faire glisser chaque section \u00e0 l\u2019endroit souhait\u00e9 par rapport aux autres sections. Une fois que vous avez termin\u00e9, renommez la page en survolant le nom de la page, puis en cliquant sur l\u2019ic\u00f4ne \u00e0 trois points pour ouvrir le menu. S\u00e9lectionnez \u201cRenommer\u201d et renommez en \u201cAper\u00e7u\u201d.","title":"Graphique, diagramme, trac\u00e9"},{"location":"investment-research/#graphiques-dynamiques","text":"Si vous avez lu nos autres tutoriels sur le lien des donn\u00e9es, cela viendra naturellement. Les graphiques sont simplement une autre fa\u00e7on de montrer des donn\u00e9es, et ils peuvent \u00eatre li\u00e9s de la m\u00eame mani\u00e8re que les tables. Pour notre exemple, nous allons ajouter une nouvelle page avec une table de synth\u00e8se : s\u00e9lectionnez le widget \u201cTable\u201d, les donn\u00e9es \u201cInvestissements\u201d, groupez par \u201cfunded_year\u201d, cliquez sur \u201cAjouter Page\u201d. Renommons cette nouvelle page \u201cR\u00e9partitions\u201d. Ensuite, ajoutez un widget \u00e0 cette page, en s\u00e9lectionnant le widget \u201cGraphique\u201d, les donn\u00e9es \u201cInvestissements\u201d. Pour \u201cGrouper par\u201d, nous choisissons deux colonnes : \u201cCompany_category_code\u201d et \u201cfunded_year\u201d. C\u2019est pourquoi nous avons ajout\u00e9 la colonne \u201cCompany_category_code\u201d plus t\u00f4t. Nous ne pouvons grouper les enregistrements d\u2019investissement par le code de cat\u00e9gorie que si nous avons ce code pour chaque investissement. Le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d en bas \u00e0 gauche de la bo\u00eete de dialogue r\u00e9pertorie les widgets d\u00e9j\u00e0 \u00e0 l\u2019\u00e9cran qui peuvent contr\u00f4ler la s\u00e9lection des donn\u00e9es dans le graphique que nous ajoutons. Dans \u201cS\u00e9lectionner par\u201d, choisissez \u201cINVESTISSEMENTS [par funded_year]\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Remarque : Si vous devez apporter des modifications \u00e0 un widget que vous avez d\u00e9j\u00e0 ajout\u00e9, comme changer son type, ses param\u00e8tres \u201cGrouper par\u201d ou \u201cS\u00e9lectionner par\u201d, vous pouvez toujours le faire depuis l\u2019onglet \u201cDonn\u00e9es\u201d dans les param\u00e8tres du widget, en utilisant le bouton \u201cModifier la S\u00e9lection de Donn\u00e9es\u201d. Nous voulons pouvoir s\u00e9lectionner une ann\u00e9e, puis afficher un graphique circulaire pour cette ann\u00e9e qui affiche le total pour chaque code de cat\u00e9gorie. L\u2019option \u201cS\u00e9lectionner par\u201d que nous avons choisie garantit que seules les donn\u00e9es de l\u2019ann\u00e9e s\u00e9lectionn\u00e9e sont utilis\u00e9es. Tout ce qui reste est de changer le type de graphique en \u201cGraphique Circulaire\u201d, et de d\u00e9finir \u201c\u00c9tiquette\u201d sur \u201cCompany_category_code\u201d et \u201cS\u00e9rie\u201d sur \u201craised_amount_usd\u201d. Remarque : Les graphiques ont besoin de plus d\u2019espace \u00e0 l\u2019\u00e9cran, donc nos petites captures d\u2019\u00e9cran auront meilleure allure si nous fermons les panneaux lat\u00e9raux en cliquant sur les ic\u00f4nes d\u2019ouverture ( , ). Ajoutons \u00e9galement un tri de la table par \u201cfunded_year\u201d. En ce qui concerne le tri, le bouton mis en surbrillance au-dessus de la table vous rappelle que les param\u00e8tres de tri ne sont pas enregistr\u00e9s automatiquement. Cliquez sur le bouton vert et s\u00e9lectionnez \u201cEnregistrer\u201d pour le faire. Quel est le r\u00e9sultat ? Nous pouvons cliquer \u00e0 travers les ann\u00e9es (ou utiliser les touches fl\u00e9ch\u00e9es), et voir la r\u00e9partition par cat\u00e9gorie changer. Remarque : Si cliquer \u00e0 travers les ann\u00e9es n\u2019affecte pas le graphique, le graphique ne doit pas \u00eatre li\u00e9. Vous pouvez v\u00e9rifier et corriger cela en utilisant le menu \u201ctrois points\u201d en haut \u00e0 droite du graphique, en cliquant sur \u201cS\u00e9lection de donn\u00e9es\u201d, et en vous assurant que le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d affiche \u201cINVESTISSEMENTS [par funded_year]\u201d. Pour compl\u00e9ter l\u2019exemple, nous allons ajouter deux sections suppl\u00e9mentaires \u00e0 cette page \u201cR\u00e9partitions\u201d. L\u2019une sera une table r\u00e9pertoriant les cat\u00e9gories d\u2019entreprises, et li\u00e9e \u00e0 cela sera un graphique montrant le montant de l\u2019investissement dans cette cat\u00e9gorie au fil des ans. Pour ajouter la table des cat\u00e9gories, utilisez \u201cAjouter un Widget \u00e0 la Page\u201d, et s\u00e9lectionnez le widget \u201cTable\u201d, les donn\u00e9es \u201cInvestissements\u201d, regroup\u00e9es par \u201cCompany_category_code\u201d. La colonne \u201cfunded_year\u201d dans la table r\u00e9sultante est d\u00e9nu\u00e9e de sens et doit \u00eatre supprim\u00e9e. Pour la derni\u00e8re \u00e9tape, ajoutons un autre graphique. Nous devons nous rappeler de grouper par \u00e0 la fois \u201cCompany_category_code\u201d et \u201cfunded_year\u201d, et de d\u00e9finir un widget \u201cS\u00e9lectionner par\u201d appropri\u00e9 pour cela. Puisqu\u2019il y a deux tables sur cette page, vous avez le choix de laquelle contr\u00f4lera les donn\u00e9es dans ce graphique. Dans ce cas, choisissez le widget que nous venons d\u2019ajouter : \u201cINVESTISSEMENTS [par Company_category_code]\u201d. Comme dans la section pr\u00e9c\u00e9dente, nous configurons le graphique en s\u00e9lectionnant \u201cType de Graphique\u201d comme \u201cGraphique \u00e0 Barres\u201d, et dans le menu d\u00e9roulant \u201cAxe X\u201d, en s\u00e9lectionnant \u201cfunded_year\u201d et sous \u201cS\u00e9rie\u201d, en s\u00e9lectionnant \u201craised_amount_usd\u201d et en masquant le reste. Nous pouvons maintenant cliquer \u00e0 travers les cat\u00e9gories, et voir l\u2019historique des investissements dans chacune.","title":"Graphiques dynamiques"},{"location":"investment-research/#prochaines-etapes","text":"Si vous n\u2019\u00eates pas familier avec la mani\u00e8re dont nous avons cr\u00e9\u00e9 la page \u201cD\u00e9tails de l\u2019Entreprise\u201d qui est pr\u00e9sente dans l\u2019exemple, visitez l\u2019un de ces tutoriels pr\u00e9c\u00e9dents pour apprendre comment : \u2018Comment construire un CRM l\u00e9ger\u2019, ou \u2018G\u00e9rer votre entreprise dans Grist\u2019. C\u2019est tout ! Maintenant, allez analyser des donn\u00e9es ! T\u00e9l\u00e9chargez crunchbase_companies_ny.csv et crunchbase_investments_ny.csv . Les donn\u00e9es d\u2019exemple incluent uniquement les donn\u00e9es sur les \u201centreprises\u201d et les \u201cinvestissements\u201d, et incluent uniquement des entreprises de New York pour les rendre plus petites et plus rapides. L\u2019ensemble de donn\u00e9es provient de Kaggle . \u21a9 Une telle duplication est couramment observ\u00e9e dans les feuilles de calcul. Les donn\u00e9es sous cette forme sont appel\u00e9es \u201cd\u00e9normalis\u00e9es\u201d. \u21a9 Si vous n\u2019avez pas de colonne d\u2019identification unique, vous pouvez en construire une avec une formule. \u21a9","title":"Prochaines \u00e9tapes"},{"location":"keyboard-shortcuts/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Raccourcis Grist # G\u00e9n\u00e9ral # Touche (Mac) Touche (Windows) Description F1 , \u2318 / F1 , Ctrl + / Afficher le panneau des raccourcis \u2318 Z Ctrl + Z Annuler la derni\u00e8re action \u2318 \u21e7 Z , \u2303 Y Ctrl + Shift + Z , Ctrl + Y R\u00e9tablir la derni\u00e8re action \u2318 F Ctrl + F Rechercher \u2318 G Ctrl + G Trouver l\u2019occurrence suivante \u2318 \u21e7 G Ctrl + Shift + G Trouver l\u2019occurrence pr\u00e9c\u00e9dente Navigation # Touche (Mac) Touche (Windows) Description \u2193 \u2193 Descendre \u00e0 l\u2019enregistrement ou au champ suivant \u2191 \u2191 Monter \u00e0 l\u2019enregistrement ou au champ pr\u00e9c\u00e9dent \u2192 \u2192 Aller \u00e0 droite au champ suivant \u2190 \u2190 Aller \u00e0 gauche au champ pr\u00e9c\u00e9dent Tab Tab Aller au champ suivant, en enregistrant les modifications si une valeur est en cours d\u2019\u00e9dition \u21e7 Tab Shift + Tab Aller au champ pr\u00e9c\u00e9dent, en enregistrant les modifications si une valeur est en cours d\u2019\u00e9dition PageDown PageDown Descendre d\u2019une page d\u2019enregistrements, ou aller \u00e0 l\u2019enregistrement suivant dans une liste de fiches PageUp PageUp Monter d\u2019une page d\u2019enregistrements, ou aller \u00e0 l\u2019enregistrement pr\u00e9c\u00e9dent dans une liste de fiches \u2318 \u2191 Ctrl + \u2191 Monter au premier enregistrement \u2318 \u2193 Ctrl + \u2193 Descendre au dernier enregistrement Home Home Aller au premier champ ou au d\u00e9but d\u2019une ligne End End Aller au dernier champ ou \u00e0 la fin d\u2019une ligne \u2325 \u2193 Alt + \u2193 Ouvrir la page suivante \u2325 \u2191 Alt + \u2191 Ouvrir la page pr\u00e9c\u00e9dente \u2318 O Ctrl + O Activer la vue de la page suivante \u2318 \u21e7 O Ctrl + Shift + O Activer la vue de la page pr\u00e9c\u00e9dente Space Space Ouvrir une vue fiche dans une vue de table S\u00e9lection # Touche (Mac) Touche (Windows) Description \u21e7 \u2193 Shift + \u2193 Ajouter l\u2019\u00e9l\u00e9ment sous le curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2191 Shift + \u2191 Ajouter l\u2019\u00e9l\u00e9ment au-dessus du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2192 Shift + \u2192 Ajouter l\u2019\u00e9l\u00e9ment \u00e0 droite du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2190 Shift + \u2190 Ajouter l\u2019\u00e9l\u00e9ment \u00e0 gauche du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u2318 A Ctrl + A S\u00e9lectionner toutes les cellules actuellement affich\u00e9es \u2318 Shift \u2191 Ctrl + Shift + \u2191 S\u00e9lectionner les cellules au-dessus de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame colonne \u2318 Shift \u2193 Ctrl + Shift + \u2193 S\u00e9lectionner les cellules en dessous de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame colonne \u2318 Shift \u2192 Ctrl + Shift + \u2192 S\u00e9lectionner les cellules \u00e0 droite de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame ligne \u2318 Shift \u2190 Ctrl + Shift + \u2190 S\u00e9lectionner les cellules \u00e0 gauche de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame ligne \u2318 \u21e7 A Ctrl + Shift + A Copier le lien d\u2019ancrage \u00c9dition # Touche (Mac) Touche (Windows) Description Enter , F2 Enter , F2 Commencer \u00e0 \u00e9diter la cellule actuellement s\u00e9lectionn\u00e9e Enter Enter Terminer l\u2019\u00e9dition d\u2019une cellule, en enregistrant la valeur Escape Escape Annuler les modifications de la valeur d\u2019une cellule \u2318 D Ctrl + D Remplir la s\u00e9lection actuelle avec le contenu de la premi\u00e8re ligne de la s\u00e9lection Delete Backspace , Delete Effacer les cellules actuellement s\u00e9lectionn\u00e9es Enter Enter Basculer la valeur des cellules \u00e0 case \u00e0 cocher = = Lorsqu\u2019il est tap\u00e9 au d\u00e9but d\u2019une cellule, transformer cette colonne en colonne de formule \u2318 ; Ctrl + ; Ins\u00e9rer la date actuelle \u2318 \u21e7 ; Ctrl + Shift + ; Ins\u00e9rer la date et l\u2019heure actuelles Manipulation des donn\u00e9es # Touche (Mac) Touche (Windows) Description \u2318 \u21e7 Enter Ctrl + Shift + Enter Ins\u00e9rer un nouvel enregistrement, avant celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Enter Ctrl + Enter Ins\u00e9rer un nouvel enregistrement, apr\u00e8s celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 \u21e7 D Ctrl + Shift + D Dupliquer l\u2019(les) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) \u2318 Delete Ctrl + Backspace , Ctrl + Delete Supprimer l\u2019(les) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) \u2325 \u21e7 = Alt + Shift + = Ins\u00e9rer une nouvelle colonne, avant celle actuellement s\u00e9lectionn\u00e9e \u2325 = Alt + = Ins\u00e9rer une nouvelle colonne, apr\u00e8s celle actuellement s\u00e9lectionn\u00e9e \u2303 M Ctrl + M Renommer la colonne actuellement s\u00e9lectionn\u00e9e \u2325 \u21e7 - Alt + Shift + - Masquer la colonne actuellement s\u00e9lectionn\u00e9e \u2325 - Alt + - Supprimer les colonnes actuellement s\u00e9lectionn\u00e9es","title":"Keyboard shortcuts"},{"location":"keyboard-shortcuts/#raccourcis-grist","text":"","title":"Raccourcis Grist"},{"location":"keyboard-shortcuts/#general","text":"Touche (Mac) Touche (Windows) Description F1 , \u2318 / F1 , Ctrl + / Afficher le panneau des raccourcis \u2318 Z Ctrl + Z Annuler la derni\u00e8re action \u2318 \u21e7 Z , \u2303 Y Ctrl + Shift + Z , Ctrl + Y R\u00e9tablir la derni\u00e8re action \u2318 F Ctrl + F Rechercher \u2318 G Ctrl + G Trouver l\u2019occurrence suivante \u2318 \u21e7 G Ctrl + Shift + G Trouver l\u2019occurrence pr\u00e9c\u00e9dente","title":"G\u00e9n\u00e9ral"},{"location":"keyboard-shortcuts/#navigation","text":"Touche (Mac) Touche (Windows) Description \u2193 \u2193 Descendre \u00e0 l\u2019enregistrement ou au champ suivant \u2191 \u2191 Monter \u00e0 l\u2019enregistrement ou au champ pr\u00e9c\u00e9dent \u2192 \u2192 Aller \u00e0 droite au champ suivant \u2190 \u2190 Aller \u00e0 gauche au champ pr\u00e9c\u00e9dent Tab Tab Aller au champ suivant, en enregistrant les modifications si une valeur est en cours d\u2019\u00e9dition \u21e7 Tab Shift + Tab Aller au champ pr\u00e9c\u00e9dent, en enregistrant les modifications si une valeur est en cours d\u2019\u00e9dition PageDown PageDown Descendre d\u2019une page d\u2019enregistrements, ou aller \u00e0 l\u2019enregistrement suivant dans une liste de fiches PageUp PageUp Monter d\u2019une page d\u2019enregistrements, ou aller \u00e0 l\u2019enregistrement pr\u00e9c\u00e9dent dans une liste de fiches \u2318 \u2191 Ctrl + \u2191 Monter au premier enregistrement \u2318 \u2193 Ctrl + \u2193 Descendre au dernier enregistrement Home Home Aller au premier champ ou au d\u00e9but d\u2019une ligne End End Aller au dernier champ ou \u00e0 la fin d\u2019une ligne \u2325 \u2193 Alt + \u2193 Ouvrir la page suivante \u2325 \u2191 Alt + \u2191 Ouvrir la page pr\u00e9c\u00e9dente \u2318 O Ctrl + O Activer la vue de la page suivante \u2318 \u21e7 O Ctrl + Shift + O Activer la vue de la page pr\u00e9c\u00e9dente Space Space Ouvrir une vue fiche dans une vue de table","title":"Navigation"},{"location":"keyboard-shortcuts/#selection","text":"Touche (Mac) Touche (Windows) Description \u21e7 \u2193 Shift + \u2193 Ajouter l\u2019\u00e9l\u00e9ment sous le curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2191 Shift + \u2191 Ajouter l\u2019\u00e9l\u00e9ment au-dessus du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2192 Shift + \u2192 Ajouter l\u2019\u00e9l\u00e9ment \u00e0 droite du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2190 Shift + \u2190 Ajouter l\u2019\u00e9l\u00e9ment \u00e0 gauche du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u2318 A Ctrl + A S\u00e9lectionner toutes les cellules actuellement affich\u00e9es \u2318 Shift \u2191 Ctrl + Shift + \u2191 S\u00e9lectionner les cellules au-dessus de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame colonne \u2318 Shift \u2193 Ctrl + Shift + \u2193 S\u00e9lectionner les cellules en dessous de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame colonne \u2318 Shift \u2192 Ctrl + Shift + \u2192 S\u00e9lectionner les cellules \u00e0 droite de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame ligne \u2318 Shift \u2190 Ctrl + Shift + \u2190 S\u00e9lectionner les cellules \u00e0 gauche de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame ligne \u2318 \u21e7 A Ctrl + Shift + A Copier le lien d\u2019ancrage","title":"S\u00e9lection"},{"location":"keyboard-shortcuts/#edition","text":"Touche (Mac) Touche (Windows) Description Enter , F2 Enter , F2 Commencer \u00e0 \u00e9diter la cellule actuellement s\u00e9lectionn\u00e9e Enter Enter Terminer l\u2019\u00e9dition d\u2019une cellule, en enregistrant la valeur Escape Escape Annuler les modifications de la valeur d\u2019une cellule \u2318 D Ctrl + D Remplir la s\u00e9lection actuelle avec le contenu de la premi\u00e8re ligne de la s\u00e9lection Delete Backspace , Delete Effacer les cellules actuellement s\u00e9lectionn\u00e9es Enter Enter Basculer la valeur des cellules \u00e0 case \u00e0 cocher = = Lorsqu\u2019il est tap\u00e9 au d\u00e9but d\u2019une cellule, transformer cette colonne en colonne de formule \u2318 ; Ctrl + ; Ins\u00e9rer la date actuelle \u2318 \u21e7 ; Ctrl + Shift + ; Ins\u00e9rer la date et l\u2019heure actuelles","title":"\u00c9dition"},{"location":"keyboard-shortcuts/#manipulation-des-donnees","text":"Touche (Mac) Touche (Windows) Description \u2318 \u21e7 Enter Ctrl + Shift + Enter Ins\u00e9rer un nouvel enregistrement, avant celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Enter Ctrl + Enter Ins\u00e9rer un nouvel enregistrement, apr\u00e8s celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 \u21e7 D Ctrl + Shift + D Dupliquer l\u2019(les) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) \u2318 Delete Ctrl + Backspace , Ctrl + Delete Supprimer l\u2019(les) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) \u2325 \u21e7 = Alt + Shift + = Ins\u00e9rer une nouvelle colonne, avant celle actuellement s\u00e9lectionn\u00e9e \u2325 = Alt + = Ins\u00e9rer une nouvelle colonne, apr\u00e8s celle actuellement s\u00e9lectionn\u00e9e \u2303 M Ctrl + M Renommer la colonne actuellement s\u00e9lectionn\u00e9e \u2325 \u21e7 - Alt + Shift + - Masquer la colonne actuellement s\u00e9lectionn\u00e9e \u2325 - Alt + - Supprimer les colonnes actuellement s\u00e9lectionn\u00e9es","title":"Manipulation des donn\u00e9es"},{"location":"lightweight-crm/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Comment cr\u00e9er un CRM personnalis\u00e9 # Grist est aussi facile \u00e0 utiliser qu\u2019un tableur, mais vous donne de nouveaux pouvoirs lorsque les donn\u00e9es ne s\u2019int\u00e8grent pas dans une simple grille. Un bon exemple est le suivi des contacts et de nos conversations avec eux. Pour une entreprise, cela pourrait \u00eatre des clients, des prospects ou des candidats \u00e0 un emploi. Pour un particulier, cela pourrait \u00eatre des entreprises auxquelles il a postul\u00e9 dans le cadre d\u2019une recherche d\u2019emploi. Dans ce tutoriel, nous allons expliquer l\u2019exemple de \u201cCRM l\u00e9ger\u201d, que vous pouvez utiliser comme mod\u00e8le pour vos propres contacts, puis montrer comment le construire \u00e0 partir de z\u00e9ro. Vous apprendrez \u00e0 : Ajouter des tables Lier des donn\u00e9es D\u00e9finir des types de colonnes Cr\u00e9er des mises en page personnalis\u00e9es Explorer l\u2019exemple # Ouvrez le document CRM l\u00e9ger , trouv\u00e9 dans Exemples & Mod\u00e8les sur votre page d\u2019accueil Grist . Vous verrez la page \u201cContacts\u201d, listant les contacts sur la gauche de l\u2019\u00e9cran. Cliquez sur n\u2019importe quel contact pour le s\u00e9lectionner. Les deux sections \u00e0 droite montrent les d\u00e9tails et l\u2019historique des interactions avec le contact s\u00e9lectionn\u00e9. Comment cela se compare-t-il \u00e0 un tableur ? Ces captures d\u2019\u00e9cran montrent l\u2019exemple de CRM l\u00e9ger \u00e0 gauche, et un tableur ordinaire avec les m\u00eames donn\u00e9es \u00e0 droite. Pr\u00e9c\u00e9dent Suivant Pr\u00e9c\u00e9dent Suivant La difficult\u00e9 r\u00e9side dans l\u2019historique des notes pour un contact. Dans une grille bidimensionnelle, vous avez peu d\u2019options pour inclure plusieurs notes. Si vous les incluez sous forme de plusieurs colonnes, cela rend rapidement le tableur difficile \u00e0 g\u00e9rer et \u00e0 naviguer. Grist ressemble davantage \u00e0 une application, mais reste aussi polyvalent qu\u2019un tableur. L\u2019exemple de \u201cCRM l\u00e9ger\u201d peut \u00eatre utilis\u00e9 imm\u00e9diatement tel quel (avec les donn\u00e9es d\u2019exemple), ou comme mod\u00e8le (juste la structure sans les donn\u00e9es). Voici quelques points suppl\u00e9mentaires sur son utilisation en tant que CRM : Pour ajouter un nouveau contact, cliquez sur la ligne vide en bas de la liste des contacts, puis remplissez la section vide \u201cFiche CONTACTS\u201d qui appara\u00eet \u00e0 droite. Pour ajouter une nouvelle conversation, s\u00e9lectionnez un contact, puis cliquez sur la ligne vide \u00e0 la fin de la table Interactions. Vous pouvez entrer la date d\u2019aujourd\u2019hui en utilisant le raccourci \u2318 + ; (point-virgule) (Mac) ou Ctrl + ; (point-virgule) (Windows). Ensuite, s\u00e9lectionnez le type d\u2019interaction \u00e0 l\u2019aide de l\u2019auto-compl\u00e9tion et tapez vos notes. Vous pouvez ajouter des \u00e9l\u00e9ments \u00e0 faire pour un contact : dans la liste des Interactions, s\u00e9lectionnez \u201c\u00c0 faire\u201d dans la colonne \u201cType\u201d en tant que type sp\u00e9cial d\u2019interaction. Pensez \u00e0 la date associ\u00e9e comme \u00e0 la date d\u2019\u00e9ch\u00e9ance pour cette t\u00e2che. La table Contacts montre la liste des \u00e9l\u00e9ments \u00e0 faire \u00e0 venir, tri\u00e9s par leur date d\u2019\u00e9ch\u00e9ance. Si vous utilisez Gmail, le lien pratique \u201cRecherche Gmail\u201d dans la section \u201cFiche CONTACTS\u201d ouvrira une fen\u00eatre de navigateur avec les r\u00e9sultats de recherche Gmail pour l\u2019adresse e-mail de ce contact. Vous pouvez utiliser cet exemple comme mod\u00e8le pour vos propres contacts. Avec l\u2019exemple de \u201cCRM l\u00e9ger\u201d ouvert, cliquez sur le bouton \u201cEnregistrer une copie\u201d dans la barre sup\u00e9rieure, puis cochez la case \u201cEn tant que mod\u00e8le\u201d. Vous obtiendrez un document vide avec la m\u00eame mise en page, et pourrez commencer \u00e0 le remplir avec vos propres donn\u00e9es. Si vous n\u2019\u00eates pas connect\u00e9, vous devrez vous connecter pour faire une copie de l\u2019exemple. Cr\u00e9er le v\u00f4tre # Le reste de ce tutoriel vous montrera comment cr\u00e9er un tel document par vous-m\u00eame. C\u2019est un excellent exercice qui vous apprendra certaines des fonctionnalit\u00e9s cl\u00e9s de Grist. Pour commencer, nous allons importer un fichier avec des contacts d\u2019exemple depuis la page d\u2019accueil de Grist. Tout d\u2019abord, enregistrez ce fichier sur votre bureau : lightweight-crm-contacts.csv . Ensuite, cliquez sur le bouton \u201cAjouter nouveau\u201d en haut \u00e0 gauche de votre page d\u2019accueil Grist, cliquez sur \u201cImporter le document\u201d, et s\u00e9lectionnez le fichier sur votre bureau. Vous verrez une table de contacts avec des donn\u00e9es d\u2019exemple. Notez qu\u2019\u00e0 Grist, les colonnes ont des noms. Renommez cette table en \u201cContacts\u201d en cliquant sur son nom dans la barre sup\u00e9rieure et en tapant le nouveau nom. C\u2019est tout ce dont vous avez besoin pour une simple table de contacts. Vous pouvez ajouter des lignes ici, ou ajouter de nouvelles colonnes pour associer plus de donn\u00e9es \u00e0 chaque contact. Ajouter une autre table # Pour notre prochaine \u00e9tape, nous voulons pouvoir s\u00e9lectionner un contact et voir la liste des conversations avec ce contact. Ces conversations devraient \u00eatre une nouvelle table de donn\u00e9es. L\u2019indice est qu\u2019elle a un nombre de lignes diff\u00e9rent de la table des contacts. Cr\u00e9ez la nouvelle table en utilisant le bouton vert \u201cAjouter nouveau\u201d en haut \u00e0 gauche de votre \u00e9cran, et cliquez sur \u201cAjouter une table vide\u201d dans le menu. Cette table repr\u00e9sentera les interactions avec nos contacts, alors renommons-la \u201cInteractions\u201d en cliquant sur son nom par d\u00e9faut (\u201cTable1\u201d) en haut de l\u2019\u00e9cran, comme pr\u00e9c\u00e9demment. Il est judicieux de donner des noms significatifs aux colonnes. Dans ce cas, pour chaque interaction, nous devons savoir \u00e0 quel Contact elle se r\u00e9f\u00e8re, la date, le type et les notes de conversation. Pour renommer une colonne, cliquez sur son en-t\u00eate pour s\u00e9lectionner la colonne, puis cliquez \u00e0 nouveau sur l\u2019en-t\u00eate pour modifier son nom. Vous pouvez appuyer sur la touche Tab pour continuer \u00e0 renommer la colonne suivante. Enfin, appuyez sur le bouton \u201c+\u201d \u00e0 droite de la derni\u00e8re colonne pour cr\u00e9er une colonne suppl\u00e9mentaire, et nommez-la \u201cNotes\u201d. Lier les enregistrements de donn\u00e9es # Chaque enregistrement dans cette table appartiendra \u00e0 un contact particulier. Vous le configurez en transformant la colonne \u201cContact\u201d en une r\u00e9f\u00e9rence \u00e0 la table \u201cContacts\u201d. En utilisant le triangle dans l\u2019en-t\u00eate de la colonne \u201cContact\u201d, ouvrez le menu et s\u00e9lectionnez \u201cOptions de colonne\u201d. Dans le panneau de droite, utilisez le menu d\u00e9roulant \u201cType de colonne\u201d pour s\u00e9lectionner \u201cR\u00e9f\u00e9rence\u201d, puis sous \u201cDonn\u00e9es de la table\u201d, s\u00e9lectionnez \u201cContacts\u201d. Chaque cellule de cette colonne contiendra un pointeur vers une ligne dans la table \u201cContacts\u201d 1 . Bien qu\u2019elle fasse r\u00e9f\u00e9rence \u00e0 une ligne enti\u00e8re, il est utile de voir un identifiant particulier de cette ligne, donc sous \u201cAfficher la colonne\u201d, s\u00e9lectionnez \u201cSoci\u00e9t\u00e9\u201d. Vous verrez cela en action sous peu. D\u00e9finir d\u2019autres types # Dans Grist, chaque colonne a un type. Souvent, le type par d\u00e9faut de Texte ou Num\u00e9rique est correct. Pour notre colonne \u201cDate\u201d, un meilleur type est Date. Cliquez sur n\u2019importe quelle cellule dans la colonne \u201cDate\u201d, et dans le panneau de droite, cliquez dans le menu d\u00e9roulant \u201cType de colonne\u201d et s\u00e9lectionnez \u201cDate\u201d. Si vous le souhaitez, vous pouvez \u00e9galement choisir un format de date diff\u00e9rent juste en dessous du type. Maintenant, si vous cliquez sur une cellule dans la colonne \u201cDate\u201d et appuyez sur Entr\u00e9e, vous avez un s\u00e9lecteur de date pratique. Un autre type de colonne utile pour nous est \u201cChoix\u201d. Nos interactions seront soit \u201cT\u00e9l\u00e9phone\u201d, \u201cEmail\u201d ou \u201cEn personne\u201d, et il est utile de lister ces options. Cliquez dans la colonne \u201cType\u201d, et dans le panneau de droite, d\u00e9finissez \u201cType de colonne\u201d sur \u201cChoix\u201d. Vous verrez une zone de texte \u201cValeurs de choix\u201d en dessous. Cliquez dessus et entrez vos choix l\u00e0-bas, un par ligne : \u201cT\u00e9l\u00e9phone\u201d, \u201cEmail\u201d, \u201cEn personne\u201d. Maintenant, si vous cliquez sur une cellule dans la colonne \u201cType\u201d et appuyez sur Entr\u00e9e, vous pouvez choisir parmi les choix que vous avez d\u00e9finis, ou commencer \u00e0 taper et utiliser l\u2019auto-compl\u00e9tion. Lier visuellement les tables # La prochaine \u00e9tape consiste \u00e0 lier visuellement les deux tables. Ouvrez la page \u201cContacts\u201d, cliquez sur le bouton \u201cAjouter nouveau\u201d en haut du panneau de gauche, puis \u201cAjouter un widget \u00e0 la page\u201d. S\u00e9lectionnez le widget \u201cTable\u201d et les donn\u00e9es \u201cInteractions\u201d. Dans le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d en bas de la bo\u00eete de dialogue, s\u00e9lectionnez \u201cCONTACTS\u201d. Cela signifie que choisir un contact affichera uniquement les interactions avec ce contact. Cliquez sur \u201cAjouter \u00e0 la page\u201d pour terminer. Ensuite, s\u00e9lectionnons un contact dans la table \u00e0 gauche (utilisons \u201cDouglas LLC\u201d dans la quatri\u00e8me ligne) et ajoutons quelques notes pour celui-ci. Tapez une date (indice : le raccourci \u2318 + ; (point-virgule) sur Mac ou Ctrl + ; (point-virgule) sur Windows ins\u00e8re la date d\u2019aujourd\u2019hui), s\u00e9lectionnez un type, et entrez une note. D\u00e8s que cette ligne est cr\u00e9\u00e9e, la colonne \u201cContact\u201d est automatiquement remplie avec \u201cDouglas LLC\u201d, gr\u00e2ce aux sections \u00e9tant li\u00e9es. La note que nous avons ajout\u00e9e n\u2019est affich\u00e9e que lorsque \u201cDouglas LLC\u201d est s\u00e9lectionn\u00e9. Nous pouvons ajouter plus de notes pour \u201cDouglas LLC\u201d, ou ajouter des notes pour n\u2019importe lequel des autres contacts. Nous pouvons maintenant masquer la colonne \u201cContact\u201d dans la table \u201cInteractions\u201d : en utilisant le menu dans l\u2019en-t\u00eate de la colonne, s\u00e9lectionnez \u201cMasquer la colonne\u201d. Comme les tables sont li\u00e9es, nous voyons d\u00e9j\u00e0 pour qui sont les notes. Pour que les longues notes soient pratiques, redimensionnez la colonne \u201cNotes\u201d en faisant glisser le bord droit de son en-t\u00eate. Pour envelopper de longues notes, ouvrez les Options de colonne et cliquez sur l\u2019ic\u00f4ne de retour \u00e0 la ligne. Personnaliser la mise en page # Une fois que vous avez plusieurs tables sur un m\u00eame \u00e9cran, la mise en page de l\u2019\u00e9cran peut devenir un probl\u00e8me. Avoir de nombreuses colonnes dans la table Contacts peut ne plus \u00eatre pratique. Il est pr\u00e9f\u00e9rable de la disposer comme une application personnalis\u00e9e : s\u00e9lectionnez un contact dans une liste \u00e0 gauche et voyez les d\u00e9tails et les interactions de ce contact. Cela peut \u00eatre fait en utilisant \u00e0 nouveau \u201cAjouter un widget \u00e0 la page\u201d. Cette fois, nous allons s\u00e9lectionner le widget \u201cCarte\u201d pour la table \u201cContacts\u201d, et pour \u201cS\u00e9lectionner par\u201d, nous utiliserons \u00e0 nouveau \u201cCONTACTS\u201d. Vous pouvez d\u00e9placer les sections r\u00e9sultantes pour cr\u00e9er une mise en page pratique. D\u00e9placez votre souris vers le coin sup\u00e9rieur gauche de chaque section jusqu\u2019\u00e0 ce que vous voyiez une ic\u00f4ne de \u201cpoign\u00e9e de tirage\u201d. Utilisez cette ic\u00f4ne pour faire glisser chaque section \u00e0 l\u2019endroit d\u00e9sir\u00e9 par rapport aux autres sections. Vous pouvez \u00e9galement redimensionner les sections en d\u00e9pla\u00e7ant la souris entre elles pour trouver une ligne pointill\u00e9e. Faites glisser cette ligne pour redimensionner. Notez que les m\u00eames donn\u00e9es personnelles sont maintenant affich\u00e9es \u00e0 deux endroits sur l\u2019\u00e9cran. Ce ne sont pas des copies de donn\u00e9es, mais des pr\u00e9sentations diff\u00e9rentes des m\u00eames donn\u00e9es. Changer les donn\u00e9es \u00e0 un endroit les changera \u00e0 l\u2019autre. Personnaliser les champs # \u00c0 ce stade, nous pouvons faire un peu de nettoyage : masquer les colonnes inutiles dans la table principale \u201cContacts\u201d et r\u00e9organiser les champs dans le widget Carte. Un moyen rapide de masquer des colonnes est d\u2019utiliser le panneau de droite. En utilisant le menu \u00e0 trois points en haut \u00e0 droite de la table \u201cContacts\u201d, s\u00e9lectionnez \u201cOptions de widget\u201d. Dans le panneau qui s\u2019ouvre, trouvez une liste de \u201cColonnes visibles\u201d. D\u00e9placez la souris sur chaque colonne pour r\u00e9v\u00e9ler l\u2019ic\u00f4ne \u201c\u0153il\u201d. Cliquez dessus pour masquer toutes les colonnes sauf \u201cSoci\u00e9t\u00e9\u201d. Pour personnaliser le widget Carte, cliquez dessus. Le panneau de droite affichera les options pertinentes. Vous pouvez s\u00e9lectionner un th\u00e8me diff\u00e9rent, par exemple \u201cCompact\u201d. Pour r\u00e9organiser les champs, cliquez sur \u201cModifier la mise en page\u201d dans le panneau de droite. Vous pouvez maintenant faire glisser et d\u00e9poser des champs dans la carte, les redimensionner ou les supprimer. Cliquez sur \u201cEnregistrer\u201d une fois que vous avez termin\u00e9. En quelques \u00e9tapes, nous sommes pass\u00e9s d\u2019un tableur encombrant et difficile \u00e0 utiliser \u00e0 un enregistrement concis et \u00e9l\u00e9gant de vos interactions dans une application personnalis\u00e9e simple et efficace. T\u00e2ches \u00e0 faire pour les contacts # L\u2019exemple de \u201cCRM l\u00e9ger\u201d a un autre tour dans son sac. La colonne \u201cType\u201d dans la table des interactions a un choix suppl\u00e9mentaire, \u201c\u00c0 faire\u201d. Apr\u00e8s avoir parl\u00e9 \u00e0 un contact, vous pouvez ajouter une note suppl\u00e9mentaire sur ce que vous devez faire pour la prochaine conversation, et la date \u00e0 laquelle elle est due. La table \u201cContacts\u201d rend ces \u00e9l\u00e9ments \u00e0 faire visibles, et triables par date d\u2019\u00e9ch\u00e9ance. De cette fa\u00e7on, vous pouvez voir d\u2019un coup d\u2019\u0153il ce qui est \u00e0 venir. Si vous \u00eates int\u00e9ress\u00e9 par les d\u00e9tails de sa configuration, d\u00e9veloppez la section ci-dessous. Pour votre premi\u00e8re introduction \u00e0 Grist, vous \u00eates libre de l\u2019ignorer. > Configuration des t\u00e2ches \u00e0 faire # Pour configurer les \u00e9l\u00e9ments \u00e0 faire comme dans l\u2019exemple, s\u00e9lectionnez les Options de colonne pour la colonne \u201cType\u201d dans la table Interactions, et ajoutez un autre choix (\u201c\u00c0 faire\u201d) \u00e0 la liste des choix : Choisissons notre contact \u201cDouglas LLC\u201d et ajoutons un \u00e9l\u00e9ment \u00e0 faire : Dans la table \u201cContacts\u201d, ajoutez deux nouvelles colonnes : Renommez-les en \u201c\u00c9ch\u00e9ance\u201d et \u201c\u00c9l\u00e9ments \u00e0 faire\u201d. Les deux colonnes sont calcul\u00e9es \u00e0 l\u2019aide de formules. Grist a un excellent support pour les formules, permettant une syntaxe Python compl\u00e8te et de nombreuses fonctions Excel. Dans Grist, une formule s\u2019applique toujours \u00e0 l\u2019ensemble de la colonne de donn\u00e9es. Pour entrer une formule, cliquez sur une cellule dans la colonne \u201c\u00c9ch\u00e9ance\u201d, et appuyez sur la touche \u201c=\u201d : Dans cette formule, nous voulons rechercher toutes les Interactions pour le Contact actuel dont le Type est \u201c\u00c0 faire\u201d, puis s\u00e9lectionner celle avec la Date la plus ancienne. En utilisant la syntaxe Python, la formule est : items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return min(items.Date) if items else None Collez-la ou tapez-la. Lorsque vous tapez des formules multi-lignes, utilisez Shift+Enter pour ajouter de nouvelles lignes, et Enter pour enregistrer. Il est \u00e9galement temps de changer le type de colonne en \u201cDate\u201d. Ouvrez les Options de colonne, et s\u00e9lectionnez \u201cDate\u201d pour le type. Vous pouvez choisir le format de date directement en dessous du type. Pour les \u201c\u00c9l\u00e9ments \u00e0 faire\u201d, entrez une formule de mani\u00e8re similaire. En cas de plusieurs \u00e9l\u00e9ments \u00e0 faire, cette formule les concat\u00e9nera, s\u00e9par\u00e9s par des sauts de ligne. Cliquez dans la colonne \u201c\u00c9l\u00e9ments \u00e0 faire\u201d, appuyez sur \u201c=\u201d pour commencer \u00e0 taper la formule, et entrez items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return \"\\n\".join(items.Notes) Maintenant, l\u2019\u00e9l\u00e9ment \u00e0 faire que nous avons entr\u00e9 plus t\u00f4t est visible dans la table principale Contacts. Notez que les valeurs dans ces colonnes sont en lecture seule, car elles sont calcul\u00e9es. Pour changer la date d\u2019\u00e9ch\u00e9ance, trouvez l\u2019\u00e9l\u00e9ment \u00e0 faire dans la table Interactions o\u00f9 vous l\u2019avez cr\u00e9\u00e9. Trier les tables # Nous voulons que les contacts avec des \u00e9l\u00e9ments \u00e0 faire apparaissent en premier, par ordre de date d\u2019\u00e9ch\u00e9ance. Cliquez sur le triangle dans l\u2019en-t\u00eate de la colonne \u201c\u00c9ch\u00e9ance\u201d, et s\u00e9lectionnez \u201cTrier A-Z\u201d. Par d\u00e9faut, les param\u00e8tres de tri ne sont pas enregistr\u00e9s. Le bouton vert surlign\u00e9 en haut \u00e0 droite de la table \u201cContacts\u201d nous rappelle cela. Pour conserver cet ordre de tri lorsque vous rouvrez le document, enregistrez-le en cliquant sur ce bouton vert et en s\u00e9lectionnant \u201cEnregistrer\u201d. Vous pouvez \u00e9galement enregistrer en cliquant sur la coche verte, \u00e0 droite de l\u2019ic\u00f4ne de filtre. Autres fonctionnalit\u00e9s # Grist a d\u2019autres fonctionnalit\u00e9s int\u00e9ressantes, dont certaines sont utilis\u00e9es dans l\u2019exemple de document \u201cCRM l\u00e9ger\u201d. Pour en savoir plus \u00e0 leur sujet, suivez les liens vers leur documentation. Toute colonne de texte peut \u00eatre affich\u00e9e comme un hyperlien . L\u2019exemple de CRM l\u00e9ger l\u2019utilise deux fois : pour le champ \u201csite web\u201d, et pour un hyperlien construit par formule vers une page de recherche Gmail pour l\u2019adresse e-mail de ce contact. Ce dernier est pratique si vous utilisez Gmail. Grist prend en charge les pi\u00e8ces jointes . Dans l\u2019exemple, il y a un champ \u201cPi\u00e8ces jointes\u201d pour chaque contact qui peut \u00eatre utilis\u00e9 pour stocker une image d\u2019une carte de visite, par exemple. Dans une entreprise r\u00e9elle, vous aurez besoin de plus. Les produits CRM sp\u00e9cialis\u00e9s ont des tonnes de fonctionnalit\u00e9s. Leur probl\u00e8me est la complexit\u00e9 : essayer de satisfaire les besoins de nombreux clients diff\u00e9rents rend le produit compliqu\u00e9 \u00e0 utiliser. La beaut\u00e9 de Grist est que vous pouvez commencer simplement et ajouter uniquement le niveau de complexit\u00e9 dont vous avez besoin, et rien de plus. D\u2019autres tutoriels montrent comment mod\u00e9liser des donn\u00e9es plus complexes, analyser et repr\u00e9senter des donn\u00e9es, et plus encore. Dans le monde des bases de donn\u00e9es, ce type de r\u00e9f\u00e9rence ou de pointeur est connu sous le nom de \u201ccl\u00e9 \u00e9trang\u00e8re\u201d. \u21a9","title":"Create your own CRM"},{"location":"lightweight-crm/#comment-creer-un-crm-personnalise","text":"Grist est aussi facile \u00e0 utiliser qu\u2019un tableur, mais vous donne de nouveaux pouvoirs lorsque les donn\u00e9es ne s\u2019int\u00e8grent pas dans une simple grille. Un bon exemple est le suivi des contacts et de nos conversations avec eux. Pour une entreprise, cela pourrait \u00eatre des clients, des prospects ou des candidats \u00e0 un emploi. Pour un particulier, cela pourrait \u00eatre des entreprises auxquelles il a postul\u00e9 dans le cadre d\u2019une recherche d\u2019emploi. Dans ce tutoriel, nous allons expliquer l\u2019exemple de \u201cCRM l\u00e9ger\u201d, que vous pouvez utiliser comme mod\u00e8le pour vos propres contacts, puis montrer comment le construire \u00e0 partir de z\u00e9ro. Vous apprendrez \u00e0 : Ajouter des tables Lier des donn\u00e9es D\u00e9finir des types de colonnes Cr\u00e9er des mises en page personnalis\u00e9es","title":"Intro"},{"location":"lightweight-crm/#explorer-lexemple","text":"Ouvrez le document CRM l\u00e9ger , trouv\u00e9 dans Exemples & Mod\u00e8les sur votre page d\u2019accueil Grist . Vous verrez la page \u201cContacts\u201d, listant les contacts sur la gauche de l\u2019\u00e9cran. Cliquez sur n\u2019importe quel contact pour le s\u00e9lectionner. Les deux sections \u00e0 droite montrent les d\u00e9tails et l\u2019historique des interactions avec le contact s\u00e9lectionn\u00e9. Comment cela se compare-t-il \u00e0 un tableur ? Ces captures d\u2019\u00e9cran montrent l\u2019exemple de CRM l\u00e9ger \u00e0 gauche, et un tableur ordinaire avec les m\u00eames donn\u00e9es \u00e0 droite. Pr\u00e9c\u00e9dent Suivant Pr\u00e9c\u00e9dent Suivant La difficult\u00e9 r\u00e9side dans l\u2019historique des notes pour un contact. Dans une grille bidimensionnelle, vous avez peu d\u2019options pour inclure plusieurs notes. Si vous les incluez sous forme de plusieurs colonnes, cela rend rapidement le tableur difficile \u00e0 g\u00e9rer et \u00e0 naviguer. Grist ressemble davantage \u00e0 une application, mais reste aussi polyvalent qu\u2019un tableur. L\u2019exemple de \u201cCRM l\u00e9ger\u201d peut \u00eatre utilis\u00e9 imm\u00e9diatement tel quel (avec les donn\u00e9es d\u2019exemple), ou comme mod\u00e8le (juste la structure sans les donn\u00e9es). Voici quelques points suppl\u00e9mentaires sur son utilisation en tant que CRM : Pour ajouter un nouveau contact, cliquez sur la ligne vide en bas de la liste des contacts, puis remplissez la section vide \u201cFiche CONTACTS\u201d qui appara\u00eet \u00e0 droite. Pour ajouter une nouvelle conversation, s\u00e9lectionnez un contact, puis cliquez sur la ligne vide \u00e0 la fin de la table Interactions. Vous pouvez entrer la date d\u2019aujourd\u2019hui en utilisant le raccourci \u2318 + ; (point-virgule) (Mac) ou Ctrl + ; (point-virgule) (Windows). Ensuite, s\u00e9lectionnez le type d\u2019interaction \u00e0 l\u2019aide de l\u2019auto-compl\u00e9tion et tapez vos notes. Vous pouvez ajouter des \u00e9l\u00e9ments \u00e0 faire pour un contact : dans la liste des Interactions, s\u00e9lectionnez \u201c\u00c0 faire\u201d dans la colonne \u201cType\u201d en tant que type sp\u00e9cial d\u2019interaction. Pensez \u00e0 la date associ\u00e9e comme \u00e0 la date d\u2019\u00e9ch\u00e9ance pour cette t\u00e2che. La table Contacts montre la liste des \u00e9l\u00e9ments \u00e0 faire \u00e0 venir, tri\u00e9s par leur date d\u2019\u00e9ch\u00e9ance. Si vous utilisez Gmail, le lien pratique \u201cRecherche Gmail\u201d dans la section \u201cFiche CONTACTS\u201d ouvrira une fen\u00eatre de navigateur avec les r\u00e9sultats de recherche Gmail pour l\u2019adresse e-mail de ce contact. Vous pouvez utiliser cet exemple comme mod\u00e8le pour vos propres contacts. Avec l\u2019exemple de \u201cCRM l\u00e9ger\u201d ouvert, cliquez sur le bouton \u201cEnregistrer une copie\u201d dans la barre sup\u00e9rieure, puis cochez la case \u201cEn tant que mod\u00e8le\u201d. Vous obtiendrez un document vide avec la m\u00eame mise en page, et pourrez commencer \u00e0 le remplir avec vos propres donn\u00e9es. Si vous n\u2019\u00eates pas connect\u00e9, vous devrez vous connecter pour faire une copie de l\u2019exemple.","title":"Explorer l’exemple"},{"location":"lightweight-crm/#creer-le-votre","text":"Le reste de ce tutoriel vous montrera comment cr\u00e9er un tel document par vous-m\u00eame. C\u2019est un excellent exercice qui vous apprendra certaines des fonctionnalit\u00e9s cl\u00e9s de Grist. Pour commencer, nous allons importer un fichier avec des contacts d\u2019exemple depuis la page d\u2019accueil de Grist. Tout d\u2019abord, enregistrez ce fichier sur votre bureau : lightweight-crm-contacts.csv . Ensuite, cliquez sur le bouton \u201cAjouter nouveau\u201d en haut \u00e0 gauche de votre page d\u2019accueil Grist, cliquez sur \u201cImporter le document\u201d, et s\u00e9lectionnez le fichier sur votre bureau. Vous verrez une table de contacts avec des donn\u00e9es d\u2019exemple. Notez qu\u2019\u00e0 Grist, les colonnes ont des noms. Renommez cette table en \u201cContacts\u201d en cliquant sur son nom dans la barre sup\u00e9rieure et en tapant le nouveau nom. C\u2019est tout ce dont vous avez besoin pour une simple table de contacts. Vous pouvez ajouter des lignes ici, ou ajouter de nouvelles colonnes pour associer plus de donn\u00e9es \u00e0 chaque contact.","title":"Cr\u00e9er le v\u00f4tre"},{"location":"lightweight-crm/#ajouter-une-autre-table","text":"Pour notre prochaine \u00e9tape, nous voulons pouvoir s\u00e9lectionner un contact et voir la liste des conversations avec ce contact. Ces conversations devraient \u00eatre une nouvelle table de donn\u00e9es. L\u2019indice est qu\u2019elle a un nombre de lignes diff\u00e9rent de la table des contacts. Cr\u00e9ez la nouvelle table en utilisant le bouton vert \u201cAjouter nouveau\u201d en haut \u00e0 gauche de votre \u00e9cran, et cliquez sur \u201cAjouter une table vide\u201d dans le menu. Cette table repr\u00e9sentera les interactions avec nos contacts, alors renommons-la \u201cInteractions\u201d en cliquant sur son nom par d\u00e9faut (\u201cTable1\u201d) en haut de l\u2019\u00e9cran, comme pr\u00e9c\u00e9demment. Il est judicieux de donner des noms significatifs aux colonnes. Dans ce cas, pour chaque interaction, nous devons savoir \u00e0 quel Contact elle se r\u00e9f\u00e8re, la date, le type et les notes de conversation. Pour renommer une colonne, cliquez sur son en-t\u00eate pour s\u00e9lectionner la colonne, puis cliquez \u00e0 nouveau sur l\u2019en-t\u00eate pour modifier son nom. Vous pouvez appuyer sur la touche Tab pour continuer \u00e0 renommer la colonne suivante. Enfin, appuyez sur le bouton \u201c+\u201d \u00e0 droite de la derni\u00e8re colonne pour cr\u00e9er une colonne suppl\u00e9mentaire, et nommez-la \u201cNotes\u201d.","title":"Ajouter une autre table"},{"location":"lightweight-crm/#lier-les-enregistrements-de-donnees","text":"Chaque enregistrement dans cette table appartiendra \u00e0 un contact particulier. Vous le configurez en transformant la colonne \u201cContact\u201d en une r\u00e9f\u00e9rence \u00e0 la table \u201cContacts\u201d. En utilisant le triangle dans l\u2019en-t\u00eate de la colonne \u201cContact\u201d, ouvrez le menu et s\u00e9lectionnez \u201cOptions de colonne\u201d. Dans le panneau de droite, utilisez le menu d\u00e9roulant \u201cType de colonne\u201d pour s\u00e9lectionner \u201cR\u00e9f\u00e9rence\u201d, puis sous \u201cDonn\u00e9es de la table\u201d, s\u00e9lectionnez \u201cContacts\u201d. Chaque cellule de cette colonne contiendra un pointeur vers une ligne dans la table \u201cContacts\u201d 1 . Bien qu\u2019elle fasse r\u00e9f\u00e9rence \u00e0 une ligne enti\u00e8re, il est utile de voir un identifiant particulier de cette ligne, donc sous \u201cAfficher la colonne\u201d, s\u00e9lectionnez \u201cSoci\u00e9t\u00e9\u201d. Vous verrez cela en action sous peu.","title":"Lier les enregistrements de donn\u00e9es"},{"location":"lightweight-crm/#definir-dautres-types","text":"Dans Grist, chaque colonne a un type. Souvent, le type par d\u00e9faut de Texte ou Num\u00e9rique est correct. Pour notre colonne \u201cDate\u201d, un meilleur type est Date. Cliquez sur n\u2019importe quelle cellule dans la colonne \u201cDate\u201d, et dans le panneau de droite, cliquez dans le menu d\u00e9roulant \u201cType de colonne\u201d et s\u00e9lectionnez \u201cDate\u201d. Si vous le souhaitez, vous pouvez \u00e9galement choisir un format de date diff\u00e9rent juste en dessous du type. Maintenant, si vous cliquez sur une cellule dans la colonne \u201cDate\u201d et appuyez sur Entr\u00e9e, vous avez un s\u00e9lecteur de date pratique. Un autre type de colonne utile pour nous est \u201cChoix\u201d. Nos interactions seront soit \u201cT\u00e9l\u00e9phone\u201d, \u201cEmail\u201d ou \u201cEn personne\u201d, et il est utile de lister ces options. Cliquez dans la colonne \u201cType\u201d, et dans le panneau de droite, d\u00e9finissez \u201cType de colonne\u201d sur \u201cChoix\u201d. Vous verrez une zone de texte \u201cValeurs de choix\u201d en dessous. Cliquez dessus et entrez vos choix l\u00e0-bas, un par ligne : \u201cT\u00e9l\u00e9phone\u201d, \u201cEmail\u201d, \u201cEn personne\u201d. Maintenant, si vous cliquez sur une cellule dans la colonne \u201cType\u201d et appuyez sur Entr\u00e9e, vous pouvez choisir parmi les choix que vous avez d\u00e9finis, ou commencer \u00e0 taper et utiliser l\u2019auto-compl\u00e9tion.","title":"D\u00e9finir d’autres types"},{"location":"lightweight-crm/#lier-visuellement-les-tables","text":"La prochaine \u00e9tape consiste \u00e0 lier visuellement les deux tables. Ouvrez la page \u201cContacts\u201d, cliquez sur le bouton \u201cAjouter nouveau\u201d en haut du panneau de gauche, puis \u201cAjouter un widget \u00e0 la page\u201d. S\u00e9lectionnez le widget \u201cTable\u201d et les donn\u00e9es \u201cInteractions\u201d. Dans le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d en bas de la bo\u00eete de dialogue, s\u00e9lectionnez \u201cCONTACTS\u201d. Cela signifie que choisir un contact affichera uniquement les interactions avec ce contact. Cliquez sur \u201cAjouter \u00e0 la page\u201d pour terminer. Ensuite, s\u00e9lectionnons un contact dans la table \u00e0 gauche (utilisons \u201cDouglas LLC\u201d dans la quatri\u00e8me ligne) et ajoutons quelques notes pour celui-ci. Tapez une date (indice : le raccourci \u2318 + ; (point-virgule) sur Mac ou Ctrl + ; (point-virgule) sur Windows ins\u00e8re la date d\u2019aujourd\u2019hui), s\u00e9lectionnez un type, et entrez une note. D\u00e8s que cette ligne est cr\u00e9\u00e9e, la colonne \u201cContact\u201d est automatiquement remplie avec \u201cDouglas LLC\u201d, gr\u00e2ce aux sections \u00e9tant li\u00e9es. La note que nous avons ajout\u00e9e n\u2019est affich\u00e9e que lorsque \u201cDouglas LLC\u201d est s\u00e9lectionn\u00e9. Nous pouvons ajouter plus de notes pour \u201cDouglas LLC\u201d, ou ajouter des notes pour n\u2019importe lequel des autres contacts. Nous pouvons maintenant masquer la colonne \u201cContact\u201d dans la table \u201cInteractions\u201d : en utilisant le menu dans l\u2019en-t\u00eate de la colonne, s\u00e9lectionnez \u201cMasquer la colonne\u201d. Comme les tables sont li\u00e9es, nous voyons d\u00e9j\u00e0 pour qui sont les notes. Pour que les longues notes soient pratiques, redimensionnez la colonne \u201cNotes\u201d en faisant glisser le bord droit de son en-t\u00eate. Pour envelopper de longues notes, ouvrez les Options de colonne et cliquez sur l\u2019ic\u00f4ne de retour \u00e0 la ligne.","title":"Lier visuellement les tables"},{"location":"lightweight-crm/#personnaliser-la-mise-en-page","text":"Une fois que vous avez plusieurs tables sur un m\u00eame \u00e9cran, la mise en page de l\u2019\u00e9cran peut devenir un probl\u00e8me. Avoir de nombreuses colonnes dans la table Contacts peut ne plus \u00eatre pratique. Il est pr\u00e9f\u00e9rable de la disposer comme une application personnalis\u00e9e : s\u00e9lectionnez un contact dans une liste \u00e0 gauche et voyez les d\u00e9tails et les interactions de ce contact. Cela peut \u00eatre fait en utilisant \u00e0 nouveau \u201cAjouter un widget \u00e0 la page\u201d. Cette fois, nous allons s\u00e9lectionner le widget \u201cCarte\u201d pour la table \u201cContacts\u201d, et pour \u201cS\u00e9lectionner par\u201d, nous utiliserons \u00e0 nouveau \u201cCONTACTS\u201d. Vous pouvez d\u00e9placer les sections r\u00e9sultantes pour cr\u00e9er une mise en page pratique. D\u00e9placez votre souris vers le coin sup\u00e9rieur gauche de chaque section jusqu\u2019\u00e0 ce que vous voyiez une ic\u00f4ne de \u201cpoign\u00e9e de tirage\u201d. Utilisez cette ic\u00f4ne pour faire glisser chaque section \u00e0 l\u2019endroit d\u00e9sir\u00e9 par rapport aux autres sections. Vous pouvez \u00e9galement redimensionner les sections en d\u00e9pla\u00e7ant la souris entre elles pour trouver une ligne pointill\u00e9e. Faites glisser cette ligne pour redimensionner. Notez que les m\u00eames donn\u00e9es personnelles sont maintenant affich\u00e9es \u00e0 deux endroits sur l\u2019\u00e9cran. Ce ne sont pas des copies de donn\u00e9es, mais des pr\u00e9sentations diff\u00e9rentes des m\u00eames donn\u00e9es. Changer les donn\u00e9es \u00e0 un endroit les changera \u00e0 l\u2019autre.","title":"Personnaliser la mise en page"},{"location":"lightweight-crm/#personnaliser-les-champs","text":"\u00c0 ce stade, nous pouvons faire un peu de nettoyage : masquer les colonnes inutiles dans la table principale \u201cContacts\u201d et r\u00e9organiser les champs dans le widget Carte. Un moyen rapide de masquer des colonnes est d\u2019utiliser le panneau de droite. En utilisant le menu \u00e0 trois points en haut \u00e0 droite de la table \u201cContacts\u201d, s\u00e9lectionnez \u201cOptions de widget\u201d. Dans le panneau qui s\u2019ouvre, trouvez une liste de \u201cColonnes visibles\u201d. D\u00e9placez la souris sur chaque colonne pour r\u00e9v\u00e9ler l\u2019ic\u00f4ne \u201c\u0153il\u201d. Cliquez dessus pour masquer toutes les colonnes sauf \u201cSoci\u00e9t\u00e9\u201d. Pour personnaliser le widget Carte, cliquez dessus. Le panneau de droite affichera les options pertinentes. Vous pouvez s\u00e9lectionner un th\u00e8me diff\u00e9rent, par exemple \u201cCompact\u201d. Pour r\u00e9organiser les champs, cliquez sur \u201cModifier la mise en page\u201d dans le panneau de droite. Vous pouvez maintenant faire glisser et d\u00e9poser des champs dans la carte, les redimensionner ou les supprimer. Cliquez sur \u201cEnregistrer\u201d une fois que vous avez termin\u00e9. En quelques \u00e9tapes, nous sommes pass\u00e9s d\u2019un tableur encombrant et difficile \u00e0 utiliser \u00e0 un enregistrement concis et \u00e9l\u00e9gant de vos interactions dans une application personnalis\u00e9e simple et efficace.","title":"Personnaliser les champs"},{"location":"lightweight-crm/#taches-a-faire-pour-les-contacts","text":"L\u2019exemple de \u201cCRM l\u00e9ger\u201d a un autre tour dans son sac. La colonne \u201cType\u201d dans la table des interactions a un choix suppl\u00e9mentaire, \u201c\u00c0 faire\u201d. Apr\u00e8s avoir parl\u00e9 \u00e0 un contact, vous pouvez ajouter une note suppl\u00e9mentaire sur ce que vous devez faire pour la prochaine conversation, et la date \u00e0 laquelle elle est due. La table \u201cContacts\u201d rend ces \u00e9l\u00e9ments \u00e0 faire visibles, et triables par date d\u2019\u00e9ch\u00e9ance. De cette fa\u00e7on, vous pouvez voir d\u2019un coup d\u2019\u0153il ce qui est \u00e0 venir. Si vous \u00eates int\u00e9ress\u00e9 par les d\u00e9tails de sa configuration, d\u00e9veloppez la section ci-dessous. Pour votre premi\u00e8re introduction \u00e0 Grist, vous \u00eates libre de l\u2019ignorer.","title":"T\u00e2ches \u00e0 faire pour les contacts"},{"location":"lightweight-crm/#configuration-des-taches-a-faire","text":"Pour configurer les \u00e9l\u00e9ments \u00e0 faire comme dans l\u2019exemple, s\u00e9lectionnez les Options de colonne pour la colonne \u201cType\u201d dans la table Interactions, et ajoutez un autre choix (\u201c\u00c0 faire\u201d) \u00e0 la liste des choix : Choisissons notre contact \u201cDouglas LLC\u201d et ajoutons un \u00e9l\u00e9ment \u00e0 faire : Dans la table \u201cContacts\u201d, ajoutez deux nouvelles colonnes : Renommez-les en \u201c\u00c9ch\u00e9ance\u201d et \u201c\u00c9l\u00e9ments \u00e0 faire\u201d. Les deux colonnes sont calcul\u00e9es \u00e0 l\u2019aide de formules. Grist a un excellent support pour les formules, permettant une syntaxe Python compl\u00e8te et de nombreuses fonctions Excel. Dans Grist, une formule s\u2019applique toujours \u00e0 l\u2019ensemble de la colonne de donn\u00e9es. Pour entrer une formule, cliquez sur une cellule dans la colonne \u201c\u00c9ch\u00e9ance\u201d, et appuyez sur la touche \u201c=\u201d : Dans cette formule, nous voulons rechercher toutes les Interactions pour le Contact actuel dont le Type est \u201c\u00c0 faire\u201d, puis s\u00e9lectionner celle avec la Date la plus ancienne. En utilisant la syntaxe Python, la formule est : items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return min(items.Date) if items else None Collez-la ou tapez-la. Lorsque vous tapez des formules multi-lignes, utilisez Shift+Enter pour ajouter de nouvelles lignes, et Enter pour enregistrer. Il est \u00e9galement temps de changer le type de colonne en \u201cDate\u201d. Ouvrez les Options de colonne, et s\u00e9lectionnez \u201cDate\u201d pour le type. Vous pouvez choisir le format de date directement en dessous du type. Pour les \u201c\u00c9l\u00e9ments \u00e0 faire\u201d, entrez une formule de mani\u00e8re similaire. En cas de plusieurs \u00e9l\u00e9ments \u00e0 faire, cette formule les concat\u00e9nera, s\u00e9par\u00e9s par des sauts de ligne. Cliquez dans la colonne \u201c\u00c9l\u00e9ments \u00e0 faire\u201d, appuyez sur \u201c=\u201d pour commencer \u00e0 taper la formule, et entrez items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return \"\\n\".join(items.Notes) Maintenant, l\u2019\u00e9l\u00e9ment \u00e0 faire que nous avons entr\u00e9 plus t\u00f4t est visible dans la table principale Contacts. Notez que les valeurs dans ces colonnes sont en lecture seule, car elles sont calcul\u00e9es. Pour changer la date d\u2019\u00e9ch\u00e9ance, trouvez l\u2019\u00e9l\u00e9ment \u00e0 faire dans la table Interactions o\u00f9 vous l\u2019avez cr\u00e9\u00e9.","title":""},{"location":"lightweight-crm/#trier-les-tables","text":"Nous voulons que les contacts avec des \u00e9l\u00e9ments \u00e0 faire apparaissent en premier, par ordre de date d\u2019\u00e9ch\u00e9ance. Cliquez sur le triangle dans l\u2019en-t\u00eate de la colonne \u201c\u00c9ch\u00e9ance\u201d, et s\u00e9lectionnez \u201cTrier A-Z\u201d. Par d\u00e9faut, les param\u00e8tres de tri ne sont pas enregistr\u00e9s. Le bouton vert surlign\u00e9 en haut \u00e0 droite de la table \u201cContacts\u201d nous rappelle cela. Pour conserver cet ordre de tri lorsque vous rouvrez le document, enregistrez-le en cliquant sur ce bouton vert et en s\u00e9lectionnant \u201cEnregistrer\u201d. Vous pouvez \u00e9galement enregistrer en cliquant sur la coche verte, \u00e0 droite de l\u2019ic\u00f4ne de filtre.","title":""},{"location":"lightweight-crm/#autres-fonctionnalites","text":"Grist a d\u2019autres fonctionnalit\u00e9s int\u00e9ressantes, dont certaines sont utilis\u00e9es dans l\u2019exemple de document \u201cCRM l\u00e9ger\u201d. Pour en savoir plus \u00e0 leur sujet, suivez les liens vers leur documentation. Toute colonne de texte peut \u00eatre affich\u00e9e comme un hyperlien . L\u2019exemple de CRM l\u00e9ger l\u2019utilise deux fois : pour le champ \u201csite web\u201d, et pour un hyperlien construit par formule vers une page de recherche Gmail pour l\u2019adresse e-mail de ce contact. Ce dernier est pratique si vous utilisez Gmail. Grist prend en charge les pi\u00e8ces jointes . Dans l\u2019exemple, il y a un champ \u201cPi\u00e8ces jointes\u201d pour chaque contact qui peut \u00eatre utilis\u00e9 pour stocker une image d\u2019une carte de visite, par exemple. Dans une entreprise r\u00e9elle, vous aurez besoin de plus. Les produits CRM sp\u00e9cialis\u00e9s ont des tonnes de fonctionnalit\u00e9s. Leur probl\u00e8me est la complexit\u00e9 : essayer de satisfaire les besoins de nombreux clients diff\u00e9rents rend le produit compliqu\u00e9 \u00e0 utiliser. La beaut\u00e9 de Grist est que vous pouvez commencer simplement et ajouter uniquement le niveau de complexit\u00e9 dont vous avez besoin, et rien de plus. D\u2019autres tutoriels montrent comment mod\u00e9liser des donn\u00e9es plus complexes, analyser et repr\u00e9senter des donn\u00e9es, et plus encore. Dans le monde des bases de donn\u00e9es, ce type de r\u00e9f\u00e9rence ou de pointeur est connu sous le nom de \u201ccl\u00e9 \u00e9trang\u00e8re\u201d. \u21a9","title":"Autres fonctionnalit\u00e9s"},{"location":"limits/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Limites # Pour vous aider \u00e0 \u00e9valuer si Grist r\u00e9pondra \u00e0 vos besoins, voici une liste des limitations qui s\u2019appliquent \u00e0 son fonctionnement. Nombre de documents # Pour tous les plans, le nombre de documents n\u2019est pas limit\u00e9. Pour \u00e9viter l\u2019utilisation abusive du syst\u00e8me par des outils d\u2019automatisation, les espaces d\u2019\u00e9quipe peuvent \u00eatre limit\u00e9s \u00e0 1 000 documents. Si vous rencontrez cette limite pour une utilisation l\u00e9gitime, veuillez contacter le support pour l\u2019augmenter. Les anciens plans gratuits avaient une limite de dix documents. En savoir plus sur les limites h\u00e9rit\u00e9es . Nombre de collaborateurs # Pour les espaces d\u2019\u00e9quipe sur tous les plans, il n\u2019y a pas de limite au nombre de membres de l\u2019\u00e9quipe qui peuvent \u00eatre ajout\u00e9s \u00e0 l\u2019espace. Pour les plans payants, le nombre de membres de l\u2019\u00e9quipe d\u00e9termine le prix. Consultez notre page de tarification pour plus de d\u00e9tails. Les membres de l\u2019\u00e9quipe ajout\u00e9s \u00e0 votre espace d\u2019\u00e9quipe peuvent h\u00e9riter de l\u2019acc\u00e8s aux espaces de travail ou aux documents au sein de cette organisation. En savoir plus sur le partage d\u2019\u00e9quipe . Sur les espaces personnels et d\u2019\u00e9quipe, chaque document peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 2 invit\u00e9s gratuits qui n\u2019affectent pas le prix du plan, m\u00eame sur les plans payants. Nombre de tables par document # Il y a une limite de 500 tables autoris\u00e9es par document. C\u2019est une limite souple. Si vous vous retrouvez avec un grand nombre de tables, envisagez de fusionner celles qui ont la m\u00eame structure. Par exemple, si vous avez une table pour chaque type de produit, envisagez d\u2019utiliser une seule table avec le type de produit comme colonne suppl\u00e9mentaire. Lignes par document # Sur le plan gratuit, les documents ont une limite de 5 000 lignes. La limite pour les plans Pro et Business est de 100 000 et 150 000 lignes, respectivement. Les documents sont \u00e9galement soumis \u00e0 des limites de taille de donn\u00e9es, comme d\u00e9crit ci-dessous. Taille des donn\u00e9es # Il y a une limite stricte \u00e0 la taille totale des donn\u00e9es d\u2019un document, d\u00e9termin\u00e9e comme la limite de lignes multipli\u00e9e par 2KB. Cela signifie que les documents sur le plan gratuit ont une limite de taille de donn\u00e9es de 10MB, tandis que les documents des plans Pro et Business ont des limites de 200MB et 300MB, respectivement. Cette valeur correspond approximativement \u00e0 la taille des donn\u00e9es en format CSV. Vous pouvez voir la taille actuelle des donn\u00e9es d\u2019un document sur la page \u2018Donn\u00e9es sources\u2019 . Pour des raisons de m\u00e9moire et de performance, il est recommand\u00e9 de ne pas d\u00e9passer une taille de donn\u00e9es de 20MB. Les documents d\u00e9passant 20MB peuvent ralentir ou rencontrer des limites de m\u00e9moire en fonction de leur complexit\u00e9. Par exemple, un document avec 100 000 lignes et 24 colonnes num\u00e9riques atteindrait cette limite recommand\u00e9e. Pour aider \u00e0 optimiser les formules sur de grands documents, vous pouvez utiliser le chronom\u00e8tre de formule int\u00e9gr\u00e9. Les pi\u00e8ces jointes sont compt\u00e9es s\u00e9par\u00e9ment. Les pi\u00e8ces jointes plus les donn\u00e9es dans un seul document sont limit\u00e9es \u00e0 1GB pour tous les plans. T\u00e9l\u00e9chargements # Les t\u00e9l\u00e9chargements sont limit\u00e9s \u00e0 50MB, \u00e0 la fois pour les pi\u00e8ces jointes et pour importer des donn\u00e9es. Notez qu\u2019une importation dans cette limite peut entra\u00eener un document qui d\u00e9passe la limite de taille de document, auquel cas le t\u00e9l\u00e9chargement est toujours susceptible d\u2019\u00e9chouer. Limites de l\u2019API # Les plans gratuits sont limit\u00e9s \u00e0 5 000 appels API par document et par jour. Les plans Pro et Business augmentent la limite \u00e0 40 000 et 60 000 appels par document et par jour, respectivement. Les plans gratuits peuvent \u00eatre limit\u00e9s \u00e0 5 requ\u00eates API par seconde par document. Le plan d\u2019\u00e9quipe n\u2019impose pas une telle limite de d\u00e9bit. Par ailleurs, il y a une limite de concurrence de 10 pour tous les plans : si 10 requ\u00eates API autoris\u00e9es sont actuellement en cours de traitement pour un document particulier, toute autre requ\u00eate API sera rejet\u00e9e (avec le code d\u2019\u00e9tat HTTP 429) jusqu\u2019\u00e0 ce qu\u2019au moins une des requ\u00eates initiales soit termin\u00e9e. Un client qui attend qu\u2019une requ\u00eate soit termin\u00e9e avant d\u2019envoyer la suivante ne devrait pas atteindre cette limite (en supposant qu\u2019il est le seul client acc\u00e9dant au document). La taille du corps de toute requ\u00eate API individuelle est limit\u00e9e \u00e0 1MB. En particulier, cela signifie que les requ\u00eates ajoutant ou mettant \u00e0 jour plusieurs enregistrements peuvent devoir \u00eatre divis\u00e9es en lots qui tiennent dans cette limite. Disponibilit\u00e9 des documents # De temps en temps, lors des mises \u00e0 jour et des transitions op\u00e9rationnelles, les documents Grist individuels peuvent devenir inaccessibles pendant quelques secondes. Veuillez en tenir compte lors de l\u2019utilisation de l\u2019API de Grist. Limites h\u00e9rit\u00e9es # Les anciens plans personnels gratuits ont les limites suivantes : 10 documents par espace Pas d\u2019espaces de travail 100 000 lignes Pour d\u00e9terminer si vous \u00eates sur un espace personnel h\u00e9rit\u00e9, cliquez sur le nom de votre espace (@votre-nom) en haut \u00e0 gauche. Les espaces personnels sur le plan h\u00e9rit\u00e9 indiqueront \u201cEspace personnel (h\u00e9rit\u00e9)\u201d dans le menu d\u00e9roulant. Sur le plan gratuit actuel, tous les espaces personnels et d\u2019\u00e9quipe partagent les m\u00eames limites que celles d\u00e9crites ci-dessus et sur notre page de tarification .","title":"Limits"},{"location":"limits/#limites","text":"Pour vous aider \u00e0 \u00e9valuer si Grist r\u00e9pondra \u00e0 vos besoins, voici une liste des limitations qui s\u2019appliquent \u00e0 son fonctionnement.","title":"Limites"},{"location":"limits/#nombre-de-documents","text":"Pour tous les plans, le nombre de documents n\u2019est pas limit\u00e9. Pour \u00e9viter l\u2019utilisation abusive du syst\u00e8me par des outils d\u2019automatisation, les espaces d\u2019\u00e9quipe peuvent \u00eatre limit\u00e9s \u00e0 1 000 documents. Si vous rencontrez cette limite pour une utilisation l\u00e9gitime, veuillez contacter le support pour l\u2019augmenter. Les anciens plans gratuits avaient une limite de dix documents. En savoir plus sur les limites h\u00e9rit\u00e9es .","title":"Nombre de documents"},{"location":"limits/#nombre-de-collaborateurs","text":"Pour les espaces d\u2019\u00e9quipe sur tous les plans, il n\u2019y a pas de limite au nombre de membres de l\u2019\u00e9quipe qui peuvent \u00eatre ajout\u00e9s \u00e0 l\u2019espace. Pour les plans payants, le nombre de membres de l\u2019\u00e9quipe d\u00e9termine le prix. Consultez notre page de tarification pour plus de d\u00e9tails. Les membres de l\u2019\u00e9quipe ajout\u00e9s \u00e0 votre espace d\u2019\u00e9quipe peuvent h\u00e9riter de l\u2019acc\u00e8s aux espaces de travail ou aux documents au sein de cette organisation. En savoir plus sur le partage d\u2019\u00e9quipe . Sur les espaces personnels et d\u2019\u00e9quipe, chaque document peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 2 invit\u00e9s gratuits qui n\u2019affectent pas le prix du plan, m\u00eame sur les plans payants.","title":"Nombre de collaborateurs"},{"location":"limits/#nombre-de-tables-par-document","text":"Il y a une limite de 500 tables autoris\u00e9es par document. C\u2019est une limite souple. Si vous vous retrouvez avec un grand nombre de tables, envisagez de fusionner celles qui ont la m\u00eame structure. Par exemple, si vous avez une table pour chaque type de produit, envisagez d\u2019utiliser une seule table avec le type de produit comme colonne suppl\u00e9mentaire.","title":"Nombre de tables par document"},{"location":"limits/#lignes-par-document","text":"Sur le plan gratuit, les documents ont une limite de 5 000 lignes. La limite pour les plans Pro et Business est de 100 000 et 150 000 lignes, respectivement. Les documents sont \u00e9galement soumis \u00e0 des limites de taille de donn\u00e9es, comme d\u00e9crit ci-dessous.","title":"Lignes par document"},{"location":"limits/#taille-des-donnees","text":"Il y a une limite stricte \u00e0 la taille totale des donn\u00e9es d\u2019un document, d\u00e9termin\u00e9e comme la limite de lignes multipli\u00e9e par 2KB. Cela signifie que les documents sur le plan gratuit ont une limite de taille de donn\u00e9es de 10MB, tandis que les documents des plans Pro et Business ont des limites de 200MB et 300MB, respectivement. Cette valeur correspond approximativement \u00e0 la taille des donn\u00e9es en format CSV. Vous pouvez voir la taille actuelle des donn\u00e9es d\u2019un document sur la page \u2018Donn\u00e9es sources\u2019 . Pour des raisons de m\u00e9moire et de performance, il est recommand\u00e9 de ne pas d\u00e9passer une taille de donn\u00e9es de 20MB. Les documents d\u00e9passant 20MB peuvent ralentir ou rencontrer des limites de m\u00e9moire en fonction de leur complexit\u00e9. Par exemple, un document avec 100 000 lignes et 24 colonnes num\u00e9riques atteindrait cette limite recommand\u00e9e. Pour aider \u00e0 optimiser les formules sur de grands documents, vous pouvez utiliser le chronom\u00e8tre de formule int\u00e9gr\u00e9. Les pi\u00e8ces jointes sont compt\u00e9es s\u00e9par\u00e9ment. Les pi\u00e8ces jointes plus les donn\u00e9es dans un seul document sont limit\u00e9es \u00e0 1GB pour tous les plans.","title":"Taille des donn\u00e9es"},{"location":"limits/#telechargements","text":"Les t\u00e9l\u00e9chargements sont limit\u00e9s \u00e0 50MB, \u00e0 la fois pour les pi\u00e8ces jointes et pour importer des donn\u00e9es. Notez qu\u2019une importation dans cette limite peut entra\u00eener un document qui d\u00e9passe la limite de taille de document, auquel cas le t\u00e9l\u00e9chargement est toujours susceptible d\u2019\u00e9chouer.","title":"T\u00e9l\u00e9chargements"},{"location":"limits/#limites-de-lapi","text":"Les plans gratuits sont limit\u00e9s \u00e0 5 000 appels API par document et par jour. Les plans Pro et Business augmentent la limite \u00e0 40 000 et 60 000 appels par document et par jour, respectivement. Les plans gratuits peuvent \u00eatre limit\u00e9s \u00e0 5 requ\u00eates API par seconde par document. Le plan d\u2019\u00e9quipe n\u2019impose pas une telle limite de d\u00e9bit. Par ailleurs, il y a une limite de concurrence de 10 pour tous les plans : si 10 requ\u00eates API autoris\u00e9es sont actuellement en cours de traitement pour un document particulier, toute autre requ\u00eate API sera rejet\u00e9e (avec le code d\u2019\u00e9tat HTTP 429) jusqu\u2019\u00e0 ce qu\u2019au moins une des requ\u00eates initiales soit termin\u00e9e. Un client qui attend qu\u2019une requ\u00eate soit termin\u00e9e avant d\u2019envoyer la suivante ne devrait pas atteindre cette limite (en supposant qu\u2019il est le seul client acc\u00e9dant au document). La taille du corps de toute requ\u00eate API individuelle est limit\u00e9e \u00e0 1MB. En particulier, cela signifie que les requ\u00eates ajoutant ou mettant \u00e0 jour plusieurs enregistrements peuvent devoir \u00eatre divis\u00e9es en lots qui tiennent dans cette limite.","title":"Limites de l’API"},{"location":"limits/#disponibilite-des-documents","text":"De temps en temps, lors des mises \u00e0 jour et des transitions op\u00e9rationnelles, les documents Grist individuels peuvent devenir inaccessibles pendant quelques secondes. Veuillez en tenir compte lors de l\u2019utilisation de l\u2019API de Grist.","title":"Disponibilit\u00e9 des documents"},{"location":"limits/#limites-heritees","text":"Les anciens plans personnels gratuits ont les limites suivantes : 10 documents par espace Pas d\u2019espaces de travail 100 000 lignes Pour d\u00e9terminer si vous \u00eates sur un espace personnel h\u00e9rit\u00e9, cliquez sur le nom de votre espace (@votre-nom) en haut \u00e0 gauche. Les espaces personnels sur le plan h\u00e9rit\u00e9 indiqueront \u201cEspace personnel (h\u00e9rit\u00e9)\u201d dans le menu d\u00e9roulant. Sur le plan gratuit actuel, tous les espaces personnels et d\u2019\u00e9quipe partagent les m\u00eames limites que celles d\u00e9crites ci-dessus et sur notre page de tarification .","title":"Limites h\u00e9rit\u00e9es"},{"location":"linking-widgets/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Lier des vues sur la page # Une grande raison de placer plus d\u2019une vue sur une page est que les vues peuvent \u00eatre li\u00e9es. Lorsqu\u2019elles sont li\u00e9es, la s\u00e9lection d\u2019un enregistrement dans une vue entra\u00eenera la mise \u00e0 jour d\u2019une autre vue pour afficher uniquement les donn\u00e9es li\u00e9es \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Par exemple, disons que vous avez une table de D\u00e9partements dans une entreprise, et une table d\u2019 Employ\u00e9s , chaque employ\u00e9 \u00e9tant li\u00e9 \u00e0 un d\u00e9partement. Vous pouvez avoir une vue Table listant les d\u00e9partements et servant de s\u00e9lecteur pour une deuxi\u00e8me vue Table listant les employ\u00e9s : Pr\u00e9c\u00e9dent Suivant Pour cr\u00e9er cela, commencez par cr\u00e9er une page avec une vue Table pour les donn\u00e9es de D\u00e9partements , comme d\u00e9crit dans Vues sur la page . Ensuite, dans le menu \u201cAjouter nouveau\u201d, s\u00e9lectionnez l\u2019option \u201cAjouter une vue \u00e0 la page\u201d pour ajouter une autre vue Table pour les donn\u00e9es d\u2019 Employ\u00e9s . Dans le s\u00e9lecteur de vues, utilisez le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d et choisissez la vue \u201cD\u00c9PARTEMENTS\u201d ajout\u00e9e \u00e0 la premi\u00e8re \u00e9tape. C\u2019est tout ce qu\u2019il faut : maintenant, s\u00e9lectionner un d\u00e9partement dans la premi\u00e8re table fera en sorte que la deuxi\u00e8me table affiche uniquement les employ\u00e9s de ce d\u00e9partement. Notez que cela repose sur le fait que la table Employ\u00e9s ait une colonne de type R\u00e9f\u00e9rence avec la table cible D\u00e9partements . Voir Colonnes de r\u00e9f\u00e9rence . Types de liaison # Lier des vues ne fonctionne que lorsqu\u2019il existe une relation entre les enregistrements dans les donn\u00e9es sous-jacentes. Plusieurs types de relations sont pris en charge. Liaison sur le m\u00eame enregistrement # Le plus directement, vous pouvez lier deux vues qui affichent des donn\u00e9es de la m\u00eame table sous-jacente, g\u00e9n\u00e9ralement en liant une vue Table \u00e0 une vue Fiche. Cela vous permet de s\u00e9lectionner un enregistrement dans la vue Table et de voir plus de d\u00e9tails sur cet enregistrement dans la vue Fiche li\u00e9e. Par exemple, vous pouvez ajouter une Fiche des donn\u00e9es d\u2019 Employ\u00e9s et la lier \u00e0 une vue Table existante \u201cEMPLOY\u00c9S\u201d: Lorsque vous s\u00e9lectionnez un enregistrement dans la table, la nouvelle vue \u201cFiche EMPLOY\u00c9S\u201d affiche une fiche pour l\u2019enregistrement s\u00e9lectionn\u00e9. Pour un autre exemple de ce type de liaison, voir le document \u201cCRM l\u00e9ger\u201d dans \u201cExemples & Mod\u00e8les\u201d et la section Personnaliser la mise en page dans le tutoriel associ\u00e9. Liaison par filtre # Comme dans l\u2019exemple Employ\u00e9-D\u00e9partement, lorsqu\u2019une table a une r\u00e9f\u00e9rence \u00e0 une autre (c\u2019est-\u00e0-dire une colonne de type \u201cR\u00e9f\u00e9rence\u201d), la deuxi\u00e8me table peut servir de s\u00e9lecteur pour la premi\u00e8re. Essentiellement, s\u00e9lectionner un enregistrement peut automatiquement filtrer une autre vue pour n\u2019afficher que les enregistrements qui se r\u00e9f\u00e8rent \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Dans l\u2019exemple montr\u00e9 pr\u00e9c\u00e9demment, la table Employ\u00e9s a une colonne \u201cR\u00e9f\u00e9rence\u201d pointant vers la table D\u00e9partements , donc une liste de d\u00e9partements peut servir de s\u00e9lecteur pour les employ\u00e9s. Lorsqu\u2019un d\u00e9partement est s\u00e9lectionn\u00e9, seuls les employ\u00e9s de ce d\u00e9partement seront affich\u00e9s. Le document \u201cCRM l\u00e9ger\u201d dans \u201cExemples & Mod\u00e8les\u201d fournit un autre exemple, o\u00f9 la s\u00e9lection d\u2019un contact affiche uniquement les conversations avec ce contact. C\u2019est \u00e9galement d\u00e9crit dans le tutoriel . Lorsque la cible de la liaison est une vue Graphique, vous obtenez des graphiques dynamiques qui refl\u00e8tent les donn\u00e9es associ\u00e9es \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Par exemple, vous pourriez lier un graphique en secteurs \u00e0 un d\u00e9partement pour afficher la somme des salaires pour chaque poste dans le d\u00e9partement s\u00e9lectionn\u00e9. Pr\u00e9c\u00e9dent Suivant Liaison indirecte # Chaque fois qu\u2019une table A a une r\u00e9f\u00e9rence \u00e0 B , A peut \u00eatre utilis\u00e9e \u00e0 la place de B comme source de liaison. Au lieu de consid\u00e9rer l\u2019enregistrement actuellement s\u00e9lectionn\u00e9 dans A , la liaison consid\u00e9rera l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans B comme la s\u00e9lection. Par exemple, une vue Table affichant des Employ\u00e9s peut servir de s\u00e9lecteur pour une vue Fiche affichant des donn\u00e9es de D\u00e9partements , en utilisant le fait qu\u2019un enregistrement d\u2019employ\u00e9 contient une r\u00e9f\u00e9rence \u201cD\u00e9partement\u201d. Dans le s\u00e9lecteur de vues, si vous s\u00e9lectionnez des donn\u00e9es de D\u00e9partements , vous verrez une option \u201cS\u00e9lectionner par\u201d \u201cEMPLOY\u00c9S \u2022 D\u00e9partement\u201d: Lorsque vous s\u00e9lectionnez un employ\u00e9, vous verrez les d\u00e9tails du d\u00e9partement de cet employ\u00e9. Colonnes de r\u00e9f\u00e9rence multiples # Lorsqu\u2019une table cible de la liaison a plusieurs colonnes de r\u00e9f\u00e9rence, vous devrez peut-\u00eatre choisir laquelle utiliser pour la liaison. Par exemple, un enregistrement de Vol pourrait avoir les champs \u2018A\u00e9roport de d\u00e9part\u2019 et \u2018A\u00e9roport d\u2019arriv\u00e9e\u2019, chacun \u00e9tant une R\u00e9f\u00e9rence \u00e0 la table A\u00e9roports . Lorsque vous s\u00e9lectionnez un a\u00e9roport dans une table, vous pouvez avoir le choix d\u2019afficher tous les vols partant de cet a\u00e9roport ou tous les vols y arrivant. La vue \u201cS\u00e9lectionner par\u201d affichera les deux options \u00e0 choisir : Lier des tableaux r\u00e9capitulatifs # Lorsque des vues affichent des donn\u00e9es r\u00e9sum\u00e9es, comme d\u00e9crit dans Tableaux r\u00e9capitulatifs , elles peuvent \u00e9galement \u00eatre li\u00e9es aux donn\u00e9es sous-jacentes, aux donn\u00e9es qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes, et \u00e0 d\u2019autres tableaux r\u00e9capitulatifs. Par exemple, vous pouvez r\u00e9sumer la table Employ\u00e9s par poste, et inclure le nombre d\u2019employ\u00e9s pour chaque poste, le salaire moyen ou d\u2019autres donn\u00e9es r\u00e9capitulatives. Vous pouvez \u00e9galement lier la table Employ\u00e9s \u00e0 celle-ci, de sorte que la s\u00e9lection d\u2019un poste affiche tous les employ\u00e9s dans ce poste. De plus, vous pouvez lier un autre tableau r\u00e9capitulatif. Par exemple, vous pouvez r\u00e9sumer les employ\u00e9s par poste et par genre, et lier cela au r\u00e9sum\u00e9 par poste. En s\u00e9lectionnant un poste, vous pouvez alors voir un r\u00e9sum\u00e9 par genre pour ce poste. Cela est \u00e9galement pratique avec les graphiques. Dans cet exemple, vous voyez un graphique en secteurs avec le salaire moyen pour les hommes contre les femmes pour le poste s\u00e9lectionn\u00e9. En cliquant sur diff\u00e9rents postes, le graphique en secteurs se met \u00e0 jour pour refl\u00e9ter celui s\u00e9lectionn\u00e9. Plus d\u2019exemples de ce type de liaison peuvent \u00eatre trouv\u00e9s dans le tutoriel Analyser et visualiser . Enfin, les tables qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes d\u2019un tableau r\u00e9capitulatif peuvent maintenant \u00eatre li\u00e9es au tableau r\u00e9capitulatif lui-m\u00eame. Dans l\u2019image ci-dessous, la table des Chiens Champions a une colonne de r\u00e9f\u00e9rence vers la table des \u00c9leveurs. La table des \u00c9leveurs est r\u00e9sum\u00e9e dans la vue en haut \u00e0 droite par la colonne \u201cPays\u201d. Parce que le Chien Champion r\u00e9f\u00e9rence l\u2019\u00c9leveur, vous pouvez ajouter une vue des Chiens Champions qui s\u00e9lectionne par un tableau r\u00e9capitulatif des donn\u00e9es des \u00c9leveurs. Changer les param\u00e8tres de liaison # Apr\u00e8s qu\u2019une vue soit ajout\u00e9e, vous pouvez voir et changer ses param\u00e8tres de liaison depuis le panneau de droite. Une fa\u00e7on d\u2019y acc\u00e9der est de cliquer sur l\u2019ic\u00f4ne \u00e0 trois points en haut \u00e0 droite de la vue, et de cliquer sur l\u2019option de menu \u201cS\u00e9lection des donn\u00e9es\u201d: Cela ouvre le panneau lat\u00e9ral, qui montre quelles donn\u00e9es sont affich\u00e9es, et quelle vue, le cas \u00e9ch\u00e9ant, sert de s\u00e9lecteur. Vous pouvez changer le param\u00e8tre \u201cS\u00e9lectionner par\u201d ici, ou cliquer sur le bouton vert \u201cModifier la s\u00e9lection des donn\u00e9es\u201d, et le changer dans la bo\u00eete de dialogue du s\u00e9lecteur de vues.","title":"Linking widgets"},{"location":"linking-widgets/#lier-des-vues-sur-la-page","text":"Une grande raison de placer plus d\u2019une vue sur une page est que les vues peuvent \u00eatre li\u00e9es. Lorsqu\u2019elles sont li\u00e9es, la s\u00e9lection d\u2019un enregistrement dans une vue entra\u00eenera la mise \u00e0 jour d\u2019une autre vue pour afficher uniquement les donn\u00e9es li\u00e9es \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Par exemple, disons que vous avez une table de D\u00e9partements dans une entreprise, et une table d\u2019 Employ\u00e9s , chaque employ\u00e9 \u00e9tant li\u00e9 \u00e0 un d\u00e9partement. Vous pouvez avoir une vue Table listant les d\u00e9partements et servant de s\u00e9lecteur pour une deuxi\u00e8me vue Table listant les employ\u00e9s : Pr\u00e9c\u00e9dent Suivant Pour cr\u00e9er cela, commencez par cr\u00e9er une page avec une vue Table pour les donn\u00e9es de D\u00e9partements , comme d\u00e9crit dans Vues sur la page . Ensuite, dans le menu \u201cAjouter nouveau\u201d, s\u00e9lectionnez l\u2019option \u201cAjouter une vue \u00e0 la page\u201d pour ajouter une autre vue Table pour les donn\u00e9es d\u2019 Employ\u00e9s . Dans le s\u00e9lecteur de vues, utilisez le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d et choisissez la vue \u201cD\u00c9PARTEMENTS\u201d ajout\u00e9e \u00e0 la premi\u00e8re \u00e9tape. C\u2019est tout ce qu\u2019il faut : maintenant, s\u00e9lectionner un d\u00e9partement dans la premi\u00e8re table fera en sorte que la deuxi\u00e8me table affiche uniquement les employ\u00e9s de ce d\u00e9partement. Notez que cela repose sur le fait que la table Employ\u00e9s ait une colonne de type R\u00e9f\u00e9rence avec la table cible D\u00e9partements . Voir Colonnes de r\u00e9f\u00e9rence .","title":"Lier des vues sur la page"},{"location":"linking-widgets/#types-de-liaison","text":"Lier des vues ne fonctionne que lorsqu\u2019il existe une relation entre les enregistrements dans les donn\u00e9es sous-jacentes. Plusieurs types de relations sont pris en charge.","title":""},{"location":"linking-widgets/#liaison-sur-le-meme-enregistrement","text":"Le plus directement, vous pouvez lier deux vues qui affichent des donn\u00e9es de la m\u00eame table sous-jacente, g\u00e9n\u00e9ralement en liant une vue Table \u00e0 une vue Fiche. Cela vous permet de s\u00e9lectionner un enregistrement dans la vue Table et de voir plus de d\u00e9tails sur cet enregistrement dans la vue Fiche li\u00e9e. Par exemple, vous pouvez ajouter une Fiche des donn\u00e9es d\u2019 Employ\u00e9s et la lier \u00e0 une vue Table existante \u201cEMPLOY\u00c9S\u201d: Lorsque vous s\u00e9lectionnez un enregistrement dans la table, la nouvelle vue \u201cFiche EMPLOY\u00c9S\u201d affiche une fiche pour l\u2019enregistrement s\u00e9lectionn\u00e9. Pour un autre exemple de ce type de liaison, voir le document \u201cCRM l\u00e9ger\u201d dans \u201cExemples & Mod\u00e8les\u201d et la section Personnaliser la mise en page dans le tutoriel associ\u00e9.","title":"Liaison sur le m\u00eame enregistrement"},{"location":"linking-widgets/#liaison-par-filtre","text":"Comme dans l\u2019exemple Employ\u00e9-D\u00e9partement, lorsqu\u2019une table a une r\u00e9f\u00e9rence \u00e0 une autre (c\u2019est-\u00e0-dire une colonne de type \u201cR\u00e9f\u00e9rence\u201d), la deuxi\u00e8me table peut servir de s\u00e9lecteur pour la premi\u00e8re. Essentiellement, s\u00e9lectionner un enregistrement peut automatiquement filtrer une autre vue pour n\u2019afficher que les enregistrements qui se r\u00e9f\u00e8rent \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Dans l\u2019exemple montr\u00e9 pr\u00e9c\u00e9demment, la table Employ\u00e9s a une colonne \u201cR\u00e9f\u00e9rence\u201d pointant vers la table D\u00e9partements , donc une liste de d\u00e9partements peut servir de s\u00e9lecteur pour les employ\u00e9s. Lorsqu\u2019un d\u00e9partement est s\u00e9lectionn\u00e9, seuls les employ\u00e9s de ce d\u00e9partement seront affich\u00e9s. Le document \u201cCRM l\u00e9ger\u201d dans \u201cExemples & Mod\u00e8les\u201d fournit un autre exemple, o\u00f9 la s\u00e9lection d\u2019un contact affiche uniquement les conversations avec ce contact. C\u2019est \u00e9galement d\u00e9crit dans le tutoriel . Lorsque la cible de la liaison est une vue Graphique, vous obtenez des graphiques dynamiques qui refl\u00e8tent les donn\u00e9es associ\u00e9es \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Par exemple, vous pourriez lier un graphique en secteurs \u00e0 un d\u00e9partement pour afficher la somme des salaires pour chaque poste dans le d\u00e9partement s\u00e9lectionn\u00e9. Pr\u00e9c\u00e9dent Suivant","title":"Liaison par filtre"},{"location":"linking-widgets/#liaison-indirecte","text":"Chaque fois qu\u2019une table A a une r\u00e9f\u00e9rence \u00e0 B , A peut \u00eatre utilis\u00e9e \u00e0 la place de B comme source de liaison. Au lieu de consid\u00e9rer l\u2019enregistrement actuellement s\u00e9lectionn\u00e9 dans A , la liaison consid\u00e9rera l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans B comme la s\u00e9lection. Par exemple, une vue Table affichant des Employ\u00e9s peut servir de s\u00e9lecteur pour une vue Fiche affichant des donn\u00e9es de D\u00e9partements , en utilisant le fait qu\u2019un enregistrement d\u2019employ\u00e9 contient une r\u00e9f\u00e9rence \u201cD\u00e9partement\u201d. Dans le s\u00e9lecteur de vues, si vous s\u00e9lectionnez des donn\u00e9es de D\u00e9partements , vous verrez une option \u201cS\u00e9lectionner par\u201d \u201cEMPLOY\u00c9S \u2022 D\u00e9partement\u201d: Lorsque vous s\u00e9lectionnez un employ\u00e9, vous verrez les d\u00e9tails du d\u00e9partement de cet employ\u00e9.","title":"Liaison indirecte"},{"location":"linking-widgets/#colonnes-de-reference-multiples","text":"Lorsqu\u2019une table cible de la liaison a plusieurs colonnes de r\u00e9f\u00e9rence, vous devrez peut-\u00eatre choisir laquelle utiliser pour la liaison. Par exemple, un enregistrement de Vol pourrait avoir les champs \u2018A\u00e9roport de d\u00e9part\u2019 et \u2018A\u00e9roport d\u2019arriv\u00e9e\u2019, chacun \u00e9tant une R\u00e9f\u00e9rence \u00e0 la table A\u00e9roports . Lorsque vous s\u00e9lectionnez un a\u00e9roport dans une table, vous pouvez avoir le choix d\u2019afficher tous les vols partant de cet a\u00e9roport ou tous les vols y arrivant. La vue \u201cS\u00e9lectionner par\u201d affichera les deux options \u00e0 choisir :","title":"Colonnes de r\u00e9f\u00e9rence multiples"},{"location":"linking-widgets/#lier-des-tableaux-recapitulatifs","text":"Lorsque des vues affichent des donn\u00e9es r\u00e9sum\u00e9es, comme d\u00e9crit dans Tableaux r\u00e9capitulatifs , elles peuvent \u00e9galement \u00eatre li\u00e9es aux donn\u00e9es sous-jacentes, aux donn\u00e9es qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes, et \u00e0 d\u2019autres tableaux r\u00e9capitulatifs. Par exemple, vous pouvez r\u00e9sumer la table Employ\u00e9s par poste, et inclure le nombre d\u2019employ\u00e9s pour chaque poste, le salaire moyen ou d\u2019autres donn\u00e9es r\u00e9capitulatives. Vous pouvez \u00e9galement lier la table Employ\u00e9s \u00e0 celle-ci, de sorte que la s\u00e9lection d\u2019un poste affiche tous les employ\u00e9s dans ce poste. De plus, vous pouvez lier un autre tableau r\u00e9capitulatif. Par exemple, vous pouvez r\u00e9sumer les employ\u00e9s par poste et par genre, et lier cela au r\u00e9sum\u00e9 par poste. En s\u00e9lectionnant un poste, vous pouvez alors voir un r\u00e9sum\u00e9 par genre pour ce poste. Cela est \u00e9galement pratique avec les graphiques. Dans cet exemple, vous voyez un graphique en secteurs avec le salaire moyen pour les hommes contre les femmes pour le poste s\u00e9lectionn\u00e9. En cliquant sur diff\u00e9rents postes, le graphique en secteurs se met \u00e0 jour pour refl\u00e9ter celui s\u00e9lectionn\u00e9. Plus d\u2019exemples de ce type de liaison peuvent \u00eatre trouv\u00e9s dans le tutoriel Analyser et visualiser . Enfin, les tables qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes d\u2019un tableau r\u00e9capitulatif peuvent maintenant \u00eatre li\u00e9es au tableau r\u00e9capitulatif lui-m\u00eame. Dans l\u2019image ci-dessous, la table des Chiens Champions a une colonne de r\u00e9f\u00e9rence vers la table des \u00c9leveurs. La table des \u00c9leveurs est r\u00e9sum\u00e9e dans la vue en haut \u00e0 droite par la colonne \u201cPays\u201d. Parce que le Chien Champion r\u00e9f\u00e9rence l\u2019\u00c9leveur, vous pouvez ajouter une vue des Chiens Champions qui s\u00e9lectionne par un tableau r\u00e9capitulatif des donn\u00e9es des \u00c9leveurs.","title":"Lier des tableaux r\u00e9capitulatifs"},{"location":"linking-widgets/#changer-les-parametres-de-liaison","text":"Apr\u00e8s qu\u2019une vue soit ajout\u00e9e, vous pouvez voir et changer ses param\u00e8tres de liaison depuis le panneau de droite. Une fa\u00e7on d\u2019y acc\u00e9der est de cliquer sur l\u2019ic\u00f4ne \u00e0 trois points en haut \u00e0 droite de la vue, et de cliquer sur l\u2019option de menu \u201cS\u00e9lection des donn\u00e9es\u201d: Cela ouvre le panneau lat\u00e9ral, qui montre quelles donn\u00e9es sont affich\u00e9es, et quelle vue, le cas \u00e9ch\u00e9ant, sert de s\u00e9lecteur. Vous pouvez changer le param\u00e8tre \u201cS\u00e9lectionner par\u201d ici, ou cliquer sur le bouton vert \u201cModifier la s\u00e9lection des donn\u00e9es\u201d, et le changer dans la bo\u00eete de dialogue du s\u00e9lecteur de vues.","title":"Changer les param\u00e8tres de liaison"},{"location":"newsletters/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Grist pour le Moulin # Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. L\u2019expression \u201cGrist pour le moulin\u201d signifie \u201cexp\u00e9rience, mat\u00e9riel ou connaissance utile\u201d, refl\u00e9tant parfaitement son objectif. Pour recevoir le bulletin, inscrivez-vous \u00e0 Grist . Bulletin de Juillet 2024 : Fonctions cumulatives, nouveaux types de cibles, synchronisation de variables am\u00e9lior\u00e9e et un nouveau webinaire pour les utilisateurs ! Bulletin de Juin 2024 : Mod\u00e8les de recherche, ex\u00e9cution sans privil\u00e8ges root, et contributions de la communaut\u00e9 ! Bulletin de Mai 2024 : Nouveau plan Grist Business, utilitaire de minuterie de formules, conditionnels d\u00e9pla\u00e7ables et am\u00e9liorations de la console d\u2019administration ! Bulletin d\u2019Avril 2024 : Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rences et de choix, une console d\u2019administration pour les auto-h\u00e9bergeurs. Bulletin de Mars 2024 : Am\u00e9liorations des formulaires, nouveaux formats de fichiers, et une page de d\u00e9marrage pour les auto-h\u00e9bergeurs. Bulletin de F\u00e9vrier 2024 : Projecteur sur la communaut\u00e9 : nouvelles vues, exp\u00e9riences amusantes et explorations approfondies. Bulletin de Janvier 2024 : Les formulaires Grist sont l\u00e0 ! L\u2019importation de donn\u00e9es dans Grist est devenue plus facile. Bulletin de D\u00e9cembre 2023 : Bilan de l\u2019ann\u00e9e 2023 de Grist, tests utilisateurs des formulaires et vitrine de la communaut\u00e9. Bulletin de Novembre 2023 : Ouvrir les enregistrements r\u00e9f\u00e9renc\u00e9s d\u2019un clic, discuter avec nous sur Discord, et ajouter des types de colonnes plus facilement. Bulletin d\u2019Octobre 2023 : Nouveaux raccourcis de formules, deux vues exp\u00e9rimentales, \u00e9v\u00e9nements de calendrier color\u00e9s et bien plus encore ! Bulletin de Septembre 2023 : Vue calendrier, deux nouveaux mod\u00e8les, et point de terminaison API pour effectuer des requ\u00eates SQL. Bulletin d\u2019Ao\u00fbt 2023 : Visionneuse CSV Grist ! Support de Llama AI ! Bulletin de Juillet 2023 : Assistant de formule AI lanc\u00e9 ! Bulletin de Juin 2023 : Mise en \u00e9vidence des lignes, nouveaux mod\u00e8les, et contributions de la communaut\u00e9. Bulletin de Mai 2023 : Description des colonnes et des vues, webhooks, et un vote pour les meilleures cartes m\u00e9moire. Bulletin d\u2019Avril 2023 : Concours de cartes m\u00e9moire, une fa\u00e7on de faire des blagues \u00e0 des amis avec Grist, et une nouvelle exp\u00e9rience de publication de donn\u00e9es de tableur. Bulletin de Mars 2023 : Minimisation des vues, tutoriels int\u00e9gr\u00e9s, et une vue personnalis\u00e9e pour les cartes m\u00e9moire ! Bulletin de F\u00e9vrier 2023 : Grist dans plus de langues, et un aper\u00e7u des projets passion des d\u00e9veloppeurs. Bulletin de Janvier 2023 : Grist en Fran\u00e7ais, Espa\u00f1ol, Portugu\u00eas, et Deutsch ! Plus des vues extensibles et des am\u00e9liorations des permissions avanc\u00e9es. Bulletin de D\u00e9cembre 2022 : Nouveau filtre de date avec calendrier, et instantan\u00e9s dans grist-core. Bulletin de Novembre 2022 : Exp\u00e9rience Grist avec l\u2019\u00e9criture de formules AI, et tri et filtrage am\u00e9lior\u00e9s. Bulletin d\u2019Octobre 2022 : Sommes rapides, duplication de tables, et nouvelles m\u00e9thodes API. Bulletin de Septembre 2022 : Mode sombre \ud83d\udd76 + gestion des utilisateurs am\u00e9lior\u00e9e. Bulletin d\u2019Ao\u00fbt 2022 : Espaces d\u2019\u00e9quipe gratuits, styles conditionnels des lignes, et meilleure aide pour les formules. Bulletin de Juillet 2022 : Aide-m\u00e9moire des formules et tableaux r\u00e9capitulatifs dans les donn\u00e9es sources. Bulletin de Juin 2022 : Filtrage par intervalle, et nouvelle fonction PEEK() . Bulletin de Mai 2022 : Donn\u00e9es sources, et nouveau lien de tableau r\u00e9capitulatif. Bulletin d\u2019Avril 2022 : \u00c9diteur de texte enrichi, et plus de styles de cellules. Bulletin de Mars 2022 : Mise en forme conditionnelle, nouvelle m\u00e9thode API, et le nouveau programme Sprouts. Bulletin de F\u00e9vrier 2022 : Menu des vues personnalis\u00e9es, 2FA, am\u00e9liorations des permissions avanc\u00e9es, et menu contextuel des cellules. Bulletin de Janvier 2022 : Gestion des visites de documents mod\u00e8les, et 4 nouveaux mod\u00e8les, y compris un gestionnaire d\u2019inventaire. Bulletin de D\u00e9cembre 2021 : D\u00e9clencheurs instantan\u00e9s Zapier, et quatre nouveaux mod\u00e8les. Bulletin de Novembre 2021 : Mappage des colonnes d\u2019importation, filtrage sur les colonnes masqu\u00e9es, et plus d\u2019options de tri. Bulletin d\u2019Octobre 2021 : \u00c9dition des choix, liens en ligne, et aper\u00e7us d\u2019importation am\u00e9lior\u00e9s. Bulletin de Septembre 2021 : Importations am\u00e9lior\u00e9es, devises globales, et plus de fa\u00e7ons d\u2019int\u00e9grer. Bulletin d\u2019Ao\u00fbt 2021 : Listes de r\u00e9f\u00e9rences, int\u00e9gration, mod\u00e8les, Pabbly, et plus encore. Bulletin de Juillet 2021 : Couleurs, tampons de temps et d\u2019auteur, et int\u00e9gration Google Sheets. Bulletin de Juin 2021 : Introduction des colonnes fig\u00e9es et d\u2019un mod\u00e8le de suivi des feuilles de temps. Bulletin de Mai 2021 : Listes de choix, tutoriel en 3 \u00e9tapes sur les colonnes de r\u00e9f\u00e9rence. Bulletin d\u2019Avril 2021 : Guide en 4 \u00e9tapes pour les cl\u00e9s de lien. Bulletin de Mars 2021 : Permissions avanc\u00e9es. Bulletin de F\u00e9vrier 2021 : Support mobile am\u00e9lior\u00e9, totaux. Bulletin de Janvier 2021 : Gestion des t\u00e2ches, trouver un consultant, devenir consultant. Bulletin de D\u00e9cembre 2020 : Cartes, contr\u00f4le d\u2019acc\u00e8s, comparer les versions pr\u00e9c\u00e9dentes. Bulletin de Novembre 2020 : Open Source, pi\u00e8ces jointes am\u00e9lior\u00e9es, comparer les versions. Bulletin d\u2019Octobre 2020 : Support d\u2019impression, \u00e9tiquettes de courrier, b\u00eata Open Source. Bulletin de Septembre 2020 : Acc\u00e8s public, suivi de la paie. Bulletin d\u2019Ao\u00fbt 2020 : Factures, vues personnalis\u00e9es, listes de documents. Bulletin de Juillet 2020 : Options de format de nombre, pr\u00e9parer des e-mails avec des formules. Bulletin de Juin 2020 : Travailler sur des changements complexes, sauvegardes automatiques. Bulletin de Mai 2020 : Copier comme mod\u00e8le, meilleures URL, NY Tech Meetup.","title":"Newsletters"},{"location":"newsletters/#grist-pour-le-moulin","text":"Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. L\u2019expression \u201cGrist pour le moulin\u201d signifie \u201cexp\u00e9rience, mat\u00e9riel ou connaissance utile\u201d, refl\u00e9tant parfaitement son objectif. Pour recevoir le bulletin, inscrivez-vous \u00e0 Grist . Bulletin de Juillet 2024 : Fonctions cumulatives, nouveaux types de cibles, synchronisation de variables am\u00e9lior\u00e9e et un nouveau webinaire pour les utilisateurs ! Bulletin de Juin 2024 : Mod\u00e8les de recherche, ex\u00e9cution sans privil\u00e8ges root, et contributions de la communaut\u00e9 ! Bulletin de Mai 2024 : Nouveau plan Grist Business, utilitaire de minuterie de formules, conditionnels d\u00e9pla\u00e7ables et am\u00e9liorations de la console d\u2019administration ! Bulletin d\u2019Avril 2024 : Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rences et de choix, une console d\u2019administration pour les auto-h\u00e9bergeurs. Bulletin de Mars 2024 : Am\u00e9liorations des formulaires, nouveaux formats de fichiers, et une page de d\u00e9marrage pour les auto-h\u00e9bergeurs. Bulletin de F\u00e9vrier 2024 : Projecteur sur la communaut\u00e9 : nouvelles vues, exp\u00e9riences amusantes et explorations approfondies. Bulletin de Janvier 2024 : Les formulaires Grist sont l\u00e0 ! L\u2019importation de donn\u00e9es dans Grist est devenue plus facile. Bulletin de D\u00e9cembre 2023 : Bilan de l\u2019ann\u00e9e 2023 de Grist, tests utilisateurs des formulaires et vitrine de la communaut\u00e9. Bulletin de Novembre 2023 : Ouvrir les enregistrements r\u00e9f\u00e9renc\u00e9s d\u2019un clic, discuter avec nous sur Discord, et ajouter des types de colonnes plus facilement. Bulletin d\u2019Octobre 2023 : Nouveaux raccourcis de formules, deux vues exp\u00e9rimentales, \u00e9v\u00e9nements de calendrier color\u00e9s et bien plus encore ! Bulletin de Septembre 2023 : Vue calendrier, deux nouveaux mod\u00e8les, et point de terminaison API pour effectuer des requ\u00eates SQL. Bulletin d\u2019Ao\u00fbt 2023 : Visionneuse CSV Grist ! Support de Llama AI ! Bulletin de Juillet 2023 : Assistant de formule AI lanc\u00e9 ! Bulletin de Juin 2023 : Mise en \u00e9vidence des lignes, nouveaux mod\u00e8les, et contributions de la communaut\u00e9. Bulletin de Mai 2023 : Description des colonnes et des vues, webhooks, et un vote pour les meilleures cartes m\u00e9moire. Bulletin d\u2019Avril 2023 : Concours de cartes m\u00e9moire, une fa\u00e7on de faire des blagues \u00e0 des amis avec Grist, et une nouvelle exp\u00e9rience de publication de donn\u00e9es de tableur. Bulletin de Mars 2023 : Minimisation des vues, tutoriels int\u00e9gr\u00e9s, et une vue personnalis\u00e9e pour les cartes m\u00e9moire ! Bulletin de F\u00e9vrier 2023 : Grist dans plus de langues, et un aper\u00e7u des projets passion des d\u00e9veloppeurs. Bulletin de Janvier 2023 : Grist en Fran\u00e7ais, Espa\u00f1ol, Portugu\u00eas, et Deutsch ! Plus des vues extensibles et des am\u00e9liorations des permissions avanc\u00e9es. Bulletin de D\u00e9cembre 2022 : Nouveau filtre de date avec calendrier, et instantan\u00e9s dans grist-core. Bulletin de Novembre 2022 : Exp\u00e9rience Grist avec l\u2019\u00e9criture de formules AI, et tri et filtrage am\u00e9lior\u00e9s. Bulletin d\u2019Octobre 2022 : Sommes rapides, duplication de tables, et nouvelles m\u00e9thodes API. Bulletin de Septembre 2022 : Mode sombre \ud83d\udd76 + gestion des utilisateurs am\u00e9lior\u00e9e. Bulletin d\u2019Ao\u00fbt 2022 : Espaces d\u2019\u00e9quipe gratuits, styles conditionnels des lignes, et meilleure aide pour les formules. Bulletin de Juillet 2022 : Aide-m\u00e9moire des formules et tableaux r\u00e9capitulatifs dans les donn\u00e9es sources. Bulletin de Juin 2022 : Filtrage par intervalle, et nouvelle fonction PEEK() . Bulletin de Mai 2022 : Donn\u00e9es sources, et nouveau lien de tableau r\u00e9capitulatif. Bulletin d\u2019Avril 2022 : \u00c9diteur de texte enrichi, et plus de styles de cellules. Bulletin de Mars 2022 : Mise en forme conditionnelle, nouvelle m\u00e9thode API, et le nouveau programme Sprouts. Bulletin de F\u00e9vrier 2022 : Menu des vues personnalis\u00e9es, 2FA, am\u00e9liorations des permissions avanc\u00e9es, et menu contextuel des cellules. Bulletin de Janvier 2022 : Gestion des visites de documents mod\u00e8les, et 4 nouveaux mod\u00e8les, y compris un gestionnaire d\u2019inventaire. Bulletin de D\u00e9cembre 2021 : D\u00e9clencheurs instantan\u00e9s Zapier, et quatre nouveaux mod\u00e8les. Bulletin de Novembre 2021 : Mappage des colonnes d\u2019importation, filtrage sur les colonnes masqu\u00e9es, et plus d\u2019options de tri. Bulletin d\u2019Octobre 2021 : \u00c9dition des choix, liens en ligne, et aper\u00e7us d\u2019importation am\u00e9lior\u00e9s. Bulletin de Septembre 2021 : Importations am\u00e9lior\u00e9es, devises globales, et plus de fa\u00e7ons d\u2019int\u00e9grer. Bulletin d\u2019Ao\u00fbt 2021 : Listes de r\u00e9f\u00e9rences, int\u00e9gration, mod\u00e8les, Pabbly, et plus encore. Bulletin de Juillet 2021 : Couleurs, tampons de temps et d\u2019auteur, et int\u00e9gration Google Sheets. Bulletin de Juin 2021 : Introduction des colonnes fig\u00e9es et d\u2019un mod\u00e8le de suivi des feuilles de temps. Bulletin de Mai 2021 : Listes de choix, tutoriel en 3 \u00e9tapes sur les colonnes de r\u00e9f\u00e9rence. Bulletin d\u2019Avril 2021 : Guide en 4 \u00e9tapes pour les cl\u00e9s de lien. Bulletin de Mars 2021 : Permissions avanc\u00e9es. Bulletin de F\u00e9vrier 2021 : Support mobile am\u00e9lior\u00e9, totaux. Bulletin de Janvier 2021 : Gestion des t\u00e2ches, trouver un consultant, devenir consultant. Bulletin de D\u00e9cembre 2020 : Cartes, contr\u00f4le d\u2019acc\u00e8s, comparer les versions pr\u00e9c\u00e9dentes. Bulletin de Novembre 2020 : Open Source, pi\u00e8ces jointes am\u00e9lior\u00e9es, comparer les versions. Bulletin d\u2019Octobre 2020 : Support d\u2019impression, \u00e9tiquettes de courrier, b\u00eata Open Source. Bulletin de Septembre 2020 : Acc\u00e8s public, suivi de la paie. Bulletin d\u2019Ao\u00fbt 2020 : Factures, vues personnalis\u00e9es, listes de documents. Bulletin de Juillet 2020 : Options de format de nombre, pr\u00e9parer des e-mails avec des formules. Bulletin de Juin 2020 : Travailler sur des changements complexes, sauvegardes automatiques. Bulletin de Mai 2020 : Copier comme mod\u00e8le, meilleures URL, NY Tech Meetup.","title":"Grist pour le Moulin"},{"location":"on-demand-tables/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Tables \u00e0 la Demande # Les tables \u00e0 la demande sont une fonctionnalit\u00e9 exp\u00e9rimentale La conception des tables \u00e0 la demande peut changer. Par exemple, des options de configuration peuvent \u00eatre ajout\u00e9es, ou certains aspects du comportement des tables \u00e0 la demande peuvent \u00eatre enti\u00e8rement modifi\u00e9s. Une caract\u00e9ristique d\u00e9terminante des tableurs est la capacit\u00e9 de mettre \u00e0 jour instantan\u00e9ment les cellules lorsque les donn\u00e9es dont elles d\u00e9pendent changent. Mais parfois, une table n\u2019est qu\u2019un stockage de donn\u00e9es, sans besoin de calculs sophistiqu\u00e9s. Dans ce cas, vous pouvez choisir de marquer la table comme \u201c\u00c0 la Demande\u201d dans Grist. Grist peut alors servir les donn\u00e9es de cette table plus rapidement et effectuer certaines optimisations qui peuvent \u00eatre utiles lorsque la table devient grande et que les tables r\u00e9guli\u00e8res deviennent lentes. Lorsqu\u2019une table est marqu\u00e9e \u201c\u00c0 la Demande\u201d : Les donn\u00e9es de la table ne seront g\u00e9n\u00e9ralement pas disponibles pour une utilisation dans les formules. La table reste disponible pour la visualisation et l\u2019\u00e9dition, mais avec des mises en garde. Voici ce que vous devez savoir sur la visualisation des donn\u00e9es : La visualisation est limit\u00e9e \u00e0 10000 lignes \u00e0 la fois. Des sous-ensembles des lignes de la table peuvent \u00eatre s\u00e9lectionn\u00e9s en liant des vues , comme pour les tables r\u00e9guli\u00e8res. Vous pouvez vous attendre \u00e0 de bonnes performances des vues li\u00e9es lorsque le sous-ensemble des lignes de la table est inf\u00e9rieur \u00e0 10000 lignes, m\u00eame si la table compl\u00e8te est beaucoup plus grande. Voici ce que vous devez savoir sur l\u2019\u00e9dition des donn\u00e9es : Vous pouvez \u00e9diter les donn\u00e9es normalement dans une table \u00c0 la Demande. Les mises \u00e0 jour automatiques de tout ce qui d\u00e9pend de ces donn\u00e9es ne se produiront tout simplement pas. Apr\u00e8s les modifications, vous devez recharger la page web pour voir tout mis \u00e0 jour. Voici quelques raisons pour lesquelles vous pourriez rendre une table \u00c0 la Demande : Vous souhaitez cr\u00e9er des r\u00e9sum\u00e9s et des graphiques de tranches d\u2019un grand ensemble de donn\u00e9es en utilisant des vues li\u00e9es . Vous stockez beaucoup de donn\u00e9es dans la table, et tout ce que vous avez besoin de faire avec est de lire des parties de celles-ci via l\u2019API. Cr\u00e9er une Table \u00e0 la Demande # Pour convertir une table en table \u201c\u00c0 la Demande\u201d, ouvrez le panneau de droite, choisissez le panneau \u201cTable\u201d et la section \u201cDonn\u00e9es\u201d. Cliquez sur \u201cParam\u00e8tres Avanc\u00e9s\u201d et vous devriez voir un bouton \u201cRendre \u00c0 la Demande\u201d. Si vous changez d\u2019avis et ne voulez plus que la table soit \u201c\u00c0 la Demande\u201d, vous pouvez trouver un bouton pour annuler ce param\u00e8tre au m\u00eame endroit : Changer une table pour devenir \u201c\u00c0 la Demande\u201d ou pour cesser d\u2019\u00eatre \u201c\u00c0 la Demande\u201d forcera le document \u00e0 se recharger pour tous les utilisateurs le visualisant \u00e0 ce moment-l\u00e0. Formules, R\u00e9f\u00e9rences et Tables \u00e0 la Demande # En g\u00e9n\u00e9ral, les formules et les tables \u00e0 la demande ne vont pas ensemble. Cela dit, si vous \u00eates prudent, vous pouvez utiliser les formules tr\u00e8s simples suivantes : $colonne - o\u00f9 la colonne mentionn\u00e9e n\u2019est pas elle-m\u00eame une formule. Cela copie les donn\u00e9es d\u2019une autre colonne textuellement. $r\u00e9f\u00e9rence.colonne - o\u00f9 r\u00e9f\u00e9rence est une colonne de r\u00e9f\u00e9rence , et colonne n\u2019est pas elle-m\u00eame une formule. Ce support de formule est suffisant pour d\u00e9bloquer la fonctionnalit\u00e9 de vues li\u00e9es de Grist, c\u2019est pourquoi elle est pr\u00e9sente. En g\u00e9n\u00e9ral, si vous essayez d\u2019utiliser des formules et des tables \u00c0 la Demande, vous vous pr\u00e9parez \u00e0 \u00eatre d\u00e9\u00e7u. Rappelez-vous, comme toute modification d\u2019une table \u00c0 la Demande, lorsque vous ajoutez ou modifiez une colonne de formule, vous devrez g\u00e9n\u00e9ralement recharger pour voir les valeurs des cellules mises \u00e0 jour. Certaines conversions de type, comme la conversion d\u2019une colonne en r\u00e9f\u00e9rence, ne sont pas efficaces pour les tables \u00c0 la Demande. Il est donc important d\u2019effectuer ces conversions avant de rendre une table \u00c0 la Demande. Depuis les formules dans les tables r\u00e9guli\u00e8res, vous ne pouvez pas acc\u00e9der au contenu des tables \u00e0 la demande.","title":"On-demand tables"},{"location":"on-demand-tables/#tables-a-la-demande","text":"Les tables \u00e0 la demande sont une fonctionnalit\u00e9 exp\u00e9rimentale La conception des tables \u00e0 la demande peut changer. Par exemple, des options de configuration peuvent \u00eatre ajout\u00e9es, ou certains aspects du comportement des tables \u00e0 la demande peuvent \u00eatre enti\u00e8rement modifi\u00e9s. Une caract\u00e9ristique d\u00e9terminante des tableurs est la capacit\u00e9 de mettre \u00e0 jour instantan\u00e9ment les cellules lorsque les donn\u00e9es dont elles d\u00e9pendent changent. Mais parfois, une table n\u2019est qu\u2019un stockage de donn\u00e9es, sans besoin de calculs sophistiqu\u00e9s. Dans ce cas, vous pouvez choisir de marquer la table comme \u201c\u00c0 la Demande\u201d dans Grist. Grist peut alors servir les donn\u00e9es de cette table plus rapidement et effectuer certaines optimisations qui peuvent \u00eatre utiles lorsque la table devient grande et que les tables r\u00e9guli\u00e8res deviennent lentes. Lorsqu\u2019une table est marqu\u00e9e \u201c\u00c0 la Demande\u201d : Les donn\u00e9es de la table ne seront g\u00e9n\u00e9ralement pas disponibles pour une utilisation dans les formules. La table reste disponible pour la visualisation et l\u2019\u00e9dition, mais avec des mises en garde. Voici ce que vous devez savoir sur la visualisation des donn\u00e9es : La visualisation est limit\u00e9e \u00e0 10000 lignes \u00e0 la fois. Des sous-ensembles des lignes de la table peuvent \u00eatre s\u00e9lectionn\u00e9s en liant des vues , comme pour les tables r\u00e9guli\u00e8res. Vous pouvez vous attendre \u00e0 de bonnes performances des vues li\u00e9es lorsque le sous-ensemble des lignes de la table est inf\u00e9rieur \u00e0 10000 lignes, m\u00eame si la table compl\u00e8te est beaucoup plus grande. Voici ce que vous devez savoir sur l\u2019\u00e9dition des donn\u00e9es : Vous pouvez \u00e9diter les donn\u00e9es normalement dans une table \u00c0 la Demande. Les mises \u00e0 jour automatiques de tout ce qui d\u00e9pend de ces donn\u00e9es ne se produiront tout simplement pas. Apr\u00e8s les modifications, vous devez recharger la page web pour voir tout mis \u00e0 jour. Voici quelques raisons pour lesquelles vous pourriez rendre une table \u00c0 la Demande : Vous souhaitez cr\u00e9er des r\u00e9sum\u00e9s et des graphiques de tranches d\u2019un grand ensemble de donn\u00e9es en utilisant des vues li\u00e9es . Vous stockez beaucoup de donn\u00e9es dans la table, et tout ce que vous avez besoin de faire avec est de lire des parties de celles-ci via l\u2019API.","title":"Tables \u00e0 la Demande"},{"location":"on-demand-tables/#creer-une-table-a-la-demande","text":"Pour convertir une table en table \u201c\u00c0 la Demande\u201d, ouvrez le panneau de droite, choisissez le panneau \u201cTable\u201d et la section \u201cDonn\u00e9es\u201d. Cliquez sur \u201cParam\u00e8tres Avanc\u00e9s\u201d et vous devriez voir un bouton \u201cRendre \u00c0 la Demande\u201d. Si vous changez d\u2019avis et ne voulez plus que la table soit \u201c\u00c0 la Demande\u201d, vous pouvez trouver un bouton pour annuler ce param\u00e8tre au m\u00eame endroit : Changer une table pour devenir \u201c\u00c0 la Demande\u201d ou pour cesser d\u2019\u00eatre \u201c\u00c0 la Demande\u201d forcera le document \u00e0 se recharger pour tous les utilisateurs le visualisant \u00e0 ce moment-l\u00e0.","title":"Cr\u00e9er une Table \u00e0 la Demande"},{"location":"on-demand-tables/#formules-references-et-tables-a-la-demande","text":"En g\u00e9n\u00e9ral, les formules et les tables \u00e0 la demande ne vont pas ensemble. Cela dit, si vous \u00eates prudent, vous pouvez utiliser les formules tr\u00e8s simples suivantes : $colonne - o\u00f9 la colonne mentionn\u00e9e n\u2019est pas elle-m\u00eame une formule. Cela copie les donn\u00e9es d\u2019une autre colonne textuellement. $r\u00e9f\u00e9rence.colonne - o\u00f9 r\u00e9f\u00e9rence est une colonne de r\u00e9f\u00e9rence , et colonne n\u2019est pas elle-m\u00eame une formule. Ce support de formule est suffisant pour d\u00e9bloquer la fonctionnalit\u00e9 de vues li\u00e9es de Grist, c\u2019est pourquoi elle est pr\u00e9sente. En g\u00e9n\u00e9ral, si vous essayez d\u2019utiliser des formules et des tables \u00c0 la Demande, vous vous pr\u00e9parez \u00e0 \u00eatre d\u00e9\u00e7u. Rappelez-vous, comme toute modification d\u2019une table \u00c0 la Demande, lorsque vous ajoutez ou modifiez une colonne de formule, vous devrez g\u00e9n\u00e9ralement recharger pour voir les valeurs des cellules mises \u00e0 jour. Certaines conversions de type, comme la conversion d\u2019une colonne en r\u00e9f\u00e9rence, ne sont pas efficaces pour les tables \u00c0 la Demande. Il est donc important d\u2019effectuer ces conversions avant de rendre une table \u00c0 la Demande. Depuis les formules dans les tables r\u00e9guli\u00e8res, vous ne pouvez pas acc\u00e9der au contenu des tables \u00e0 la demande.","title":"Formules, R\u00e9f\u00e9rences et Tables \u00e0 la Demande"},{"location":"page-widgets/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Pages & widgets # Contrairement aux tableurs traditionnels, dans Grist, vous pouvez cr\u00e9er plusieurs vues des m\u00eames donn\u00e9es et afficher plusieurs ensembles de donn\u00e9es sur une seule page. Cela vous permet de cr\u00e9er des tableaux de bord utiles et des applications personnalis\u00e9es adapt\u00e9es \u00e0 vos besoins. Pages # Dans Grist, vous organisez votre document en \u201cpages\u201d. Celles-ci sont list\u00e9es dans le panneau de gauche, avec des groupes repliables. Vous pouvez r\u00e9organiser et regrouper les pages dans le panneau de gauche en les faisant glisser pour les adapter \u00e0 vos besoins. Vous pouvez renommer, supprimer ou dupliquer des pages en utilisant le menu \u00e0 trois points \u00e0 c\u00f4t\u00e9 du nom de la page dans la liste. Renommer la page ne modifie pas les noms des tables de donn\u00e9es ou les titres des widgets. Voir changer le widget ci-dessous pour apprendre comment modifier les noms des tables et des widgets. Dupliquer une page duplique les vues des donn\u00e9es et ne duplique pas les donn\u00e9es elles-m\u00eames. Supprimer une page ne supprime pas les donn\u00e9es. Lors de la suppression de la derni\u00e8re vue des donn\u00e9es, il vous sera demand\u00e9 si vous souhaitez supprimer uniquement la vue, mais pas les donn\u00e9es elles-m\u00eames ; ou si vous souhaitez supprimer \u00e0 la fois la page et la ou les tables de donn\u00e9es sous-jacentes. En savoir plus sur les donn\u00e9es de votre document dans la page des donn\u00e9es sources . Notez que les pages peuvent \u00e9galement \u00eatre renomm\u00e9es en cliquant sur le nom de la page en haut de l\u2019\u00e9cran. En utilisant l\u2019ic\u00f4ne d\u2019ouverture ( ) pr\u00e8s du haut du panneau de gauche, vous pouvez r\u00e9duire le panneau pour n\u2019afficher que les initiales de chaque page, laissant plus d\u2019espace \u00e0 l\u2019\u00e9cran pour visualiser vos donn\u00e9es. Pour ajouter une nouvelle page, utilisez le bouton \u201cAjouter Nouveau\u201d et cliquez sur \u201cAjouter Page\u201d. \u00c0 ce moment-l\u00e0, vous pourrez choisir le widget de page \u00e0 inclure dans la nouvelle page. Utilisation des \u00e9mojis dans les noms de pages et de widgets Vous pouvez ajouter n\u2019importe quel \u00e9moji \u00e0 un nom de Page ou de Widget. Le raccourci clavier pour ouvrir le clavier des \u00e9mojis est Logo Windows + . (point) sur PC ou Commande + Contr\u00f4le + Espace sur Mac. Vous pouvez \u00e9galement copier/coller une source en ligne comme Emojipedia . Lorsqu\u2019un nom de Page commence par un \u00e9moji, il remplacera l\u2019ic\u00f4ne de la page. Widgets de page # Une page contient des sections, telles que des tableaux ou des graphiques, que nous appelons \u201cwidgets de page\u201d. Chaque widget de page affiche des donn\u00e9es provenant d\u2019une table. Une page peut contenir plus d\u2019un widget de page, et vous pouvez les organiser et les lier pour cr\u00e9er des mises en page utiles. Voici les types de widgets de page pris en charge. Les caract\u00e9ristiques saillantes de chacun sont d\u00e9crites sur des pages s\u00e9par\u00e9es. Tableau : similaire \u00e0 la grille de tableur et un bon moyen de voir de nombreux enregistrements \u00e0 la fois. Fiche : affiche un seul enregistrement dans une mise en page de type formulaire que vous pouvez personnaliser. Liste de fiches : utilise les m\u00eames options de mise en page qu\u2019une fiche, affiche une liste d\u00e9roulante d\u2019enregistrements. Graphique : trace des donn\u00e9es sur un graphique avec prise en charge de plusieurs types de graphiques diff\u00e9rents. Calendrier : affiche les donn\u00e9es d\u2019\u00e9v\u00e9nements dans une vue calendrier. Personnalis\u00e9 : ins\u00e8re une page web personnalis\u00e9e, lui accordant \u00e9ventuellement l\u2019acc\u00e8s aux donn\u00e9es du document. Il existe une page sp\u00e9ciale appel\u00e9e donn\u00e9es sources qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document et r\u00e9sume les statistiques d\u2019utilisation de votre document. Acc\u00e9dez \u00e0 la page des donn\u00e9es sources en cliquant sur le lien Donn\u00e9es Sources en bas \u00e0 gauche du menu des pages. S\u00e9lecteur de widgets # Le menu ouvert par le bouton \u201cAjouter Nouveau\u201d propose les options \u201cAjouter Page\u201d et \u201cAjouter Widget \u00e0 la Page\u201d. Dans les deux cas, vous verrez le \u201cs\u00e9lecteur de widget de page\u201d o\u00f9 vous pourrez choisir le widget souhait\u00e9 : Vous pouvez s\u00e9lectionner le type de widget et la table de donn\u00e9es \u00e0 afficher (ou \u201cNouvelle Table\u201d pour cr\u00e9er une nouvelle table). L\u2019ic\u00f4ne \u201cr\u00e9sum\u00e9\u201d ( ) vous permet de r\u00e9sumer les donn\u00e9es . Lors de l\u2019ajout d\u2019un widget \u00e0 une page existante , vous verrez \u00e9galement une option \u201cS\u00e9lectionner Par\u201d, qui permet de lier ce widget \u00e0 un autre d\u00e9j\u00e0 pr\u00e9sent sur la page. Ce processus est d\u00e9crit plus en d\u00e9tail dans Lier les widgets . Une fois que vous avez ajout\u00e9 des widgets, ils peuvent \u00eatre d\u00e9plac\u00e9s et redimensionn\u00e9s, comme d\u00e9crit dans Mises en page personnalis\u00e9es . Changer le widget ou ses donn\u00e9es # Si vous souhaitez changer un widget ou les donn\u00e9es qu\u2019il affiche apr\u00e8s son ajout, vous pouvez le faire. Cliquez sur le bouton \u00e0 trois points en haut \u00e0 droite de votre widget et s\u00e9lectionnez \u201cOptions du widget\u201d. Cela ouvre le panneau de droite. Cliquez sur \u201cChanger le widget\u201d. Vous pouvez ensuite utiliser le s\u00e9lecteur de widget pour changer le widget ou les donn\u00e9es qu\u2019il affiche. Vous pouvez \u00e9galement modifier le titre du widget ou ajouter une description. Renommer les widgets # Vous pouvez renommer les widgets de plusieurs fa\u00e7ons. Nous avons vu dans la section ci-dessus que vous pouvez modifier le titre d\u2019un widget ou ajouter une description \u00e0 partir de l\u2019onglet Widget du panneau Cr\u00e9ateur. Une autre fa\u00e7on est de cliquer sur le titre du widget au-dessus d\u2019un widget. \u00c0 partir de l\u00e0, vous pouvez modifier le titre du widget, le nom de la table de donn\u00e9es sous-jacente ou ajouter une description. Par d\u00e9faut, le titre du widget est le nom de la table de donn\u00e9es. Pour remplacer cela, entrez un nouveau titre sous \u2018Titre du widget\u2019. En savoir plus sur les tables de donn\u00e9es dans la page des donn\u00e9es sources . Configurer les listes de champs # Bien que diff\u00e9rents types de widgets de page aient des apparences tr\u00e8s diff\u00e9rentes, ils repr\u00e9sentent tous une liste d\u2019enregistrements. N\u2019importe lequel des types de widgets peut \u00eatre utilis\u00e9 pour afficher les m\u00eames donn\u00e9es sous-jacentes. Dans un Tableau , chaque enregistrement est repr\u00e9sent\u00e9 par une ligne, et les colonnes repr\u00e9sentent le m\u00eame type de valeur pour chaque enregistrement. Notez que la page des donn\u00e9es sources r\u00e9pertorie toutes les tables de donn\u00e9es. Dans une Liste de fiches , chaque ligne des donn\u00e9es sous-jacentes est affich\u00e9e comme une fiche. Chaque colonne des donn\u00e9es correspond \u00e0 un champ dans cette fiche. En parlant d\u2019un widget Fiche, nous utiliserons le terme \u201cchamp\u201d , qui est conceptuellement le m\u00eame qu\u2019une \u201ccolonne\u201d dans un widget Tableau. Une Fiche est comme une Liste de fiches, mais affiche une seule ligne de donn\u00e9es \u00e0 la fois. Dans un Graphique , chaque ligne de la table de donn\u00e9es sous-jacente devient un \u00e9l\u00e9ment graphique, tel qu\u2019un point sur un graphique en ligne, une barre dans un graphique \u00e0 barres ou une tranche d\u2019un graphique circulaire. Dans ce contexte, les colonnes de notre table de donn\u00e9es sont mieux connues sous le nom de \u201cs\u00e9ries\u201d de donn\u00e9es. Cliquez sur l\u2019ic\u00f4ne d\u2019ouverture ( ) pour ouvrir le panneau de droite. En fonction du widget actuellement s\u00e9lectionn\u00e9, vous pourriez voir un onglet pour configurer une Colonne, un Champ ou une S\u00e9rie. Ces termes ne sont pas diff\u00e9rents en substance, mais des termes diff\u00e9rents ont plus de sens pour diff\u00e9rents widgets. En cliquant sur l\u2019onglet widget (surlign\u00e9 en vert dans les images ci-dessus), vous verrez des sous-onglets pour \u201cWidget\u201d, \u201cTrier & Filtrer\u201d et \u201cDonn\u00e9es\u201d. Nous nous concentrerons sur le premier : \u201cWidget\u201d. Vous verrez des options sp\u00e9cifiques au type de widget s\u00e9lectionn\u00e9, et en dessous de cela deux listes : \u201cColonnes visibles\u201d et \u201cColonnes cach\u00e9es\u201d. Les \u201cColonnes cach\u00e9es\u201d sont les colonnes disponibles dans les donn\u00e9es, mais non affich\u00e9es dans ce widget. Dans une Fiche, ces listes appara\u00eetraient comme \u201cChamps visibles\u201d / \u201cChamps cach\u00e9s\u201d. Dans un graphique, elles apparaissent comme \u201cS\u00e9ries visibles\u201d / \u201cS\u00e9ries cach\u00e9es\u201d. Ces listes vous permettent d\u2019inclure, d\u2019exclure ou de r\u00e9organiser les champs dans un widget. Lorsque vous d\u00e9placez votre souris sur les \u00e9l\u00e9ments de la liste, utilisez les ic\u00f4nes \u201c\u0153il\u201d qui apparaissent pour les afficher ou les masquer. Alternativement, vous pouvez s\u00e9lectionner plusieurs \u00e9l\u00e9ments en utilisant les cases \u00e0 cocher et les masquer ou les afficher ensemble. Cette liste ordonn\u00e9e de champs peut \u00eatre utilis\u00e9e pour personnaliser n\u2019importe lequel des types de widgets de page. Elle a une importance particuli\u00e8re dans le widget Graphique , o\u00f9 diff\u00e9rents types de graphiques et options vous obligent \u00e0 placer les s\u00e9ries dans un certain ordre dans la liste \u201cS\u00e9ries visibles\u201d pour garantir que vos donn\u00e9es sont trac\u00e9es correctement.","title":"Pages & widgets"},{"location":"page-widgets/#pages-widgets","text":"Contrairement aux tableurs traditionnels, dans Grist, vous pouvez cr\u00e9er plusieurs vues des m\u00eames donn\u00e9es et afficher plusieurs ensembles de donn\u00e9es sur une seule page. Cela vous permet de cr\u00e9er des tableaux de bord utiles et des applications personnalis\u00e9es adapt\u00e9es \u00e0 vos besoins.","title":""},{"location":"page-widgets/#pages","text":"Dans Grist, vous organisez votre document en \u201cpages\u201d. Celles-ci sont list\u00e9es dans le panneau de gauche, avec des groupes repliables. Vous pouvez r\u00e9organiser et regrouper les pages dans le panneau de gauche en les faisant glisser pour les adapter \u00e0 vos besoins. Vous pouvez renommer, supprimer ou dupliquer des pages en utilisant le menu \u00e0 trois points \u00e0 c\u00f4t\u00e9 du nom de la page dans la liste. Renommer la page ne modifie pas les noms des tables de donn\u00e9es ou les titres des widgets. Voir changer le widget ci-dessous pour apprendre comment modifier les noms des tables et des widgets. Dupliquer une page duplique les vues des donn\u00e9es et ne duplique pas les donn\u00e9es elles-m\u00eames. Supprimer une page ne supprime pas les donn\u00e9es. Lors de la suppression de la derni\u00e8re vue des donn\u00e9es, il vous sera demand\u00e9 si vous souhaitez supprimer uniquement la vue, mais pas les donn\u00e9es elles-m\u00eames ; ou si vous souhaitez supprimer \u00e0 la fois la page et la ou les tables de donn\u00e9es sous-jacentes. En savoir plus sur les donn\u00e9es de votre document dans la page des donn\u00e9es sources . Notez que les pages peuvent \u00e9galement \u00eatre renomm\u00e9es en cliquant sur le nom de la page en haut de l\u2019\u00e9cran. En utilisant l\u2019ic\u00f4ne d\u2019ouverture ( ) pr\u00e8s du haut du panneau de gauche, vous pouvez r\u00e9duire le panneau pour n\u2019afficher que les initiales de chaque page, laissant plus d\u2019espace \u00e0 l\u2019\u00e9cran pour visualiser vos donn\u00e9es. Pour ajouter une nouvelle page, utilisez le bouton \u201cAjouter Nouveau\u201d et cliquez sur \u201cAjouter Page\u201d. \u00c0 ce moment-l\u00e0, vous pourrez choisir le widget de page \u00e0 inclure dans la nouvelle page. Utilisation des \u00e9mojis dans les noms de pages et de widgets Vous pouvez ajouter n\u2019importe quel \u00e9moji \u00e0 un nom de Page ou de Widget. Le raccourci clavier pour ouvrir le clavier des \u00e9mojis est Logo Windows + . (point) sur PC ou Commande + Contr\u00f4le + Espace sur Mac. Vous pouvez \u00e9galement copier/coller une source en ligne comme Emojipedia . Lorsqu\u2019un nom de Page commence par un \u00e9moji, il remplacera l\u2019ic\u00f4ne de la page.","title":"Pages"},{"location":"page-widgets/#widgets-de-page","text":"Une page contient des sections, telles que des tableaux ou des graphiques, que nous appelons \u201cwidgets de page\u201d. Chaque widget de page affiche des donn\u00e9es provenant d\u2019une table. Une page peut contenir plus d\u2019un widget de page, et vous pouvez les organiser et les lier pour cr\u00e9er des mises en page utiles. Voici les types de widgets de page pris en charge. Les caract\u00e9ristiques saillantes de chacun sont d\u00e9crites sur des pages s\u00e9par\u00e9es. Tableau : similaire \u00e0 la grille de tableur et un bon moyen de voir de nombreux enregistrements \u00e0 la fois. Fiche : affiche un seul enregistrement dans une mise en page de type formulaire que vous pouvez personnaliser. Liste de fiches : utilise les m\u00eames options de mise en page qu\u2019une fiche, affiche une liste d\u00e9roulante d\u2019enregistrements. Graphique : trace des donn\u00e9es sur un graphique avec prise en charge de plusieurs types de graphiques diff\u00e9rents. Calendrier : affiche les donn\u00e9es d\u2019\u00e9v\u00e9nements dans une vue calendrier. Personnalis\u00e9 : ins\u00e8re une page web personnalis\u00e9e, lui accordant \u00e9ventuellement l\u2019acc\u00e8s aux donn\u00e9es du document. Il existe une page sp\u00e9ciale appel\u00e9e donn\u00e9es sources qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document et r\u00e9sume les statistiques d\u2019utilisation de votre document. Acc\u00e9dez \u00e0 la page des donn\u00e9es sources en cliquant sur le lien Donn\u00e9es Sources en bas \u00e0 gauche du menu des pages.","title":"Widgets de page"},{"location":"page-widgets/#selecteur-de-widgets","text":"Le menu ouvert par le bouton \u201cAjouter Nouveau\u201d propose les options \u201cAjouter Page\u201d et \u201cAjouter Widget \u00e0 la Page\u201d. Dans les deux cas, vous verrez le \u201cs\u00e9lecteur de widget de page\u201d o\u00f9 vous pourrez choisir le widget souhait\u00e9 : Vous pouvez s\u00e9lectionner le type de widget et la table de donn\u00e9es \u00e0 afficher (ou \u201cNouvelle Table\u201d pour cr\u00e9er une nouvelle table). L\u2019ic\u00f4ne \u201cr\u00e9sum\u00e9\u201d ( ) vous permet de r\u00e9sumer les donn\u00e9es . Lors de l\u2019ajout d\u2019un widget \u00e0 une page existante , vous verrez \u00e9galement une option \u201cS\u00e9lectionner Par\u201d, qui permet de lier ce widget \u00e0 un autre d\u00e9j\u00e0 pr\u00e9sent sur la page. Ce processus est d\u00e9crit plus en d\u00e9tail dans Lier les widgets . Une fois que vous avez ajout\u00e9 des widgets, ils peuvent \u00eatre d\u00e9plac\u00e9s et redimensionn\u00e9s, comme d\u00e9crit dans Mises en page personnalis\u00e9es .","title":"S\u00e9lecteur de widgets"},{"location":"page-widgets/#changer-le-widget-ou-ses-donnees","text":"Si vous souhaitez changer un widget ou les donn\u00e9es qu\u2019il affiche apr\u00e8s son ajout, vous pouvez le faire. Cliquez sur le bouton \u00e0 trois points en haut \u00e0 droite de votre widget et s\u00e9lectionnez \u201cOptions du widget\u201d. Cela ouvre le panneau de droite. Cliquez sur \u201cChanger le widget\u201d. Vous pouvez ensuite utiliser le s\u00e9lecteur de widget pour changer le widget ou les donn\u00e9es qu\u2019il affiche. Vous pouvez \u00e9galement modifier le titre du widget ou ajouter une description.","title":"Changer le widget ou ses donn\u00e9es"},{"location":"page-widgets/#renommer-les-widgets","text":"Vous pouvez renommer les widgets de plusieurs fa\u00e7ons. Nous avons vu dans la section ci-dessus que vous pouvez modifier le titre d\u2019un widget ou ajouter une description \u00e0 partir de l\u2019onglet Widget du panneau Cr\u00e9ateur. Une autre fa\u00e7on est de cliquer sur le titre du widget au-dessus d\u2019un widget. \u00c0 partir de l\u00e0, vous pouvez modifier le titre du widget, le nom de la table de donn\u00e9es sous-jacente ou ajouter une description. Par d\u00e9faut, le titre du widget est le nom de la table de donn\u00e9es. Pour remplacer cela, entrez un nouveau titre sous \u2018Titre du widget\u2019. En savoir plus sur les tables de donn\u00e9es dans la page des donn\u00e9es sources .","title":"Renommer les widgets"},{"location":"page-widgets/#configurer-les-listes-de-champs","text":"Bien que diff\u00e9rents types de widgets de page aient des apparences tr\u00e8s diff\u00e9rentes, ils repr\u00e9sentent tous une liste d\u2019enregistrements. N\u2019importe lequel des types de widgets peut \u00eatre utilis\u00e9 pour afficher les m\u00eames donn\u00e9es sous-jacentes. Dans un Tableau , chaque enregistrement est repr\u00e9sent\u00e9 par une ligne, et les colonnes repr\u00e9sentent le m\u00eame type de valeur pour chaque enregistrement. Notez que la page des donn\u00e9es sources r\u00e9pertorie toutes les tables de donn\u00e9es. Dans une Liste de fiches , chaque ligne des donn\u00e9es sous-jacentes est affich\u00e9e comme une fiche. Chaque colonne des donn\u00e9es correspond \u00e0 un champ dans cette fiche. En parlant d\u2019un widget Fiche, nous utiliserons le terme \u201cchamp\u201d , qui est conceptuellement le m\u00eame qu\u2019une \u201ccolonne\u201d dans un widget Tableau. Une Fiche est comme une Liste de fiches, mais affiche une seule ligne de donn\u00e9es \u00e0 la fois. Dans un Graphique , chaque ligne de la table de donn\u00e9es sous-jacente devient un \u00e9l\u00e9ment graphique, tel qu\u2019un point sur un graphique en ligne, une barre dans un graphique \u00e0 barres ou une tranche d\u2019un graphique circulaire. Dans ce contexte, les colonnes de notre table de donn\u00e9es sont mieux connues sous le nom de \u201cs\u00e9ries\u201d de donn\u00e9es. Cliquez sur l\u2019ic\u00f4ne d\u2019ouverture ( ) pour ouvrir le panneau de droite. En fonction du widget actuellement s\u00e9lectionn\u00e9, vous pourriez voir un onglet pour configurer une Colonne, un Champ ou une S\u00e9rie. Ces termes ne sont pas diff\u00e9rents en substance, mais des termes diff\u00e9rents ont plus de sens pour diff\u00e9rents widgets. En cliquant sur l\u2019onglet widget (surlign\u00e9 en vert dans les images ci-dessus), vous verrez des sous-onglets pour \u201cWidget\u201d, \u201cTrier & Filtrer\u201d et \u201cDonn\u00e9es\u201d. Nous nous concentrerons sur le premier : \u201cWidget\u201d. Vous verrez des options sp\u00e9cifiques au type de widget s\u00e9lectionn\u00e9, et en dessous de cela deux listes : \u201cColonnes visibles\u201d et \u201cColonnes cach\u00e9es\u201d. Les \u201cColonnes cach\u00e9es\u201d sont les colonnes disponibles dans les donn\u00e9es, mais non affich\u00e9es dans ce widget. Dans une Fiche, ces listes appara\u00eetraient comme \u201cChamps visibles\u201d / \u201cChamps cach\u00e9s\u201d. Dans un graphique, elles apparaissent comme \u201cS\u00e9ries visibles\u201d / \u201cS\u00e9ries cach\u00e9es\u201d. Ces listes vous permettent d\u2019inclure, d\u2019exclure ou de r\u00e9organiser les champs dans un widget. Lorsque vous d\u00e9placez votre souris sur les \u00e9l\u00e9ments de la liste, utilisez les ic\u00f4nes \u201c\u0153il\u201d qui apparaissent pour les afficher ou les masquer. Alternativement, vous pouvez s\u00e9lectionner plusieurs \u00e9l\u00e9ments en utilisant les cases \u00e0 cocher et les masquer ou les afficher ensemble. Cette liste ordonn\u00e9e de champs peut \u00eatre utilis\u00e9e pour personnaliser n\u2019importe lequel des types de widgets de page. Elle a une importance particuli\u00e8re dans le widget Graphique , o\u00f9 diff\u00e9rents types de graphiques et options vous obligent \u00e0 placer les s\u00e9ries dans un certain ordre dans la liste \u201cS\u00e9ries visibles\u201d pour garantir que vos donn\u00e9es sont trac\u00e9es correctement.","title":"Configurer les listes de champs"},{"location":"python/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Python # Les formules Grist sont \u00e9crites en Python, le langage le plus populaire pour la science des donn\u00e9es. L\u2019int\u00e9gralit\u00e9 de la biblioth\u00e8que standard de Python est disponible pour vous. Pour ceux ayant une exp\u00e9rience avec les tableurs, nous avons \u00e9galement ajout\u00e9 une suite de fonctions similaires \u00e0 Excel, avec des noms en majuscules. Voici la liste compl\u00e8te des fonctions . Les formules Python sont \u00e9valu\u00e9es dans un sandbox, sans acc\u00e8s \u00e0 Internet, et sans syst\u00e8me de fichiers persistant. Versions de Python support\u00e9es # Nous supportons actuellement deux versions de Python : Python 3 (sp\u00e9cifiquement 3.11 au moment de l\u2019\u00e9criture) Python 2 (sp\u00e9cifiquement 2.7) Les documents nouvellement cr\u00e9\u00e9s sur notre service h\u00e9berg\u00e9 utilisent Python 3 par d\u00e9faut, tandis que les documents plus anciens (cr\u00e9\u00e9s avant environ novembre 2021) utilisent Python 2 par d\u00e9faut. Pour savoir quelle version de Python un document sp\u00e9cifique utilise, regardez ses Param\u00e8tres du document . Le param\u00e8tre Engine peut \u00eatre python2 , python3 , ou vide. Un param\u00e8tre vide implique python2 . Si vous avez des droits d\u2019\u00e9dition sur un document, vous pouvez changer le param\u00e8tre Engine , et le document se rechargera alors avec toutes les formules maintenant interpr\u00e9t\u00e9es en utilisant la version de Python que vous avez sp\u00e9cifi\u00e9e. Nous recommandons la prudence en le faisant. Une formule qui fonctionne comme pr\u00e9vu dans une version de Python peut donner des erreurs dans une autre, ou (pire) donner de mauvais r\u00e9sultats. Avertissement Certaines formules peuvent \u00e9chouer ou donner de mauvais r\u00e9sultats si elles sont utilis\u00e9es avec une version de Python diff\u00e9rente de celle pour laquelle elles ont \u00e9t\u00e9 \u00e9crites. Python 2 a atteint sa fin de vie en janvier 2020, donc si vous cherchez de l\u2019aide en ligne pour Python, les r\u00e9ponses que vous trouvez sont de plus en plus susceptibles d\u2019\u00eatre pour Python 3. Si vous avez un document qui utilise Python 2, et que vous souhaitez le passer \u00e0 Python 3, nous vous recommandons de lire Tester l\u2019effet du changement de versions de Python et Diff\u00e9rences entre les versions de Python . Assurez-vous de v\u00e9rifier toutes les tables et colonnes, ainsi que les formules r\u00e9guli\u00e8res et les formules de d\u00e9clenchement. Nous serions int\u00e9ress\u00e9s d\u2019entendre votre exp\u00e9rience, et de vous aider avec tout probl\u00e8me, sur le forum communautaire . Grist auto-h\u00e9berg\u00e9 peut utiliser n\u2019importe quelle version de Python avec laquelle vous le configurez, mais gardez \u00e0 l\u2019esprit que nous testons activement uniquement les versions support\u00e9es. Tester l\u2019effet du changement de versions de Python # Grist dispose de certaines fonctionnalit\u00e9s qui peuvent vous aider \u00e0 \u00e9valuer les cons\u00e9quences du changement de la version de Python utilis\u00e9e par un document. La fonctionnalit\u00e9 Travailler sur une copie est utile pour exp\u00e9rimenter le changement de version de Python sans affecter votre document jusqu\u2019\u00e0 ce que vous soyez pr\u00eat. Il y a une option \u201cComparer avec l\u2019original\u201d qui vous permettra de visualiser quelles cellules ont chang\u00e9, le cas \u00e9ch\u00e9ant. Assurez-vous de v\u00e9rifier toutes les tables et colonnes. L\u2019 onglet Activit\u00e9 de l\u2019Historique du document (avec \u201cToutes les tables\u201d s\u00e9lectionn\u00e9) vous permet de revoir plus en d\u00e9tail ce qui a chang\u00e9. Soyez prudent pour tester toutes les formules de d\u00e9clenchement que vous pourriez avoir, car le code Python qu\u2019elles contiennent ne sera pas ex\u00e9cut\u00e9 tant que vous ne d\u00e9clencherez pas sp\u00e9cifiquement ces formules. Vous pouvez utiliser le visualiseur de code pour vous rappeler rapidement de toutes les formules dans un document, afin de pouvoir les v\u00e9rifier syst\u00e9matiquement. Diff\u00e9rences entre les versions de Python # Il existe des diff\u00e9rences importantes entre Python 2 et 3. Les formules peuvent n\u00e9cessiter d\u2019\u00eatre modifi\u00e9es pour donner les m\u00eames r\u00e9sultats lors du passage entre les versions de Python. Il existe de nombreuses ressources en ligne telles que cette feuille de triche de compatibilit\u00e9 qui peuvent aider \u00e0 comprendre quel est le probl\u00e8me lorsque vous rencontrez une diff\u00e9rence, et donner des id\u00e9es sur la fa\u00e7on de le r\u00e9soudre. Ici, nous listons des cas courants que nous avons vus dans les formules Grist. Division des nombres entiers # En Python 2, diviser des nombres entiers donne un nombre entier, donc 9 / 2 est 4 . En Python 3, c\u2019est 4.5 . Pour un tableur, c\u2019est une r\u00e9ponse beaucoup plus sens\u00e9e, mais si vous comptez sur le comportement de Python 2, nous vous sugg\u00e9rons de passer \u00e0 l\u2019op\u00e9rateur // qui est coh\u00e9rent entre les versions ( 9 // 2 est 4 pour les deux). Par exemple, le mod\u00e8le Grand Livre avait une formule Python 2 pour calculer le trimestre \u00e0 partir d\u2019une date (donc une Date de 2021-08-15 donnait un Trimestre de 2021 T3 ) comme suit : \"%s T%s\" % ($Date.year, CEILING($Date.month, 3) / 3) lors du passage \u00e0 Python 3, cela devait \u00eatre corrig\u00e9 en : \"%s T%s\" % ($Date.year, CEILING($Date.month, 3) // 3) Sinon, les trimestres devenaient fractionnels ! Certains imports sont r\u00e9organis\u00e9s # Python a une biblioth\u00e8que standard utile, mais certaines parties ont \u00e9t\u00e9 d\u00e9plac\u00e9es entre Python 2 et 3. Par exemple, plusieurs de nos mod\u00e8les ont des formules pour construire des URL, pour ouvrir des recherches personnalis\u00e9es par exemple, ou pour ouvrir un email pr\u00e9-rempli avec des valeurs calcul\u00e9es pour To , CC , et Subject . Python a des assistants pratiques pour construire des URL, mais ils ont \u00e9t\u00e9 d\u00e9plac\u00e9s un peu entre les versions de Python. Notre exemple CRM l\u00e9ger avait une formule Python 2 comme celle-ci pour lancer une recherche d\u2019emails dans Gmail : from urllib import quote_plus \"Gmail search https://mail.google.com/mail/u/0/#search/%s\" % quote_plus($Email) En Python 3, la ligne d\u2019importation devait \u00eatre chang\u00e9e en : from urllib.parse import quote_plus Changement subtil dans l\u2019arrondi # Python 3 change la fonction int\u00e9gr\u00e9e round() de l\u2019arrondi tel que beaucoup de gens l\u2019ont appris \u00e0 l\u2019\u00e9cole (o\u00f9 lors de l\u2019arrondi de .5 , vous arrondissez toujours vers le haut) \u00e0 ce qui est appel\u00e9 \u201cl\u2019arrondi bancaire\u201d (o\u00f9 vous arrondissez de .5 au nombre pair le plus proche). Cela est g\u00e9n\u00e9ralement accept\u00e9 comme une am\u00e9lioration, att\u00e9nuant un biais vers des nombres plus grands qui peut devenir significatif \u00e0 grande \u00e9chelle. Mais cela pourrait \u00eatre une surprise de voir les nombres changer ainsi dans un document \u00e9tabli. Si vous avez vraiment besoin de l\u2019arrondi de Python 2, remplacez tous les appels \u00e0 la fonction round de Python par la fonction compatible Excel ROUND . Par exemple : round($val, 2) serait remplac\u00e9 par : ROUND($val, 2) Gestion du texte Unicode # Python 2 n\u2019excelle pas dans la gestion du texte international et des emojis. Nous avons att\u00e9nu\u00e9 de nombreux probl\u00e8mes en d\u00e9finissant l\u2019encodage par d\u00e9faut \u00e0 utf8 pour tous les documents. N\u00e9anmoins, lors du passage de Python 2 \u00e0 Python 3, vous pouvez voir des changements de type ou des erreurs. Consid\u00e9rez cette formule Python 2 pour g\u00e9n\u00e9rer un hachage \u00e0 sens unique d\u2019une adresse email : import hashlib hashlib.sha256($Email).hexdigest() En Python 3, cela \u00e9choue avec TypeError: Unicode-objects must be encoded before hashing , ce qui peut \u00eatre r\u00e9solu en rempla\u00e7ant $Email par $Email.encode() : import hashlib hashlib.sha256($Email.encode()).hexdigest()","title":"Python versions"},{"location":"python/#python","text":"Les formules Grist sont \u00e9crites en Python, le langage le plus populaire pour la science des donn\u00e9es. L\u2019int\u00e9gralit\u00e9 de la biblioth\u00e8que standard de Python est disponible pour vous. Pour ceux ayant une exp\u00e9rience avec les tableurs, nous avons \u00e9galement ajout\u00e9 une suite de fonctions similaires \u00e0 Excel, avec des noms en majuscules. Voici la liste compl\u00e8te des fonctions . Les formules Python sont \u00e9valu\u00e9es dans un sandbox, sans acc\u00e8s \u00e0 Internet, et sans syst\u00e8me de fichiers persistant.","title":"Python"},{"location":"python/#versions-de-python-supportees","text":"Nous supportons actuellement deux versions de Python : Python 3 (sp\u00e9cifiquement 3.11 au moment de l\u2019\u00e9criture) Python 2 (sp\u00e9cifiquement 2.7) Les documents nouvellement cr\u00e9\u00e9s sur notre service h\u00e9berg\u00e9 utilisent Python 3 par d\u00e9faut, tandis que les documents plus anciens (cr\u00e9\u00e9s avant environ novembre 2021) utilisent Python 2 par d\u00e9faut. Pour savoir quelle version de Python un document sp\u00e9cifique utilise, regardez ses Param\u00e8tres du document . Le param\u00e8tre Engine peut \u00eatre python2 , python3 , ou vide. Un param\u00e8tre vide implique python2 . Si vous avez des droits d\u2019\u00e9dition sur un document, vous pouvez changer le param\u00e8tre Engine , et le document se rechargera alors avec toutes les formules maintenant interpr\u00e9t\u00e9es en utilisant la version de Python que vous avez sp\u00e9cifi\u00e9e. Nous recommandons la prudence en le faisant. Une formule qui fonctionne comme pr\u00e9vu dans une version de Python peut donner des erreurs dans une autre, ou (pire) donner de mauvais r\u00e9sultats. Avertissement Certaines formules peuvent \u00e9chouer ou donner de mauvais r\u00e9sultats si elles sont utilis\u00e9es avec une version de Python diff\u00e9rente de celle pour laquelle elles ont \u00e9t\u00e9 \u00e9crites. Python 2 a atteint sa fin de vie en janvier 2020, donc si vous cherchez de l\u2019aide en ligne pour Python, les r\u00e9ponses que vous trouvez sont de plus en plus susceptibles d\u2019\u00eatre pour Python 3. Si vous avez un document qui utilise Python 2, et que vous souhaitez le passer \u00e0 Python 3, nous vous recommandons de lire Tester l\u2019effet du changement de versions de Python et Diff\u00e9rences entre les versions de Python . Assurez-vous de v\u00e9rifier toutes les tables et colonnes, ainsi que les formules r\u00e9guli\u00e8res et les formules de d\u00e9clenchement. Nous serions int\u00e9ress\u00e9s d\u2019entendre votre exp\u00e9rience, et de vous aider avec tout probl\u00e8me, sur le forum communautaire . Grist auto-h\u00e9berg\u00e9 peut utiliser n\u2019importe quelle version de Python avec laquelle vous le configurez, mais gardez \u00e0 l\u2019esprit que nous testons activement uniquement les versions support\u00e9es.","title":"Versions de Python support\u00e9es"},{"location":"python/#tester-leffet-du-changement-de-versions-de-python","text":"Grist dispose de certaines fonctionnalit\u00e9s qui peuvent vous aider \u00e0 \u00e9valuer les cons\u00e9quences du changement de la version de Python utilis\u00e9e par un document. La fonctionnalit\u00e9 Travailler sur une copie est utile pour exp\u00e9rimenter le changement de version de Python sans affecter votre document jusqu\u2019\u00e0 ce que vous soyez pr\u00eat. Il y a une option \u201cComparer avec l\u2019original\u201d qui vous permettra de visualiser quelles cellules ont chang\u00e9, le cas \u00e9ch\u00e9ant. Assurez-vous de v\u00e9rifier toutes les tables et colonnes. L\u2019 onglet Activit\u00e9 de l\u2019Historique du document (avec \u201cToutes les tables\u201d s\u00e9lectionn\u00e9) vous permet de revoir plus en d\u00e9tail ce qui a chang\u00e9. Soyez prudent pour tester toutes les formules de d\u00e9clenchement que vous pourriez avoir, car le code Python qu\u2019elles contiennent ne sera pas ex\u00e9cut\u00e9 tant que vous ne d\u00e9clencherez pas sp\u00e9cifiquement ces formules. Vous pouvez utiliser le visualiseur de code pour vous rappeler rapidement de toutes les formules dans un document, afin de pouvoir les v\u00e9rifier syst\u00e9matiquement.","title":"Tester l’effet du changement de versions de Python"},{"location":"python/#differences-entre-les-versions-de-python","text":"Il existe des diff\u00e9rences importantes entre Python 2 et 3. Les formules peuvent n\u00e9cessiter d\u2019\u00eatre modifi\u00e9es pour donner les m\u00eames r\u00e9sultats lors du passage entre les versions de Python. Il existe de nombreuses ressources en ligne telles que cette feuille de triche de compatibilit\u00e9 qui peuvent aider \u00e0 comprendre quel est le probl\u00e8me lorsque vous rencontrez une diff\u00e9rence, et donner des id\u00e9es sur la fa\u00e7on de le r\u00e9soudre. Ici, nous listons des cas courants que nous avons vus dans les formules Grist.","title":"Diff\u00e9rences entre les versions de Python"},{"location":"python/#division-des-nombres-entiers","text":"En Python 2, diviser des nombres entiers donne un nombre entier, donc 9 / 2 est 4 . En Python 3, c\u2019est 4.5 . Pour un tableur, c\u2019est une r\u00e9ponse beaucoup plus sens\u00e9e, mais si vous comptez sur le comportement de Python 2, nous vous sugg\u00e9rons de passer \u00e0 l\u2019op\u00e9rateur // qui est coh\u00e9rent entre les versions ( 9 // 2 est 4 pour les deux). Par exemple, le mod\u00e8le Grand Livre avait une formule Python 2 pour calculer le trimestre \u00e0 partir d\u2019une date (donc une Date de 2021-08-15 donnait un Trimestre de 2021 T3 ) comme suit : \"%s T%s\" % ($Date.year, CEILING($Date.month, 3) / 3) lors du passage \u00e0 Python 3, cela devait \u00eatre corrig\u00e9 en : \"%s T%s\" % ($Date.year, CEILING($Date.month, 3) // 3) Sinon, les trimestres devenaient fractionnels !","title":"Division des nombres entiers"},{"location":"python/#certains-imports-sont-reorganises","text":"Python a une biblioth\u00e8que standard utile, mais certaines parties ont \u00e9t\u00e9 d\u00e9plac\u00e9es entre Python 2 et 3. Par exemple, plusieurs de nos mod\u00e8les ont des formules pour construire des URL, pour ouvrir des recherches personnalis\u00e9es par exemple, ou pour ouvrir un email pr\u00e9-rempli avec des valeurs calcul\u00e9es pour To , CC , et Subject . Python a des assistants pratiques pour construire des URL, mais ils ont \u00e9t\u00e9 d\u00e9plac\u00e9s un peu entre les versions de Python. Notre exemple CRM l\u00e9ger avait une formule Python 2 comme celle-ci pour lancer une recherche d\u2019emails dans Gmail : from urllib import quote_plus \"Gmail search https://mail.google.com/mail/u/0/#search/%s\" % quote_plus($Email) En Python 3, la ligne d\u2019importation devait \u00eatre chang\u00e9e en : from urllib.parse import quote_plus","title":"Certains imports sont r\u00e9organis\u00e9s"},{"location":"python/#changement-subtil-dans-larrondi","text":"Python 3 change la fonction int\u00e9gr\u00e9e round() de l\u2019arrondi tel que beaucoup de gens l\u2019ont appris \u00e0 l\u2019\u00e9cole (o\u00f9 lors de l\u2019arrondi de .5 , vous arrondissez toujours vers le haut) \u00e0 ce qui est appel\u00e9 \u201cl\u2019arrondi bancaire\u201d (o\u00f9 vous arrondissez de .5 au nombre pair le plus proche). Cela est g\u00e9n\u00e9ralement accept\u00e9 comme une am\u00e9lioration, att\u00e9nuant un biais vers des nombres plus grands qui peut devenir significatif \u00e0 grande \u00e9chelle. Mais cela pourrait \u00eatre une surprise de voir les nombres changer ainsi dans un document \u00e9tabli. Si vous avez vraiment besoin de l\u2019arrondi de Python 2, remplacez tous les appels \u00e0 la fonction round de Python par la fonction compatible Excel ROUND . Par exemple : round($val, 2) serait remplac\u00e9 par : ROUND($val, 2)","title":"Changement subtil dans l’arrondi"},{"location":"python/#gestion-du-texte-unicode","text":"Python 2 n\u2019excelle pas dans la gestion du texte international et des emojis. Nous avons att\u00e9nu\u00e9 de nombreux probl\u00e8mes en d\u00e9finissant l\u2019encodage par d\u00e9faut \u00e0 utf8 pour tous les documents. N\u00e9anmoins, lors du passage de Python 2 \u00e0 Python 3, vous pouvez voir des changements de type ou des erreurs. Consid\u00e9rez cette formule Python 2 pour g\u00e9n\u00e9rer un hachage \u00e0 sens unique d\u2019une adresse email : import hashlib hashlib.sha256($Email).hexdigest() En Python 3, cela \u00e9choue avec TypeError: Unicode-objects must be encoded before hashing , ce qui peut \u00eatre r\u00e9solu en rempla\u00e7ant $Email par $Email.encode() : import hashlib hashlib.sha256($Email.encode()).hexdigest()","title":"Gestion du texte Unicode"},{"location":"raw-data/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Donn\u00e9es sources # La page des donn\u00e9es sources est une page sp\u00e9ciale qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document et r\u00e9sume les statistiques d\u2019utilisation de votre document. Depuis votre document, acc\u00e9dez \u00e0 la page des donn\u00e9es sources en cliquant sur le lien \u2018Donn\u00e9es Sources\u2019 en bas \u00e0 gauche du menu des pages. Contrairement aux autres pages , la mise en page de la page des donn\u00e9es sources ne peut pas \u00eatre personnalis\u00e9e. \u00c0 partir de la liste des tables de donn\u00e9es, vous pouvez trouver le nom et l\u2019identifiant de la table de donn\u00e9es, et supprimer des donn\u00e9es. Notez que supprimer une table de donn\u00e9es depuis cette page supprimera les donn\u00e9es et les retirera de toutes les pages. Cela diff\u00e8re des autres pages o\u00f9 il est possible de supprimer une vue des donn\u00e9es sans supprimer les donn\u00e9es elles-m\u00eames. Cliquez sur une table de donn\u00e9es pour l\u2019ouvrir. Notez que dans le panneau de cr\u00e9ation, le type de vue ne peut pas \u00eatre modifi\u00e9. Renommer la vue renomme \u00e9galement la table de donn\u00e9es. \u00c9tant donn\u00e9 que les donn\u00e9es sources sont destin\u00e9es \u00e0 montrer toutes les donn\u00e9es, les colonnes ne peuvent pas \u00eatre masqu\u00e9es non plus. Cependant, les colonnes peuvent \u00eatre r\u00e9organis\u00e9es, supprim\u00e9es, cr\u00e9\u00e9es et modifi\u00e9es. Pour les cr\u00e9ateurs, cette vue peut faciliter la modification de la structure des donn\u00e9es, l\u2019ajout de formules , de mise en forme conditionnelle , etc. Dupliquer des Donn\u00e9es # Les tables peuvent \u00eatre dupliqu\u00e9es depuis la page \u2018Donn\u00e9es Sources\u2019. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite de la table que vous souhaitez dupliquer, puis s\u00e9lectionnez \u2018Dupliquer la Table\u2019 dans le menu. Par d\u00e9faut, une table dupliqu\u00e9e ne contiendra que la structure de la table, pas les donn\u00e9es. Si vous souhaitez copier toutes les donn\u00e9es en plus de la structure de la table, assurez-vous de cocher la case avant de cliquer sur \u2018Enregistrer\u2019. Si la table d\u2019origine a des permissions avanc\u00e9es, ces r\u00e8gles ne seront pas dupliqu\u00e9es. Seules les r\u00e8gles par d\u00e9faut du document s\u2019appliqueront \u00e0 la table copi\u00e9e. La table dupliqu\u00e9e est une nouvelle table qui n\u2019est pas li\u00e9e \u00e0 l\u2019originale. Cela signifie que si vous mettez \u00e0 jour les donn\u00e9es dans la copie, la table originale ne sera pas mise \u00e0 jour, et vice versa. Notez qu\u2019au lieu de dupliquer des tables, il est g\u00e9n\u00e9ralement pr\u00e9f\u00e9rable de segmenter les donn\u00e9es en ajoutant une nouvelle colonne. Prenons l\u2019exemple des d\u00e9penses. Plut\u00f4t que d\u2019avoir des tables s\u00e9par\u00e9es pour les d\u00e9penses de chaque mois, il est pr\u00e9f\u00e9rable d\u2019inclure toutes les donn\u00e9es dans une seule table et de cr\u00e9er une nouvelle colonne appel\u00e9e Mois pour segmenter les lignes par mois. En g\u00e9n\u00e9ral, si vous avez plusieurs tables avec des colonnes presque identiques, cela indique que les donn\u00e9es pourraient toutes \u00eatre dans la m\u00eame table. Cela peut faciliter l\u2019analyse des donn\u00e9es. Utilisation # Les statistiques d\u2019utilisation sont r\u00e9sum\u00e9es sous la liste des tables de donn\u00e9es. Notez que l\u2019utilisation s\u2019applique \u00e0 l\u2019ensemble du document, et non aux tables individuelles. En savoir plus sur les limites du document.","title":"Raw data"},{"location":"raw-data/#donnees-sources","text":"La page des donn\u00e9es sources est une page sp\u00e9ciale qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document et r\u00e9sume les statistiques d\u2019utilisation de votre document. Depuis votre document, acc\u00e9dez \u00e0 la page des donn\u00e9es sources en cliquant sur le lien \u2018Donn\u00e9es Sources\u2019 en bas \u00e0 gauche du menu des pages. Contrairement aux autres pages , la mise en page de la page des donn\u00e9es sources ne peut pas \u00eatre personnalis\u00e9e. \u00c0 partir de la liste des tables de donn\u00e9es, vous pouvez trouver le nom et l\u2019identifiant de la table de donn\u00e9es, et supprimer des donn\u00e9es. Notez que supprimer une table de donn\u00e9es depuis cette page supprimera les donn\u00e9es et les retirera de toutes les pages. Cela diff\u00e8re des autres pages o\u00f9 il est possible de supprimer une vue des donn\u00e9es sans supprimer les donn\u00e9es elles-m\u00eames. Cliquez sur une table de donn\u00e9es pour l\u2019ouvrir. Notez que dans le panneau de cr\u00e9ation, le type de vue ne peut pas \u00eatre modifi\u00e9. Renommer la vue renomme \u00e9galement la table de donn\u00e9es. \u00c9tant donn\u00e9 que les donn\u00e9es sources sont destin\u00e9es \u00e0 montrer toutes les donn\u00e9es, les colonnes ne peuvent pas \u00eatre masqu\u00e9es non plus. Cependant, les colonnes peuvent \u00eatre r\u00e9organis\u00e9es, supprim\u00e9es, cr\u00e9\u00e9es et modifi\u00e9es. Pour les cr\u00e9ateurs, cette vue peut faciliter la modification de la structure des donn\u00e9es, l\u2019ajout de formules , de mise en forme conditionnelle , etc.","title":"Donn\u00e9es sources"},{"location":"raw-data/#dupliquer-des-donnees","text":"Les tables peuvent \u00eatre dupliqu\u00e9es depuis la page \u2018Donn\u00e9es Sources\u2019. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite de la table que vous souhaitez dupliquer, puis s\u00e9lectionnez \u2018Dupliquer la Table\u2019 dans le menu. Par d\u00e9faut, une table dupliqu\u00e9e ne contiendra que la structure de la table, pas les donn\u00e9es. Si vous souhaitez copier toutes les donn\u00e9es en plus de la structure de la table, assurez-vous de cocher la case avant de cliquer sur \u2018Enregistrer\u2019. Si la table d\u2019origine a des permissions avanc\u00e9es, ces r\u00e8gles ne seront pas dupliqu\u00e9es. Seules les r\u00e8gles par d\u00e9faut du document s\u2019appliqueront \u00e0 la table copi\u00e9e. La table dupliqu\u00e9e est une nouvelle table qui n\u2019est pas li\u00e9e \u00e0 l\u2019originale. Cela signifie que si vous mettez \u00e0 jour les donn\u00e9es dans la copie, la table originale ne sera pas mise \u00e0 jour, et vice versa. Notez qu\u2019au lieu de dupliquer des tables, il est g\u00e9n\u00e9ralement pr\u00e9f\u00e9rable de segmenter les donn\u00e9es en ajoutant une nouvelle colonne. Prenons l\u2019exemple des d\u00e9penses. Plut\u00f4t que d\u2019avoir des tables s\u00e9par\u00e9es pour les d\u00e9penses de chaque mois, il est pr\u00e9f\u00e9rable d\u2019inclure toutes les donn\u00e9es dans une seule table et de cr\u00e9er une nouvelle colonne appel\u00e9e Mois pour segmenter les lignes par mois. En g\u00e9n\u00e9ral, si vous avez plusieurs tables avec des colonnes presque identiques, cela indique que les donn\u00e9es pourraient toutes \u00eatre dans la m\u00eame table. Cela peut faciliter l\u2019analyse des donn\u00e9es.","title":"Dupliquer des Donn\u00e9es"},{"location":"raw-data/#utilisation","text":"Les statistiques d\u2019utilisation sont r\u00e9sum\u00e9es sous la liste des tables de donn\u00e9es. Notez que l\u2019utilisation s\u2019applique \u00e0 l\u2019ensemble du document, et non aux tables individuelles. En savoir plus sur les limites du document.","title":"Utilisation"},{"location":"record-cards/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue Fiche # Les vues fiche sont un moyen rapide et facile de visualiser les d\u00e9tails d\u2019un enregistrement. Pour voir les d\u00e9tails d\u2019un enregistrement sous forme de fiche, survolez le num\u00e9ro de la ligne et cliquez sur l\u2019ic\u00f4ne de fl\u00e8che qui appara\u00eet. S\u00e9lectionnez \u2018Voir en tant que fiche\u2019 dans le menu d\u00e9roulant. Cela ouvre une vue fiche modifiable des d\u00e9tails de l\u2019enregistrement. Si votre table contient une colonne de r\u00e9f\u00e9rence ou de liste de r\u00e9f\u00e9rences , vous pouvez cliquer sur l\u2019ic\u00f4ne de lien pour ouvrir la fiche de l\u2019enregistrement li\u00e9. Une vue fiche s\u2019ouvrira pour afficher les donn\u00e9es de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9. Modifier la mise en page d\u2019une vue fiche # Vous pouvez modifier la mise en page d\u2019une vue fiche depuis la page des donn\u00e9es sources . Cette nouvelle mise en page s\u2019appliquera \u00e0 toutes les nouvelles vues utilisant la m\u00eame table comme donn\u00e9es sources. Cliquez sur l\u2019ic\u00f4ne de fiche pour ouvrir. Vous pouvez glisser-d\u00e9poser les champs pour les r\u00e9organiser, redimensionner et ajouter/supprimer des champs de la vue. En savoir plus sur la modification des mises en page des fiches . D\u00e9sactiver une vue fiche # Vous pouvez \u00e9galement d\u00e9sactiver une vue fiche depuis la page des donn\u00e9es sources . Pour d\u00e9sactiver une vue fiche pour une table particuli\u00e8re, cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom de la table, puis s\u00e9lectionnez \u2018D\u00e9sactiver la vue fiche\u2019 dans le menu d\u00e9roulant.","title":"Record cards"},{"location":"record-cards/#vue-fiche","text":"Les vues fiche sont un moyen rapide et facile de visualiser les d\u00e9tails d\u2019un enregistrement. Pour voir les d\u00e9tails d\u2019un enregistrement sous forme de fiche, survolez le num\u00e9ro de la ligne et cliquez sur l\u2019ic\u00f4ne de fl\u00e8che qui appara\u00eet. S\u00e9lectionnez \u2018Voir en tant que fiche\u2019 dans le menu d\u00e9roulant. Cela ouvre une vue fiche modifiable des d\u00e9tails de l\u2019enregistrement. Si votre table contient une colonne de r\u00e9f\u00e9rence ou de liste de r\u00e9f\u00e9rences , vous pouvez cliquer sur l\u2019ic\u00f4ne de lien pour ouvrir la fiche de l\u2019enregistrement li\u00e9. Une vue fiche s\u2019ouvrira pour afficher les donn\u00e9es de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9.","title":"Vue Fiche"},{"location":"record-cards/#modifier-la-mise-en-page-dune-vue-fiche","text":"Vous pouvez modifier la mise en page d\u2019une vue fiche depuis la page des donn\u00e9es sources . Cette nouvelle mise en page s\u2019appliquera \u00e0 toutes les nouvelles vues utilisant la m\u00eame table comme donn\u00e9es sources. Cliquez sur l\u2019ic\u00f4ne de fiche pour ouvrir. Vous pouvez glisser-d\u00e9poser les champs pour les r\u00e9organiser, redimensionner et ajouter/supprimer des champs de la vue. En savoir plus sur la modification des mises en page des fiches .","title":"Modifier la mise en page d’une vue fiche"},{"location":"record-cards/#desactiver-une-vue-fiche","text":"Vous pouvez \u00e9galement d\u00e9sactiver une vue fiche depuis la page des donn\u00e9es sources . Pour d\u00e9sactiver une vue fiche pour une table particuli\u00e8re, cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom de la table, puis s\u00e9lectionnez \u2018D\u00e9sactiver la vue fiche\u2019 dans le menu d\u00e9roulant.","title":"D\u00e9sactiver une vue fiche"},{"location":"references-lookups/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Utiliser des r\u00e9f\u00e9rences et des recherches dans les formules # Les colonnes R\u00e9f\u00e9rence et Liste de R\u00e9f\u00e9rences dans Grist permettent \u00e0 une table de cr\u00e9er une r\u00e9f\u00e9rence explicite \u00e0 une autre. Un exemple courant de cela est visible dans le mod\u00e8le Inscription en Classe . Sur la page du Personnel, nous avons une liste de membres du personnel. Sur la page des classes, nous avons une colonne de r\u00e9f\u00e9rence \u00e9tiquet\u00e9e Instructeur qui fait r\u00e9f\u00e9rence aux enregistrements de notre page du Personnel. Gardez \u00e0 l\u2019esprit qu\u2019il ne s\u2019agit pas seulement de r\u00e9f\u00e9rencer la colonne Nom Complet, mais l\u2019ensemble de l\u2019enregistrement associ\u00e9 \u00e0 l\u2019instructeur s\u00e9lectionn\u00e9. Colonnes de r\u00e9f\u00e9rence et notation par points # Utiliser une colonne de R\u00e9f\u00e9rence dans une formule peut faciliter l\u2019obtention de donn\u00e9es de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9. Pour ce faire, nous utilisons la notation par points. Elle utilise le format $A.B o\u00f9 A est le nom de la colonne de r\u00e9f\u00e9rence et B est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e dont nous voulons extraire des donn\u00e9es. Voyons cela en action sur la page Vue d\u2019Inscription du mod\u00e8le d\u2019Inscription en Classe. La notation par points est utilis\u00e9e dans la colonne Class_Times de la table INSCRIPTIONS, situ\u00e9e en bas \u00e0 droite de la page de la Vue d\u2019Inscription. Nous pouvons voir que la colonne Class_Times utilise une formule avec la notation par points. En utilisant le format $A.B d\u00e9crit ci-dessus, nous pouvons comprendre que Class est le nom de la colonne de r\u00e9f\u00e9rence et Times est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e. Retrouvons cela \u00e0 l\u2019endroit d\u2019o\u00f9 cela provient - puisque la colonne de r\u00e9f\u00e9rence est Class, nous pouvons consulter les informations de cette colonne pour d\u00e9couvrir de quelle table elle provient. La colonne Class fait r\u00e9f\u00e9rence aux donn\u00e9es de la table Classes. Par cons\u00e9quent, la colonne Class_Times extrait des donn\u00e9es de la colonne Times de la table Classes. Cha\u00eenage # Si la recherche de r\u00e9f\u00e9rence renvoie une r\u00e9f\u00e9rence, cela peut \u00eatre cha\u00een\u00e9. Peut-\u00eatre voulons-nous ajouter le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur \u00e0 la table des Inscriptions. Nous pouvons utiliser la colonne de r\u00e9f\u00e9rence Class pour extraire les informations de l\u2019instructeur de la table Classes. Comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessus, la colonne de l\u2019instructeur est elle-m\u00eame une colonne de r\u00e9f\u00e9rence. Si nous suivons le format pr\u00e9c\u00e9dent, notre notation par points serait $Class.Instructor mais la colonne de l\u2019instructeur pointe vers l\u2019ensemble de l\u2019enregistrement de l\u2019instructeur, donc nous devons lui indiquer quelle information nous voulons de cet enregistrement, cr\u00e9ant ainsi une cha\u00eene. La colonne de l\u2019instructeur fait r\u00e9f\u00e9rence \u00e0 la table du Personnel, donc nous y naviguons pour d\u00e9couvrir quelle colonne nous devons utiliser pour obtenir le num\u00e9ro de t\u00e9l\u00e9phone. La colonne qui contient le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur est T\u00e9l\u00e9phone. En rassemblant tout cela, notre notation par points pour le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur serait $Class.Instructor.Phone Que se passe-t-il si nous laissons nos formules comme $Class.Instructor ? Vous verrez un ID d\u2019enregistrement num\u00e9rique de l\u2019enregistrement dans la table du Personnel auquel la colonne de l\u2019instructeur pointe. C\u2019est ce qu\u2019une colonne de r\u00e9f\u00e9rence stocke r\u00e9ellement. Si vous changez le type de cette colonne de formule en R\u00e9f\u00e9rence, vous pourrez s\u00e9lectionner une colonne \u00e0 afficher, comme le Nom Complet. Une autre fa\u00e7on de voir le nom est de cha\u00eener la notation par points, comme nous l\u2019avons fait pour le t\u00e9l\u00e9phone : $Class.Instructor.Full_Name . lookupOne # Une autre fa\u00e7on de pointer vers un enregistrement est d\u2019utiliser la fonction Table.lookupOne(...) . lookupOne vous permet de rechercher un enregistrement par certains champs, similaire \u00e0 la fonction VLOOKUP d\u2019Excel. En fait, la version de Grist de VLOOKUP est simplement un alias pour lookupOne. lookupOne est rarement utile dans Grist, car l\u2019utilisation d\u2019une colonne de type R\u00e9f\u00e9rence est g\u00e9n\u00e9ralement la solution pr\u00e9f\u00e9r\u00e9e pour connecter des enregistrements. Cependant, dans certaines occasions, lookupOne peut \u00eatre utile. Une situation est lorsque vous avez deux ensembles de donn\u00e9es qui se chevauchent m\u00eame s\u2019ils repr\u00e9sentent quelque chose de diff\u00e9rent et proviennent peut-\u00eatre de sources diff\u00e9rentes. Un exemple de cela peut \u00eatre trouv\u00e9 dans notre document Sponsors et Participants d\u2019\u00c9v\u00e9nements (R\u00e9f\u00e9rences et Recherches) qui est une version modifi\u00e9e du mod\u00e8le Sponsors et Participants d\u2019\u00c9v\u00e9nements, disponible dans notre galerie de mod\u00e8les . Disons que vous organisez un \u00e9v\u00e9nement et que vous avez une liste de participants inscrits, ainsi que des Sponsors. Les participants inscrits sont stock\u00e9s dans la table Toutes les Inscriptions, peut-\u00eatre peupl\u00e9e via une int\u00e9gration de formulaire. Les sponsors sont list\u00e9s dans une table s\u00e9par\u00e9e, avec des champs li\u00e9s \u00e0 leur parrainage, et peut-\u00eatre maintenue par une autre \u00e9quipe. Les deux tables contiennent des adresses e-mail qui identifient les participants et les sponsors. Parfois, un sponsor peut s\u2019inscrire pour assister \u00e0 l\u2019\u00e9v\u00e9nement. Dans ce cas, vous aurez un enregistrement de Participant avec une adresse e-mail qui appara\u00eet \u00e9galement dans la table des Sponsors. C\u2019est utile \u00e0 savoir pour quelqu\u2019un qui consulte la liste des participants. Vous pouvez rechercher un enregistrement dans la table des sponsors par adresse e-mail en utilisant une formule lookupOne. La colonne Sponsor dans la table Toutes les Inscriptions fait exactement cela en utilisant cette formule : Sponsors.lookupOne(Contact_Email=$Registration_Email) Cette formule v\u00e9rifie si un Contact Email de la table des Sponsors correspond \u00e0 un Registration Email de la table Toutes les Inscriptions. Le format g\u00e9n\u00e9ral pour une formule lookupOne est : [Table_Name].lookupOne([A]=$[B]) [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table qui est recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Une telle formule renvoie une r\u00e9f\u00e9rence. Dans la capture d\u2019\u00e9cran ci-dessus, vous pouvez voir que le r\u00e9sultat de la recherche renvoie Sponsors[#] . Le num\u00e9ro qu\u2019il renvoie entre crochets est l\u2019ID d\u2019enregistrement du r\u00e9sultat de la recherche. Lorsqu\u2019il renvoie Sponsors[0] , aucune correspondance n\u2019a \u00e9t\u00e9 trouv\u00e9e. Il est souvent judicieux de cr\u00e9er une colonne pour le r\u00e9sultat de la recherche et de changer son type en R\u00e9f\u00e9rence, comme vous le voyez dans la capture d\u2019\u00e9cran ci-dessous. Ensuite, s\u2019il y a une correspondance, la colonne de r\u00e9f\u00e9rence pointera vers l\u2019ensemble de l\u2019enregistrement correspondant. Comme toute colonne de r\u00e9f\u00e9rence, vous pouvez s\u00e9lectionner quel champ de cet enregistrement afficher. Dans cet exemple, il montre le champ Soci\u00e9t\u00e9 de l\u2019enregistrement correspondant dans la table des Sponsors. lookupOne et notation par points # Parce que lookupOne cr\u00e9e une r\u00e9f\u00e9rence \u00e0 un enregistrement, nous pouvons utiliser la notation par points pour rechercher des champs suppl\u00e9mentaires dans cet enregistrement. Dans l\u2019 exemple ci-dessus, Sponsors.lookupOne(Contact_Email=$Registration_Email) v\u00e9rifie si un Contact Email de la table des Sponsors correspond \u00e0 un Registration Email de la table Toutes les Inscriptions. Que se passerait-il si nous voulions \u00e9galement rechercher le niveau de sponsor ? Nous pouvons ajouter .Sponsor_Level \u00e0 la formule lookupOne, et, si une correspondance est trouv\u00e9e, rechercher la valeur dans la colonne de niveau de sponsor pour l\u2019enregistrement correspondant. La formule compl\u00e8te serait Sponsors.lookupOne(Contact_Email=$Registration_Email).Sponsor_Level . Maintenant, nous avons le Niveau de Sponsor list\u00e9 dans la table Toutes les Inscriptions pour ces participants dont les e-mails apparaissent \u00e9galement sur la liste des sponsors. lookupOne et sort_by # Lorsque la fonction lookupOne rencontre plusieurs r\u00e9sultats correspondants, elle renvoie le premier par ID de ligne. Le param\u00e8tre optionnel sort_by peut \u00eatre utilis\u00e9 pour trier ces r\u00e9sultats par un autre champ, afin de d\u00e9terminer lequel serait renvoy\u00e9 comme premi\u00e8re correspondance. Vous pouvez \u00e9galement pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Par exemple, consid\u00e9rons cet exemple du mod\u00e8le Inscription en Classe . Ce mod\u00e8le suit l\u2019inscription \u00e0 des cours extrascolaires et autres - enregistrant des informations pour les \u00e9tudiants, les familles et le personnel. Sur cette page, nous avons une liste d\u2019\u00e9tudiants et leurs informations respectives. De plus, nous avons une page Familles qui d\u00e9crit le parent de chaque \u00e9tudiant et nous aimerions savoir quel \u00e9tudiant dans chaque famille est le plus \u00e2g\u00e9. Nous cr\u00e9erions donc une colonne \u00e9tudiant le plus \u00e2g\u00e9. Ensuite, la formule suivante examinerait la table des \u00c9tudiants, trouverait les \u00e9tudiants sp\u00e9cifiques associ\u00e9s \u00e0 chaque famille, les trierait par leur date de naissance et renverrait l\u2019\u00e9tudiant ayant la date de naissance la plus ancienne : Students.lookupOne(Family=$id, sort_by=\"Birthday\") Dans ce cas, cela renverrait : Raddon, Brockie. Alternativement, si nous voulons trouver l\u2019\u00e9tudiant le plus jeune, la formule inclurait \u201c-\u201c: Students.lookupOne(Family=$id, sort_by=\"-Birthday\u201d) Dans ce cas, cela renverrait : Raddon, Care. Comprendre les ensembles d\u2019enregistrements # Parfois, un enregistrement peut r\u00e9f\u00e9rencer plusieurs enregistrements dans une autre table. Plusieurs r\u00e9f\u00e9rences peuvent \u00eatre faites avec une Colonne de Liste de R\u00e9f\u00e9rences. Un excellent exemple de cela est visible dans le mod\u00e8le Suivi d\u2019Habitudes . Sur la page Habitudes + Objectifs, nous avons une liste d\u2019habitudes et un objectif sur la fr\u00e9quence \u00e0 laquelle nous souhaitons accomplir cette habitude. Sur la page Suivi d\u2019Habitudes, nous avons une colonne de Liste de R\u00e9f\u00e9rences \u00e9tiquet\u00e9e Habitudes Compl\u00e9t\u00e9es qui fait r\u00e9f\u00e9rence aux enregistrements de notre page Habitudes + Objectifs. La seule diff\u00e9rence entre une colonne de R\u00e9f\u00e9rence et une colonne de Liste de R\u00e9f\u00e9rences est la capacit\u00e9 de s\u00e9lectionner plusieurs r\u00e9f\u00e9rences. Cela cr\u00e9e un ensemble d\u2019enregistrements qui peuvent \u00eatre utilis\u00e9s dans des formules. Listes de r\u00e9f\u00e9rences et notation par points # Tout comme avec les r\u00e9f\u00e9rences, vous pouvez utiliser la Notation par Points avec les listes de r\u00e9f\u00e9rences. En s\u2019appuyant sur notre pr\u00e9c\u00e9dent exemple de participants \u00e0 une conf\u00e9rence, supposons que nous avons une liste de personnes inscrites \u00e0 un \u00e9v\u00e9nement et que nous voulons trouver le solde pour chaque inscrit. Pour ce faire, nous pouvons utiliser la notation par points. Ici, $Registrants est une liste de r\u00e9f\u00e9rences. Notre Great Outdoors Expo a 4 inscrits. Nous pouvons voir la liste des inscrits dans la colonne Registrants. Cette liste est une r\u00e9f\u00e9rence \u00e0 la colonne Nom de la table Toutes les Inscriptions. Avec une liste de r\u00e9f\u00e9rences, la notation par points renvoie une liste de tous les champs s\u00e9lectionn\u00e9s ; $Registrants.Balance est une liste des Soldes pour chaque participant dans la liste de $Registrants . Cela suit le format $[A].[B] o\u00f9 [A] est le nom de la colonne de Liste de R\u00e9f\u00e9rences et [B] est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e dont vous souhaitez extraire des donn\u00e9es. Nous apprendrons comment trouver la somme de ces soldes dans Travailler avec des ensembles d\u2019enregistrements . lookupRecords # Vous pouvez \u00e9galement obtenir une liste de r\u00e9f\u00e9rences en utilisant lookupRecords . La formule pour lookupRecords suit ce format : [Table_Name].lookupRecords([A]=$[B]) [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table qui est recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Supposons que nous souhaitions obtenir une liste des \u00e9v\u00e9nements auxquels chaque personne de notre Liste d\u2019E-mails a assist\u00e9. Nous pouvons utiliser lookupRecords pour cela. Tout d\u2019abord, nous devons rechercher des enregistrements o\u00f9 l\u2019e-mail figurant dans la table Toutes les Inscriptions correspond \u00e0 un e-mail de cette liste. Ensuite, trouver l\u2019\u00e9v\u00e9nement associ\u00e9 \u00e0 chacun de ces enregistrements. En suivant le format ci-dessus, notre formule initiale est : All_Registrations.lookupRecords(Registration_Email=$Email) All_Registrations.lookupRecords(Registration_Email=$Email) renvoie une liste d\u2019ID d\u2019enregistrement pour chaque enregistrement dans la table Toutes les Inscriptions o\u00f9 l\u2019Email d\u2019Inscription correspond \u00e0 l\u2019Email dans cette ligne de la table Liste d\u2019E-mails. Ensuite, nous devons trouver l\u2019\u00c9v\u00e9nement associ\u00e9 \u00e0 chacun de ces enregistrements. Pour ce faire, nous pouvons utiliser la notation par points. All_Registrations.lookupRecords(Registration_Email=$Email).Event renverra la valeur de la colonne \u00c9v\u00e9nement pour chaque enregistrement trouv\u00e9. Nous avons vu des r\u00e9sultats similaires en utilisant la fonction lookupOne . Il est utile de changer le type de colonne en Liste de R\u00e9f\u00e9rences, comme vous le voyez dans la capture d\u2019\u00e9cran ci-dessous. Ensuite, s\u2019il y a une correspondance, la colonne de liste de r\u00e9f\u00e9rences pointera vers l\u2019ensemble de l\u2019enregistrement pour chaque correspondance. Comme toute colonne de liste de r\u00e9f\u00e9rences, vous pouvez s\u00e9lectionner quel champ vous souhaitez afficher pour les enregistrements correspondants. Dans cet exemple, il montre le champ \u00c9v\u00e9nement de la table des \u00c9v\u00e9nements pour chaque enregistrement correspondant dans la table des Participants. Recherches invers\u00e9es # lookupRecords fonctionne un peu diff\u00e9remment si une r\u00e9f\u00e9rence existe entre deux tables. Avec une recherche invers\u00e9e, nous pouvons utiliser l\u2019ID d\u2019enregistrement pour trouver un enregistrement. Chaque ligne a un ID num\u00e9rique (disponible en tant que $id dans les formules) qui est unique dans cette table. Vous pouvez r\u00e9v\u00e9ler l\u2019ID en ajoutant une colonne de formule o\u00f9 la formule est $id Jetons un \u0153il \u00e0 la colonne des Inscrits de la table \u00c9v\u00e9nements . La formule utilis\u00e9e ici est All_Registrations.lookupRecords(Event=$id) . Nous utilisons l\u2019ID pour trouver une correspondance car dans la table Toutes les Inscriptions, la colonne \u00c9v\u00e9nement est une colonne de r\u00e9f\u00e9rence, ce qui signifie que sa valeur est l\u2019ID d\u2019un enregistrement. Parce que All_Registrations.Event est une colonne de r\u00e9f\u00e9rence pointant vers un enregistrement d\u2019\u00c9v\u00e9nement dans la table \u00c9v\u00e9nements, nous pouvons faire correspondre l\u2019ID stock\u00e9 dans la colonne de r\u00e9f\u00e9rence avec les ID des enregistrements dans la table \u00c9v\u00e9nements. C\u2019est pourquoi l\u2019argument dans la formule est Event=$id . Nous utilisons la r\u00e9f\u00e9rence existante, juste \u00e0 l\u2019envers - d\u2019o\u00f9 le nom, Recherche Invers\u00e9e. Si vous souhaitez une vid\u00e9o explicative d\u2019une recherche invers\u00e9e, nous avons un exemple dans notre Webinaire Construire avec Grist - Formules d\u2019Initialisation vs Formules . Travailler avec des ensembles d\u2019enregistrements # lookupRecords peut \u00e9galement \u00eatre utilis\u00e9 dans d\u2019autres formules. SUM() peut \u00eatre utile pour trouver la somme de tous les nombres dans une liste d\u2019enregistrements. Une fois que vous avez trouv\u00e9 votre liste d\u2019enregistrements en utilisant la fonction lookupRecords et la notation par points, vous pouvez utiliser SUM() pour additionner toutes les valeurs renvoy\u00e9es, comme vous le voyez dans cette formule : SUM(Table.lookupRecords(Column_A=$Column_B).Column_C) Vous pouvez \u00e9galement le faire sur une liste de r\u00e9f\u00e9rences car une liste de r\u00e9f\u00e9rences est la m\u00eame chose, une liste d\u2019enregistrements. SUM($RefList.Column) Dans la section Listes de r\u00e9f\u00e9rences et notation par points , nous avons utilis\u00e9 la colonne Registrants et la notation par points pour trouver le solde pour chaque personne de notre liste d\u2019Inscrits. Nous pouvons utiliser SUM() avec notre formule pr\u00e9c\u00e9dente pour trouver le solde total. SUM($Registrants.Balance) Nous pouvons \u00e9galement utiliser lookupRecords pour obtenir la liste des r\u00e9f\u00e9rences, plut\u00f4t que d\u2019utiliser une colonne de liste de r\u00e9f\u00e9rences, puis trouver la somme du solde pour tous les inscrits. Cette m\u00e9thode est utilis\u00e9e dans la colonne des Revenus des Billets de la table \u00c9v\u00e9nements en utilisant la formule suivante : SUM(All_Registrations.lookupRecords(Event=$id).Balance) All_Registrations.lookupRecords(Event=$id).Balance trouve tous les enregistrements dans la table Toutes les Inscriptions o\u00f9 la colonne \u00c9v\u00e9nement correspond \u00e0 l\u2019ID de la ligne dans cette table, \u00c9v\u00e9nements. En utilisant la notation par points, nous trouvons le Solde pour chacun des enregistrements trouv\u00e9s. Ensuite, SUM() additionne les soldes de tous les enregistrements trouv\u00e9s. Vous pouvez \u00e9galement it\u00e9rer \u00e0 travers une Liste de R\u00e9f\u00e9rences en utilisant une boucle for en Python. Un exemple de cela peut \u00eatre vu dans la colonne Solde (\u2018for\u2019 loop) dans la table \u00c9v\u00e9nements. Lors de l\u2019it\u00e9ration, chaque \u00e9l\u00e9ment est une R\u00e9f\u00e9rence, donc la notation par points peut \u00e9galement \u00eatre utilis\u00e9e ici. Pour trouver la somme du solde pour tous les inscrits, nous utilisons la formule suivante : SUM(person.Balance for person in $Registrants) Cela fait la m\u00eame chose que notre formule lookupRecords que nous avons vue ci-dessus. $Registrants est notre liste de r\u00e9f\u00e9rences. Pour chaque enregistrement ( person ) dans notre liste d\u2019Inscrits, nous trouvons le Solde. Ensuite, nous additionnons tous les soldes ensemble. Dans cette formule, person est une variable qui repr\u00e9sente chaque \u00e9l\u00e9ment de notre liste et pourrait \u00eatre remplac\u00e9e par n\u2019importe quelle autre variable. Si vous souhaitez en savoir plus sur Structures de Donn\u00e9es et Compr\u00e9hension de Liste en Python 3, Python.org est une excellente ressource. len() peut \u00eatre utile pour obtenir le nombre d\u2019\u00e9l\u00e9ments dans une liste. Une fois que vous avez trouv\u00e9 votre liste d\u2019enregistrements en utilisant la fonction lookupRecords, vous pouvez utiliser len() pour compter le nombre d\u2019enregistrements renvoy\u00e9s, comme vous le voyez dans cette formule : len(Table.lookupRecords(Column_A=$Column_B)) Vous pouvez \u00e9galement le faire sur une liste de r\u00e9f\u00e9rences. len($RefList) Nous voulons voir combien d\u2019\u00e9v\u00e9nements nos Sponsors ont assist\u00e9. Nous pouvons utiliser lookupRecords pour cela. La formule suivante est utilis\u00e9e dans la colonne \u00c9v\u00e9nements Assist\u00e9s de la table Sponsors . len(All_Registrations.lookupRecords(Sponsor=$id)) D\u00e9composons les deux parties de cette formule, en travaillant de l\u2019int\u00e9rieur vers l\u2019ext\u00e9rieur. All_Registrations.lookupRecords(Sponsor=$id) recherche des correspondances o\u00f9 l\u2019enregistrement dans la colonne Sponsor de la table Toutes les Inscriptions a le m\u00eame ID que l\u2019enregistrement dans cette ligne de la table Sponsors. Tous les enregistrements dans la table Toutes les Inscriptions qui correspondent sont ajout\u00e9s \u00e0 une liste d\u2019enregistrements. Essayez d\u2019\u00e9crire la formule sans len() pour voir ce que Grist renvoie. Cela devrait ressembler \u00e0 quelque chose comme \u00e7a. C\u2019est une liste d\u2019enregistrements. len() compte combien d\u2019enregistrements se trouvent dans cette liste. Nous pouvons \u00e9galement inclure plusieurs arguments dans une formule lookupRecords. Un exemple de cela peut \u00eatre trouv\u00e9 dans la colonne Compte de la table Classes du mod\u00e8le Inscription en Classe . Cette colonne nous montre combien d\u2019\u00e9tudiants sont inscrits dans chaque classe. La formule utilis\u00e9e ici est : len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) Cette recherche utilise deux champs. Elle recherchera des enregistrements dans la table des Inscriptions o\u00f9 le Statut est \u201cConfirm\u00e9\u201d et la colonne Class correspond \u00e0 l\u2019ID de la ligne dans cette table. Comme la colonne Class fait r\u00e9f\u00e9rence \u00e0 la table Classes, nous utilisons l\u2019ID d\u2019enregistrement $id dans la recherche. Enfin, len() compte les \u00e9l\u00e9ments dans la liste renvoy\u00e9e par Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\") . La moyenne, le minimum et le maximum sont quelques-unes des autres fonctions qui peuvent \u00eatre utilis\u00e9es avec les formules lookupRecords. Consultez toutes les fonctions disponibles sur notre page R\u00e9f\u00e9rence des fonctions .","title":"References and lookups"},{"location":"references-lookups/#utiliser-des-references-et-des-recherches-dans-les-formules","text":"Les colonnes R\u00e9f\u00e9rence et Liste de R\u00e9f\u00e9rences dans Grist permettent \u00e0 une table de cr\u00e9er une r\u00e9f\u00e9rence explicite \u00e0 une autre. Un exemple courant de cela est visible dans le mod\u00e8le Inscription en Classe . Sur la page du Personnel, nous avons une liste de membres du personnel. Sur la page des classes, nous avons une colonne de r\u00e9f\u00e9rence \u00e9tiquet\u00e9e Instructeur qui fait r\u00e9f\u00e9rence aux enregistrements de notre page du Personnel. Gardez \u00e0 l\u2019esprit qu\u2019il ne s\u2019agit pas seulement de r\u00e9f\u00e9rencer la colonne Nom Complet, mais l\u2019ensemble de l\u2019enregistrement associ\u00e9 \u00e0 l\u2019instructeur s\u00e9lectionn\u00e9.","title":"Utiliser des r\u00e9f\u00e9rences et des recherches dans les formules"},{"location":"references-lookups/#colonnes-de-reference-et-notation-par-points","text":"Utiliser une colonne de R\u00e9f\u00e9rence dans une formule peut faciliter l\u2019obtention de donn\u00e9es de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9. Pour ce faire, nous utilisons la notation par points. Elle utilise le format $A.B o\u00f9 A est le nom de la colonne de r\u00e9f\u00e9rence et B est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e dont nous voulons extraire des donn\u00e9es. Voyons cela en action sur la page Vue d\u2019Inscription du mod\u00e8le d\u2019Inscription en Classe. La notation par points est utilis\u00e9e dans la colonne Class_Times de la table INSCRIPTIONS, situ\u00e9e en bas \u00e0 droite de la page de la Vue d\u2019Inscription. Nous pouvons voir que la colonne Class_Times utilise une formule avec la notation par points. En utilisant le format $A.B d\u00e9crit ci-dessus, nous pouvons comprendre que Class est le nom de la colonne de r\u00e9f\u00e9rence et Times est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e. Retrouvons cela \u00e0 l\u2019endroit d\u2019o\u00f9 cela provient - puisque la colonne de r\u00e9f\u00e9rence est Class, nous pouvons consulter les informations de cette colonne pour d\u00e9couvrir de quelle table elle provient. La colonne Class fait r\u00e9f\u00e9rence aux donn\u00e9es de la table Classes. Par cons\u00e9quent, la colonne Class_Times extrait des donn\u00e9es de la colonne Times de la table Classes.","title":"Colonnes de r\u00e9f\u00e9rence et notation par points"},{"location":"references-lookups/#chainage","text":"Si la recherche de r\u00e9f\u00e9rence renvoie une r\u00e9f\u00e9rence, cela peut \u00eatre cha\u00een\u00e9. Peut-\u00eatre voulons-nous ajouter le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur \u00e0 la table des Inscriptions. Nous pouvons utiliser la colonne de r\u00e9f\u00e9rence Class pour extraire les informations de l\u2019instructeur de la table Classes. Comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessus, la colonne de l\u2019instructeur est elle-m\u00eame une colonne de r\u00e9f\u00e9rence. Si nous suivons le format pr\u00e9c\u00e9dent, notre notation par points serait $Class.Instructor mais la colonne de l\u2019instructeur pointe vers l\u2019ensemble de l\u2019enregistrement de l\u2019instructeur, donc nous devons lui indiquer quelle information nous voulons de cet enregistrement, cr\u00e9ant ainsi une cha\u00eene. La colonne de l\u2019instructeur fait r\u00e9f\u00e9rence \u00e0 la table du Personnel, donc nous y naviguons pour d\u00e9couvrir quelle colonne nous devons utiliser pour obtenir le num\u00e9ro de t\u00e9l\u00e9phone. La colonne qui contient le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur est T\u00e9l\u00e9phone. En rassemblant tout cela, notre notation par points pour le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur serait $Class.Instructor.Phone Que se passe-t-il si nous laissons nos formules comme $Class.Instructor ? Vous verrez un ID d\u2019enregistrement num\u00e9rique de l\u2019enregistrement dans la table du Personnel auquel la colonne de l\u2019instructeur pointe. C\u2019est ce qu\u2019une colonne de r\u00e9f\u00e9rence stocke r\u00e9ellement. Si vous changez le type de cette colonne de formule en R\u00e9f\u00e9rence, vous pourrez s\u00e9lectionner une colonne \u00e0 afficher, comme le Nom Complet. Une autre fa\u00e7on de voir le nom est de cha\u00eener la notation par points, comme nous l\u2019avons fait pour le t\u00e9l\u00e9phone : $Class.Instructor.Full_Name .","title":"Cha\u00eenage"},{"location":"references-lookups/#lookupone","text":"Une autre fa\u00e7on de pointer vers un enregistrement est d\u2019utiliser la fonction Table.lookupOne(...) . lookupOne vous permet de rechercher un enregistrement par certains champs, similaire \u00e0 la fonction VLOOKUP d\u2019Excel. En fait, la version de Grist de VLOOKUP est simplement un alias pour lookupOne. lookupOne est rarement utile dans Grist, car l\u2019utilisation d\u2019une colonne de type R\u00e9f\u00e9rence est g\u00e9n\u00e9ralement la solution pr\u00e9f\u00e9r\u00e9e pour connecter des enregistrements. Cependant, dans certaines occasions, lookupOne peut \u00eatre utile. Une situation est lorsque vous avez deux ensembles de donn\u00e9es qui se chevauchent m\u00eame s\u2019ils repr\u00e9sentent quelque chose de diff\u00e9rent et proviennent peut-\u00eatre de sources diff\u00e9rentes. Un exemple de cela peut \u00eatre trouv\u00e9 dans notre document Sponsors et Participants d\u2019\u00c9v\u00e9nements (R\u00e9f\u00e9rences et Recherches) qui est une version modifi\u00e9e du mod\u00e8le Sponsors et Participants d\u2019\u00c9v\u00e9nements, disponible dans notre galerie de mod\u00e8les . Disons que vous organisez un \u00e9v\u00e9nement et que vous avez une liste de participants inscrits, ainsi que des Sponsors. Les participants inscrits sont stock\u00e9s dans la table Toutes les Inscriptions, peut-\u00eatre peupl\u00e9e via une int\u00e9gration de formulaire. Les sponsors sont list\u00e9s dans une table s\u00e9par\u00e9e, avec des champs li\u00e9s \u00e0 leur parrainage, et peut-\u00eatre maintenue par une autre \u00e9quipe. Les deux tables contiennent des adresses e-mail qui identifient les participants et les sponsors. Parfois, un sponsor peut s\u2019inscrire pour assister \u00e0 l\u2019\u00e9v\u00e9nement. Dans ce cas, vous aurez un enregistrement de Participant avec une adresse e-mail qui appara\u00eet \u00e9galement dans la table des Sponsors. C\u2019est utile \u00e0 savoir pour quelqu\u2019un qui consulte la liste des participants. Vous pouvez rechercher un enregistrement dans la table des sponsors par adresse e-mail en utilisant une formule lookupOne. La colonne Sponsor dans la table Toutes les Inscriptions fait exactement cela en utilisant cette formule : Sponsors.lookupOne(Contact_Email=$Registration_Email) Cette formule v\u00e9rifie si un Contact Email de la table des Sponsors correspond \u00e0 un Registration Email de la table Toutes les Inscriptions. Le format g\u00e9n\u00e9ral pour une formule lookupOne est : [Table_Name].lookupOne([A]=$[B]) [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table qui est recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Une telle formule renvoie une r\u00e9f\u00e9rence. Dans la capture d\u2019\u00e9cran ci-dessus, vous pouvez voir que le r\u00e9sultat de la recherche renvoie Sponsors[#] . Le num\u00e9ro qu\u2019il renvoie entre crochets est l\u2019ID d\u2019enregistrement du r\u00e9sultat de la recherche. Lorsqu\u2019il renvoie Sponsors[0] , aucune correspondance n\u2019a \u00e9t\u00e9 trouv\u00e9e. Il est souvent judicieux de cr\u00e9er une colonne pour le r\u00e9sultat de la recherche et de changer son type en R\u00e9f\u00e9rence, comme vous le voyez dans la capture d\u2019\u00e9cran ci-dessous. Ensuite, s\u2019il y a une correspondance, la colonne de r\u00e9f\u00e9rence pointera vers l\u2019ensemble de l\u2019enregistrement correspondant. Comme toute colonne de r\u00e9f\u00e9rence, vous pouvez s\u00e9lectionner quel champ de cet enregistrement afficher. Dans cet exemple, il montre le champ Soci\u00e9t\u00e9 de l\u2019enregistrement correspondant dans la table des Sponsors.","title":"lookupOne"},{"location":"references-lookups/#lookupone-et-notation-par-points","text":"Parce que lookupOne cr\u00e9e une r\u00e9f\u00e9rence \u00e0 un enregistrement, nous pouvons utiliser la notation par points pour rechercher des champs suppl\u00e9mentaires dans cet enregistrement. Dans l\u2019 exemple ci-dessus, Sponsors.lookupOne(Contact_Email=$Registration_Email) v\u00e9rifie si un Contact Email de la table des Sponsors correspond \u00e0 un Registration Email de la table Toutes les Inscriptions. Que se passerait-il si nous voulions \u00e9galement rechercher le niveau de sponsor ? Nous pouvons ajouter .Sponsor_Level \u00e0 la formule lookupOne, et, si une correspondance est trouv\u00e9e, rechercher la valeur dans la colonne de niveau de sponsor pour l\u2019enregistrement correspondant. La formule compl\u00e8te serait Sponsors.lookupOne(Contact_Email=$Registration_Email).Sponsor_Level . Maintenant, nous avons le Niveau de Sponsor list\u00e9 dans la table Toutes les Inscriptions pour ces participants dont les e-mails apparaissent \u00e9galement sur la liste des sponsors.","title":"lookupOne et notation par points"},{"location":"references-lookups/#lookupone-et-sort_by","text":"Lorsque la fonction lookupOne rencontre plusieurs r\u00e9sultats correspondants, elle renvoie le premier par ID de ligne. Le param\u00e8tre optionnel sort_by peut \u00eatre utilis\u00e9 pour trier ces r\u00e9sultats par un autre champ, afin de d\u00e9terminer lequel serait renvoy\u00e9 comme premi\u00e8re correspondance. Vous pouvez \u00e9galement pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Par exemple, consid\u00e9rons cet exemple du mod\u00e8le Inscription en Classe . Ce mod\u00e8le suit l\u2019inscription \u00e0 des cours extrascolaires et autres - enregistrant des informations pour les \u00e9tudiants, les familles et le personnel. Sur cette page, nous avons une liste d\u2019\u00e9tudiants et leurs informations respectives. De plus, nous avons une page Familles qui d\u00e9crit le parent de chaque \u00e9tudiant et nous aimerions savoir quel \u00e9tudiant dans chaque famille est le plus \u00e2g\u00e9. Nous cr\u00e9erions donc une colonne \u00e9tudiant le plus \u00e2g\u00e9. Ensuite, la formule suivante examinerait la table des \u00c9tudiants, trouverait les \u00e9tudiants sp\u00e9cifiques associ\u00e9s \u00e0 chaque famille, les trierait par leur date de naissance et renverrait l\u2019\u00e9tudiant ayant la date de naissance la plus ancienne : Students.lookupOne(Family=$id, sort_by=\"Birthday\") Dans ce cas, cela renverrait : Raddon, Brockie. Alternativement, si nous voulons trouver l\u2019\u00e9tudiant le plus jeune, la formule inclurait \u201c-\u201c: Students.lookupOne(Family=$id, sort_by=\"-Birthday\u201d) Dans ce cas, cela renverrait : Raddon, Care.","title":"lookupOne et sort_by"},{"location":"references-lookups/#comprendre-les-ensembles-denregistrements","text":"Parfois, un enregistrement peut r\u00e9f\u00e9rencer plusieurs enregistrements dans une autre table. Plusieurs r\u00e9f\u00e9rences peuvent \u00eatre faites avec une Colonne de Liste de R\u00e9f\u00e9rences. Un excellent exemple de cela est visible dans le mod\u00e8le Suivi d\u2019Habitudes . Sur la page Habitudes + Objectifs, nous avons une liste d\u2019habitudes et un objectif sur la fr\u00e9quence \u00e0 laquelle nous souhaitons accomplir cette habitude. Sur la page Suivi d\u2019Habitudes, nous avons une colonne de Liste de R\u00e9f\u00e9rences \u00e9tiquet\u00e9e Habitudes Compl\u00e9t\u00e9es qui fait r\u00e9f\u00e9rence aux enregistrements de notre page Habitudes + Objectifs. La seule diff\u00e9rence entre une colonne de R\u00e9f\u00e9rence et une colonne de Liste de R\u00e9f\u00e9rences est la capacit\u00e9 de s\u00e9lectionner plusieurs r\u00e9f\u00e9rences. Cela cr\u00e9e un ensemble d\u2019enregistrements qui peuvent \u00eatre utilis\u00e9s dans des formules.","title":"Comprendre les ensembles d’enregistrements"},{"location":"references-lookups/#listes-de-references-et-notation-par-points","text":"Tout comme avec les r\u00e9f\u00e9rences, vous pouvez utiliser la Notation par Points avec les listes de r\u00e9f\u00e9rences. En s\u2019appuyant sur notre pr\u00e9c\u00e9dent exemple de participants \u00e0 une conf\u00e9rence, supposons que nous avons une liste de personnes inscrites \u00e0 un \u00e9v\u00e9nement et que nous voulons trouver le solde pour chaque inscrit. Pour ce faire, nous pouvons utiliser la notation par points. Ici, $Registrants est une liste de r\u00e9f\u00e9rences. Notre Great Outdoors Expo a 4 inscrits. Nous pouvons voir la liste des inscrits dans la colonne Registrants. Cette liste est une r\u00e9f\u00e9rence \u00e0 la colonne Nom de la table Toutes les Inscriptions. Avec une liste de r\u00e9f\u00e9rences, la notation par points renvoie une liste de tous les champs s\u00e9lectionn\u00e9s ; $Registrants.Balance est une liste des Soldes pour chaque participant dans la liste de $Registrants . Cela suit le format $[A].[B] o\u00f9 [A] est le nom de la colonne de Liste de R\u00e9f\u00e9rences et [B] est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e dont vous souhaitez extraire des donn\u00e9es. Nous apprendrons comment trouver la somme de ces soldes dans Travailler avec des ensembles d\u2019enregistrements .","title":"Listes de r\u00e9f\u00e9rences et notation par points"},{"location":"references-lookups/#lookuprecords","text":"Vous pouvez \u00e9galement obtenir une liste de r\u00e9f\u00e9rences en utilisant lookupRecords . La formule pour lookupRecords suit ce format : [Table_Name].lookupRecords([A]=$[B]) [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table qui est recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Supposons que nous souhaitions obtenir une liste des \u00e9v\u00e9nements auxquels chaque personne de notre Liste d\u2019E-mails a assist\u00e9. Nous pouvons utiliser lookupRecords pour cela. Tout d\u2019abord, nous devons rechercher des enregistrements o\u00f9 l\u2019e-mail figurant dans la table Toutes les Inscriptions correspond \u00e0 un e-mail de cette liste. Ensuite, trouver l\u2019\u00e9v\u00e9nement associ\u00e9 \u00e0 chacun de ces enregistrements. En suivant le format ci-dessus, notre formule initiale est : All_Registrations.lookupRecords(Registration_Email=$Email) All_Registrations.lookupRecords(Registration_Email=$Email) renvoie une liste d\u2019ID d\u2019enregistrement pour chaque enregistrement dans la table Toutes les Inscriptions o\u00f9 l\u2019Email d\u2019Inscription correspond \u00e0 l\u2019Email dans cette ligne de la table Liste d\u2019E-mails. Ensuite, nous devons trouver l\u2019\u00c9v\u00e9nement associ\u00e9 \u00e0 chacun de ces enregistrements. Pour ce faire, nous pouvons utiliser la notation par points. All_Registrations.lookupRecords(Registration_Email=$Email).Event renverra la valeur de la colonne \u00c9v\u00e9nement pour chaque enregistrement trouv\u00e9. Nous avons vu des r\u00e9sultats similaires en utilisant la fonction lookupOne . Il est utile de changer le type de colonne en Liste de R\u00e9f\u00e9rences, comme vous le voyez dans la capture d\u2019\u00e9cran ci-dessous. Ensuite, s\u2019il y a une correspondance, la colonne de liste de r\u00e9f\u00e9rences pointera vers l\u2019ensemble de l\u2019enregistrement pour chaque correspondance. Comme toute colonne de liste de r\u00e9f\u00e9rences, vous pouvez s\u00e9lectionner quel champ vous souhaitez afficher pour les enregistrements correspondants. Dans cet exemple, il montre le champ \u00c9v\u00e9nement de la table des \u00c9v\u00e9nements pour chaque enregistrement correspondant dans la table des Participants.","title":"lookupRecords"},{"location":"references-lookups/#recherches-inversees","text":"lookupRecords fonctionne un peu diff\u00e9remment si une r\u00e9f\u00e9rence existe entre deux tables. Avec une recherche invers\u00e9e, nous pouvons utiliser l\u2019ID d\u2019enregistrement pour trouver un enregistrement. Chaque ligne a un ID num\u00e9rique (disponible en tant que $id dans les formules) qui est unique dans cette table. Vous pouvez r\u00e9v\u00e9ler l\u2019ID en ajoutant une colonne de formule o\u00f9 la formule est $id Jetons un \u0153il \u00e0 la colonne des Inscrits de la table \u00c9v\u00e9nements . La formule utilis\u00e9e ici est All_Registrations.lookupRecords(Event=$id) . Nous utilisons l\u2019ID pour trouver une correspondance car dans la table Toutes les Inscriptions, la colonne \u00c9v\u00e9nement est une colonne de r\u00e9f\u00e9rence, ce qui signifie que sa valeur est l\u2019ID d\u2019un enregistrement. Parce que All_Registrations.Event est une colonne de r\u00e9f\u00e9rence pointant vers un enregistrement d\u2019\u00c9v\u00e9nement dans la table \u00c9v\u00e9nements, nous pouvons faire correspondre l\u2019ID stock\u00e9 dans la colonne de r\u00e9f\u00e9rence avec les ID des enregistrements dans la table \u00c9v\u00e9nements. C\u2019est pourquoi l\u2019argument dans la formule est Event=$id . Nous utilisons la r\u00e9f\u00e9rence existante, juste \u00e0 l\u2019envers - d\u2019o\u00f9 le nom, Recherche Invers\u00e9e. Si vous souhaitez une vid\u00e9o explicative d\u2019une recherche invers\u00e9e, nous avons un exemple dans notre Webinaire Construire avec Grist - Formules d\u2019Initialisation vs Formules .","title":"Recherches invers\u00e9es"},{"location":"references-lookups/#travailler-avec-des-ensembles-denregistrements","text":"lookupRecords peut \u00e9galement \u00eatre utilis\u00e9 dans d\u2019autres formules. SUM() peut \u00eatre utile pour trouver la somme de tous les nombres dans une liste d\u2019enregistrements. Une fois que vous avez trouv\u00e9 votre liste d\u2019enregistrements en utilisant la fonction lookupRecords et la notation par points, vous pouvez utiliser SUM() pour additionner toutes les valeurs renvoy\u00e9es, comme vous le voyez dans cette formule : SUM(Table.lookupRecords(Column_A=$Column_B).Column_C) Vous pouvez \u00e9galement le faire sur une liste de r\u00e9f\u00e9rences car une liste de r\u00e9f\u00e9rences est la m\u00eame chose, une liste d\u2019enregistrements. SUM($RefList.Column) Dans la section Listes de r\u00e9f\u00e9rences et notation par points , nous avons utilis\u00e9 la colonne Registrants et la notation par points pour trouver le solde pour chaque personne de notre liste d\u2019Inscrits. Nous pouvons utiliser SUM() avec notre formule pr\u00e9c\u00e9dente pour trouver le solde total. SUM($Registrants.Balance) Nous pouvons \u00e9galement utiliser lookupRecords pour obtenir la liste des r\u00e9f\u00e9rences, plut\u00f4t que d\u2019utiliser une colonne de liste de r\u00e9f\u00e9rences, puis trouver la somme du solde pour tous les inscrits. Cette m\u00e9thode est utilis\u00e9e dans la colonne des Revenus des Billets de la table \u00c9v\u00e9nements en utilisant la formule suivante : SUM(All_Registrations.lookupRecords(Event=$id).Balance) All_Registrations.lookupRecords(Event=$id).Balance trouve tous les enregistrements dans la table Toutes les Inscriptions o\u00f9 la colonne \u00c9v\u00e9nement correspond \u00e0 l\u2019ID de la ligne dans cette table, \u00c9v\u00e9nements. En utilisant la notation par points, nous trouvons le Solde pour chacun des enregistrements trouv\u00e9s. Ensuite, SUM() additionne les soldes de tous les enregistrements trouv\u00e9s. Vous pouvez \u00e9galement it\u00e9rer \u00e0 travers une Liste de R\u00e9f\u00e9rences en utilisant une boucle for en Python. Un exemple de cela peut \u00eatre vu dans la colonne Solde (\u2018for\u2019 loop) dans la table \u00c9v\u00e9nements. Lors de l\u2019it\u00e9ration, chaque \u00e9l\u00e9ment est une R\u00e9f\u00e9rence, donc la notation par points peut \u00e9galement \u00eatre utilis\u00e9e ici. Pour trouver la somme du solde pour tous les inscrits, nous utilisons la formule suivante : SUM(person.Balance for person in $Registrants) Cela fait la m\u00eame chose que notre formule lookupRecords que nous avons vue ci-dessus. $Registrants est notre liste de r\u00e9f\u00e9rences. Pour chaque enregistrement ( person ) dans notre liste d\u2019Inscrits, nous trouvons le Solde. Ensuite, nous additionnons tous les soldes ensemble. Dans cette formule, person est une variable qui repr\u00e9sente chaque \u00e9l\u00e9ment de notre liste et pourrait \u00eatre remplac\u00e9e par n\u2019importe quelle autre variable. Si vous souhaitez en savoir plus sur Structures de Donn\u00e9es et Compr\u00e9hension de Liste en Python 3, Python.org est une excellente ressource. len() peut \u00eatre utile pour obtenir le nombre d\u2019\u00e9l\u00e9ments dans une liste. Une fois que vous avez trouv\u00e9 votre liste d\u2019enregistrements en utilisant la fonction lookupRecords, vous pouvez utiliser len() pour compter le nombre d\u2019enregistrements renvoy\u00e9s, comme vous le voyez dans cette formule : len(Table.lookupRecords(Column_A=$Column_B)) Vous pouvez \u00e9galement le faire sur une liste de r\u00e9f\u00e9rences. len($RefList) Nous voulons voir combien d\u2019\u00e9v\u00e9nements nos Sponsors ont assist\u00e9. Nous pouvons utiliser lookupRecords pour cela. La formule suivante est utilis\u00e9e dans la colonne \u00c9v\u00e9nements Assist\u00e9s de la table Sponsors . len(All_Registrations.lookupRecords(Sponsor=$id)) D\u00e9composons les deux parties de cette formule, en travaillant de l\u2019int\u00e9rieur vers l\u2019ext\u00e9rieur. All_Registrations.lookupRecords(Sponsor=$id) recherche des correspondances o\u00f9 l\u2019enregistrement dans la colonne Sponsor de la table Toutes les Inscriptions a le m\u00eame ID que l\u2019enregistrement dans cette ligne de la table Sponsors. Tous les enregistrements dans la table Toutes les Inscriptions qui correspondent sont ajout\u00e9s \u00e0 une liste d\u2019enregistrements. Essayez d\u2019\u00e9crire la formule sans len() pour voir ce que Grist renvoie. Cela devrait ressembler \u00e0 quelque chose comme \u00e7a. C\u2019est une liste d\u2019enregistrements. len() compte combien d\u2019enregistrements se trouvent dans cette liste. Nous pouvons \u00e9galement inclure plusieurs arguments dans une formule lookupRecords. Un exemple de cela peut \u00eatre trouv\u00e9 dans la colonne Compte de la table Classes du mod\u00e8le Inscription en Classe . Cette colonne nous montre combien d\u2019\u00e9tudiants sont inscrits dans chaque classe. La formule utilis\u00e9e ici est : len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) Cette recherche utilise deux champs. Elle recherchera des enregistrements dans la table des Inscriptions o\u00f9 le Statut est \u201cConfirm\u00e9\u201d et la colonne Class correspond \u00e0 l\u2019ID de la ligne dans cette table. Comme la colonne Class fait r\u00e9f\u00e9rence \u00e0 la table Classes, nous utilisons l\u2019ID d\u2019enregistrement $id dans la recherche. Enfin, len() compte les \u00e9l\u00e9ments dans la liste renvoy\u00e9e par Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\") . La moyenne, le minimum et le maximum sont quelques-unes des autres fonctions qui peuvent \u00eatre utilis\u00e9es avec les formules lookupRecords. Consultez toutes les fonctions disponibles sur notre page R\u00e9f\u00e9rence des fonctions .","title":"Travailler avec des ensembles d’enregistrements"},{"location":"register-as-consultant/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Inscrivez-vous pour devenir consultant Grist # .creg-form { line-height: initial; } .form-group .control-label { font-weight: normal; } .creg-button { margin: 24px 0; background-color: #11b683; border: none; color: white; } .creg-button:hover { background-color: #009058; border: none; color: white; } #creg-submitted, #creg-error { display: none; margin-top: 40px; } \u00cates-vous un freelance ? Aimez-vous construire dans Grist et organiser des donn\u00e9es ? Nous serions ravis de vous soutenir et de vous ajouter \u00e0 notre liste de consultants Grist ind\u00e9pendants. Veuillez remplir les informations ci-dessous, et nous vous contacterons. Votre nom : Email : T\u00e9l\u00e9phone : Entreprise : Site web : < div","title":"Register as consultant"},{"location":"register-as-consultant/#inscrivez-vous-pour-devenir-consultant-grist","text":".creg-form { line-height: initial; } .form-group .control-label { font-weight: normal; } .creg-button { margin: 24px 0; background-color: #11b683; border: none; color: white; } .creg-button:hover { background-color: #009058; border: none; color: white; } #creg-submitted, #creg-error { display: none; margin-top: 40px; } \u00cates-vous un freelance ? Aimez-vous construire dans Grist et organiser des donn\u00e9es ? Nous serions ravis de vous soutenir et de vous ajouter \u00e0 notre liste de consultants Grist ind\u00e9pendants. Veuillez remplir les informations ci-dessous, et nous vous contacterons. Votre nom : Email : T\u00e9l\u00e9phone : Entreprise : Site web : < div","title":"Inscrivez-vous pour devenir consultant Grist"},{"location":"rest-api/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Utilisation de l\u2019API Grist # Grist dispose d\u2019une API pour manipuler des documents, des espaces de travail et des espaces d\u2019\u00e9quipe. R\u00e9f\u00e9rence de l\u2019API montre la documentation de tous les points de terminaison disponibles. Console API interactive vous permet de faire des appels API en utilisant votre connexion Grist. Authentification # Pour acc\u00e9der \u00e0 l\u2019API Grist, vous aurez besoin d\u2019une cl\u00e9 API. Une cl\u00e9 API est d\u00e9tenue par un seul utilisateur et poss\u00e8de les m\u00eames permissions que cet utilisateur. Pour activer l\u2019acc\u00e8s \u00e0 l\u2019API pour vous-m\u00eame, visitez vos Param\u00e8tres de Profil . Vous pouvez toujours trouver cette page en cliquant sur votre photo de profil ou initiale en haut \u00e0 droite de l\u2019\u00e9cran pour ouvrir le menu du compte. Ensuite, s\u00e9lectionnez l\u2019option \u201cParam\u00e8tres de Profil\u201d: Cela affiche une bo\u00eete de dialogue avec toutes vos options de param\u00e8tres de profil. Faites d\u00e9filer vers le bas jusqu\u2019\u00e0 la section \u201cAPI\u201d. Cliquez sur le bouton \u201cCr\u00e9er\u201d pour cr\u00e9er une cl\u00e9 API. Vous pouvez maintenant copier cette cl\u00e9 pour l\u2019utiliser lors de vos appels API. Pour \u00eatre clair, copiez la cl\u00e9 dans vos param\u00e8tres de profil, pas la cl\u00e9 dans la capture d\u2019\u00e9cran ci-dessus, qui n\u2019est pas une vraie. Vous pouvez r\u00e9voquer votre cl\u00e9 API en cliquant sur \u201cSupprimer\u201d dans les Param\u00e8tres de Profil \u00e0 tout moment. Vous aurez alors la possibilit\u00e9 d\u2019en cr\u00e9er une nouvelle si vous le souhaitez. Pour tester votre cl\u00e9 API, essayez ceci depuis la ligne de commande (en substituant votre cl\u00e9 API): curl -H \"Authorization: Bearer \" https://docs.getgrist.com/api/orgs Cela devrait renvoyer une liste d\u2019organisations, ce que l\u2019API appelle des espaces d\u2019\u00e9quipe et votre espace personnel. Votre espace personnel est accessible \u00e0 docs.getgrist.com . Les espaces d\u2019\u00e9quipe sont accessibles \u00e0 .getgrist.com . Utilisation # Pour acc\u00e9der aux documents sur votre espace personnel via l\u2019API, continuez simplement \u00e0 utiliser le domaine docs.getgrist.com . Pour acc\u00e9der aux documents et aux espaces de travail sur un espace d\u2019\u00e9quipe, utilisez .getgrist.com . Par exemple, pour lister tous les espaces de travail et documents auxquels vous avez acc\u00e8s sur un site, faites : curl -H \"Authorization: Bearer \" \\ https://.getgrist.com/api/orgs/current/workspaces Lorsque vous apportez des modifications via l\u2019API et que vous passez des donn\u00e9es via le corps de la requ\u00eate, assurez-vous de d\u00e9finir l\u2019en-t\u00eate Content-Type \u00e0 application/json . Par exemple, pour changer le nom d\u2019un document, vous pourriez faire : curl -XPATCH \\ -H \"Authorization: Bearer \" \\ -H \"Content-Type: application/json\" \\ -d '{\"name\": \"Plans de Le\u00e7on\"}' \\ https://.getgrist.com/api/docs/ Pour plus de d\u00e9tails sur les points de terminaison disponibles, consultez notre documentation API ou la console API interactive . Des biblioth\u00e8ques clientes sont \u00e9galement disponibles : Biblioth\u00e8que cliente JavaScript/TypeScript Biblioth\u00e8que cliente Python","title":"REST API usage"},{"location":"rest-api/#utilisation-de-lapi-grist","text":"Grist dispose d\u2019une API pour manipuler des documents, des espaces de travail et des espaces d\u2019\u00e9quipe. R\u00e9f\u00e9rence de l\u2019API montre la documentation de tous les points de terminaison disponibles. Console API interactive vous permet de faire des appels API en utilisant votre connexion Grist.","title":"Utilisation de l’API Grist"},{"location":"rest-api/#authentification","text":"Pour acc\u00e9der \u00e0 l\u2019API Grist, vous aurez besoin d\u2019une cl\u00e9 API. Une cl\u00e9 API est d\u00e9tenue par un seul utilisateur et poss\u00e8de les m\u00eames permissions que cet utilisateur. Pour activer l\u2019acc\u00e8s \u00e0 l\u2019API pour vous-m\u00eame, visitez vos Param\u00e8tres de Profil . Vous pouvez toujours trouver cette page en cliquant sur votre photo de profil ou initiale en haut \u00e0 droite de l\u2019\u00e9cran pour ouvrir le menu du compte. Ensuite, s\u00e9lectionnez l\u2019option \u201cParam\u00e8tres de Profil\u201d: Cela affiche une bo\u00eete de dialogue avec toutes vos options de param\u00e8tres de profil. Faites d\u00e9filer vers le bas jusqu\u2019\u00e0 la section \u201cAPI\u201d. Cliquez sur le bouton \u201cCr\u00e9er\u201d pour cr\u00e9er une cl\u00e9 API. Vous pouvez maintenant copier cette cl\u00e9 pour l\u2019utiliser lors de vos appels API. Pour \u00eatre clair, copiez la cl\u00e9 dans vos param\u00e8tres de profil, pas la cl\u00e9 dans la capture d\u2019\u00e9cran ci-dessus, qui n\u2019est pas une vraie. Vous pouvez r\u00e9voquer votre cl\u00e9 API en cliquant sur \u201cSupprimer\u201d dans les Param\u00e8tres de Profil \u00e0 tout moment. Vous aurez alors la possibilit\u00e9 d\u2019en cr\u00e9er une nouvelle si vous le souhaitez. Pour tester votre cl\u00e9 API, essayez ceci depuis la ligne de commande (en substituant votre cl\u00e9 API): curl -H \"Authorization: Bearer \" https://docs.getgrist.com/api/orgs Cela devrait renvoyer une liste d\u2019organisations, ce que l\u2019API appelle des espaces d\u2019\u00e9quipe et votre espace personnel. Votre espace personnel est accessible \u00e0 docs.getgrist.com . Les espaces d\u2019\u00e9quipe sont accessibles \u00e0 .getgrist.com .","title":"Authentification"},{"location":"rest-api/#utilisation","text":"Pour acc\u00e9der aux documents sur votre espace personnel via l\u2019API, continuez simplement \u00e0 utiliser le domaine docs.getgrist.com . Pour acc\u00e9der aux documents et aux espaces de travail sur un espace d\u2019\u00e9quipe, utilisez .getgrist.com . Par exemple, pour lister tous les espaces de travail et documents auxquels vous avez acc\u00e8s sur un site, faites : curl -H \"Authorization: Bearer \" \\ https://.getgrist.com/api/orgs/current/workspaces Lorsque vous apportez des modifications via l\u2019API et que vous passez des donn\u00e9es via le corps de la requ\u00eate, assurez-vous de d\u00e9finir l\u2019en-t\u00eate Content-Type \u00e0 application/json . Par exemple, pour changer le nom d\u2019un document, vous pourriez faire : curl -XPATCH \\ -H \"Authorization: Bearer \" \\ -H \"Content-Type: application/json\" \\ -d '{\"name\": \"Plans de Le\u00e7on\"}' \\ https://.getgrist.com/api/docs/ Pour plus de d\u00e9tails sur les points de terminaison disponibles, consultez notre documentation API ou la console API interactive . Des biblioth\u00e8ques clientes sont \u00e9galement disponibles : Biblioth\u00e8que cliente JavaScript/TypeScript Biblioth\u00e8que cliente Python","title":"Utilisation"},{"location":"search-sort-filter/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Recherche, Tri et Filtrage # Grist offre plusieurs fa\u00e7ons de rechercher dans vos donn\u00e9es, ou d\u2019organiser les donn\u00e9es pour les avoir \u00e0 port\u00e9e de main. Recherche # En haut de l\u2019\u00e9cran du document, vous verrez une ic\u00f4ne de loupe ( ) qui ouvre une recherche de type tableur. Vous pouvez \u00e9galement commencer \u00e0 rechercher en utilisant le raccourci clavier \u2318 F (Mac) ou Ctrl + F (Windows). Lorsque vous tapez dans la zone de texte de recherche, Grist d\u00e9placera le curseur vers la cellule suivante contenant votre texte de recherche. S\u2019il n\u2019y a plus de correspondances dans la vue ou la page actuelle, le curseur se d\u00e9placera vers la vue suivante ou passera \u00e0 la page suivante. Tri # Il est facile de trouver un mot dans un dictionnaire, mais ce ne serait pas le cas si les mots n\u2019\u00e9taient pas tri\u00e9s ! Grist offre des options de tri flexibles et pratiques, qui sont assez diff\u00e9rentes d\u2019un tableur traditionnel. Pour trier une table dans Grist par une colonne, ouvrez le menu \u00e0 partir de l\u2019en-t\u00eate de la colonne et s\u00e9lectionnez \u201cTrier\u201d: Dans le m\u00eame \u00e9l\u00e9ment de menu, vous pouvez choisir de trier par ordre croissant ou d\u00e9croissant. Diff\u00e9rence par rapport \u00e0 Excel : Il est important de noter que le tri ne change aucun calcul de formule, il ne change que l\u2019ordre dans lequel vous voyez les enregistrements. Cela est diff\u00e9rent des tableurs comme Excel. Une autre diff\u00e9rence est que le param\u00e8tre de tri est \u201cactif\u201d : si vous ajoutez un enregistrement ou modifiez une cellule utilis\u00e9e pour le tri, l\u2019enregistrement se d\u00e9placera \u00e0 sa position correcte dans l\u2019ordre de tri. Voir Enregistrer les positions des lignes ci-dessous pour une option plus similaire au comportement d\u2019Excel. Colonnes Multiples # Lorsque vous triez une table, vous pouvez cliquer sur une autre colonne pour l\u2019ajouter au tri : La deuxi\u00e8me colonne d\u00e9termine l\u2019ordre des enregistrements dont les valeurs dans la premi\u00e8re colonne sont les m\u00eames. Vous pouvez ajouter plus de colonnes au tri. Par exemple, vous pourriez : Trier les employ\u00e9s d\u2019abord par D\u00e9partement, puis par Nom de famille, puis par Pr\u00e9nom. Trier les transactions d\u2019abord par Date, puis par Montant. Trier les t\u00e2ches d\u2019abord par la colonne \u2018Est Compl\u00e9t\u00e9\u2019, puis par Priorit\u00e9. Enregistrer les Param\u00e8tres de Tri # Comme le tri n\u2019affecte que votre vue des donn\u00e9es, vous pouvez trier les donn\u00e9es dans un document Grist m\u00eame si vous n\u2019avez pas acc\u00e8s en \u00e9criture \u00e0 celui-ci. Si vous pouvez \u00e9crire dans un document, vous pouvez \u00e9galement enregistrer les param\u00e8tres de tri. Lorsque vous modifiez le tri sur une table, l\u2019ic\u00f4ne en haut de celle-ci devient verte. Cliquez dessus pour voir le param\u00e8tre actuellement actif, ainsi que les options pour les manipuler (par exemple, supprimer une colonne du tri), enregistrer le param\u00e8tre ou annuler vos modifications : Lorsque vous enregistrez les param\u00e8tres de tri, ils s\u2019appliqueront \u00e0 la vue chaque fois que cette page sera ouverte, que ce soit par vous ou d\u2019autres collaborateurs. Vues Multiples : Tout comme vous pouvez cr\u00e9er plusieurs pages affichant les donn\u00e9es de la m\u00eame table, vous pouvez avoir diff\u00e9rents param\u00e8tres de tri sur chaque vue des donn\u00e9es. Par exemple, vous pourriez avoir une vue affichant les transactions de carte de cr\u00e9dit tri\u00e9es par date, et une autre les affichant tri\u00e9es par montant. Tri \u00e0 partir du Panneau Lat\u00e9ral # Vous pouvez trier des vues autres que la Table, telles que la Liste de Fiches ou le Graphique, en utilisant l\u2019onglet \u201cTrier & Filtrer\u201d dans le panneau lat\u00e9ral : Vous pouvez ajouter une ou plusieurs colonnes, enregistrer ou annuler les param\u00e8tres et utiliser des options de tri avanc\u00e9es. Options de tri avanc\u00e9es # L\u2019onglet \u201cTrier & Filtrer\u201d expose des options de tri suppl\u00e9mentaires qui peuvent \u00eatre utiles pour divers types de colonnes : Utiliser la position des choix \u2013 disponible sur les colonnes Choix , trie les enregistrements en utilisant l\u2019ordre configur\u00e9 des \u00e9l\u00e9ments de choix, plut\u00f4t que leurs noms. Valeurs vides en dernier \u2013 dans l\u2019ordre alphab\u00e9tique, les valeurs vides sont affich\u00e9es en premier par d\u00e9faut, utilisez cette option pour les mettre \u00e0 la fin. Tri naturel \u2013 pour la colonne Texte, traitera les nombres \u00e0 plusieurs chiffres dans les cha\u00eenes comme s\u2019ils \u00e9taient un seul caract\u00e8re, permettant un ordre plus convivial. Par exemple, en utilisant le tri naturel , Produit10 sera positionn\u00e9 apr\u00e8s Produit2 . Enregistrer les Positions des Lignes # Lorsque vous utilisez le panneau lat\u00e9ral, vous remarquerez un bouton suppl\u00e9mentaire : \u201cMettre \u00e0 jour les donn\u00e9es\u201d. Si vous cliquez dessus, la position actuelle des enregistrements les uns par rapport aux autres est enregistr\u00e9e, et le tri actif par vos colonnes s\u00e9lectionn\u00e9es est d\u00e9sactiv\u00e9. En d\u2019autres termes, les lignes ne sauteront plus en place selon les valeurs de certaines colonnes, mais resteront \u00e0 leur place. Vous pourrez \u00e9galement r\u00e9organiser les lignes manuellement en les faisant glisser. Filtrage # Vous pouvez choisir de voir seulement un sous-ensemble de donn\u00e9es dans une table en filtrant pour certaines valeurs dans une colonne. Ouvrez le menu de la colonne \u00e0 partir de l\u2019en-t\u00eate de la colonne et cliquez sur \u201cFiltrer les donn\u00e9es\u201d. Vous verrez une bo\u00eete de dialogue listant les valeurs dans la colonne : D\u00e9cochez les valeurs que vous ne voulez pas voir, ou cliquez sur \u201cAucune\u201d puis cochez seulement les valeurs que vous voulez voir. La barre de recherche en haut de la bo\u00eete de dialogue vous permet de trouver des valeurs d\u2019int\u00e9r\u00eat si la liste est longue. Cliquez sur \u201cAppliquer\u201d pour appliquer votre param\u00e8tre. Vous pouvez filtrer par plus d\u2019une colonne. Seules les lignes correspondant \u00e0 tous les filtres appara\u00eetront. Comme pour le tri, vous pouvez enregistrer les filtres dans la vue. Cliquez sur l\u2019ic\u00f4ne \u201cTrier & Filtrer\u201d en surbrillance en haut de la table : Vous verrez les colonnes pour lesquelles il y a des filtres actifs, et des options pour enregistrer le filtre ou revenir aux param\u00e8tres enregistr\u00e9s. Comme pour le tri, vous pouvez cr\u00e9er diff\u00e9rentes vues ou pages affichant la m\u00eame table avec des param\u00e8tres de filtre diff\u00e9rents. Par exemple, vous pourriez avoir une page affichant les participants \u00e0 un \u00e9v\u00e9nement avec le statut \u201cConfirm\u00e9\u201d et une autre affichant ceux avec le statut \u201cEn attente\u201d. Filtrage par Intervalle # Certains types de colonnes permettent de filtrer dans un intervalle de valeurs. Lors du filtrage d\u2019une colonne de type num\u00e9rique ou entier, vous avez la possibilit\u00e9 de filtrer dans un intervalle de nombres. Par exemple, si vous ne voulez voir que les achats de grande valeur dans une table des transactions par carte de cr\u00e9dit , vous pouvez ajouter un filtre pour la colonne montant et entrer une valeur minimale de 500 $. La table sera filtr\u00e9e pour afficher toutes les transactions avec un montant de 500 $ ou plus. Lors du filtrage d\u2019une colonne de type date ou datetime, vous avez la possibilit\u00e9 de filtrer dans un intervalle de dates sp\u00e9cifi\u00e9. L\u2019intervalle peut \u00eatre entr\u00e9 dans les champs \u201cD\u00e9but\u201d et \u201cFin\u201d, ou s\u00e9lectionn\u00e9 sur un calendrier. Peut-\u00eatre \u00eates-vous parti en vacances et souhaitez voir toutes les transactions pendant cette p\u00e9riode. Nous pourrions ajouter un filtre \u00e0 la colonne Date pour voir toutes les transactions dans l\u2019intervalle de dates du voyage. Vous pouvez \u00e9galement filtrer les colonnes de type date et datetime par un intervalle relatif, qui est un intervalle relatif \u00e0 la date d\u2019aujourd\u2019hui. Par exemple, vous pourriez vouloir filtrer les t\u00e2ches \u00e0 r\u00e9aliser dans les 14 prochains jours. Ce filtre se mettra \u00e0 jour chaque jour de sorte qu\u2019il filtre toujours sur 14 jours dans le futur, par rapport \u00e0 la date d\u2019aujourd\u2019hui. Lors du filtrage d\u2019une colonne de type date ou datetime, plusieurs intervalles relatifs sont sugg\u00e9r\u00e9s comme raccourci, comme le montre l\u2019image ci-dessous. Si vous utilisez le calendrier pour s\u00e9lectionner un intervalle de dates, vous pouvez \u00e9galement convertir chaque date absolue en une date relative en s\u00e9lectionnant dans la liste des dates relatives disponibles. \u00c9pingler les Filtres # Les filtres peuvent \u00eatre \u00e9pingl\u00e9s en haut d\u2019une table pour un filtrage rapide. Par d\u00e9faut, les filtres seront \u00e9pingl\u00e9s lorsqu\u2019ils sont appliqu\u00e9s pour la premi\u00e8re fois \u00e0 une table. Pour d\u00e9s\u00e9pingler un filtre, cliquez sur le bouton de filtre puis cliquez sur l\u2019ic\u00f4ne d\u2019\u00e9pingle. Si vous d\u00e9s\u00e9pingler un bouton de filtre, tous les filtres enregistr\u00e9s seront toujours appliqu\u00e9s mais le bouton ne sera plus visible. Il peut \u00eatre utile d\u2019enregistrer les boutons sans aucun filtrage pour cr\u00e9er une barre d\u2019outils de filtrage rapide. Si vous enregistrez les param\u00e8tres avec des filtres appliqu\u00e9s, cela les enregistre pour les sessions futures et les autres membres de l\u2019\u00e9quipe verront la m\u00eame chose. Filtres Complexes # Pour filtrer des conditions plus complexes, cr\u00e9ez une nouvelle colonne de formule et filtrez cette colonne pour les valeurs \u201ctrue\u201d. Par exemple, pour filtrer \u201cPersonnes avec un salaire sup\u00e9rieur \u00e0 100 000 $ ou un poste de \u2018Membre du Conseil\u2019\u201c, vous pouvez utiliser une formule comme celle-ci : $Salary > 100000 or $Position == 'Board Member' Cela produira une colonne de valeurs vraies et fausses, que vous pouvez filtrer pour la valeur true .","title":"Search, sort & filter"},{"location":"search-sort-filter/#recherche-tri-et-filtrage","text":"Grist offre plusieurs fa\u00e7ons de rechercher dans vos donn\u00e9es, ou d\u2019organiser les donn\u00e9es pour les avoir \u00e0 port\u00e9e de main.","title":"Recherche, Tri et Filtrage"},{"location":"search-sort-filter/#recherche","text":"En haut de l\u2019\u00e9cran du document, vous verrez une ic\u00f4ne de loupe ( ) qui ouvre une recherche de type tableur. Vous pouvez \u00e9galement commencer \u00e0 rechercher en utilisant le raccourci clavier \u2318 F (Mac) ou Ctrl + F (Windows). Lorsque vous tapez dans la zone de texte de recherche, Grist d\u00e9placera le curseur vers la cellule suivante contenant votre texte de recherche. S\u2019il n\u2019y a plus de correspondances dans la vue ou la page actuelle, le curseur se d\u00e9placera vers la vue suivante ou passera \u00e0 la page suivante.","title":"Recherche"},{"location":"search-sort-filter/#tri","text":"Il est facile de trouver un mot dans un dictionnaire, mais ce ne serait pas le cas si les mots n\u2019\u00e9taient pas tri\u00e9s ! Grist offre des options de tri flexibles et pratiques, qui sont assez diff\u00e9rentes d\u2019un tableur traditionnel. Pour trier une table dans Grist par une colonne, ouvrez le menu \u00e0 partir de l\u2019en-t\u00eate de la colonne et s\u00e9lectionnez \u201cTrier\u201d: Dans le m\u00eame \u00e9l\u00e9ment de menu, vous pouvez choisir de trier par ordre croissant ou d\u00e9croissant. Diff\u00e9rence par rapport \u00e0 Excel : Il est important de noter que le tri ne change aucun calcul de formule, il ne change que l\u2019ordre dans lequel vous voyez les enregistrements. Cela est diff\u00e9rent des tableurs comme Excel. Une autre diff\u00e9rence est que le param\u00e8tre de tri est \u201cactif\u201d : si vous ajoutez un enregistrement ou modifiez une cellule utilis\u00e9e pour le tri, l\u2019enregistrement se d\u00e9placera \u00e0 sa position correcte dans l\u2019ordre de tri. Voir Enregistrer les positions des lignes ci-dessous pour une option plus similaire au comportement d\u2019Excel.","title":"Tri"},{"location":"search-sort-filter/#colonnes-multiples","text":"Lorsque vous triez une table, vous pouvez cliquer sur une autre colonne pour l\u2019ajouter au tri : La deuxi\u00e8me colonne d\u00e9termine l\u2019ordre des enregistrements dont les valeurs dans la premi\u00e8re colonne sont les m\u00eames. Vous pouvez ajouter plus de colonnes au tri. Par exemple, vous pourriez : Trier les employ\u00e9s d\u2019abord par D\u00e9partement, puis par Nom de famille, puis par Pr\u00e9nom. Trier les transactions d\u2019abord par Date, puis par Montant. Trier les t\u00e2ches d\u2019abord par la colonne \u2018Est Compl\u00e9t\u00e9\u2019, puis par Priorit\u00e9.","title":"Colonnes Multiples"},{"location":"search-sort-filter/#enregistrer-les-parametres-de-tri","text":"Comme le tri n\u2019affecte que votre vue des donn\u00e9es, vous pouvez trier les donn\u00e9es dans un document Grist m\u00eame si vous n\u2019avez pas acc\u00e8s en \u00e9criture \u00e0 celui-ci. Si vous pouvez \u00e9crire dans un document, vous pouvez \u00e9galement enregistrer les param\u00e8tres de tri. Lorsque vous modifiez le tri sur une table, l\u2019ic\u00f4ne en haut de celle-ci devient verte. Cliquez dessus pour voir le param\u00e8tre actuellement actif, ainsi que les options pour les manipuler (par exemple, supprimer une colonne du tri), enregistrer le param\u00e8tre ou annuler vos modifications : Lorsque vous enregistrez les param\u00e8tres de tri, ils s\u2019appliqueront \u00e0 la vue chaque fois que cette page sera ouverte, que ce soit par vous ou d\u2019autres collaborateurs. Vues Multiples : Tout comme vous pouvez cr\u00e9er plusieurs pages affichant les donn\u00e9es de la m\u00eame table, vous pouvez avoir diff\u00e9rents param\u00e8tres de tri sur chaque vue des donn\u00e9es. Par exemple, vous pourriez avoir une vue affichant les transactions de carte de cr\u00e9dit tri\u00e9es par date, et une autre les affichant tri\u00e9es par montant.","title":"Enregistrer les Param\u00e8tres de Tri"},{"location":"search-sort-filter/#tri-a-partir-du-panneau-lateral","text":"Vous pouvez trier des vues autres que la Table, telles que la Liste de Fiches ou le Graphique, en utilisant l\u2019onglet \u201cTrier & Filtrer\u201d dans le panneau lat\u00e9ral : Vous pouvez ajouter une ou plusieurs colonnes, enregistrer ou annuler les param\u00e8tres et utiliser des options de tri avanc\u00e9es.","title":"Tri \u00e0 partir du Panneau Lat\u00e9ral"},{"location":"search-sort-filter/#options-de-tri-avancees","text":"L\u2019onglet \u201cTrier & Filtrer\u201d expose des options de tri suppl\u00e9mentaires qui peuvent \u00eatre utiles pour divers types de colonnes : Utiliser la position des choix \u2013 disponible sur les colonnes Choix , trie les enregistrements en utilisant l\u2019ordre configur\u00e9 des \u00e9l\u00e9ments de choix, plut\u00f4t que leurs noms. Valeurs vides en dernier \u2013 dans l\u2019ordre alphab\u00e9tique, les valeurs vides sont affich\u00e9es en premier par d\u00e9faut, utilisez cette option pour les mettre \u00e0 la fin. Tri naturel \u2013 pour la colonne Texte, traitera les nombres \u00e0 plusieurs chiffres dans les cha\u00eenes comme s\u2019ils \u00e9taient un seul caract\u00e8re, permettant un ordre plus convivial. Par exemple, en utilisant le tri naturel , Produit10 sera positionn\u00e9 apr\u00e8s Produit2 .","title":"Options de tri avanc\u00e9es"},{"location":"search-sort-filter/#enregistrer-les-positions-des-lignes","text":"Lorsque vous utilisez le panneau lat\u00e9ral, vous remarquerez un bouton suppl\u00e9mentaire : \u201cMettre \u00e0 jour les donn\u00e9es\u201d. Si vous cliquez dessus, la position actuelle des enregistrements les uns par rapport aux autres est enregistr\u00e9e, et le tri actif par vos colonnes s\u00e9lectionn\u00e9es est d\u00e9sactiv\u00e9. En d\u2019autres termes, les lignes ne sauteront plus en place selon les valeurs de certaines colonnes, mais resteront \u00e0 leur place. Vous pourrez \u00e9galement r\u00e9organiser les lignes manuellement en les faisant glisser.","title":"Enregistrer les Positions des Lignes"},{"location":"search-sort-filter/#filtrage","text":"Vous pouvez choisir de voir seulement un sous-ensemble de donn\u00e9es dans une table en filtrant pour certaines valeurs dans une colonne. Ouvrez le menu de la colonne \u00e0 partir de l\u2019en-t\u00eate de la colonne et cliquez sur \u201cFiltrer les donn\u00e9es\u201d. Vous verrez une bo\u00eete de dialogue listant les valeurs dans la colonne : D\u00e9cochez les valeurs que vous ne voulez pas voir, ou cliquez sur \u201cAucune\u201d puis cochez seulement les valeurs que vous voulez voir. La barre de recherche en haut de la bo\u00eete de dialogue vous permet de trouver des valeurs d\u2019int\u00e9r\u00eat si la liste est longue. Cliquez sur \u201cAppliquer\u201d pour appliquer votre param\u00e8tre. Vous pouvez filtrer par plus d\u2019une colonne. Seules les lignes correspondant \u00e0 tous les filtres appara\u00eetront. Comme pour le tri, vous pouvez enregistrer les filtres dans la vue. Cliquez sur l\u2019ic\u00f4ne \u201cTrier & Filtrer\u201d en surbrillance en haut de la table : Vous verrez les colonnes pour lesquelles il y a des filtres actifs, et des options pour enregistrer le filtre ou revenir aux param\u00e8tres enregistr\u00e9s. Comme pour le tri, vous pouvez cr\u00e9er diff\u00e9rentes vues ou pages affichant la m\u00eame table avec des param\u00e8tres de filtre diff\u00e9rents. Par exemple, vous pourriez avoir une page affichant les participants \u00e0 un \u00e9v\u00e9nement avec le statut \u201cConfirm\u00e9\u201d et une autre affichant ceux avec le statut \u201cEn attente\u201d.","title":"Filtrage"},{"location":"search-sort-filter/#filtrage-par-intervalle","text":"Certains types de colonnes permettent de filtrer dans un intervalle de valeurs. Lors du filtrage d\u2019une colonne de type num\u00e9rique ou entier, vous avez la possibilit\u00e9 de filtrer dans un intervalle de nombres. Par exemple, si vous ne voulez voir que les achats de grande valeur dans une table des transactions par carte de cr\u00e9dit , vous pouvez ajouter un filtre pour la colonne montant et entrer une valeur minimale de 500 $. La table sera filtr\u00e9e pour afficher toutes les transactions avec un montant de 500 $ ou plus. Lors du filtrage d\u2019une colonne de type date ou datetime, vous avez la possibilit\u00e9 de filtrer dans un intervalle de dates sp\u00e9cifi\u00e9. L\u2019intervalle peut \u00eatre entr\u00e9 dans les champs \u201cD\u00e9but\u201d et \u201cFin\u201d, ou s\u00e9lectionn\u00e9 sur un calendrier. Peut-\u00eatre \u00eates-vous parti en vacances et souhaitez voir toutes les transactions pendant cette p\u00e9riode. Nous pourrions ajouter un filtre \u00e0 la colonne Date pour voir toutes les transactions dans l\u2019intervalle de dates du voyage. Vous pouvez \u00e9galement filtrer les colonnes de type date et datetime par un intervalle relatif, qui est un intervalle relatif \u00e0 la date d\u2019aujourd\u2019hui. Par exemple, vous pourriez vouloir filtrer les t\u00e2ches \u00e0 r\u00e9aliser dans les 14 prochains jours. Ce filtre se mettra \u00e0 jour chaque jour de sorte qu\u2019il filtre toujours sur 14 jours dans le futur, par rapport \u00e0 la date d\u2019aujourd\u2019hui. Lors du filtrage d\u2019une colonne de type date ou datetime, plusieurs intervalles relatifs sont sugg\u00e9r\u00e9s comme raccourci, comme le montre l\u2019image ci-dessous. Si vous utilisez le calendrier pour s\u00e9lectionner un intervalle de dates, vous pouvez \u00e9galement convertir chaque date absolue en une date relative en s\u00e9lectionnant dans la liste des dates relatives disponibles.","title":"Filtrage par Intervalle"},{"location":"search-sort-filter/#epingler-les-filtres","text":"Les filtres peuvent \u00eatre \u00e9pingl\u00e9s en haut d\u2019une table pour un filtrage rapide. Par d\u00e9faut, les filtres seront \u00e9pingl\u00e9s lorsqu\u2019ils sont appliqu\u00e9s pour la premi\u00e8re fois \u00e0 une table. Pour d\u00e9s\u00e9pingler un filtre, cliquez sur le bouton de filtre puis cliquez sur l\u2019ic\u00f4ne d\u2019\u00e9pingle. Si vous d\u00e9s\u00e9pingler un bouton de filtre, tous les filtres enregistr\u00e9s seront toujours appliqu\u00e9s mais le bouton ne sera plus visible. Il peut \u00eatre utile d\u2019enregistrer les boutons sans aucun filtrage pour cr\u00e9er une barre d\u2019outils de filtrage rapide. Si vous enregistrez les param\u00e8tres avec des filtres appliqu\u00e9s, cela les enregistre pour les sessions futures et les autres membres de l\u2019\u00e9quipe verront la m\u00eame chose.","title":"\u00c9pingler les Filtres"},{"location":"search-sort-filter/#filtres-complexes","text":"Pour filtrer des conditions plus complexes, cr\u00e9ez une nouvelle colonne de formule et filtrez cette colonne pour les valeurs \u201ctrue\u201d. Par exemple, pour filtrer \u201cPersonnes avec un salaire sup\u00e9rieur \u00e0 100 000 $ ou un poste de \u2018Membre du Conseil\u2019\u201c, vous pouvez utiliser une formule comme celle-ci : $Salary > 100000 or $Position == 'Board Member' Cela produira une colonne de valeurs vraies et fausses, que vous pouvez filtrer pour la valeur true .","title":"Filtres Complexes"},{"location":"self-managed/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . description: Les \u00e9l\u00e9ments essentiels pour cr\u00e9er et maintenir une installation Grist autog\u00e9r\u00e9e. # Grist Autog\u00e9r\u00e9 # description: Les \u00e9l\u00e9ments essentiels pour cr\u00e9er et maintenir une installation Grist autog\u00e9r\u00e9e. Grist Autog\u00e9r\u00e9 Les essentiels Qu\u2019est-ce que Grist Autog\u00e9r\u00e9 ? Comment installer Grist ? Grist sur AWS Comment sandboxer des documents ? XSAVE non disponible PTRACE non disponible Comment ex\u00e9cuter Grist sur un serveur ? Comment configurer une \u00e9quipe ? Comment configurer l\u2019authentification ? Existe-t-il d\u2019autres m\u00e9thodes d\u2019authentification ? Comment activer Grist Entreprise ? Personnalisation Comment personnaliser le style ? Comment lister des widgets personnalis\u00e9s ? Comment configurer des notifications par e-mail ? Comment ajouter plus de packages python ? Comment configurer des webhooks ? Op\u00e9rations Quelles sont les exigences mat\u00e9rielles pour h\u00e9berger Grist ? Quels fichiers Grist stocke-t-il ? Qu\u2019est-ce qu\u2019une base de donn\u00e9es \u201cprincipale\u201d ? Qu\u2019est-ce qu\u2019un magasin d\u2019\u00e9tat ? Comment configurer des snapshots ? Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? Comment mettre \u00e0 jour mon installation ? Que faire si j\u2019ai besoin d\u2019une haute disponibilit\u00e9 ? Les essentiels # Qu\u2019est-ce que Grist Autog\u00e9r\u00e9 ? # Il existe quatre variantes de Grist : SaaS (Software as a Service) : Grist est disponible en tant que service h\u00e9berg\u00e9 sur docs.getgrist.com . Aucune installation n\u00e9cessaire. Plans gratuits et payants, avec des limites d\u2019utilisation. Application de bureau : Grist est disponible en tant qu\u2019application de bureau, construite avec Electron. Elle est disponible en t\u00e9l\u00e9chargement sur https://github.com/gristlabs/grist-desktop/releases . Cette application de bureau n\u2019a pas besoin d\u2019internet et n\u2019est li\u00e9e \u00e0 aucun compte ou service en ligne. Entreprise Autog\u00e9r\u00e9e : Grist est disponible en tant qu\u2019application sous licence install\u00e9e par des entreprises sur leur propre infrastructure avec notre support et assistance. Contient des fonctionnalit\u00e9s propri\u00e9taires d\u00e9velopp\u00e9es pour des entreprises avec des besoins particuliers. Noyau Autog\u00e9r\u00e9 : Grist est disponible en tant qu\u2019application gratuite install\u00e9e par des d\u00e9veloppeurs citoyens sur leur propre infrastructure avec le soutien de la communaut\u00e9. Les documents Grist cr\u00e9\u00e9s avec nos offres SaaS et Entreprise peuvent \u00eatre ouverts et modifi\u00e9s avec le Noyau, et vice versa. Cela \u00e9tablit les documents Grist comme un format fiable pour l\u2019archivage et l\u2019\u00e9change. Grist Autog\u00e9r\u00e9, qu\u2019il s\u2019agisse de l\u2019Entreprise ou du Noyau, est install\u00e9 et configur\u00e9 de la m\u00eame mani\u00e8re, comme d\u00e9crit dans les sections suivantes. Pour plus de clart\u00e9, les sections sont \u00e9tiquet\u00e9es avec la variante \u00e0 laquelle elles s\u2019appliquent, par exemple : Le code source complet de Grist Noyau est toujours disponible sur github.com/gristlabs/grist-core et est sous une licence Apache-2.0. Vous pouvez utiliser et redistribuer le Noyau librement, selon les termes de la licence de logiciel libre. Le code source complet de Grist Entreprise est \u00e9galement disponible, sur github.com/gristlabs/grist-ee , sous une licence propri\u00e9taire qui ne conf\u00e8re aucun droit automatique d\u2019utiliser ou de redistribuer le logiciel. Vous pouvez \u00e9valuer l\u2019Entreprise pendant 30 jours en utilisant les instructions dans les sections suivantes, ou vous inscrire \u00e0 notre plan Grist Entreprise et obtenir du support. Comment installer Grist ? # Le moyen le plus simple d\u2019installer Grist est en tant que conteneur. Nous allons d\u00e9crire comment faire en utilisant Docker , mais il existe de nombreux autres outils et services pour ex\u00e9cuter des conteneurs. Pour essayer Grist avec Docker, cr\u00e9ez un r\u00e9pertoire vide pour que Grist y stocke des donn\u00e9es (par exemple ~/grist ) et ensuite vous pouvez faire : docker run -p 8484:8484 \\ -v ~/grist:/persist \\ -e GRIST_SESSION_SECRET=inventez-un-secret-ici \\ -it gristlabs/grist Vous devriez alors pouvoir visiter http://localhost:8484 dans votre navigateur. Vous pourrez d\u00e9j\u00e0 cr\u00e9er et modifier des documents Grist, et ouvrir et modifier des documents t\u00e9l\u00e9charg\u00e9s depuis une autre installation Grist (comme notre SaaS). Si vous utilisez un autre outil ou service, voici les points importants : Le nom de l\u2019image principale est gristlabs/grist , qui est notre image Docker combin\u00e9e Noyau et Entreprise. L\u2019image gristlabs/grist-oss existe \u00e9galement, qui utilise uniquement du code libre et open source. Cette image utilise uniquement Grist Noyau, et n\u2019a pas de fonctionnalit\u00e9s d\u2019entreprise disponibles. (Pour certains outils comme Podman, vous devrez peut-\u00eatre pr\u00e9fixer ces noms d\u2019image avec docker.io/ .) Un volume (ou montage, ou r\u00e9pertoire) doit \u00eatre disponible \u00e0 l\u2019emplacement /persist dans le conteneur. Il peut \u00eatre initialement vide - Grist le remplira. Sans ce volume, rien de ce que vous faites ne sera stock\u00e9 \u00e0 long terme. Le port 8484 sur le conteneur doit \u00eatre expos\u00e9. Cela peut \u00eatre chang\u00e9 si vous d\u00e9finissez \u00e9galement la variable d\u2019environnement PORT pour le conteneur. La variable d\u2019environnement GRIST_SESSION_SECRET doit \u00eatre d\u00e9finie sur quelque chose de secret pour le conteneur. Install\u00e9 de cette mani\u00e8re, Grist est accessible uniquement par vous. En g\u00e9n\u00e9ral, vous voudrez prendre au moins les \u00e9tapes suivantes : Configurer le sandboxing - cela est important pour limiter ce que les formules peuvent faire. Servir depuis un h\u00f4te public afin de pouvoir collaborer en direct avec d\u2019autres. Activer une m\u00e9thode d\u2019authentification afin que les utilisateurs puissent se connecter. Souvent, vous voudrez connecter Grist \u00e0 un service \u201cSSO\u201d (Single Sign-On) que vous utilisez d\u00e9j\u00e0. Nous supportons certaines m\u00e9thodes d\u2019authentification tr\u00e8s g\u00e9n\u00e9rales qui couvrent de nombreux cas, et une m\u00e9thode d\u2019authentification sp\u00e9ciale pour des cas personnalis\u00e9s. Envisager d\u2019activer le support des snapshots si vous souhaitez que Grist g\u00e8re les sauvegardes de documents. Grist sur AWS # Vous pouvez \u00e9galement h\u00e9berger Grist sur AWS. Des instructions compl\u00e8tes sur cette m\u00e9thode d\u2019h\u00e9bergement sont disponibles sur la page Grist AWS Marketplace . Comment sandboxer des documents ? # Grist permet des formules tr\u00e8s puissantes, utilisant Python. Nous recommandons de d\u00e9finir la variable d\u2019environnement GRIST_SANDBOX_FLAVOR sur gvisor si votre mat\u00e9riel le prend en charge (la plupart le feront), pour ex\u00e9cuter des formules dans chaque document dans un sandbox isol\u00e9 des autres documents et isol\u00e9 du r\u00e9seau. docker run ... -e GRIST_SANDBOX_FLAVOR=gvisor \\ ... Pour v\u00e9rifier que les formules sont \u00e9valu\u00e9es dans un sandbox, vous pouvez cr\u00e9er un document et ensuite v\u00e9rifier que cette formule donne un r\u00e9sultat vide : import glob glob.glob('/etc/*') Voici quelques raisons pour lesquelles le sandboxing gvisor , tel que configur\u00e9 pour Grist, peut \u00e9chouer, et ce que vous pouvez faire pour diagnostiquer le probl\u00e8me. XSAVE non disponible # Votre processeur peut ne pas \u00eatre pris en charge. Sur x86_64 , Sandy Bridge ou plus r\u00e9cent est n\u00e9cessaire. V\u00e9rifiez que le drapeau processeur XSAVE est d\u00e9fini. Voici un moyen rapide de tester cela : grep -q '\\bxsave\\b' /proc/cpuinfo && echo \"XSAVE activ\u00e9\" || echo \"XSAVE manquant\" PTRACE non disponible # La capacit\u00e9 SYS_PTRACE peut ne pas \u00eatre disponible. Si vous ex\u00e9cutez dans docker, vous pourriez essayer de l\u2019accorder explicitement, si vous \u00eates \u00e0 l\u2019aise avec sa mise \u00e0 disposition : docker run ... --cap-add=SYS_PTRACE ... Dans certains environnements cloud tels que AWS ECS, vous devrez peut-\u00eatre \u00e9num\u00e9rer explicitement cette capacit\u00e9 dans votre configuration de conteneur. Comment ex\u00e9cuter Grist sur un serveur ? # Nous vous sugg\u00e9rons de vous familiariser avec tous les autres aspects de l\u2019autogestion sur cette page avant de servir Grist depuis un h\u00f4te public (surtout Sandboxing ). Lorsque vous le ferez, il est important de dire \u00e0 Grist d\u2019o\u00f9 il sera servi, en utilisant la variable APP_HOME_URL . Par exemple, si vous allez servir depuis https://grist.example.com , faites savoir \u00e0 Grist comme ceci : docker run ... -e APP_HOME_URL=\"https://grist.example.com\" \\ ... Vous devrez placer un \u201cproxy inverse\u201d devant Grist pour g\u00e9rer la \u201cterminaison SSL\u201d (d\u00e9cryptage du trafic chiffr\u00e9) en utilisant un certificat qui \u00e9tablit la propri\u00e9t\u00e9 du site. Si vous ne savez pas ce que cela signifie, vous pourriez essayer d\u2019utiliser le Grist Omnibus qui emballe Grist avec un proxy inverse qui utilisera Let\u2019s Encrypt pour obtenir un certificat pour vous automatiquement. Un travail important d\u2019un tel proxy est de rediriger correctement les connexions websocket . Cela repr\u00e9sente deux exigences : Assurez-vous que le proxy utilise HTTP 1.1 Passez les en-t\u00eates HTTP n\u00e9cessaires Upgrade, Connection et Host afin qu\u2019une connexion HTTP puisse \u00eatre mise \u00e0 niveau vers une connexion websocket. Par exemple, voici une configuration minimale pour nginx , un choix possible pour un proxy inverse. server { server_name grist.example.com; location / { proxy_pass http://localhost:8484; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Support WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; } } Cette configuration g\u00e9rera le trafic HTTP de base et les websockets. Elle n\u00e9cessite encore une configuration SSL/TLS suppl\u00e9mentaire. Une option simple pour l\u2019auto-h\u00e9bergement \u00e0 petite \u00e9chelle est d\u2019utiliser certbot par l\u2019EFF . Comment configurer une \u00e9quipe ? # Grist a un concept de \u201csites d\u2019\u00e9quipe\u201d qui sont des zones ind\u00e9pendamment g\u00e9r\u00e9es et nomm\u00e9es contenant leurs propres espaces de travail et documents. Les sites d\u2019\u00e9quipe peuvent avoir des sous-domaines distincts (comme sur les sites d\u2019\u00e9quipe h\u00e9berg\u00e9s de notre SaaS), ou \u00eatre distingu\u00e9s par un pr\u00e9fixe de chemin sp\u00e9cial. Cela n\u2019a souvent pas de sens pour les installations autog\u00e9r\u00e9es, o\u00f9 il y a une seule \u00e9quipe. Avec un seul domaine et une seule \u00e9quipe, le pr\u00e9fixe de chemin sp\u00e9cial (qui ressemble \u00e0 /o/ ) est un gaspillage d\u2019espace peu \u00e9l\u00e9gant dans les URL. Vous pouvez donc indiquer \u00e0 Grist d\u2019utiliser une seule \u00e9quipe en d\u00e9finissant GRIST_SINGLE_ORG (\u201corg\u201d ou \u201corganisation\u201d est un synonyme pour \u00e9quipe) : docker run ... -e GRIST_SINGLE_ORG=cool-beans Le nom de l\u2019\u00e9quipe ne doit utiliser que des caract\u00e8res minuscules a-z, des chiffres 0-9, et le tiret ( - ). Vous voudrez \u00e9galement peut-\u00eatre vous pencher sur Personnalisation du style pour cacher les \u00e9l\u00e9ments d\u2019interface utilisateur dont vous n\u2019avez pas besoin. Comment configurer l\u2019authentification ? # L\u2019authentification peut \u00eatre configur\u00e9e de plusieurs mani\u00e8res pour Grist Noyau et Entreprise, en utilisant SAML, OpenID Connect ou des en-t\u00eates transf\u00e9r\u00e9s. Entre les deux, de nombreux SSO populaires peuvent \u00eatre connect\u00e9s comme les connexions Google ou Microsoft. SAML . OpenID Connect En-t\u00eates transf\u00e9r\u00e9s . Pour toute m\u00e9thode d\u2019authentification, vous voudrez \u00e9galement envisager de d\u00e9finir les variables suivantes : COOKIE_MAX_AGE : (optionnel) date d\u2019expiration pour le cookie de session Grist, lorsqu\u2019il est d\u00e9fini sur none , le cookie de session sera en mode Session - il doit \u00eatre supprim\u00e9 apr\u00e8s la fermeture d\u2019un navigateur. S\u2019il est d\u00e9fini sur un nombre, les unit\u00e9s de ce nombre sont des millisecondes. GRIST_FORCE_LOGIN : (optionnel) lorsqu\u2019il est d\u00e9fini sur true , cela indiquera \u00e0 Grist de rediriger les utilisateurs anonymes vers une page de connexion. Pour notre SaaS, nous utilisons un syst\u00e8me d\u2019authentification personnalis\u00e9 bas\u00e9 sur AWS Cognito. Actuellement, nous n\u2019avons pas de plans pour le publier dans le Noyau ou l\u2019Entreprise. Existe-t-il d\u2019autres m\u00e9thodes d\u2019authentification ? # Si les utilisateurs de votre site se connectent via WordPress, ou via un m\u00e9canisme personnalis\u00e9 que vous avez d\u00e9velopp\u00e9, vous voudrez peut-\u00eatre envisager GristConnect , disponible pour Grist Entreprise. Comment activer Grist Entreprise ? # Grist Entreprise peut \u00eatre activ\u00e9 en visitant le panneau d\u2019administration et en cliquant sur le bouton \u2018Activer les fonctionnalit\u00e9s Grist Entreprise\u2019. Cela fera red\u00e9marrer Grist automatiquement. Vous devriez maintenant avoir une version non activ\u00e9e de Grist Entreprise, avec une p\u00e9riode d\u2019essai de 30 jours. Les cl\u00e9s d\u2019activation sont utilis\u00e9es pour ex\u00e9cuter Grist Entreprise apr\u00e8s une p\u00e9riode d\u2019essai de 30 jours \u00e9coul\u00e9e. Obtenez une cl\u00e9 d\u2019activation en vous inscrivant \u00e0 Grist Entreprise . Vous n\u2019avez pas besoin d\u2019une cl\u00e9 d\u2019activation pour ex\u00e9cuter Grist Noyau, et pouvez revenir au Noyau \u00e0 tout moment en utilisant le bouton dans le panneau d\u2019administration. Placez le contenu de votre cl\u00e9 d\u2019activation dans une variable d\u2019environnement appel\u00e9e GRIST_ACTIVATION , ou placez-la dans un r\u00e9pertoire accessible \u00e0 Grist et fournissez le chemin complet vers le fichier avec la variable d\u2019environnement GRIST_ACTIVATION_FILE . Sans la cl\u00e9 d\u2019activation, il y aura une banni\u00e8re indiquant que Grist est en mode d\u2019essai. Une fois la cl\u00e9 d\u2019activation d\u00e9tect\u00e9e, cette banni\u00e8re dispara\u00eetra. Le remplacement de la cl\u00e9 d\u2019activation n\u00e9cessitera un red\u00e9marrage de Grist. docker run ... -e GRIST_ACTIVATION= \\ -it gristlabs/grist Personnalisation # Comment personnaliser le style ? # L\u2019interface utilisateur de Grist a de nombreux \u00e9l\u00e9ments, dont certains peuvent ne pas \u00eatre pertinents pour vous. Pour les installations autog\u00e9r\u00e9es de Grist, vous pouvez d\u00e9sactiver de nombreux \u00e9l\u00e9ments en utilisant GRIST_HIDE_UI_ELEMENTS . Ceci est une liste s\u00e9par\u00e9e par des virgules des parties de l\u2019interface utilisateur \u00e0 cacher. Les noms autoris\u00e9s des parties sont : helpCenter,billing,templates,multiSite,multiAccounts . Les \u00e9l\u00e9ments de l\u2019interface utilisateur pr\u00e9sents sont \u00e9galement affect\u00e9s par le fait que GRIST_SINGLE_ORG soit d\u00e9fini. docker run ... -e GRIST_HIDE_UI_ELEMENTS=helpCenter,billing,templates,multiSite,multiAccounts \\ ... Par d\u00e9faut, les pages de l\u2019interface utilisateur de Grist ont - Grist ajout\u00e9 \u00e0 leur titre. Vous pouvez changer cela en d\u00e9finissant GRIST_PAGE_TITLE_SUFFIX : docker run ... -e GRIST_PAGE_TITLE_SUFFIX=\" - Cool Beans\" \\ ... Vous pouvez d\u00e9finir le suffixe sur \"_blank\" pour le supprimer compl\u00e8tement. Vous pouvez \u00e9galement remplacer le style CSS du site si vous d\u00e9finissez APP_STATIC_INCLUDE_CUSTOM_CSS sur true . docker run ... -e APP_STATIC_INCLUDE_CUSTOM_CSS=true \\ ... Cela chargera un fichier custom.css suppl\u00e9mentaire. Vous pouvez trouver un exemple de tel fichier dans le d\u00e9p\u00f4t Grist Noyau . Le fichier inclut la plupart de nos variables CSS globales pour les couleurs, et quelques variables pour le logo affich\u00e9 dans le coin sup\u00e9rieur gauche. Il n\u2019y a vraiment aucune limite \u00e0 ce qui peut figurer dans le fichier, donc la sp\u00e9cification de styles arbitraires est possible. Notez que toutes les r\u00e8gles CSS doivent utiliser !important pour s\u2019assurer qu\u2019elles ont la plus haute priorit\u00e9. Sinon, il est possible que des r\u00e8gles plus sp\u00e9cifiques incluses par notre framework prennent le pas. Pour remplacer custom.css , vous pouvez faire votre propre copie et vous assurer que Grist l\u2019utilise. Si le fichier CSS est dans votre r\u00e9pertoire actuel, alors faites : docker run ... -v $PWD/custom.css:/grist/static/custom.css ... Il est possible de diriger Grist pour charger des ressources statiques depuis un CDN en d\u00e9finissant APP_STATIC_URL . Si vous le faites, et que vous utilisez du CSS personnalis\u00e9, vous devrez vous assurer que le CSS personnalis\u00e9 est disponible depuis cette URL de base. Comment lister des widgets personnalis\u00e9s ? # Dans notre SaaS, Grist a une liste de widgets personnalis\u00e9s pr\u00e9construits disponibles dans l\u2019interface utilisateur. Vous pouvez faire en sorte que votre installation autog\u00e9r\u00e9e propose la m\u00eame liste en d\u00e9finissant ce qui suit : docker run ... -e GRIST_WIDGET_LIST_URL=\"https://github.com/gristlabs/grist-widget/releases/download/latest/manifest.json\" \\ ... C\u2019est optionnel. Si vous laissez la variable non d\u00e9finie, les documents avec des widgets personnalis\u00e9s fonctionneront toujours bien, mais vous devrez entrer une URL compl\u00e8te lorsque vous ajoutez des widgets personnalis\u00e9s plut\u00f4t que de choisir une option dans un menu d\u00e9roulant. Vous pouvez rendre votre propre liste de widgets disponible en forkant github.com/gristlabs/grist-widget ou en pr\u00e9parant manuellement un fichier .json sur un serveur public dans le m\u00eame format que notre manifest.json . Comment configurer des notifications par e-mail ? # Dans Grist SaaS, nous envoyons des e-mails tels que des invitations \u00e0 partager un document en utilisant SendGrid . Le m\u00eame m\u00e9canisme est disponible dans Grist Entreprise. Il n\u2019y a pas encore d\u2019\u00e9quivalent dans Grist Noyau. Vous devrez d\u00e9finir une cl\u00e9 API SendGrid : docker run ... -e SENDGRID_API_KEY=SG.XXXXXXX.XXXXX \\ ... Vous devrez rendre un fichier config.json disponible \u00e0 la racine du volume mapp\u00e9 \u00e0 /persist . Son contenu doit \u00eatre le suivant : { \"sendgrid\": { \"api\": { \"prefix\": \"https://api.sendgrid.com/v3\", \"enroll\": \"/marketing/contacts\", \"search\": \"/marketing/contacts/search\", \"searchByEmail\": \"/marketing/contacts/search/emails\", \"listRemove\": \"/marketing/lists/{{id}}/contacts\", \"send\": \"/mail/send\" }, \"address\": { \"from\": { \"email\": \"\", \"name\": \"le nom \u00e0 afficher avec l'e-mail\" } }, \"template\": { \"invite\": \"d-f9.....\", \"billingManagerInvite\": \"d-f9.....\", \"memberChange\": \"d-b3.....\" }, \"list\": { \"singleUserOnboarding\": \"b22...\" }, \"unsubscribeGroup\": { \"invites\": 19..., \"billingManagers\": 19.... } } } Voici la signification des cl\u00e9s dans ce fichier : sendgrid.api - Les valeurs doivent rester inchang\u00e9es par rapport \u00e0 ce qui est d\u00e9fini dans l\u2019exemple. Cela contr\u00f4le la version de l\u2019API et les points de terminaison. Grist cible actuellement la v3 de l\u2019API web de SendGrid. sendgrid.address - Doit \u00eatre d\u00e9fini sur une adresse e-mail v\u00e9rifi\u00e9e et le nom d\u2019un exp\u00e9diteur SendGrid. Cela contr\u00f4le l\u2019adresse \u201cDe\u201d de tous les e-mails envoy\u00e9s via SendGrid (par exemple, les invitations envoy\u00e9es au nom des utilisateurs Grist). sendgrid.template - Mappe les actions Grist aux identifiants de mod\u00e8les d\u2019e-mail SendGrid. Ceux-ci sont pour les e-mails transactionnels qui sont envoy\u00e9s \u00e0 la suite d\u2019une action se produisant dans Grist. sendgrid.template.invite - Ceci est pour les e-mails envoy\u00e9s aux utilisateurs qui sont invit\u00e9s \u00e0 des documents, des espaces de travail ou des sites. sendgrid.template.memberChange - Ceci est pour les e-mails envoy\u00e9s aux responsables de la facturation lorsque des utilisateurs sont ajout\u00e9s/retir\u00e9s des sites. sendgrid.list - Mappe les actions Grist aux identifiants de listes de marketing SendGrid. Ceux-ci sont pour des e-mails automatis\u00e9s en cours qui sont envoy\u00e9s \u00e0 tous les utilisateurs qui sont inscrits dans une liste particuli\u00e8re. sendgrid.list.singleUserOnboarding - Les nouveaux utilisateurs Grist sont automatiquement ajout\u00e9s \u00e0 cette liste lors de leur premi\u00e8re connexion. Cela est adapt\u00e9 pour envoyer des e-mails d\u2019int\u00e9gration r\u00e9guliers aux utilisateurs. sendgrid.unsubscribeGroup - Mappe les types d\u2019e-mails aux identifiants de groupes de d\u00e9sinscription SendGrid. Ceux-ci permettent aux utilisateurs de se d\u00e9sinscrire de la r\u00e9ception de certains types d\u2019e-mails (via le lien dans l\u2019e-mail). sendgrid.unsubscribeGrist.invites - Si d\u00e9fini, les e-mails d\u2019invitation peuvent \u00eatre supprim\u00e9s via le lien de d\u00e9sinscription dans les e-mails. sendgrid.unsubscribeGrist.billingManagers - Si d\u00e9fini, les e-mails envoy\u00e9s sp\u00e9cifiquement aux responsables de la facturation (par exemple, changements d\u2019adh\u00e9sion) peuvent \u00eatre supprim\u00e9s via le lien de d\u00e9sinscription dans les e-mails. Pour r\u00e9f\u00e9rence, il existe des exemples de mod\u00e8les SendGrid dans example-sendgrid-templates.zip bas\u00e9s sur une exportation des mod\u00e8les SendGrid pour notre SaaS. Comment ajouter plus de packages python ? # L\u2019ensemble des packages python disponibles pour une utilisation dans les formules n\u2019est actuellement pas configurable. Vous pouvez ajouter des packages de toute fa\u00e7on si vous \u00eates pr\u00eat \u00e0 construire et installer votre propre version de Grist. Avertissement Les documents Grist cr\u00e9\u00e9s sur une installation avec des packages python personnalis\u00e9s ne ram\u00e8neront pas ces packages s\u2019ils sont copi\u00e9s vers une autre installation. Les formules utilisant des packages python personnalis\u00e9s donneront des erreurs lorsque ces packages ne seront pas disponibles. Cr\u00e9ez un r\u00e9pertoire vide et ajoutez ce qui suit, dans un fichier appel\u00e9 Dockerfile : FROM gristlabs/grist # ou grist-oss ou grist-omnibus RUN \\ apt update && apt install -y openssl && \\ python3 -m pip install phonenumbers Remplacez phonenumbers par le package python ou les packages que vous souhaitez installer. Vous pouvez maintenant construire votre image Grist personnalis\u00e9e en ex\u00e9cutant un docker build dans le r\u00e9pertoire contenant le Dockerfile : # remplacez \"custom\" par un nom d'utilisateur ou de l'organisation. docker build -t custom/grist . Une fois termin\u00e9, vous pouvez utiliser custom/grist \u00e0 la place de gristlabs/grist(-ee) dans Comment installer Grist , et votre biblioth\u00e8que python sera d\u00e9sormais disponible \u00e0 l\u2019importation dans les formules. Si vous souhaitez que l\u2019importation soit effectu\u00e9e automatiquement, afin de ne pas avoir \u00e0 le faire dans les formules, cela n\u00e9cessite actuellement un changement de code dans sandbox/grist/gencode.py . Si vous \u00eates \u00e0 l\u2019aise avec les modifications de code, alors les instructions de construction du d\u00e9p\u00f4t grist-core sont l\u2019endroit o\u00f9 commencer. Comment configurer des webhooks ? # Il est possible d\u2019utiliser des webhooks pour activer des int\u00e9grations avec des services externes. La documentation des webhooks contient plus de d\u00e9tails. Notez que lors de l\u2019auto-h\u00e9bergement, seuls les services externes autoris\u00e9s par la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS sont autoris\u00e9s. Il y a des pr\u00e9occupations de s\u00e9curit\u00e9 avec l\u2019autorisation de tout domaine, car les services internes de Grist peuvent devenir vuln\u00e9rables \u00e0 la manipulation. Op\u00e9rations # Quelles sont les exigences mat\u00e9rielles pour h\u00e9berger Grist ? # Pour h\u00e9berger Grist en tant que conteneur Linux, voici une configuration connue pour une vari\u00e9t\u00e9 de charges de travail mod\u00e9r\u00e9es : 8 Go de RAM 2 CPU 20 Go de disque Grist est emball\u00e9 pour les architectures CPU suivantes : x86_64 (Sandy Bridge ou plus r\u00e9cent si le sandboxing est activ\u00e9) ARM64 Chaque document Grist est une base de donn\u00e9es s\u00e9par\u00e9e, donc il est difficile de d\u00e9clarer des exigences minimales absolues sans savoir quels documents seront utilis\u00e9s. Dans les tests, le mod\u00e8le de recherche d\u2019investissement fonctionne confortablement servi depuis un conteneur Grist avec : 100 Mo de RAM sans sandboxing activ\u00e9. 200 Mo de RAM avec sandboxing activ\u00e9. 1 CPU. Les exigences en m\u00e9moire et en CPU \u00e9volueront avec le nombre de documents utilis\u00e9s simultan\u00e9ment par votre \u00e9quipe. Le sandboxing est un probl\u00e8me important pour servir Grist. Il est r\u00e9alis\u00e9 en utilisant gvisor . Le sandboxing d\u00e9pend de la disponibilit\u00e9 de certaines capacit\u00e9s, et peut \u00eatre indisponible dans des environnements qui n\u2019autorisent pas ou manquent ces capacit\u00e9s. Le sandboxing de Grist est connu pour fonctionner dans les environnements suivants : Conteneurs docker r\u00e9guliers non privil\u00e9gi\u00e9s avec les param\u00e8tres de s\u00e9curit\u00e9 par d\u00e9faut. Instances AWS EC2. Conteneurs AWS Fargate, avec SYS_PTRACE d\u00e9fini dans linuxParameters.capabilities . Le sandboxing de Grist a \u00e9t\u00e9 signal\u00e9 comme \u00e9chouant \u00e0 s\u2019initialiser sur des processeurs Intel plus anciens qui ne prennent pas en charge la fonctionnalit\u00e9 XSAVE (prise en charge par Sandy Bridge et ult\u00e9rieur). Quels fichiers Grist stocke-t-il ? # Lorsqu\u2019il est install\u00e9 en tant que conteneur, Grist s\u2019attend \u00e0 avoir acc\u00e8s \u00e0 un volume persistant, ou \u00e0 un r\u00e9pertoire partag\u00e9 avec l\u2019h\u00f4te, dans lequel il stocke tout ce qui doit durer au-del\u00e0 d\u2019un red\u00e9marrage de conteneur. Concr\u00e8tement, si vous avez d\u00e9marr\u00e9 Grist exactement comme d\u00e9crit dans Comment installer Grist , ce r\u00e9pertoire serait ~/grist . Voici ce que vous y trouveriez : Un sous-r\u00e9pertoire appel\u00e9 docs , contenant des fichiers *.grist . Ce sont des documents Grist. Les documents Grist sont des bases de donn\u00e9es SQLite, donc vous pouvez inspecter ces fichiers avec l\u2019utilitaire standard sqlite3 . Vous pouvez \u00e9galement les t\u00e9l\u00e9charger sur une autre installation de Grist (comme notre service h\u00e9berg\u00e9) et les visualiser/\u00e9diter l\u00e0-bas. Si vous d\u00e9placez ou renommez ces fichiers, Grist ne les reconna\u00eetra plus. Si le support des snapshots est configur\u00e9, il y aura des fichiers suppl\u00e9mentaires \u00e0 c\u00f4t\u00e9 de chaque fichier .grist pour suivre son \u00e9tat de stockage. Un fichier appel\u00e9 grist-sessions.db . Cela contient des informations pour prendre en charge les sessions de navigateur avec Grist. C\u2019est une base de donn\u00e9es SQLite. Si redis est configur\u00e9 , cela est utilis\u00e9 \u00e0 la place de ce fichier. Un fichier appel\u00e9 home.sqlite3 . Cela contient des informations sur les \u00e9quipes, les espaces de travail et les documents (m\u00e9tadonn\u00e9es uniquement, telles que les noms, plut\u00f4t que le contenu des documents tels que les tables et les cellules). C\u2019est une base de donn\u00e9es SQLite. Elle est appel\u00e9e la base de donn\u00e9es principale et si PostgreSQL est configur\u00e9, cela est utilis\u00e9 \u00e0 la place de ce fichier. Si vous utilisez Grist Omnibus, il y a d\u2019autres fichiers, y compris : Un r\u00e9pertoire auth , avec une base de donn\u00e9es SQLite pour suivre l\u2019\u00e9tat de connexion, et un stockage de tous les certificats cr\u00e9\u00e9s. Un r\u00e9pertoire param , avec des secrets invent\u00e9s pour l\u2019installation. Qu\u2019est-ce qu\u2019une base de donn\u00e9es \u201cprincipale\u201d ? # Grist stocke des m\u00e9tadonn\u00e9es sur les utilisateurs, les documents, les espaces de travail, etc. dans une base de donn\u00e9es appel\u00e9e la \u201cbase de donn\u00e9es principale\u201d. Cela ne contient pas le mat\u00e9riel \u00e0 l\u2019int\u00e9rieur des documents tels que les tables et les colonnes, mais contient des noms de documents et des heures de cr\u00e9ation, par exemple. Par d\u00e9faut, Grist cr\u00e9era une base de donn\u00e9es principale dans un fichier Sqlite dans le r\u00e9pertoire /persist . Pour utiliser \u00e0 la place une base de donn\u00e9es PostgreSQL, cr\u00e9ez la base de donn\u00e9es ainsi qu\u2019un utilisateur ayant un acc\u00e8s suffisant pour cr\u00e9er des tables, et d\u00e9finissez les variables suivantes : TYPEORM_TYPE - d\u00e9fini sur postgres TYPEORM_DATABASE - d\u00e9fini sur le nom de la base de donn\u00e9es, par exemple home TYPEORM_USERNAME - d\u00e9fini sur le nom d\u2019utilisateur postgres ayant des droits sur la base de donn\u00e9es TYPEORM_PASSWORD - d\u00e9fini sur le mot de passe postgres ayant des droits sur la base de donn\u00e9es TYPEORM_HOST - d\u00e9fini sur le nom d\u2019h\u00f4te de la base de donn\u00e9es, par exemple grist.mumble.rds.amazonaws.com TYPEORM_PORT - d\u00e9fini sur le num\u00e9ro de port de la base de donn\u00e9es si ce n\u2019est pas le d\u00e9faut pour PostgreSQL Grist est connu pour fonctionner avec PostgreSQL des versions 10 \u00e0 14 (les versions ult\u00e9rieures devraient \u00e9galement fonctionner, mais n\u2019ont pas \u00e9t\u00e9 sp\u00e9cifiquement test\u00e9es au moment de la r\u00e9daction). Qu\u2019est-ce qu\u2019un magasin d\u2019\u00e9tat ? # Grist peut \u00eatre configur\u00e9 pour utiliser Redis comme cache d\u2019\u00e9tat externe. Pour la plupart des fonctionnalit\u00e9s de Grist, cela est optionnel. Il est requis pour le support des webhooks, et recommand\u00e9 pour le support des snapshots. Pour l\u2019utiliser, il suffit de d\u00e9finir REDIS_URL sur quelque chose comme redis://hostname/N o\u00f9 N est un num\u00e9ro de base de donn\u00e9es redis. docker run ... -e REDIS_URL=\"redis://hostname/N\" ... Comment configurer des snapshots ? # La fonctionnalit\u00e9 de stockage cloud de Grist permet la synchronisation automatique des documents Grist et des versions de documents vers un bucket compatible S3 (disponible pour toutes les versions de Grist) ou vers un stockage Azure (dans Grist Entreprise). Voici un exemple d\u2019ex\u00e9cution de Grist localement, avec des snapshots stock\u00e9s dans une instance MinIO de test : # Cr\u00e9er un r\u00e9seau docker network create grist # D\u00e9marrer Redis dans notre r\u00e9seau (recommand\u00e9 pour les snapshots) docker run --rm --network grist --name redis redis # D\u00e9marrer MinIO dans notre r\u00e9seau docker run --rm --network grist --name minio \\ -v /tmp/minio:/data \\ -p 9000:9000 -p 9001:9001 \\ -e MINIO_ROOT_USER=grist -e MINIO_ROOT_PASSWORD=admingrist \\ -it minio/minio server /data -console-address \":9001\" # Visitez http://localhost:9000 et configurez un bucket appel\u00e9 grist-docs. # Assurez-vous d'activer la versioning sur le bucket. # Connectez Grist \u00e0 Redis et MinIO docker run --rm --network grist \\ -e GRIST_DOCS_MINIO_ACCESS_KEY=grist \\ -e GRIST_DOCS_MINIO_SECRET_KEY=admingrist \\ -e GRIST_DOCS_MINIO_USE_SSL=0 \\ -e GRIST_DOCS_MINIO_BUCKET=grist-docs \\ -e GRIST_DOCS_MINIO_ENDPOINT=minio \\ -e GRIST_DOCS_MINIO_PORT=9000 \\ -e REDIS_URL=redis://redis \\ -v /tmp/grist:/persist -p 8484:8484 -it gristlabs/grist Voici des drapeaux pour faire parler Grist \u00e0 un bucket AWS S3 en utilisant le client MinIO : ... -e GRIST_DOCS_MINIO_ACCESS_KEY=$AWS_ACCESS_KEY_ID \\ -e GRIST_DOCS_MINIO_SECRET_KEY=$AWS_SECRET_ACCESS_KEY \\ -e GRIST_DOCS_MINIO_ENDPOINT=s3.amazonaws.com \\ -e GRIST_DOCS_MINIO_BUCKET=grist-docs \\ ... Selon les sp\u00e9cifications de MinIO , la r\u00e9gion par d\u00e9faut du bucket est us-east-1 . Cette r\u00e9gion par d\u00e9faut peut \u00eatre remplac\u00e9e en utilisant le drapeau GRIST_DOCS_MINIO_BUCKET_REGION . Pour plus de d\u00e9tails, et d\u2019autres options, voir Stockage Cloud . Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? # Par d\u00e9faut, les installations Grist ne \u201ct\u00e9l\u00e9phonent pas\u201d \u00e0 un service central. Il est utile de leur permettre de le faire, pour donner \u00e0 Grist Labs un aper\u00e7u limit\u00e9 de votre utilisation, \u00e0 travers des mesures appel\u00e9es t\u00e9l\u00e9m\u00e9trie. Cela aidera \u00e0 guider le d\u00e9veloppement et \u00e0 attirer l\u2019attention sur les utilisateurs autog\u00e9r\u00e9s en tant que groupe. Le moyen le plus simple pour un propri\u00e9taire d\u2019une installation Grist de choisir d\u2019envoyer la t\u00e9l\u00e9m\u00e9trie \u00e0 Grist Labs est de cliquer sur le bouton \u201cOpter pour la t\u00e9l\u00e9m\u00e9trie\u201d sur la banni\u00e8re \u201cSupport Grist\u201d sur la page principale de l\u2019installation. Si vous ne souhaitez pas opter pour cela, vous pouvez ignorer la banni\u00e8re. La banni\u00e8re est affich\u00e9e uniquement au propri\u00e9taire de l\u2019installation. Le propri\u00e9taire de l\u2019installation est l\u2019utilisateur dont l\u2019adresse e-mail correspond \u00e0 la variable d\u2019environnement GRIST_DEFAULT_EMAIL (si d\u00e9finie). Vous pouvez contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie \u00e0 tout moment en utilisant la page \u201cSupport Grist\u201d, si vous \u00eates le propri\u00e9taire de l\u2019installation. Plut\u00f4t que d\u2019utiliser des boutons pour opter pour la t\u00e9l\u00e9m\u00e9trie, vous pouvez d\u00e9finir la variable d\u2019environnement GRIST_TELEMETRY_LEVEL sur limited . Cela a le m\u00eame effet que le bouton \u201cOpter pour la t\u00e9l\u00e9m\u00e9trie\u201d. La variable d\u2019environnement GRIST_TELEMETRY_LEVEL , si d\u00e9finie, prend la priorit\u00e9 sur tout param\u00e8tre effectu\u00e9 de mani\u00e8re interactive. Les valeurs recommand\u00e9es sont limited ou off . Dans tous les cas, lisez t\u00e9l\u00e9m\u00e9trie limit\u00e9e pour des d\u00e9tails exacts sur les donn\u00e9es envoy\u00e9es, et aper\u00e7u de la t\u00e9l\u00e9m\u00e9trie pour plus d\u2019explications. Une m\u00e9thode interactive pour contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie n\u2019est actuellement disponible que pour les versions Grist Noyau. Dans tous les cas, le d\u00e9faut est de ne pas envoyer de t\u00e9l\u00e9m\u00e9trie. Comment mettre \u00e0 jour mon installation ? # Nous publions actuellement de nouvelles images Grist Noyau et Entreprise \u00e0 environ des intervalles hebdomadaires. Grist g\u00e8re toutes les migrations qui peuvent \u00eatre n\u00e9cessaires pour les documents ou les bases de donn\u00e9es qu\u2019il utilise. Des utilitaires tels que Watchtower peuvent maintenir votre version de Grist \u00e0 jour pour vous. Que faire si j\u2019ai besoin d\u2019une haute disponibilit\u00e9 ? # Nous avons d\u00e9velopp\u00e9 une expertise dans l\u2019h\u00e9bergement d\u2019installations Grist tr\u00e8s occup\u00e9es, avec de nombreux utilisateurs, y compris comment mettre \u00e0 jour avec un minimum de perturbation, et comment \u00e9voluer pour g\u00e9rer une charge lourde. Nous serions heureux d\u2019aider les clients Entreprise ayant des besoins de cette nature.","title":"Self-managed Grist"},{"location":"self-managed/#description-les-elements-essentiels-pour-creer-et-maintenir-une-installation-grist-autogeree","text":"","title":"description: Les \u00e9l\u00e9ments essentiels pour cr\u00e9er et maintenir une installation Grist autog\u00e9r\u00e9e."},{"location":"self-managed/#grist-autogere","text":"description: Les \u00e9l\u00e9ments essentiels pour cr\u00e9er et maintenir une installation Grist autog\u00e9r\u00e9e. Grist Autog\u00e9r\u00e9 Les essentiels Qu\u2019est-ce que Grist Autog\u00e9r\u00e9 ? Comment installer Grist ? Grist sur AWS Comment sandboxer des documents ? XSAVE non disponible PTRACE non disponible Comment ex\u00e9cuter Grist sur un serveur ? Comment configurer une \u00e9quipe ? Comment configurer l\u2019authentification ? Existe-t-il d\u2019autres m\u00e9thodes d\u2019authentification ? Comment activer Grist Entreprise ? Personnalisation Comment personnaliser le style ? Comment lister des widgets personnalis\u00e9s ? Comment configurer des notifications par e-mail ? Comment ajouter plus de packages python ? Comment configurer des webhooks ? Op\u00e9rations Quelles sont les exigences mat\u00e9rielles pour h\u00e9berger Grist ? Quels fichiers Grist stocke-t-il ? Qu\u2019est-ce qu\u2019une base de donn\u00e9es \u201cprincipale\u201d ? Qu\u2019est-ce qu\u2019un magasin d\u2019\u00e9tat ? Comment configurer des snapshots ? Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? Comment mettre \u00e0 jour mon installation ? Que faire si j\u2019ai besoin d\u2019une haute disponibilit\u00e9 ?","title":"Grist Autog\u00e9r\u00e9"},{"location":"self-managed/#les-essentiels","text":"","title":"Les essentiels"},{"location":"self-managed/#quest-ce-que-grist-autogere","text":"Il existe quatre variantes de Grist : SaaS (Software as a Service) : Grist est disponible en tant que service h\u00e9berg\u00e9 sur docs.getgrist.com . Aucune installation n\u00e9cessaire. Plans gratuits et payants, avec des limites d\u2019utilisation. Application de bureau : Grist est disponible en tant qu\u2019application de bureau, construite avec Electron. Elle est disponible en t\u00e9l\u00e9chargement sur https://github.com/gristlabs/grist-desktop/releases . Cette application de bureau n\u2019a pas besoin d\u2019internet et n\u2019est li\u00e9e \u00e0 aucun compte ou service en ligne. Entreprise Autog\u00e9r\u00e9e : Grist est disponible en tant qu\u2019application sous licence install\u00e9e par des entreprises sur leur propre infrastructure avec notre support et assistance. Contient des fonctionnalit\u00e9s propri\u00e9taires d\u00e9velopp\u00e9es pour des entreprises avec des besoins particuliers. Noyau Autog\u00e9r\u00e9 : Grist est disponible en tant qu\u2019application gratuite install\u00e9e par des d\u00e9veloppeurs citoyens sur leur propre infrastructure avec le soutien de la communaut\u00e9. Les documents Grist cr\u00e9\u00e9s avec nos offres SaaS et Entreprise peuvent \u00eatre ouverts et modifi\u00e9s avec le Noyau, et vice versa. Cela \u00e9tablit les documents Grist comme un format fiable pour l\u2019archivage et l\u2019\u00e9change. Grist Autog\u00e9r\u00e9, qu\u2019il s\u2019agisse de l\u2019Entreprise ou du Noyau, est install\u00e9 et configur\u00e9 de la m\u00eame mani\u00e8re, comme d\u00e9crit dans les sections suivantes. Pour plus de clart\u00e9, les sections sont \u00e9tiquet\u00e9es avec la variante \u00e0 laquelle elles s\u2019appliquent, par exemple : Le code source complet de Grist Noyau est toujours disponible sur github.com/gristlabs/grist-core et est sous une licence Apache-2.0. Vous pouvez utiliser et redistribuer le Noyau librement, selon les termes de la licence de logiciel libre. Le code source complet de Grist Entreprise est \u00e9galement disponible, sur github.com/gristlabs/grist-ee , sous une licence propri\u00e9taire qui ne conf\u00e8re aucun droit automatique d\u2019utiliser ou de redistribuer le logiciel. Vous pouvez \u00e9valuer l\u2019Entreprise pendant 30 jours en utilisant les instructions dans les sections suivantes, ou vous inscrire \u00e0 notre plan Grist Entreprise et obtenir du support.","title":"Qu’est-ce que Grist Autog\u00e9r\u00e9 ?"},{"location":"self-managed/#comment-installer-grist","text":"Le moyen le plus simple d\u2019installer Grist est en tant que conteneur. Nous allons d\u00e9crire comment faire en utilisant Docker , mais il existe de nombreux autres outils et services pour ex\u00e9cuter des conteneurs. Pour essayer Grist avec Docker, cr\u00e9ez un r\u00e9pertoire vide pour que Grist y stocke des donn\u00e9es (par exemple ~/grist ) et ensuite vous pouvez faire : docker run -p 8484:8484 \\ -v ~/grist:/persist \\ -e GRIST_SESSION_SECRET=inventez-un-secret-ici \\ -it gristlabs/grist Vous devriez alors pouvoir visiter http://localhost:8484 dans votre navigateur. Vous pourrez d\u00e9j\u00e0 cr\u00e9er et modifier des documents Grist, et ouvrir et modifier des documents t\u00e9l\u00e9charg\u00e9s depuis une autre installation Grist (comme notre SaaS). Si vous utilisez un autre outil ou service, voici les points importants : Le nom de l\u2019image principale est gristlabs/grist , qui est notre image Docker combin\u00e9e Noyau et Entreprise. L\u2019image gristlabs/grist-oss existe \u00e9galement, qui utilise uniquement du code libre et open source. Cette image utilise uniquement Grist Noyau, et n\u2019a pas de fonctionnalit\u00e9s d\u2019entreprise disponibles. (Pour certains outils comme Podman, vous devrez peut-\u00eatre pr\u00e9fixer ces noms d\u2019image avec docker.io/ .) Un volume (ou montage, ou r\u00e9pertoire) doit \u00eatre disponible \u00e0 l\u2019emplacement /persist dans le conteneur. Il peut \u00eatre initialement vide - Grist le remplira. Sans ce volume, rien de ce que vous faites ne sera stock\u00e9 \u00e0 long terme. Le port 8484 sur le conteneur doit \u00eatre expos\u00e9. Cela peut \u00eatre chang\u00e9 si vous d\u00e9finissez \u00e9galement la variable d\u2019environnement PORT pour le conteneur. La variable d\u2019environnement GRIST_SESSION_SECRET doit \u00eatre d\u00e9finie sur quelque chose de secret pour le conteneur. Install\u00e9 de cette mani\u00e8re, Grist est accessible uniquement par vous. En g\u00e9n\u00e9ral, vous voudrez prendre au moins les \u00e9tapes suivantes : Configurer le sandboxing - cela est important pour limiter ce que les formules peuvent faire. Servir depuis un h\u00f4te public afin de pouvoir collaborer en direct avec d\u2019autres. Activer une m\u00e9thode d\u2019authentification afin que les utilisateurs puissent se connecter. Souvent, vous voudrez connecter Grist \u00e0 un service \u201cSSO\u201d (Single Sign-On) que vous utilisez d\u00e9j\u00e0. Nous supportons certaines m\u00e9thodes d\u2019authentification tr\u00e8s g\u00e9n\u00e9rales qui couvrent de nombreux cas, et une m\u00e9thode d\u2019authentification sp\u00e9ciale pour des cas personnalis\u00e9s. Envisager d\u2019activer le support des snapshots si vous souhaitez que Grist g\u00e8re les sauvegardes de documents.","title":"Comment installer Grist ?"},{"location":"self-managed/#grist-sur-aws","text":"Vous pouvez \u00e9galement h\u00e9berger Grist sur AWS. Des instructions compl\u00e8tes sur cette m\u00e9thode d\u2019h\u00e9bergement sont disponibles sur la page Grist AWS Marketplace .","title":"Grist sur AWS"},{"location":"self-managed/#comment-sandboxer-des-documents","text":"Grist permet des formules tr\u00e8s puissantes, utilisant Python. Nous recommandons de d\u00e9finir la variable d\u2019environnement GRIST_SANDBOX_FLAVOR sur gvisor si votre mat\u00e9riel le prend en charge (la plupart le feront), pour ex\u00e9cuter des formules dans chaque document dans un sandbox isol\u00e9 des autres documents et isol\u00e9 du r\u00e9seau. docker run ... -e GRIST_SANDBOX_FLAVOR=gvisor \\ ... Pour v\u00e9rifier que les formules sont \u00e9valu\u00e9es dans un sandbox, vous pouvez cr\u00e9er un document et ensuite v\u00e9rifier que cette formule donne un r\u00e9sultat vide : import glob glob.glob('/etc/*') Voici quelques raisons pour lesquelles le sandboxing gvisor , tel que configur\u00e9 pour Grist, peut \u00e9chouer, et ce que vous pouvez faire pour diagnostiquer le probl\u00e8me.","title":"Comment sandboxer des documents ?"},{"location":"self-managed/#xsave-non-disponible","text":"Votre processeur peut ne pas \u00eatre pris en charge. Sur x86_64 , Sandy Bridge ou plus r\u00e9cent est n\u00e9cessaire. V\u00e9rifiez que le drapeau processeur XSAVE est d\u00e9fini. Voici un moyen rapide de tester cela : grep -q '\\bxsave\\b' /proc/cpuinfo && echo \"XSAVE activ\u00e9\" || echo \"XSAVE manquant\"","title":"XSAVE non disponible"},{"location":"self-managed/#ptrace-non-disponible","text":"La capacit\u00e9 SYS_PTRACE peut ne pas \u00eatre disponible. Si vous ex\u00e9cutez dans docker, vous pourriez essayer de l\u2019accorder explicitement, si vous \u00eates \u00e0 l\u2019aise avec sa mise \u00e0 disposition : docker run ... --cap-add=SYS_PTRACE ... Dans certains environnements cloud tels que AWS ECS, vous devrez peut-\u00eatre \u00e9num\u00e9rer explicitement cette capacit\u00e9 dans votre configuration de conteneur.","title":"PTRACE non disponible"},{"location":"self-managed/#comment-executer-grist-sur-un-serveur","text":"Nous vous sugg\u00e9rons de vous familiariser avec tous les autres aspects de l\u2019autogestion sur cette page avant de servir Grist depuis un h\u00f4te public (surtout Sandboxing ). Lorsque vous le ferez, il est important de dire \u00e0 Grist d\u2019o\u00f9 il sera servi, en utilisant la variable APP_HOME_URL . Par exemple, si vous allez servir depuis https://grist.example.com , faites savoir \u00e0 Grist comme ceci : docker run ... -e APP_HOME_URL=\"https://grist.example.com\" \\ ... Vous devrez placer un \u201cproxy inverse\u201d devant Grist pour g\u00e9rer la \u201cterminaison SSL\u201d (d\u00e9cryptage du trafic chiffr\u00e9) en utilisant un certificat qui \u00e9tablit la propri\u00e9t\u00e9 du site. Si vous ne savez pas ce que cela signifie, vous pourriez essayer d\u2019utiliser le Grist Omnibus qui emballe Grist avec un proxy inverse qui utilisera Let\u2019s Encrypt pour obtenir un certificat pour vous automatiquement. Un travail important d\u2019un tel proxy est de rediriger correctement les connexions websocket . Cela repr\u00e9sente deux exigences : Assurez-vous que le proxy utilise HTTP 1.1 Passez les en-t\u00eates HTTP n\u00e9cessaires Upgrade, Connection et Host afin qu\u2019une connexion HTTP puisse \u00eatre mise \u00e0 niveau vers une connexion websocket. Par exemple, voici une configuration minimale pour nginx , un choix possible pour un proxy inverse. server { server_name grist.example.com; location / { proxy_pass http://localhost:8484; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Support WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; } } Cette configuration g\u00e9rera le trafic HTTP de base et les websockets. Elle n\u00e9cessite encore une configuration SSL/TLS suppl\u00e9mentaire. Une option simple pour l\u2019auto-h\u00e9bergement \u00e0 petite \u00e9chelle est d\u2019utiliser certbot par l\u2019EFF .","title":"Comment ex\u00e9cuter Grist sur un serveur ?"},{"location":"self-managed/#comment-configurer-une-equipe","text":"Grist a un concept de \u201csites d\u2019\u00e9quipe\u201d qui sont des zones ind\u00e9pendamment g\u00e9r\u00e9es et nomm\u00e9es contenant leurs propres espaces de travail et documents. Les sites d\u2019\u00e9quipe peuvent avoir des sous-domaines distincts (comme sur les sites d\u2019\u00e9quipe h\u00e9berg\u00e9s de notre SaaS), ou \u00eatre distingu\u00e9s par un pr\u00e9fixe de chemin sp\u00e9cial. Cela n\u2019a souvent pas de sens pour les installations autog\u00e9r\u00e9es, o\u00f9 il y a une seule \u00e9quipe. Avec un seul domaine et une seule \u00e9quipe, le pr\u00e9fixe de chemin sp\u00e9cial (qui ressemble \u00e0 /o/ ) est un gaspillage d\u2019espace peu \u00e9l\u00e9gant dans les URL. Vous pouvez donc indiquer \u00e0 Grist d\u2019utiliser une seule \u00e9quipe en d\u00e9finissant GRIST_SINGLE_ORG (\u201corg\u201d ou \u201corganisation\u201d est un synonyme pour \u00e9quipe) : docker run ... -e GRIST_SINGLE_ORG=cool-beans Le nom de l\u2019\u00e9quipe ne doit utiliser que des caract\u00e8res minuscules a-z, des chiffres 0-9, et le tiret ( - ). Vous voudrez \u00e9galement peut-\u00eatre vous pencher sur Personnalisation du style pour cacher les \u00e9l\u00e9ments d\u2019interface utilisateur dont vous n\u2019avez pas besoin.","title":"Comment configurer une \u00e9quipe ?"},{"location":"self-managed/#comment-configurer-lauthentification","text":"L\u2019authentification peut \u00eatre configur\u00e9e de plusieurs mani\u00e8res pour Grist Noyau et Entreprise, en utilisant SAML, OpenID Connect ou des en-t\u00eates transf\u00e9r\u00e9s. Entre les deux, de nombreux SSO populaires peuvent \u00eatre connect\u00e9s comme les connexions Google ou Microsoft. SAML . OpenID Connect En-t\u00eates transf\u00e9r\u00e9s . Pour toute m\u00e9thode d\u2019authentification, vous voudrez \u00e9galement envisager de d\u00e9finir les variables suivantes : COOKIE_MAX_AGE : (optionnel) date d\u2019expiration pour le cookie de session Grist, lorsqu\u2019il est d\u00e9fini sur none , le cookie de session sera en mode Session - il doit \u00eatre supprim\u00e9 apr\u00e8s la fermeture d\u2019un navigateur. S\u2019il est d\u00e9fini sur un nombre, les unit\u00e9s de ce nombre sont des millisecondes. GRIST_FORCE_LOGIN : (optionnel) lorsqu\u2019il est d\u00e9fini sur true , cela indiquera \u00e0 Grist de rediriger les utilisateurs anonymes vers une page de connexion. Pour notre SaaS, nous utilisons un syst\u00e8me d\u2019authentification personnalis\u00e9 bas\u00e9 sur AWS Cognito. Actuellement, nous n\u2019avons pas de plans pour le publier dans le Noyau ou l\u2019Entreprise.","title":"Comment configurer l’authentification ?"},{"location":"self-managed/#existe-t-il-dautres-methodes-dauthentification","text":"Si les utilisateurs de votre site se connectent via WordPress, ou via un m\u00e9canisme personnalis\u00e9 que vous avez d\u00e9velopp\u00e9, vous voudrez peut-\u00eatre envisager GristConnect , disponible pour Grist Entreprise.","title":"Existe-t-il d’autres m\u00e9thodes d’authentification ?"},{"location":"self-managed/#comment-activer-grist-entreprise","text":"Grist Entreprise peut \u00eatre activ\u00e9 en visitant le panneau d\u2019administration et en cliquant sur le bouton \u2018Activer les fonctionnalit\u00e9s Grist Entreprise\u2019. Cela fera red\u00e9marrer Grist automatiquement. Vous devriez maintenant avoir une version non activ\u00e9e de Grist Entreprise, avec une p\u00e9riode d\u2019essai de 30 jours. Les cl\u00e9s d\u2019activation sont utilis\u00e9es pour ex\u00e9cuter Grist Entreprise apr\u00e8s une p\u00e9riode d\u2019essai de 30 jours \u00e9coul\u00e9e. Obtenez une cl\u00e9 d\u2019activation en vous inscrivant \u00e0 Grist Entreprise . Vous n\u2019avez pas besoin d\u2019une cl\u00e9 d\u2019activation pour ex\u00e9cuter Grist Noyau, et pouvez revenir au Noyau \u00e0 tout moment en utilisant le bouton dans le panneau d\u2019administration. Placez le contenu de votre cl\u00e9 d\u2019activation dans une variable d\u2019environnement appel\u00e9e GRIST_ACTIVATION , ou placez-la dans un r\u00e9pertoire accessible \u00e0 Grist et fournissez le chemin complet vers le fichier avec la variable d\u2019environnement GRIST_ACTIVATION_FILE . Sans la cl\u00e9 d\u2019activation, il y aura une banni\u00e8re indiquant que Grist est en mode d\u2019essai. Une fois la cl\u00e9 d\u2019activation d\u00e9tect\u00e9e, cette banni\u00e8re dispara\u00eetra. Le remplacement de la cl\u00e9 d\u2019activation n\u00e9cessitera un red\u00e9marrage de Grist. docker run ... -e GRIST_ACTIVATION= \\ -it gristlabs/grist","title":"Comment activer Grist Entreprise ?"},{"location":"self-managed/#personnalisation","text":"","title":"Personnalisation"},{"location":"self-managed/#comment-personnaliser-le-style","text":"L\u2019interface utilisateur de Grist a de nombreux \u00e9l\u00e9ments, dont certains peuvent ne pas \u00eatre pertinents pour vous. Pour les installations autog\u00e9r\u00e9es de Grist, vous pouvez d\u00e9sactiver de nombreux \u00e9l\u00e9ments en utilisant GRIST_HIDE_UI_ELEMENTS . Ceci est une liste s\u00e9par\u00e9e par des virgules des parties de l\u2019interface utilisateur \u00e0 cacher. Les noms autoris\u00e9s des parties sont : helpCenter,billing,templates,multiSite,multiAccounts . Les \u00e9l\u00e9ments de l\u2019interface utilisateur pr\u00e9sents sont \u00e9galement affect\u00e9s par le fait que GRIST_SINGLE_ORG soit d\u00e9fini. docker run ... -e GRIST_HIDE_UI_ELEMENTS=helpCenter,billing,templates,multiSite,multiAccounts \\ ... Par d\u00e9faut, les pages de l\u2019interface utilisateur de Grist ont - Grist ajout\u00e9 \u00e0 leur titre. Vous pouvez changer cela en d\u00e9finissant GRIST_PAGE_TITLE_SUFFIX : docker run ... -e GRIST_PAGE_TITLE_SUFFIX=\" - Cool Beans\" \\ ... Vous pouvez d\u00e9finir le suffixe sur \"_blank\" pour le supprimer compl\u00e8tement. Vous pouvez \u00e9galement remplacer le style CSS du site si vous d\u00e9finissez APP_STATIC_INCLUDE_CUSTOM_CSS sur true . docker run ... -e APP_STATIC_INCLUDE_CUSTOM_CSS=true \\ ... Cela chargera un fichier custom.css suppl\u00e9mentaire. Vous pouvez trouver un exemple de tel fichier dans le d\u00e9p\u00f4t Grist Noyau . Le fichier inclut la plupart de nos variables CSS globales pour les couleurs, et quelques variables pour le logo affich\u00e9 dans le coin sup\u00e9rieur gauche. Il n\u2019y a vraiment aucune limite \u00e0 ce qui peut figurer dans le fichier, donc la sp\u00e9cification de styles arbitraires est possible. Notez que toutes les r\u00e8gles CSS doivent utiliser !important pour s\u2019assurer qu\u2019elles ont la plus haute priorit\u00e9. Sinon, il est possible que des r\u00e8gles plus sp\u00e9cifiques incluses par notre framework prennent le pas. Pour remplacer custom.css , vous pouvez faire votre propre copie et vous assurer que Grist l\u2019utilise. Si le fichier CSS est dans votre r\u00e9pertoire actuel, alors faites : docker run ... -v $PWD/custom.css:/grist/static/custom.css ... Il est possible de diriger Grist pour charger des ressources statiques depuis un CDN en d\u00e9finissant APP_STATIC_URL . Si vous le faites, et que vous utilisez du CSS personnalis\u00e9, vous devrez vous assurer que le CSS personnalis\u00e9 est disponible depuis cette URL de base.","title":"Comment personnaliser le style ?"},{"location":"self-managed/#comment-lister-des-widgets-personnalises","text":"Dans notre SaaS, Grist a une liste de widgets personnalis\u00e9s pr\u00e9construits disponibles dans l\u2019interface utilisateur. Vous pouvez faire en sorte que votre installation autog\u00e9r\u00e9e propose la m\u00eame liste en d\u00e9finissant ce qui suit : docker run ... -e GRIST_WIDGET_LIST_URL=\"https://github.com/gristlabs/grist-widget/releases/download/latest/manifest.json\" \\ ... C\u2019est optionnel. Si vous laissez la variable non d\u00e9finie, les documents avec des widgets personnalis\u00e9s fonctionneront toujours bien, mais vous devrez entrer une URL compl\u00e8te lorsque vous ajoutez des widgets personnalis\u00e9s plut\u00f4t que de choisir une option dans un menu d\u00e9roulant. Vous pouvez rendre votre propre liste de widgets disponible en forkant github.com/gristlabs/grist-widget ou en pr\u00e9parant manuellement un fichier .json sur un serveur public dans le m\u00eame format que notre manifest.json .","title":"Comment lister des widgets personnalis\u00e9s ?"},{"location":"self-managed/#comment-configurer-des-notifications-par-e-mail","text":"Dans Grist SaaS, nous envoyons des e-mails tels que des invitations \u00e0 partager un document en utilisant SendGrid . Le m\u00eame m\u00e9canisme est disponible dans Grist Entreprise. Il n\u2019y a pas encore d\u2019\u00e9quivalent dans Grist Noyau. Vous devrez d\u00e9finir une cl\u00e9 API SendGrid : docker run ... -e SENDGRID_API_KEY=SG.XXXXXXX.XXXXX \\ ... Vous devrez rendre un fichier config.json disponible \u00e0 la racine du volume mapp\u00e9 \u00e0 /persist . Son contenu doit \u00eatre le suivant : { \"sendgrid\": { \"api\": { \"prefix\": \"https://api.sendgrid.com/v3\", \"enroll\": \"/marketing/contacts\", \"search\": \"/marketing/contacts/search\", \"searchByEmail\": \"/marketing/contacts/search/emails\", \"listRemove\": \"/marketing/lists/{{id}}/contacts\", \"send\": \"/mail/send\" }, \"address\": { \"from\": { \"email\": \"\", \"name\": \"le nom \u00e0 afficher avec l'e-mail\" } }, \"template\": { \"invite\": \"d-f9.....\", \"billingManagerInvite\": \"d-f9.....\", \"memberChange\": \"d-b3.....\" }, \"list\": { \"singleUserOnboarding\": \"b22...\" }, \"unsubscribeGroup\": { \"invites\": 19..., \"billingManagers\": 19.... } } } Voici la signification des cl\u00e9s dans ce fichier : sendgrid.api - Les valeurs doivent rester inchang\u00e9es par rapport \u00e0 ce qui est d\u00e9fini dans l\u2019exemple. Cela contr\u00f4le la version de l\u2019API et les points de terminaison. Grist cible actuellement la v3 de l\u2019API web de SendGrid. sendgrid.address - Doit \u00eatre d\u00e9fini sur une adresse e-mail v\u00e9rifi\u00e9e et le nom d\u2019un exp\u00e9diteur SendGrid. Cela contr\u00f4le l\u2019adresse \u201cDe\u201d de tous les e-mails envoy\u00e9s via SendGrid (par exemple, les invitations envoy\u00e9es au nom des utilisateurs Grist). sendgrid.template - Mappe les actions Grist aux identifiants de mod\u00e8les d\u2019e-mail SendGrid. Ceux-ci sont pour les e-mails transactionnels qui sont envoy\u00e9s \u00e0 la suite d\u2019une action se produisant dans Grist. sendgrid.template.invite - Ceci est pour les e-mails envoy\u00e9s aux utilisateurs qui sont invit\u00e9s \u00e0 des documents, des espaces de travail ou des sites. sendgrid.template.memberChange - Ceci est pour les e-mails envoy\u00e9s aux responsables de la facturation lorsque des utilisateurs sont ajout\u00e9s/retir\u00e9s des sites. sendgrid.list - Mappe les actions Grist aux identifiants de listes de marketing SendGrid. Ceux-ci sont pour des e-mails automatis\u00e9s en cours qui sont envoy\u00e9s \u00e0 tous les utilisateurs qui sont inscrits dans une liste particuli\u00e8re. sendgrid.list.singleUserOnboarding - Les nouveaux utilisateurs Grist sont automatiquement ajout\u00e9s \u00e0 cette liste lors de leur premi\u00e8re connexion. Cela est adapt\u00e9 pour envoyer des e-mails d\u2019int\u00e9gration r\u00e9guliers aux utilisateurs. sendgrid.unsubscribeGroup - Mappe les types d\u2019e-mails aux identifiants de groupes de d\u00e9sinscription SendGrid. Ceux-ci permettent aux utilisateurs de se d\u00e9sinscrire de la r\u00e9ception de certains types d\u2019e-mails (via le lien dans l\u2019e-mail). sendgrid.unsubscribeGrist.invites - Si d\u00e9fini, les e-mails d\u2019invitation peuvent \u00eatre supprim\u00e9s via le lien de d\u00e9sinscription dans les e-mails. sendgrid.unsubscribeGrist.billingManagers - Si d\u00e9fini, les e-mails envoy\u00e9s sp\u00e9cifiquement aux responsables de la facturation (par exemple, changements d\u2019adh\u00e9sion) peuvent \u00eatre supprim\u00e9s via le lien de d\u00e9sinscription dans les e-mails. Pour r\u00e9f\u00e9rence, il existe des exemples de mod\u00e8les SendGrid dans example-sendgrid-templates.zip bas\u00e9s sur une exportation des mod\u00e8les SendGrid pour notre SaaS.","title":"Comment configurer des notifications par e-mail ?"},{"location":"self-managed/#comment-ajouter-plus-de-packages-python","text":"L\u2019ensemble des packages python disponibles pour une utilisation dans les formules n\u2019est actuellement pas configurable. Vous pouvez ajouter des packages de toute fa\u00e7on si vous \u00eates pr\u00eat \u00e0 construire et installer votre propre version de Grist. Avertissement Les documents Grist cr\u00e9\u00e9s sur une installation avec des packages python personnalis\u00e9s ne ram\u00e8neront pas ces packages s\u2019ils sont copi\u00e9s vers une autre installation. Les formules utilisant des packages python personnalis\u00e9s donneront des erreurs lorsque ces packages ne seront pas disponibles. Cr\u00e9ez un r\u00e9pertoire vide et ajoutez ce qui suit, dans un fichier appel\u00e9 Dockerfile : FROM gristlabs/grist # ou grist-oss ou grist-omnibus RUN \\ apt update && apt install -y openssl && \\ python3 -m pip install phonenumbers Remplacez phonenumbers par le package python ou les packages que vous souhaitez installer. Vous pouvez maintenant construire votre image Grist personnalis\u00e9e en ex\u00e9cutant un docker build dans le r\u00e9pertoire contenant le Dockerfile : # remplacez \"custom\" par un nom d'utilisateur ou de l'organisation. docker build -t custom/grist . Une fois termin\u00e9, vous pouvez utiliser custom/grist \u00e0 la place de gristlabs/grist(-ee) dans Comment installer Grist , et votre biblioth\u00e8que python sera d\u00e9sormais disponible \u00e0 l\u2019importation dans les formules. Si vous souhaitez que l\u2019importation soit effectu\u00e9e automatiquement, afin de ne pas avoir \u00e0 le faire dans les formules, cela n\u00e9cessite actuellement un changement de code dans sandbox/grist/gencode.py . Si vous \u00eates \u00e0 l\u2019aise avec les modifications de code, alors les instructions de construction du d\u00e9p\u00f4t grist-core sont l\u2019endroit o\u00f9 commencer.","title":"Comment ajouter plus de packages python ?"},{"location":"self-managed/#comment-configurer-des-webhooks","text":"Il est possible d\u2019utiliser des webhooks pour activer des int\u00e9grations avec des services externes. La documentation des webhooks contient plus de d\u00e9tails. Notez que lors de l\u2019auto-h\u00e9bergement, seuls les services externes autoris\u00e9s par la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS sont autoris\u00e9s. Il y a des pr\u00e9occupations de s\u00e9curit\u00e9 avec l\u2019autorisation de tout domaine, car les services internes de Grist peuvent devenir vuln\u00e9rables \u00e0 la manipulation.","title":"Comment configurer des webhooks ?"},{"location":"self-managed/#operations","text":"","title":"Op\u00e9rations"},{"location":"self-managed/#quelles-sont-les-exigences-materielles-pour-heberger-grist","text":"Pour h\u00e9berger Grist en tant que conteneur Linux, voici une configuration connue pour une vari\u00e9t\u00e9 de charges de travail mod\u00e9r\u00e9es : 8 Go de RAM 2 CPU 20 Go de disque Grist est emball\u00e9 pour les architectures CPU suivantes : x86_64 (Sandy Bridge ou plus r\u00e9cent si le sandboxing est activ\u00e9) ARM64 Chaque document Grist est une base de donn\u00e9es s\u00e9par\u00e9e, donc il est difficile de d\u00e9clarer des exigences minimales absolues sans savoir quels documents seront utilis\u00e9s. Dans les tests, le mod\u00e8le de recherche d\u2019investissement fonctionne confortablement servi depuis un conteneur Grist avec : 100 Mo de RAM sans sandboxing activ\u00e9. 200 Mo de RAM avec sandboxing activ\u00e9. 1 CPU. Les exigences en m\u00e9moire et en CPU \u00e9volueront avec le nombre de documents utilis\u00e9s simultan\u00e9ment par votre \u00e9quipe. Le sandboxing est un probl\u00e8me important pour servir Grist. Il est r\u00e9alis\u00e9 en utilisant gvisor . Le sandboxing d\u00e9pend de la disponibilit\u00e9 de certaines capacit\u00e9s, et peut \u00eatre indisponible dans des environnements qui n\u2019autorisent pas ou manquent ces capacit\u00e9s. Le sandboxing de Grist est connu pour fonctionner dans les environnements suivants : Conteneurs docker r\u00e9guliers non privil\u00e9gi\u00e9s avec les param\u00e8tres de s\u00e9curit\u00e9 par d\u00e9faut. Instances AWS EC2. Conteneurs AWS Fargate, avec SYS_PTRACE d\u00e9fini dans linuxParameters.capabilities . Le sandboxing de Grist a \u00e9t\u00e9 signal\u00e9 comme \u00e9chouant \u00e0 s\u2019initialiser sur des processeurs Intel plus anciens qui ne prennent pas en charge la fonctionnalit\u00e9 XSAVE (prise en charge par Sandy Bridge et ult\u00e9rieur).","title":"Quelles sont les exigences mat\u00e9rielles pour h\u00e9berger Grist ?"},{"location":"self-managed/#quels-fichiers-grist-stocke-t-il","text":"Lorsqu\u2019il est install\u00e9 en tant que conteneur, Grist s\u2019attend \u00e0 avoir acc\u00e8s \u00e0 un volume persistant, ou \u00e0 un r\u00e9pertoire partag\u00e9 avec l\u2019h\u00f4te, dans lequel il stocke tout ce qui doit durer au-del\u00e0 d\u2019un red\u00e9marrage de conteneur. Concr\u00e8tement, si vous avez d\u00e9marr\u00e9 Grist exactement comme d\u00e9crit dans Comment installer Grist , ce r\u00e9pertoire serait ~/grist . Voici ce que vous y trouveriez : Un sous-r\u00e9pertoire appel\u00e9 docs , contenant des fichiers *.grist . Ce sont des documents Grist. Les documents Grist sont des bases de donn\u00e9es SQLite, donc vous pouvez inspecter ces fichiers avec l\u2019utilitaire standard sqlite3 . Vous pouvez \u00e9galement les t\u00e9l\u00e9charger sur une autre installation de Grist (comme notre service h\u00e9berg\u00e9) et les visualiser/\u00e9diter l\u00e0-bas. Si vous d\u00e9placez ou renommez ces fichiers, Grist ne les reconna\u00eetra plus. Si le support des snapshots est configur\u00e9, il y aura des fichiers suppl\u00e9mentaires \u00e0 c\u00f4t\u00e9 de chaque fichier .grist pour suivre son \u00e9tat de stockage. Un fichier appel\u00e9 grist-sessions.db . Cela contient des informations pour prendre en charge les sessions de navigateur avec Grist. C\u2019est une base de donn\u00e9es SQLite. Si redis est configur\u00e9 , cela est utilis\u00e9 \u00e0 la place de ce fichier. Un fichier appel\u00e9 home.sqlite3 . Cela contient des informations sur les \u00e9quipes, les espaces de travail et les documents (m\u00e9tadonn\u00e9es uniquement, telles que les noms, plut\u00f4t que le contenu des documents tels que les tables et les cellules). C\u2019est une base de donn\u00e9es SQLite. Elle est appel\u00e9e la base de donn\u00e9es principale et si PostgreSQL est configur\u00e9, cela est utilis\u00e9 \u00e0 la place de ce fichier. Si vous utilisez Grist Omnibus, il y a d\u2019autres fichiers, y compris : Un r\u00e9pertoire auth , avec une base de donn\u00e9es SQLite pour suivre l\u2019\u00e9tat de connexion, et un stockage de tous les certificats cr\u00e9\u00e9s. Un r\u00e9pertoire param , avec des secrets invent\u00e9s pour l\u2019installation.","title":"Quels fichiers Grist stocke-t-il ?"},{"location":"self-managed/#quest-ce-quune-base-de-donnees-principale","text":"Grist stocke des m\u00e9tadonn\u00e9es sur les utilisateurs, les documents, les espaces de travail, etc. dans une base de donn\u00e9es appel\u00e9e la \u201cbase de donn\u00e9es principale\u201d. Cela ne contient pas le mat\u00e9riel \u00e0 l\u2019int\u00e9rieur des documents tels que les tables et les colonnes, mais contient des noms de documents et des heures de cr\u00e9ation, par exemple. Par d\u00e9faut, Grist cr\u00e9era une base de donn\u00e9es principale dans un fichier Sqlite dans le r\u00e9pertoire /persist . Pour utiliser \u00e0 la place une base de donn\u00e9es PostgreSQL, cr\u00e9ez la base de donn\u00e9es ainsi qu\u2019un utilisateur ayant un acc\u00e8s suffisant pour cr\u00e9er des tables, et d\u00e9finissez les variables suivantes : TYPEORM_TYPE - d\u00e9fini sur postgres TYPEORM_DATABASE - d\u00e9fini sur le nom de la base de donn\u00e9es, par exemple home TYPEORM_USERNAME - d\u00e9fini sur le nom d\u2019utilisateur postgres ayant des droits sur la base de donn\u00e9es TYPEORM_PASSWORD - d\u00e9fini sur le mot de passe postgres ayant des droits sur la base de donn\u00e9es TYPEORM_HOST - d\u00e9fini sur le nom d\u2019h\u00f4te de la base de donn\u00e9es, par exemple grist.mumble.rds.amazonaws.com TYPEORM_PORT - d\u00e9fini sur le num\u00e9ro de port de la base de donn\u00e9es si ce n\u2019est pas le d\u00e9faut pour PostgreSQL Grist est connu pour fonctionner avec PostgreSQL des versions 10 \u00e0 14 (les versions ult\u00e9rieures devraient \u00e9galement fonctionner, mais n\u2019ont pas \u00e9t\u00e9 sp\u00e9cifiquement test\u00e9es au moment de la r\u00e9daction).","title":"Qu’est-ce qu’une base de donn\u00e9es “principale” ?"},{"location":"self-managed/#quest-ce-quun-magasin-detat","text":"Grist peut \u00eatre configur\u00e9 pour utiliser Redis comme cache d\u2019\u00e9tat externe. Pour la plupart des fonctionnalit\u00e9s de Grist, cela est optionnel. Il est requis pour le support des webhooks, et recommand\u00e9 pour le support des snapshots. Pour l\u2019utiliser, il suffit de d\u00e9finir REDIS_URL sur quelque chose comme redis://hostname/N o\u00f9 N est un num\u00e9ro de base de donn\u00e9es redis. docker run ... -e REDIS_URL=\"redis://hostname/N\" ...","title":"Qu’est-ce qu’un magasin d’\u00e9tat ?"},{"location":"self-managed/#comment-configurer-des-snapshots","text":"La fonctionnalit\u00e9 de stockage cloud de Grist permet la synchronisation automatique des documents Grist et des versions de documents vers un bucket compatible S3 (disponible pour toutes les versions de Grist) ou vers un stockage Azure (dans Grist Entreprise). Voici un exemple d\u2019ex\u00e9cution de Grist localement, avec des snapshots stock\u00e9s dans une instance MinIO de test : # Cr\u00e9er un r\u00e9seau docker network create grist # D\u00e9marrer Redis dans notre r\u00e9seau (recommand\u00e9 pour les snapshots) docker run --rm --network grist --name redis redis # D\u00e9marrer MinIO dans notre r\u00e9seau docker run --rm --network grist --name minio \\ -v /tmp/minio:/data \\ -p 9000:9000 -p 9001:9001 \\ -e MINIO_ROOT_USER=grist -e MINIO_ROOT_PASSWORD=admingrist \\ -it minio/minio server /data -console-address \":9001\" # Visitez http://localhost:9000 et configurez un bucket appel\u00e9 grist-docs. # Assurez-vous d'activer la versioning sur le bucket. # Connectez Grist \u00e0 Redis et MinIO docker run --rm --network grist \\ -e GRIST_DOCS_MINIO_ACCESS_KEY=grist \\ -e GRIST_DOCS_MINIO_SECRET_KEY=admingrist \\ -e GRIST_DOCS_MINIO_USE_SSL=0 \\ -e GRIST_DOCS_MINIO_BUCKET=grist-docs \\ -e GRIST_DOCS_MINIO_ENDPOINT=minio \\ -e GRIST_DOCS_MINIO_PORT=9000 \\ -e REDIS_URL=redis://redis \\ -v /tmp/grist:/persist -p 8484:8484 -it gristlabs/grist Voici des drapeaux pour faire parler Grist \u00e0 un bucket AWS S3 en utilisant le client MinIO : ... -e GRIST_DOCS_MINIO_ACCESS_KEY=$AWS_ACCESS_KEY_ID \\ -e GRIST_DOCS_MINIO_SECRET_KEY=$AWS_SECRET_ACCESS_KEY \\ -e GRIST_DOCS_MINIO_ENDPOINT=s3.amazonaws.com \\ -e GRIST_DOCS_MINIO_BUCKET=grist-docs \\ ... Selon les sp\u00e9cifications de MinIO , la r\u00e9gion par d\u00e9faut du bucket est us-east-1 . Cette r\u00e9gion par d\u00e9faut peut \u00eatre remplac\u00e9e en utilisant le drapeau GRIST_DOCS_MINIO_BUCKET_REGION . Pour plus de d\u00e9tails, et d\u2019autres options, voir Stockage Cloud .","title":"Comment configurer des snapshots ?"},{"location":"self-managed/#comment-controler-la-telemetrie","text":"Par d\u00e9faut, les installations Grist ne \u201ct\u00e9l\u00e9phonent pas\u201d \u00e0 un service central. Il est utile de leur permettre de le faire, pour donner \u00e0 Grist Labs un aper\u00e7u limit\u00e9 de votre utilisation, \u00e0 travers des mesures appel\u00e9es t\u00e9l\u00e9m\u00e9trie. Cela aidera \u00e0 guider le d\u00e9veloppement et \u00e0 attirer l\u2019attention sur les utilisateurs autog\u00e9r\u00e9s en tant que groupe. Le moyen le plus simple pour un propri\u00e9taire d\u2019une installation Grist de choisir d\u2019envoyer la t\u00e9l\u00e9m\u00e9trie \u00e0 Grist Labs est de cliquer sur le bouton \u201cOpter pour la t\u00e9l\u00e9m\u00e9trie\u201d sur la banni\u00e8re \u201cSupport Grist\u201d sur la page principale de l\u2019installation. Si vous ne souhaitez pas opter pour cela, vous pouvez ignorer la banni\u00e8re. La banni\u00e8re est affich\u00e9e uniquement au propri\u00e9taire de l\u2019installation. Le propri\u00e9taire de l\u2019installation est l\u2019utilisateur dont l\u2019adresse e-mail correspond \u00e0 la variable d\u2019environnement GRIST_DEFAULT_EMAIL (si d\u00e9finie). Vous pouvez contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie \u00e0 tout moment en utilisant la page \u201cSupport Grist\u201d, si vous \u00eates le propri\u00e9taire de l\u2019installation. Plut\u00f4t que d\u2019utiliser des boutons pour opter pour la t\u00e9l\u00e9m\u00e9trie, vous pouvez d\u00e9finir la variable d\u2019environnement GRIST_TELEMETRY_LEVEL sur limited . Cela a le m\u00eame effet que le bouton \u201cOpter pour la t\u00e9l\u00e9m\u00e9trie\u201d. La variable d\u2019environnement GRIST_TELEMETRY_LEVEL , si d\u00e9finie, prend la priorit\u00e9 sur tout param\u00e8tre effectu\u00e9 de mani\u00e8re interactive. Les valeurs recommand\u00e9es sont limited ou off . Dans tous les cas, lisez t\u00e9l\u00e9m\u00e9trie limit\u00e9e pour des d\u00e9tails exacts sur les donn\u00e9es envoy\u00e9es, et aper\u00e7u de la t\u00e9l\u00e9m\u00e9trie pour plus d\u2019explications. Une m\u00e9thode interactive pour contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie n\u2019est actuellement disponible que pour les versions Grist Noyau. Dans tous les cas, le d\u00e9faut est de ne pas envoyer de t\u00e9l\u00e9m\u00e9trie.","title":"Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ?"},{"location":"self-managed/#comment-mettre-a-jour-mon-installation","text":"Nous publions actuellement de nouvelles images Grist Noyau et Entreprise \u00e0 environ des intervalles hebdomadaires. Grist g\u00e8re toutes les migrations qui peuvent \u00eatre n\u00e9cessaires pour les documents ou les bases de donn\u00e9es qu\u2019il utilise. Des utilitaires tels que Watchtower peuvent maintenir votre version de Grist \u00e0 jour pour vous.","title":"Comment mettre \u00e0 jour mon installation ?"},{"location":"self-managed/#que-faire-si-jai-besoin-dune-haute-disponibilite","text":"Nous avons d\u00e9velopp\u00e9 une expertise dans l\u2019h\u00e9bergement d\u2019installations Grist tr\u00e8s occup\u00e9es, avec de nombreux utilisateurs, y compris comment mettre \u00e0 jour avec un minimum de perturbation, et comment \u00e9voluer pour g\u00e9rer une charge lourde. Nous serions heureux d\u2019aider les clients Entreprise ayant des besoins de cette nature.","title":"Que faire si j’ai besoin d’une haute disponibilit\u00e9 ?"},{"location":"sharing/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Partage # Pour collaborer dans Grist, vous pouvez inviter d\u2019autres utilisateurs \u00e0 acc\u00e9der \u00e0 un document. Pour les plans d\u2019\u00e9quipe, vous pouvez \u00e9galement ajouter des utilisateurs \u00e0 votre espace d\u2019\u00e9quipe ou \u00e0 un dossier (voir Partage d\u2019\u00e9quipe ). Lorsque le document est ouvert, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran. Cela ouvre un menu avec des options de partage et d\u2019exportation. S\u00e9lectionnez \u201cG\u00e9rer les utilisateurs\u201d. Cette option est \u00e9galement disponible sur la page d\u2019accueil de Grist, lorsque vous cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom d\u2019un document. Si l\u2019\u00e9l\u00e9ment \u201cG\u00e9rer les utilisateurs\u201d est gris\u00e9, cela signifie que vous n\u2019avez pas la permission de voir ou g\u00e9rer les param\u00e8tres de partage de ce document. La bo\u00eete de dialogue de partage qui s\u2019ouvre liste les utilisateurs qui ont acc\u00e8s au document. Pour ajouter un utilisateur, entrez l\u2019adresse e-mail de cet utilisateur et appuyez sur \u201cEntr\u00e9e\u201d ou cliquez sur \u201cInviter un nouveau membre\u201d dans le menu d\u00e9roulant. Vous pouvez s\u00e9lectionner un r\u00f4le pour tout utilisateur invit\u00e9, puis cliquer sur \u201cConfirmer\u201d pour enregistrer les modifications et envoyer les invitations. R\u00f4les # Il y a trois r\u00f4les principaux pris en charge par Grist : Lecteur : permet \u00e0 un utilisateur de voir le document mais pas d\u2019y apporter des modifications. Certaines op\u00e9rations comme le tri et le filtrage fonctionneront sans affecter les autres utilisateurs du document. C\u2019est le r\u00f4le par d\u00e9faut lorsque vous tapez une adresse e-mail. \u00c9diteur : permet \u00e0 un utilisateur de voir ou de modifier les donn\u00e9es, la structure ou les formules du document, mais pas ses param\u00e8tres de partage. Propri\u00e9taire : donne \u00e0 un utilisateur des permissions compl\u00e8tes sur le document, y compris pour voir et modifier ses param\u00e8tres de partage. Un document peut avoir un ou plusieurs propri\u00e9taires. Si vous \u00eates capable d\u2019ouvrir la bo\u00eete de dialogue \u201cG\u00e9rer les utilisateurs\u201d, vous avez le r\u00f4le de \u201cpropri\u00e9taire\u201d. Vous ne pouvez pas changer votre propre acc\u00e8s, mais votre acc\u00e8s peut \u00eatre r\u00e9duit ou supprim\u00e9 par un autre propri\u00e9taire. L\u2019option d\u2019h\u00e9riter de l\u2019acc\u00e8s n\u2019affecte pas les plans individuels, et est expliqu\u00e9e dans l\u2019article Partage d\u2019\u00e9quipe . Acc\u00e8s public et partage de lien # Si vous souhaitez partager votre document avec un public plus large, vous pouvez le rendre accessible publiquement. Ouvrez le menu de partage en cliquant sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et en s\u00e9lectionnant \u201cG\u00e9rer les utilisateurs\u201d. Activez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cAcc\u00e8s public\u201d et s\u00e9lectionnez \u201cActiv\u00e9\u201d : Une fois que vous cliquez sur \u201cconfirmer\u201d, toute personne ayant le lien vers votre document pourra le voir. Elle ne sera pas oblig\u00e9e d\u2019avoir un compte Grist. Le bouton \u201cCopier le lien\u201d est pratique pour le partage de lien. Vous pouvez copier le lien dans le presse-papiers pour le coller dans un e-mail, un tweet ou ailleurs. Vous pouvez \u00e9galement permettre \u00e0 toute personne ayant le lien de modifier votre document. Il suffit de changer le r\u00f4le pour l\u2019acc\u00e8s public en \u00c9diteur. Notez que cela permet \u00e0 n\u2019importe qui ayant le lien de modifier absolument tout dans votre document, y compris de supprimer toutes les donn\u00e9es. En cas de probl\u00e8me, vous pouvez r\u00e9cup\u00e9rer les versions pr\u00e9c\u00e9dentes de votre document dans la section des instantan\u00e9s de Historique du document. Partager une vue int\u00e9gr\u00e9e Ajouter ?embed=true ou ?style=singlePage \u00e0 la fin de l\u2019URL de la page d\u2019un document rend le document sans la barre d\u2019outils en haut, le menu de la page \u00e0 gauche ou le panneau du cr\u00e9ateur \u00e0 droite. ?style=singlePage peut \u00eatre modifi\u00e9 et suit les permissions avanc\u00e9es, tandis que ?embed=true est en lecture seule. Pour en savoir plus sur l\u2019int\u00e9gration, voir Int\u00e9gration de Grist . Les permissions avanc\u00e9es peuvent \u00eatre combin\u00e9es avec le partage de lien en lecture seule, c\u2019est-\u00e0-dire lorsque le r\u00f4le d\u2019acc\u00e8s public est d\u00e9fini sur \u201cLecteur\u201d. Lisez-en plus sur Les cl\u00e9s de lien pour apprendre comment d\u00e9finir des r\u00e8gles qui limitent les parties de vos donn\u00e9es que les utilisateurs peuvent voir lorsqu\u2019ils acc\u00e8dent \u00e0 votre document via un lien particulier. Les permissions avanc\u00e9es sont prises en charge avec le partage de lien lorsque l\u2019acc\u00e8s public est d\u00e9fini sur \u201cLecteur\u201d ou \u201c\u00c9diteur\u201d. Quitter un document # Les non-propri\u00e9taires peuvent consulter leurs d\u00e9tails d\u2019acc\u00e8s \u00e0 un document en cliquant sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et en s\u00e9lectionnant \u201cD\u00e9tails d\u2019acc\u00e8s\u201d. Depuis la fen\u00eatre contextuelle des d\u00e9tails d\u2019acc\u00e8s, vous pouvez cliquer sur l\u2019ic\u00f4ne de la corbeille pour quitter un document.","title":"Sharing a document"},{"location":"sharing/#partage","text":"Pour collaborer dans Grist, vous pouvez inviter d\u2019autres utilisateurs \u00e0 acc\u00e9der \u00e0 un document. Pour les plans d\u2019\u00e9quipe, vous pouvez \u00e9galement ajouter des utilisateurs \u00e0 votre espace d\u2019\u00e9quipe ou \u00e0 un dossier (voir Partage d\u2019\u00e9quipe ). Lorsque le document est ouvert, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran. Cela ouvre un menu avec des options de partage et d\u2019exportation. S\u00e9lectionnez \u201cG\u00e9rer les utilisateurs\u201d. Cette option est \u00e9galement disponible sur la page d\u2019accueil de Grist, lorsque vous cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom d\u2019un document. Si l\u2019\u00e9l\u00e9ment \u201cG\u00e9rer les utilisateurs\u201d est gris\u00e9, cela signifie que vous n\u2019avez pas la permission de voir ou g\u00e9rer les param\u00e8tres de partage de ce document. La bo\u00eete de dialogue de partage qui s\u2019ouvre liste les utilisateurs qui ont acc\u00e8s au document. Pour ajouter un utilisateur, entrez l\u2019adresse e-mail de cet utilisateur et appuyez sur \u201cEntr\u00e9e\u201d ou cliquez sur \u201cInviter un nouveau membre\u201d dans le menu d\u00e9roulant. Vous pouvez s\u00e9lectionner un r\u00f4le pour tout utilisateur invit\u00e9, puis cliquer sur \u201cConfirmer\u201d pour enregistrer les modifications et envoyer les invitations.","title":"Partage"},{"location":"sharing/#roles","text":"Il y a trois r\u00f4les principaux pris en charge par Grist : Lecteur : permet \u00e0 un utilisateur de voir le document mais pas d\u2019y apporter des modifications. Certaines op\u00e9rations comme le tri et le filtrage fonctionneront sans affecter les autres utilisateurs du document. C\u2019est le r\u00f4le par d\u00e9faut lorsque vous tapez une adresse e-mail. \u00c9diteur : permet \u00e0 un utilisateur de voir ou de modifier les donn\u00e9es, la structure ou les formules du document, mais pas ses param\u00e8tres de partage. Propri\u00e9taire : donne \u00e0 un utilisateur des permissions compl\u00e8tes sur le document, y compris pour voir et modifier ses param\u00e8tres de partage. Un document peut avoir un ou plusieurs propri\u00e9taires. Si vous \u00eates capable d\u2019ouvrir la bo\u00eete de dialogue \u201cG\u00e9rer les utilisateurs\u201d, vous avez le r\u00f4le de \u201cpropri\u00e9taire\u201d. Vous ne pouvez pas changer votre propre acc\u00e8s, mais votre acc\u00e8s peut \u00eatre r\u00e9duit ou supprim\u00e9 par un autre propri\u00e9taire. L\u2019option d\u2019h\u00e9riter de l\u2019acc\u00e8s n\u2019affecte pas les plans individuels, et est expliqu\u00e9e dans l\u2019article Partage d\u2019\u00e9quipe .","title":"R\u00f4les"},{"location":"sharing/#acces-public-et-partage-de-lien","text":"Si vous souhaitez partager votre document avec un public plus large, vous pouvez le rendre accessible publiquement. Ouvrez le menu de partage en cliquant sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et en s\u00e9lectionnant \u201cG\u00e9rer les utilisateurs\u201d. Activez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cAcc\u00e8s public\u201d et s\u00e9lectionnez \u201cActiv\u00e9\u201d : Une fois que vous cliquez sur \u201cconfirmer\u201d, toute personne ayant le lien vers votre document pourra le voir. Elle ne sera pas oblig\u00e9e d\u2019avoir un compte Grist. Le bouton \u201cCopier le lien\u201d est pratique pour le partage de lien. Vous pouvez copier le lien dans le presse-papiers pour le coller dans un e-mail, un tweet ou ailleurs. Vous pouvez \u00e9galement permettre \u00e0 toute personne ayant le lien de modifier votre document. Il suffit de changer le r\u00f4le pour l\u2019acc\u00e8s public en \u00c9diteur. Notez que cela permet \u00e0 n\u2019importe qui ayant le lien de modifier absolument tout dans votre document, y compris de supprimer toutes les donn\u00e9es. En cas de probl\u00e8me, vous pouvez r\u00e9cup\u00e9rer les versions pr\u00e9c\u00e9dentes de votre document dans la section des instantan\u00e9s de Historique du document. Partager une vue int\u00e9gr\u00e9e Ajouter ?embed=true ou ?style=singlePage \u00e0 la fin de l\u2019URL de la page d\u2019un document rend le document sans la barre d\u2019outils en haut, le menu de la page \u00e0 gauche ou le panneau du cr\u00e9ateur \u00e0 droite. ?style=singlePage peut \u00eatre modifi\u00e9 et suit les permissions avanc\u00e9es, tandis que ?embed=true est en lecture seule. Pour en savoir plus sur l\u2019int\u00e9gration, voir Int\u00e9gration de Grist . Les permissions avanc\u00e9es peuvent \u00eatre combin\u00e9es avec le partage de lien en lecture seule, c\u2019est-\u00e0-dire lorsque le r\u00f4le d\u2019acc\u00e8s public est d\u00e9fini sur \u201cLecteur\u201d. Lisez-en plus sur Les cl\u00e9s de lien pour apprendre comment d\u00e9finir des r\u00e8gles qui limitent les parties de vos donn\u00e9es que les utilisateurs peuvent voir lorsqu\u2019ils acc\u00e8dent \u00e0 votre document via un lien particulier. Les permissions avanc\u00e9es sont prises en charge avec le partage de lien lorsque l\u2019acc\u00e8s public est d\u00e9fini sur \u201cLecteur\u201d ou \u201c\u00c9diteur\u201d.","title":"Acc\u00e8s public et partage de lien"},{"location":"sharing/#quitter-un-document","text":"Les non-propri\u00e9taires peuvent consulter leurs d\u00e9tails d\u2019acc\u00e8s \u00e0 un document en cliquant sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et en s\u00e9lectionnant \u201cD\u00e9tails d\u2019acc\u00e8s\u201d. Depuis la fen\u00eatre contextuelle des d\u00e9tails d\u2019acc\u00e8s, vous pouvez cliquer sur l\u2019ic\u00f4ne de la corbeille pour quitter un document.","title":"Quitter un document"},{"location":"summary-tables/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Tables de synth\u00e8se # Les tables de synth\u00e8se sont l\u2019outil principal de l\u2019analyse de donn\u00e9es dans Grist. Elles sont similaires aux \u201ctableaux crois\u00e9s dynamiques\u201d dans les feuilles de calcul, et aux clauses GROUP BY dans les bases de donn\u00e9es. Elles vous permettent d\u2019obtenir des totaux pour l\u2019ensemble de la table ou des sous-totaux. Les tables de synth\u00e8se ont de nombreuses utilisations : Grouper les projets par statut ou par priorit\u00e9. R\u00e9sumer les transactions bancaires par ann\u00e9e, par trimestre ou par cat\u00e9gorie. Grouper les employ\u00e9s par poste, par genre ou par d\u00e9partement. R\u00e9sumer par n\u2019importe quelle combinaison, telle que poste et genre et d\u00e9partement. Grouper tous les enregistrements pour calculer des totaux et des statistiques pour l\u2019ensemble de la table. Ajouter des synth\u00e8ses # Cliquez sur le bouton \u201cAjouter\u201d et s\u00e9lectionnez \u201cAjouter une page\u201d ou \u201cAjouter une vue \u00e0 la page\u201d. Dans le s\u00e9lecteur de vues, cliquez sur l\u2019ic\u00f4ne de sommation ( ) \u00e0 c\u00f4t\u00e9 de la table que vous souhaitez r\u00e9sumer. Lors de la cr\u00e9ation d\u2019une table de synth\u00e8se, vous choisissez un champ ou une combinaison de champs par lesquels les donn\u00e9es doivent \u00eatre group\u00e9es. Ceux-ci sont appel\u00e9s les champs \u201cGrouper par\u201d. La table de synth\u00e8se contiendra une ligne pour chaque valeur de regroupement. Par exemple, si \u201cPoste\u201d est s\u00e9lectionn\u00e9 comme champ de regroupement, la table de synth\u00e8se contiendra une ligne pour chaque poste. Les formules puissantes de Grist permettent ensuite des calculs arbitraires sur les sous-ensembles correspondants des donn\u00e9es sous-jacentes. Gardez \u00e0 l\u2019esprit que les champs de regroupement d\u00e9terminent quels groupes doivent exister dans la table de synth\u00e8se. Ne s\u00e9lectionnez pas les valeurs que vous souhaitez calculer (par exemple, pour le salaire moyen) comme champs de regroupement ; celles-ci seront cr\u00e9\u00e9es \u00e0 l\u2019aide de formules \u00e0 l\u2019\u00e9tape suivante. Astuce : Vous pouvez consid\u00e9rer les lignes d\u2019une table de synth\u00e8se comme des compartiments dans lesquels vos enregistrements seront plac\u00e9s. Les champs de regroupement d\u00e9terminent les \u00e9tiquettes de ces compartiments. Par exemple, un r\u00e9sum\u00e9 des projets group\u00e9s par statut (par exemple, \u201cActif\u201d, \u201cTermin\u00e9\u201d, \u201cNon commenc\u00e9\u201d) aura trois compartiments, un pour chaque statut. Chaque projet va dans l\u2019un de ces trois compartiments. Vous pouvez ensuite facilement calculer des informations pour chaque dossier, comme un d\u00e9compte des projets ou le total de leurs co\u00fbts. Formules de synth\u00e8se # Lorsque vous ajoutez une table de synth\u00e8se, chacun des champs de regroupement s\u00e9lectionn\u00e9s devient une colonne dans la nouvelle table. Tout le reste dans la table de synth\u00e8se est calcul\u00e9 \u00e0 l\u2019aide de colonnes de formule. Certaines de ces colonnes sont cr\u00e9\u00e9es automatiquement, par commodit\u00e9. Plus pr\u00e9cis\u00e9ment, une colonne count sera ajout\u00e9e pour montrer le nombre d\u2019enregistrements dans le groupe repr\u00e9sent\u00e9 par la ligne de synth\u00e8se actuelle. Et pour toute colonne num\u00e9rique dans les donn\u00e9es d\u2019origine, la table de synth\u00e8se contiendra une colonne du m\u00eame nom avec le total. Par exemple, le r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par Poste ressemblerait \u00e0 ceci : Astuce : Une vue de synth\u00e8se aura un en-t\u00eate comme \u201cEMPLOY\u00c9S [par Poste]\u201d, pour indiquer qu\u2019elle montre les donn\u00e9es de synth\u00e8se pour la table Employ\u00e9s , group\u00e9es par \u201cPoste\u201d. Vous pouvez cliquer sur le titre pour le renommer. Si vous s\u00e9lectionnez une cellule dans une colonne comme count ou AnnualPay et appuyez sur Entr\u00e9e , vous verrez les formules qui les calculent : count est len($group) AnnualPay est SUM($group.AnnualPay) Le myst\u00e9rieux $group est simplement une autre colonne, masqu\u00e9e par d\u00e9faut (mais vous pouvez la rendre visible). Elle contient pour chaque cellule le groupe d\u2019enregistrements repr\u00e9sent\u00e9 par cette ligne de synth\u00e8se. Note pour les fans de Python. $group est un objet Python sp\u00e9cial. C\u2019est une collection it\u00e9rable d\u2019enregistrements. L\u2019utilisation d\u2019un attribut comme $group.A est un raccourci pour la liste des valeurs dans la colonne A de tous les enregistrements du groupe, similaire \u00e0 [r.A for r in $group] . Si vous rendez cette colonne visible, elle appara\u00eetra comme une liste Python d\u2019ID de lignes num\u00e9riques qui identifient les enregistrements dans le groupe. Parfois, les colonnes cr\u00e9\u00e9es automatiquement n\u2019ont pas de sens. Par exemple, la somme de PayRate n\u2019est pas tr\u00e8s significative. Supprimez simplement ces colonnes, soit en utilisant le menu de la colonne, soit en utilisant le raccourci clavier Alt + Moins . Vous \u00eates libre de changer les formules pour les colonnes cr\u00e9\u00e9es automatiquement, ou d\u2019ajouter de nouvelles colonnes de formule. Notez que les tables de synth\u00e8se ne permettent pas d\u2019ajouter des colonnes non -formule. Par exemple, vous pourriez vouloir changer la formule pour PayRate de SUM($group.PayRate) \u00e0 AVERAGE($group.PayRate) , ce qui serait une valeur plus int\u00e9ressante. Voici quelques recettes utiles de formules dans les tables de synth\u00e8se : Moyenne : AVERAGE($group.PayRate) ou SUM($group.PayRate) / $count \u00c9cart type : STDEV($group.PayRate) Maximum ou minimum : MAX($group.PayRate) , MIN($group.PayRate) Somme sur un sous-ensemble d\u2019enregistrements : SUM(r.AnnualPay for r in $group if r.EmploymentStatus == \"Active\") Moyenne pond\u00e9r\u00e9e : AVERAGE_WEIGHTED(zip($group.Life_Expectancy, $group.Population)) En fait, vous pouvez utiliser toute la puissance de Python pour calculer ce que vous souhaitez. Comme pour toute table, votre formule peut se r\u00e9f\u00e9rer \u00e0 n\u2019importe laquelle des colonnes de la table de synth\u00e8se, pas seulement \u00e0 $group . Changer les colonnes de synth\u00e8se # Les colonnes de regroupement dans une table de synth\u00e8se sont cr\u00e9\u00e9es lorsque vous ajoutez la vue. Il n\u2019est pas possible de modifier les valeurs dans celles-ci, ni de modifier leurs param\u00e8tres, tels que le type. Les param\u00e8tres et les valeurs des colonnes de regroupement refl\u00e8tent ceux de la table sous-jacente. Lorsque de nouvelles valeurs apparaissent dans la table sous-jacente pour les colonnes de regroupement, les tables de synth\u00e8se obtiendront \u00e9galement de nouvelles lignes automatiquement. Ce que vous pouvez changer, c\u2019est les colonnes par lesquelles la table est group\u00e9e. Cliquez sur les trois points en haut \u00e0 droite de la table de synth\u00e8se, et cliquez sur \u201cS\u00e9lection des donn\u00e9es\u201d : Les param\u00e8tres dans le panneau lat\u00e9ral vous indiquent quelles donn\u00e9es sont affich\u00e9es et comment elles sont group\u00e9es : Vous pouvez cliquer sur le bouton \u201cModifier la s\u00e9lection des donn\u00e9es\u201d pour ouvrir le m\u00eame s\u00e9lecteur de vues que vous avez utilis\u00e9 pour ajouter la table de synth\u00e8se. Vous pouvez maintenant d\u00e9s\u00e9lectionner certains champs \u201cGrouper par\u201d et en s\u00e9lectionner d\u2019autres, puis cliquer sur \u201cEnregistrer\u201d pour mettre \u00e0 jour la table de synth\u00e8se. Lier des tables de synth\u00e8se # Vous pouvez lier des tables de synth\u00e8se \u00e0 d\u2019autres vues. Si vous avez une table de synth\u00e8se sur une page, elle peut \u00eatre utilis\u00e9e comme s\u00e9lecteur pour une table de donn\u00e9es sous-jacentes, ou pour une synth\u00e8se plus d\u00e9taill\u00e9e. Par exemple, si vous avez un r\u00e9sum\u00e9 des Employ\u00e9s par \u201cPoste\u201d, il sera disponible comme option \u201cS\u00c9LECTIONNER PAR\u201d lors de l\u2019ajout d\u2019une table non r\u00e9sum\u00e9e des Employ\u00e9s : Le r\u00e9sultat est que vous pouvez s\u00e9lectionner un poste dans la table de synth\u00e8se, et voir tous les employ\u00e9s dans ce poste. Vous pourriez de m\u00eame lier un r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par \u201cPoste\u201d et \u201cGenre\u201d \u00e0 la premi\u00e8re vue : Vous pouvez alors s\u00e9lectionner un poste dans la vue \u201cEmploy\u00e9s [par Poste]\u201d, et voir une r\u00e9partition par genre parmi les employ\u00e9s dans ce poste. Notez que ce type de liaison n\u00e9cessite que la nouvelle vue inclue \u00e0 la fois \u201cPoste\u201d et \u201cGenre\u201d dans ses colonnes de regroupement. Pour en savoir plus sur la liaison, voir Lier des vues . Graphiques des donn\u00e9es r\u00e9sum\u00e9es # Les tables de synth\u00e8se sont une excellente source de donn\u00e9es pour les graphiques, y compris les graphiques dynamiques. Dans l\u2019exemple ci-dessus, nous pourrions ajouter une autre vue montrant les Employ\u00e9s group\u00e9s par \u201cPoste\u201d et \u201cGenre\u201d, mais cette fois dans une vue graphique. S\u00e9lectionnez \u201cDiagramme \u00e0 barres\u201d pour le type de graphique, et s\u00e9lectionnez \u201cGenre\u201d et \u201cAnnualPay\u201d comme s\u00e9ries visibles. Vous pouvez maintenant cliquer sur un poste, et voir visuellement la diff\u00e9rence de salaire moyen par genre pour ce poste. Le tutoriel Analyser et visualiser montre d\u2019autres exemples de graphiques bas\u00e9s sur des tables de synth\u00e8se. D\u00e9tacher des tables de synth\u00e8se # Les tables de synth\u00e8se sont calcul\u00e9es \u00e0 partir des donn\u00e9es sous-jacentes. Parfois, cependant, il est utile de \u201cd\u00e9tacher\u201d une table de synth\u00e8se et de la transformer en une table de donn\u00e9es ind\u00e9pendante. Par exemple, nous avons vu comment r\u00e9sumer une table des Employ\u00e9s , en la groupant par la colonne \u201cPoste\u201d. Disons que vous voulez associer des donn\u00e9es \u00e0 chaque poste, telles qu\u2019une description de poste ou un code d\u2019assurance pour les accidents du travail. Ces donn\u00e9es appartiennent \u00e0 leur propre table, avec une ligne pour chaque poste, et quelques colonnes. Les tables de synth\u00e8se fournissent un moyen facile de cr\u00e9er une telle table. Ajoutez une page avec un r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par \u201cPoste\u201d. Maintenant, dans l\u2019onglet \u201cDonn\u00e9es\u201d du panneau de droite, cliquez sur le bouton \u201cD\u00e9tacher\u201d. Votre table de synth\u00e8se vient d\u2019\u00eatre transform\u00e9e en une toute nouvelle table avec les m\u00eames lignes et un nom g\u00e9n\u00e9r\u00e9 automatiquement, comme \u201cTable1\u201d. Vous pouvez la renommer en \u201cPostes\u201d, et ajouter les colonnes dont vous avez besoin : Les colonnes calcul\u00e9es restent. En fait, tout ce que vous pourriez calculer sur chaque poste dans la table de synth\u00e8se \u201cEmploy\u00e9s [par Poste]\u201d, vous pouvez toujours le calculer dans la nouvelle table \u201cPostes\u201d. Une diff\u00e9rence est que de nouvelles valeurs ne seront pas ajout\u00e9es automatiquement \u00e0 la table d\u00e9tach\u00e9e. En d\u2019autres termes, si un poste jamais vu auparavant (peut-\u00eatre \u201cResponsable des troubles\u201d) appara\u00eet dans les donn\u00e9es sous-jacentes, une table de synth\u00e8se se mettrait \u00e0 jour automatiquement pour l\u2019inclure, mais une table d\u00e9tach\u00e9e ne le fera pas.","title":"Summary tables"},{"location":"summary-tables/#tables-de-synthese","text":"Les tables de synth\u00e8se sont l\u2019outil principal de l\u2019analyse de donn\u00e9es dans Grist. Elles sont similaires aux \u201ctableaux crois\u00e9s dynamiques\u201d dans les feuilles de calcul, et aux clauses GROUP BY dans les bases de donn\u00e9es. Elles vous permettent d\u2019obtenir des totaux pour l\u2019ensemble de la table ou des sous-totaux. Les tables de synth\u00e8se ont de nombreuses utilisations : Grouper les projets par statut ou par priorit\u00e9. R\u00e9sumer les transactions bancaires par ann\u00e9e, par trimestre ou par cat\u00e9gorie. Grouper les employ\u00e9s par poste, par genre ou par d\u00e9partement. R\u00e9sumer par n\u2019importe quelle combinaison, telle que poste et genre et d\u00e9partement. Grouper tous les enregistrements pour calculer des totaux et des statistiques pour l\u2019ensemble de la table.","title":"Tables de synth\u00e8se"},{"location":"summary-tables/#ajouter-des-syntheses","text":"Cliquez sur le bouton \u201cAjouter\u201d et s\u00e9lectionnez \u201cAjouter une page\u201d ou \u201cAjouter une vue \u00e0 la page\u201d. Dans le s\u00e9lecteur de vues, cliquez sur l\u2019ic\u00f4ne de sommation ( ) \u00e0 c\u00f4t\u00e9 de la table que vous souhaitez r\u00e9sumer. Lors de la cr\u00e9ation d\u2019une table de synth\u00e8se, vous choisissez un champ ou une combinaison de champs par lesquels les donn\u00e9es doivent \u00eatre group\u00e9es. Ceux-ci sont appel\u00e9s les champs \u201cGrouper par\u201d. La table de synth\u00e8se contiendra une ligne pour chaque valeur de regroupement. Par exemple, si \u201cPoste\u201d est s\u00e9lectionn\u00e9 comme champ de regroupement, la table de synth\u00e8se contiendra une ligne pour chaque poste. Les formules puissantes de Grist permettent ensuite des calculs arbitraires sur les sous-ensembles correspondants des donn\u00e9es sous-jacentes. Gardez \u00e0 l\u2019esprit que les champs de regroupement d\u00e9terminent quels groupes doivent exister dans la table de synth\u00e8se. Ne s\u00e9lectionnez pas les valeurs que vous souhaitez calculer (par exemple, pour le salaire moyen) comme champs de regroupement ; celles-ci seront cr\u00e9\u00e9es \u00e0 l\u2019aide de formules \u00e0 l\u2019\u00e9tape suivante. Astuce : Vous pouvez consid\u00e9rer les lignes d\u2019une table de synth\u00e8se comme des compartiments dans lesquels vos enregistrements seront plac\u00e9s. Les champs de regroupement d\u00e9terminent les \u00e9tiquettes de ces compartiments. Par exemple, un r\u00e9sum\u00e9 des projets group\u00e9s par statut (par exemple, \u201cActif\u201d, \u201cTermin\u00e9\u201d, \u201cNon commenc\u00e9\u201d) aura trois compartiments, un pour chaque statut. Chaque projet va dans l\u2019un de ces trois compartiments. Vous pouvez ensuite facilement calculer des informations pour chaque dossier, comme un d\u00e9compte des projets ou le total de leurs co\u00fbts.","title":"Ajouter des synth\u00e8ses"},{"location":"summary-tables/#formules-de-synthese","text":"Lorsque vous ajoutez une table de synth\u00e8se, chacun des champs de regroupement s\u00e9lectionn\u00e9s devient une colonne dans la nouvelle table. Tout le reste dans la table de synth\u00e8se est calcul\u00e9 \u00e0 l\u2019aide de colonnes de formule. Certaines de ces colonnes sont cr\u00e9\u00e9es automatiquement, par commodit\u00e9. Plus pr\u00e9cis\u00e9ment, une colonne count sera ajout\u00e9e pour montrer le nombre d\u2019enregistrements dans le groupe repr\u00e9sent\u00e9 par la ligne de synth\u00e8se actuelle. Et pour toute colonne num\u00e9rique dans les donn\u00e9es d\u2019origine, la table de synth\u00e8se contiendra une colonne du m\u00eame nom avec le total. Par exemple, le r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par Poste ressemblerait \u00e0 ceci : Astuce : Une vue de synth\u00e8se aura un en-t\u00eate comme \u201cEMPLOY\u00c9S [par Poste]\u201d, pour indiquer qu\u2019elle montre les donn\u00e9es de synth\u00e8se pour la table Employ\u00e9s , group\u00e9es par \u201cPoste\u201d. Vous pouvez cliquer sur le titre pour le renommer. Si vous s\u00e9lectionnez une cellule dans une colonne comme count ou AnnualPay et appuyez sur Entr\u00e9e , vous verrez les formules qui les calculent : count est len($group) AnnualPay est SUM($group.AnnualPay) Le myst\u00e9rieux $group est simplement une autre colonne, masqu\u00e9e par d\u00e9faut (mais vous pouvez la rendre visible). Elle contient pour chaque cellule le groupe d\u2019enregistrements repr\u00e9sent\u00e9 par cette ligne de synth\u00e8se. Note pour les fans de Python. $group est un objet Python sp\u00e9cial. C\u2019est une collection it\u00e9rable d\u2019enregistrements. L\u2019utilisation d\u2019un attribut comme $group.A est un raccourci pour la liste des valeurs dans la colonne A de tous les enregistrements du groupe, similaire \u00e0 [r.A for r in $group] . Si vous rendez cette colonne visible, elle appara\u00eetra comme une liste Python d\u2019ID de lignes num\u00e9riques qui identifient les enregistrements dans le groupe. Parfois, les colonnes cr\u00e9\u00e9es automatiquement n\u2019ont pas de sens. Par exemple, la somme de PayRate n\u2019est pas tr\u00e8s significative. Supprimez simplement ces colonnes, soit en utilisant le menu de la colonne, soit en utilisant le raccourci clavier Alt + Moins . Vous \u00eates libre de changer les formules pour les colonnes cr\u00e9\u00e9es automatiquement, ou d\u2019ajouter de nouvelles colonnes de formule. Notez que les tables de synth\u00e8se ne permettent pas d\u2019ajouter des colonnes non -formule. Par exemple, vous pourriez vouloir changer la formule pour PayRate de SUM($group.PayRate) \u00e0 AVERAGE($group.PayRate) , ce qui serait une valeur plus int\u00e9ressante. Voici quelques recettes utiles de formules dans les tables de synth\u00e8se : Moyenne : AVERAGE($group.PayRate) ou SUM($group.PayRate) / $count \u00c9cart type : STDEV($group.PayRate) Maximum ou minimum : MAX($group.PayRate) , MIN($group.PayRate) Somme sur un sous-ensemble d\u2019enregistrements : SUM(r.AnnualPay for r in $group if r.EmploymentStatus == \"Active\") Moyenne pond\u00e9r\u00e9e : AVERAGE_WEIGHTED(zip($group.Life_Expectancy, $group.Population)) En fait, vous pouvez utiliser toute la puissance de Python pour calculer ce que vous souhaitez. Comme pour toute table, votre formule peut se r\u00e9f\u00e9rer \u00e0 n\u2019importe laquelle des colonnes de la table de synth\u00e8se, pas seulement \u00e0 $group .","title":"Formules de synth\u00e8se"},{"location":"summary-tables/#changer-les-colonnes-de-synthese","text":"Les colonnes de regroupement dans une table de synth\u00e8se sont cr\u00e9\u00e9es lorsque vous ajoutez la vue. Il n\u2019est pas possible de modifier les valeurs dans celles-ci, ni de modifier leurs param\u00e8tres, tels que le type. Les param\u00e8tres et les valeurs des colonnes de regroupement refl\u00e8tent ceux de la table sous-jacente. Lorsque de nouvelles valeurs apparaissent dans la table sous-jacente pour les colonnes de regroupement, les tables de synth\u00e8se obtiendront \u00e9galement de nouvelles lignes automatiquement. Ce que vous pouvez changer, c\u2019est les colonnes par lesquelles la table est group\u00e9e. Cliquez sur les trois points en haut \u00e0 droite de la table de synth\u00e8se, et cliquez sur \u201cS\u00e9lection des donn\u00e9es\u201d : Les param\u00e8tres dans le panneau lat\u00e9ral vous indiquent quelles donn\u00e9es sont affich\u00e9es et comment elles sont group\u00e9es : Vous pouvez cliquer sur le bouton \u201cModifier la s\u00e9lection des donn\u00e9es\u201d pour ouvrir le m\u00eame s\u00e9lecteur de vues que vous avez utilis\u00e9 pour ajouter la table de synth\u00e8se. Vous pouvez maintenant d\u00e9s\u00e9lectionner certains champs \u201cGrouper par\u201d et en s\u00e9lectionner d\u2019autres, puis cliquer sur \u201cEnregistrer\u201d pour mettre \u00e0 jour la table de synth\u00e8se.","title":"Changer les colonnes de synth\u00e8se"},{"location":"summary-tables/#lier-des-tables-de-synthese","text":"Vous pouvez lier des tables de synth\u00e8se \u00e0 d\u2019autres vues. Si vous avez une table de synth\u00e8se sur une page, elle peut \u00eatre utilis\u00e9e comme s\u00e9lecteur pour une table de donn\u00e9es sous-jacentes, ou pour une synth\u00e8se plus d\u00e9taill\u00e9e. Par exemple, si vous avez un r\u00e9sum\u00e9 des Employ\u00e9s par \u201cPoste\u201d, il sera disponible comme option \u201cS\u00c9LECTIONNER PAR\u201d lors de l\u2019ajout d\u2019une table non r\u00e9sum\u00e9e des Employ\u00e9s : Le r\u00e9sultat est que vous pouvez s\u00e9lectionner un poste dans la table de synth\u00e8se, et voir tous les employ\u00e9s dans ce poste. Vous pourriez de m\u00eame lier un r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par \u201cPoste\u201d et \u201cGenre\u201d \u00e0 la premi\u00e8re vue : Vous pouvez alors s\u00e9lectionner un poste dans la vue \u201cEmploy\u00e9s [par Poste]\u201d, et voir une r\u00e9partition par genre parmi les employ\u00e9s dans ce poste. Notez que ce type de liaison n\u00e9cessite que la nouvelle vue inclue \u00e0 la fois \u201cPoste\u201d et \u201cGenre\u201d dans ses colonnes de regroupement. Pour en savoir plus sur la liaison, voir Lier des vues .","title":"Lier des tables de synth\u00e8se"},{"location":"summary-tables/#graphiques-des-donnees-resumees","text":"Les tables de synth\u00e8se sont une excellente source de donn\u00e9es pour les graphiques, y compris les graphiques dynamiques. Dans l\u2019exemple ci-dessus, nous pourrions ajouter une autre vue montrant les Employ\u00e9s group\u00e9s par \u201cPoste\u201d et \u201cGenre\u201d, mais cette fois dans une vue graphique. S\u00e9lectionnez \u201cDiagramme \u00e0 barres\u201d pour le type de graphique, et s\u00e9lectionnez \u201cGenre\u201d et \u201cAnnualPay\u201d comme s\u00e9ries visibles. Vous pouvez maintenant cliquer sur un poste, et voir visuellement la diff\u00e9rence de salaire moyen par genre pour ce poste. Le tutoriel Analyser et visualiser montre d\u2019autres exemples de graphiques bas\u00e9s sur des tables de synth\u00e8se.","title":"Graphiques des donn\u00e9es r\u00e9sum\u00e9es"},{"location":"summary-tables/#detacher-des-tables-de-synthese","text":"Les tables de synth\u00e8se sont calcul\u00e9es \u00e0 partir des donn\u00e9es sous-jacentes. Parfois, cependant, il est utile de \u201cd\u00e9tacher\u201d une table de synth\u00e8se et de la transformer en une table de donn\u00e9es ind\u00e9pendante. Par exemple, nous avons vu comment r\u00e9sumer une table des Employ\u00e9s , en la groupant par la colonne \u201cPoste\u201d. Disons que vous voulez associer des donn\u00e9es \u00e0 chaque poste, telles qu\u2019une description de poste ou un code d\u2019assurance pour les accidents du travail. Ces donn\u00e9es appartiennent \u00e0 leur propre table, avec une ligne pour chaque poste, et quelques colonnes. Les tables de synth\u00e8se fournissent un moyen facile de cr\u00e9er une telle table. Ajoutez une page avec un r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par \u201cPoste\u201d. Maintenant, dans l\u2019onglet \u201cDonn\u00e9es\u201d du panneau de droite, cliquez sur le bouton \u201cD\u00e9tacher\u201d. Votre table de synth\u00e8se vient d\u2019\u00eatre transform\u00e9e en une toute nouvelle table avec les m\u00eames lignes et un nom g\u00e9n\u00e9r\u00e9 automatiquement, comme \u201cTable1\u201d. Vous pouvez la renommer en \u201cPostes\u201d, et ajouter les colonnes dont vous avez besoin : Les colonnes calcul\u00e9es restent. En fait, tout ce que vous pourriez calculer sur chaque poste dans la table de synth\u00e8se \u201cEmploy\u00e9s [par Poste]\u201d, vous pouvez toujours le calculer dans la nouvelle table \u201cPostes\u201d. Une diff\u00e9rence est que de nouvelles valeurs ne seront pas ajout\u00e9es automatiquement \u00e0 la table d\u00e9tach\u00e9e. En d\u2019autres termes, si un poste jamais vu auparavant (peut-\u00eatre \u201cResponsable des troubles\u201d) appara\u00eet dans les donn\u00e9es sous-jacentes, une table de synth\u00e8se se mettrait \u00e0 jour automatiquement pour l\u2019inclure, mais une table d\u00e9tach\u00e9e ne le fera pas.","title":"D\u00e9tacher des tables de synth\u00e8se"},{"location":"team-sharing/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Partage d\u2019\u00e9quipe # Nous avons vu comment partager des documents individuels avec d\u2019autres utilisateurs dans l\u2019article Partage . Les espaces d\u2019\u00e9quipe vous offrent un contr\u00f4le suppl\u00e9mentaire, vous permettant de partager les collections de documents d\u2019un espace d\u2019\u00e9quipe en tout ou en partie avec d\u2019autres. Vous pouvez \u00e9galement regrouper des documents en espaces de travail et modifier les permissions au niveau de l\u2019dossier. Pour partager un espace d\u2019\u00e9quipe, cliquez sur le bouton \u2018G\u00e9rer l\u2019\u00e9quipe\u2019 en haut \u00e0 droite de la page d\u2019accueil de votre espace d\u2019\u00e9quipe. Vous pouvez maintenant inviter des personnes comme vous l\u2019avez fait pour des documents individuels dans Partage . Tout comme pour les documents, vous pouvez inviter des personnes en tant que spectateurs, \u00e9diteurs ou propri\u00e9taires de l\u2019espace d\u2019\u00e9quipe. Tous les documents au sein de l\u2019espace seront accessibles \u00e0 ces personnes, sauf si vous d\u00e9sactivez l\u2019option de partage \u2018H\u00e9riter des acc\u00e8s\u2019 pour des espaces de travail ou documents individuels. R\u00f4les # Il y a trois r\u00f4les principaux pris en charge par Grist pour les espaces d\u2019\u00e9quipe : Spectateur : permet \u00e0 un utilisateur de consulter l\u2019espace mais pas d\u2019y apporter des modifications. Un spectateur pourra consulter tous les espaces de travail et documents au sein de l\u2019espace, sauf indication contraire. \u00c9diteur : permet \u00e0 un utilisateur de consulter ou d\u2019apporter des modifications \u00e0 l\u2019espace et \u00e0 tous ses espaces de travail et documents (sauf indication contraire). Cependant, les param\u00e8tres de partage de l\u2019espace, de ses espaces de travail et de ses documents ne peuvent pas \u00eatre modifi\u00e9s par un \u00e9diteur. Propri\u00e9taire : donne \u00e0 un utilisateur des permissions compl\u00e8tes sur les espaces de travail et les documents de l\u2019espace, y compris leurs param\u00e8tres de partage. Permissions de facturation # Aucun de ces r\u00f4les ne donne acc\u00e8s aux informations ou \u00e0 la gestion de la facturation. Les gestionnaires de plan de facturation peuvent \u00eatre ajout\u00e9s via l\u2019option \u2018Compte de facturation\u2019. Ouvrez le menu utilisateur sous votre ic\u00f4ne utilisateur et s\u00e9lectionnez \u2018Compte de facturation\u2019. Suppression des membres de l\u2019\u00e9quipe # Pour supprimer un utilisateur de votre \u00e9quipe, cliquez sur \u2018G\u00e9rer l\u2019\u00e9quipe\u2019 en haut \u00e0 droite de la page, puis cliquez sur l\u2019ic\u00f4ne de suppression \u00e0 droite de son nom. Vous devez cliquer sur le bouton de confirmation pour enregistrer le changement. Lorsque des utilisateurs sont supprim\u00e9s de votre \u00e9quipe, votre facture mensuelle sera r\u00e9duite, au prorata du temps restant dans le cycle de facturation.","title":"Sharing team sites"},{"location":"team-sharing/#partage-dequipe","text":"Nous avons vu comment partager des documents individuels avec d\u2019autres utilisateurs dans l\u2019article Partage . Les espaces d\u2019\u00e9quipe vous offrent un contr\u00f4le suppl\u00e9mentaire, vous permettant de partager les collections de documents d\u2019un espace d\u2019\u00e9quipe en tout ou en partie avec d\u2019autres. Vous pouvez \u00e9galement regrouper des documents en espaces de travail et modifier les permissions au niveau de l\u2019dossier. Pour partager un espace d\u2019\u00e9quipe, cliquez sur le bouton \u2018G\u00e9rer l\u2019\u00e9quipe\u2019 en haut \u00e0 droite de la page d\u2019accueil de votre espace d\u2019\u00e9quipe. Vous pouvez maintenant inviter des personnes comme vous l\u2019avez fait pour des documents individuels dans Partage . Tout comme pour les documents, vous pouvez inviter des personnes en tant que spectateurs, \u00e9diteurs ou propri\u00e9taires de l\u2019espace d\u2019\u00e9quipe. Tous les documents au sein de l\u2019espace seront accessibles \u00e0 ces personnes, sauf si vous d\u00e9sactivez l\u2019option de partage \u2018H\u00e9riter des acc\u00e8s\u2019 pour des espaces de travail ou documents individuels.","title":"Partage d’\u00e9quipe"},{"location":"team-sharing/#roles","text":"Il y a trois r\u00f4les principaux pris en charge par Grist pour les espaces d\u2019\u00e9quipe : Spectateur : permet \u00e0 un utilisateur de consulter l\u2019espace mais pas d\u2019y apporter des modifications. Un spectateur pourra consulter tous les espaces de travail et documents au sein de l\u2019espace, sauf indication contraire. \u00c9diteur : permet \u00e0 un utilisateur de consulter ou d\u2019apporter des modifications \u00e0 l\u2019espace et \u00e0 tous ses espaces de travail et documents (sauf indication contraire). Cependant, les param\u00e8tres de partage de l\u2019espace, de ses espaces de travail et de ses documents ne peuvent pas \u00eatre modifi\u00e9s par un \u00e9diteur. Propri\u00e9taire : donne \u00e0 un utilisateur des permissions compl\u00e8tes sur les espaces de travail et les documents de l\u2019espace, y compris leurs param\u00e8tres de partage.","title":"R\u00f4les"},{"location":"team-sharing/#permissions-de-facturation","text":"Aucun de ces r\u00f4les ne donne acc\u00e8s aux informations ou \u00e0 la gestion de la facturation. Les gestionnaires de plan de facturation peuvent \u00eatre ajout\u00e9s via l\u2019option \u2018Compte de facturation\u2019. Ouvrez le menu utilisateur sous votre ic\u00f4ne utilisateur et s\u00e9lectionnez \u2018Compte de facturation\u2019.","title":"Permissions de facturation"},{"location":"team-sharing/#suppression-des-membres-de-lequipe","text":"Pour supprimer un utilisateur de votre \u00e9quipe, cliquez sur \u2018G\u00e9rer l\u2019\u00e9quipe\u2019 en haut \u00e0 droite de la page, puis cliquez sur l\u2019ic\u00f4ne de suppression \u00e0 droite de son nom. Vous devez cliquer sur le bouton de confirmation pour enregistrer le changement. Lorsque des utilisateurs sont supprim\u00e9s de votre \u00e9quipe, votre facture mensuelle sera r\u00e9duite, au prorata du temps restant dans le cycle de facturation.","title":"Suppression des membres de l’\u00e9quipe"},{"location":"teams/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . \u00c9quipes # Les espaces d\u2019\u00e9quipe sont destin\u00e9s \u00e0 la collaboration r\u00e9guli\u00e8re par groupes. Ils stockent des documents sur un sous-domaine de votre choix tel que votre-\u00e9quipe.getgrist.com . Les espaces d\u2019\u00e9quipe peuvent \u00eatre sur un plan gratuit ou payant. La diff\u00e9rence entre le plan Gratuit et les plans payants r\u00e9side dans les limites de documents. Les documents sur un plan Gratuit peuvent contenir jusqu\u2019\u00e0 5 000 lignes et incluent des sauvegardes automatiques pendant 30 jours. Alors que les espaces personnels ne sont disponibles qu\u2019avec le plan Gratuit, les espaces d\u2019\u00e9quipe peuvent \u00eatre mis \u00e0 niveau vers les plans Pro ou Business. Sur les plans payants, les limites sont beaucoup plus \u00e9lev\u00e9es. Voir la page de tarification pour plus de d\u00e9tails. Si vous avez un espace d\u2019\u00e9quipe mais que vous ne le voyez pas, cliquez dans le coin sup\u00e9rieur gauche pour ouvrir un menu d\u00e9roulant des sites auxquels vous avez acc\u00e8s. Ouvrir le menu utilisateur sous votre ic\u00f4ne de profil listera \u00e9galement tous les sites auxquels vous avez acc\u00e8s. Vous ne voyez pas votre espace d\u2019\u00e9quipe ? Essayez de s\u00e9lectionner l\u2019option \u2018Ajouter un compte\u2019 dans le menu utilisateur. Il est possible que l\u2019espace d\u2019\u00e9quipe soit li\u00e9 \u00e0 une adresse e-mail diff\u00e9rente. Un nouvel espace d\u2019\u00e9quipe ressemblera \u00e0 ceci, pr\u00eat \u00e0 \u00eatre rempli de documents Grist et partag\u00e9 avec votre \u00e9quipe. Si un coll\u00e8gue a partag\u00e9 un espace d\u2019\u00e9quipe avec vous, vous verrez la m\u00eame chose, mais selon le r\u00f4le qu\u2019il a choisi pour vous, certaines options peuvent \u00eatre inactives. Si vous avez besoin de ces options, demandez \u00e0 votre coll\u00e8gue de changer votre r\u00f4le. Pour un espace d\u2019\u00e9quipe dans lequel vous \u00eates Propri\u00e9taire ou \u00c9diteur, vous pouvez cr\u00e9er des documents ou espaces de travail . Lorsque votre r\u00f4le est Propri\u00e9taire, vous pouvez imm\u00e9diatement commencer \u00e0 partager le site avec d\u2019autres. Comprendre les Espaces Personnels # Les sites qui commencent par le symbole \u2018@\u2019 sont des espaces personnels. Tous les comptes Grist ont un espace personnel. Votre espace personnel est nomm\u00e9 en utilisant votre nom et est toujours disponible \u00e0 https://docs.getgrist.com . C\u2019est \u00e9galement l\u00e0 que vous trouverez les documents personnels partag\u00e9s avec vous par d\u2019autres. Chaque document dans un espace personnel peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 2 Invit\u00e9s gratuitement. un espace personnel un espace d\u2019\u00e9quipe Compte de Facturation # Si vous avez cr\u00e9\u00e9 un espace d\u2019\u00e9quipe sur le plan Pro ou Business, ou si vous y avez \u00e9t\u00e9 ajout\u00e9 en tant que Gestionnaire de Facturation, vous pouvez g\u00e9rer les informations de facturation et modifier le nom et le sous-domaine de votre espace d\u2019\u00e9quipe depuis la page du compte de facturation. Ouvrez le menu utilisateur et cliquez sur \u2018Compte de Facturation\u2019 pour ouvrir un menu qui ressemble \u00e0 ceci. Cliquez sur l\u2019ic\u00f4ne \u2018Modifier\u2019 en haut pour \u00e9diter le nom ou le sous-domaine de votre espace d\u2019\u00e9quipe. Notez que si vous changez le sous-domaine, tous les liens pointant vers votre site ou les documents de votre site devront \u00eatre mis \u00e0 jour. Les espaces d\u2019\u00e9quipe peuvent \u00eatre supprim\u00e9s depuis la page \u2018R\u00e9sum\u00e9 de Facturation\u2019 en cliquant sur \u2018Supprimer l\u2019espace d\u2019\u00e9quipe\u2019. Veuillez noter que cette action est irr\u00e9versible et supprimera votre site ainsi que tous les documents. Assurez-vous d\u2019avoir cr\u00e9\u00e9 une sauvegarde des donn\u00e9es importantes au pr\u00e9alable.","title":"Creating team sites"},{"location":"teams/#equipes","text":"Les espaces d\u2019\u00e9quipe sont destin\u00e9s \u00e0 la collaboration r\u00e9guli\u00e8re par groupes. Ils stockent des documents sur un sous-domaine de votre choix tel que votre-\u00e9quipe.getgrist.com . Les espaces d\u2019\u00e9quipe peuvent \u00eatre sur un plan gratuit ou payant. La diff\u00e9rence entre le plan Gratuit et les plans payants r\u00e9side dans les limites de documents. Les documents sur un plan Gratuit peuvent contenir jusqu\u2019\u00e0 5 000 lignes et incluent des sauvegardes automatiques pendant 30 jours. Alors que les espaces personnels ne sont disponibles qu\u2019avec le plan Gratuit, les espaces d\u2019\u00e9quipe peuvent \u00eatre mis \u00e0 niveau vers les plans Pro ou Business. Sur les plans payants, les limites sont beaucoup plus \u00e9lev\u00e9es. Voir la page de tarification pour plus de d\u00e9tails. Si vous avez un espace d\u2019\u00e9quipe mais que vous ne le voyez pas, cliquez dans le coin sup\u00e9rieur gauche pour ouvrir un menu d\u00e9roulant des sites auxquels vous avez acc\u00e8s. Ouvrir le menu utilisateur sous votre ic\u00f4ne de profil listera \u00e9galement tous les sites auxquels vous avez acc\u00e8s. Vous ne voyez pas votre espace d\u2019\u00e9quipe ? Essayez de s\u00e9lectionner l\u2019option \u2018Ajouter un compte\u2019 dans le menu utilisateur. Il est possible que l\u2019espace d\u2019\u00e9quipe soit li\u00e9 \u00e0 une adresse e-mail diff\u00e9rente. Un nouvel espace d\u2019\u00e9quipe ressemblera \u00e0 ceci, pr\u00eat \u00e0 \u00eatre rempli de documents Grist et partag\u00e9 avec votre \u00e9quipe. Si un coll\u00e8gue a partag\u00e9 un espace d\u2019\u00e9quipe avec vous, vous verrez la m\u00eame chose, mais selon le r\u00f4le qu\u2019il a choisi pour vous, certaines options peuvent \u00eatre inactives. Si vous avez besoin de ces options, demandez \u00e0 votre coll\u00e8gue de changer votre r\u00f4le. Pour un espace d\u2019\u00e9quipe dans lequel vous \u00eates Propri\u00e9taire ou \u00c9diteur, vous pouvez cr\u00e9er des documents ou espaces de travail . Lorsque votre r\u00f4le est Propri\u00e9taire, vous pouvez imm\u00e9diatement commencer \u00e0 partager le site avec d\u2019autres.","title":"\u00c9quipes"},{"location":"teams/#comprendre-les-espaces-personnels","text":"Les sites qui commencent par le symbole \u2018@\u2019 sont des espaces personnels. Tous les comptes Grist ont un espace personnel. Votre espace personnel est nomm\u00e9 en utilisant votre nom et est toujours disponible \u00e0 https://docs.getgrist.com . C\u2019est \u00e9galement l\u00e0 que vous trouverez les documents personnels partag\u00e9s avec vous par d\u2019autres. Chaque document dans un espace personnel peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 2 Invit\u00e9s gratuitement. un espace personnel un espace d\u2019\u00e9quipe","title":"Comprendre les Espaces Personnels"},{"location":"teams/#compte-de-facturation","text":"Si vous avez cr\u00e9\u00e9 un espace d\u2019\u00e9quipe sur le plan Pro ou Business, ou si vous y avez \u00e9t\u00e9 ajout\u00e9 en tant que Gestionnaire de Facturation, vous pouvez g\u00e9rer les informations de facturation et modifier le nom et le sous-domaine de votre espace d\u2019\u00e9quipe depuis la page du compte de facturation. Ouvrez le menu utilisateur et cliquez sur \u2018Compte de Facturation\u2019 pour ouvrir un menu qui ressemble \u00e0 ceci. Cliquez sur l\u2019ic\u00f4ne \u2018Modifier\u2019 en haut pour \u00e9diter le nom ou le sous-domaine de votre espace d\u2019\u00e9quipe. Notez que si vous changez le sous-domaine, tous les liens pointant vers votre site ou les documents de votre site devront \u00eatre mis \u00e0 jour. Les espaces d\u2019\u00e9quipe peuvent \u00eatre supprim\u00e9s depuis la page \u2018R\u00e9sum\u00e9 de Facturation\u2019 en cliquant sur \u2018Supprimer l\u2019espace d\u2019\u00e9quipe\u2019. Veuillez noter que cette action est irr\u00e9versible et supprimera votre site ainsi que tous les documents. Assurez-vous d\u2019avoir cr\u00e9\u00e9 une sauvegarde des donn\u00e9es importantes au pr\u00e9alable.","title":"Compte de Facturation"},{"location":"telemetry-full/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Niveau de t\u00e9l\u00e9m\u00e9trie : complet # Ceci est un niveau de t\u00e9l\u00e9m\u00e9trie appropri\u00e9 pour une utilisation interne par un service h\u00e9berg\u00e9, avec GRIST_TELEMETRY_URL d\u00e9fini sur un point de terminaison contr\u00f4l\u00e9 par l\u2019op\u00e9rateur du service. apiUsage # D\u00e9clench\u00e9 lorsqu\u2019une requ\u00eate HTTP avec une cl\u00e9 API est effectu\u00e9e. Champ Type Description method string La m\u00e9thode de la requ\u00eate HTTP (par exemple GET, POST, PUT). userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userAgent string L\u2019en-t\u00eate de la requ\u00eate HTTP User-Agent. beaconOpen # D\u00e9clench\u00e9 lorsque HelpScout Beacon est ouvert. Champ Type Description userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. beaconArticleViewed # D\u00e9clench\u00e9 lorsqu\u2019un article est ouvert dans HelpScout Beacon. Champ Type Description articleId string L\u2019identifiant de l\u2019article. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. beaconEmailSent # D\u00e9clench\u00e9 lorsqu\u2019un email est envoy\u00e9 dans HelpScout Beacon. Champ Type Description userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. beaconSearch # D\u00e9clench\u00e9 lorsqu\u2019une recherche est effectu\u00e9e dans HelpScout Beacon. Champ Type Description searchQuery string La requ\u00eate de recherche. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. documentForked # D\u00e9clench\u00e9 lorsqu\u2019un document est fork\u00e9. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site contenant le document fork\u00e9. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. forkIdDigest string Un hash de l\u2019identifiant du fork. forkDocIdDigest string Un hash de l\u2019identifiant complet du fork, incluant l\u2019identifiant du tronc et l\u2019identifiant du fork. trunkIdDigest string Un hash de l\u2019identifiant du tronc. isTemplate boolean Si le tronc est un mod\u00e8le. lastActivity date Horodatage de la derni\u00e8re mise \u00e0 jour du document tronc. documentOpened # D\u00e9clench\u00e9 lorsqu\u2019un document public ou un mod\u00e8le est ouvert. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. isPublic boolean Si le document est public. isSnapshot boolean Si un instantan\u00e9 a \u00e9t\u00e9 ouvert. isTemplate boolean Si le document est un mod\u00e8le. lastUpdated date Horodatage de la derni\u00e8re mise \u00e0 jour du document. documentUsage # D\u00e9clench\u00e9 \u00e0 l\u2019ouverture et \u00e0 la fermeture du document, ainsi qu\u2019\u00e0 chaque heure pendant qu\u2019un document est ouvert. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. triggeredBy string Ce qui a caus\u00e9 le d\u00e9clenchement de cet \u00e9v\u00e9nement. Peut \u00eatre soit \u201cdocOpen\u201d, \u201cinterval\u201d, ou \u201cdocClose\u201d. isPublic boolean Si le document est public. rowCount number Le nombre de lignes dans le document. dataSizeBytes number La taille totale de toutes les donn\u00e9es dans le document, \u00e0 l\u2019exclusion des pi\u00e8ces jointes. attachmentsSize number La taille totale de toutes les pi\u00e8ces jointes dans le document. numAccessRules number Le nombre de permissions avanc\u00e9es dans le document. numUserAttributes number Le nombre de propri\u00e9t\u00e9s d\u2019utilisateur dans le document. numAttachments number Le nombre de pi\u00e8ces jointes dans le document. attachmentTypes string[] Une liste des extensions de fichiers uniques compil\u00e9es \u00e0 partir de toutes les pi\u00e8ces jointes du document. numCharts number Le nombre de graphiques dans le document. chartTypes string[] Une liste des types de graphiques de chaque graphique dans le document. numLinkedCharts number Le nombre de graphiques li\u00e9s dans le document. numLinkedWidgets number Le nombre de vues li\u00e9es dans le document. numColumns number Le nombre de colonnes dans le document. numColumnsWithConditionalFormatting number Le nombre de colonnes avec un formatage conditionnel dans le document. numFormulaColumns number Le nombre de colonnes de formules dans le document. numTriggerFormulaColumns number Le nombre de colonnes de formules de d\u00e9clenchement dans le document. numSummaryFormulaColumns number Le nombre de colonnes de formules de r\u00e9sum\u00e9 dans le document. numFieldsWithConditionalFormatting number Le nombre de champs avec un formatage conditionnel dans le document. numTables number Le nombre de tables dans le document. numOnDemandTables number Le nombre de tables \u00e0 la demande dans le document. numTablesWithConditionalFormatting number Le nombre de tables avec un formatage conditionnel dans le document. numSummaryTables number Le nombre de tables de r\u00e9sum\u00e9 dans le document. numCustomWidgets number Le nombre de vues personnalis\u00e9es dans le document. customWidgetIds string[] Une liste des identifiants de plugins pour chaque vue personnalis\u00e9e dans le document. Les identifiants des vues non cr\u00e9\u00e9es par Grist Labs sont remplac\u00e9s par \u201cexternalId\u201d. processMonitor # D\u00e9clench\u00e9 toutes les 5 secondes. Champ Type Description heapUsedMB number Taille du tas JS utilis\u00e9, en MiB. heapTotalMB number Taille totale du tas, en MiB, allou\u00e9e pour JS par V8. cpuAverage number Fraction (typiquement entre 0 et 1) de l\u2019utilisation du CPU. Inclut tous les threads, donc peut d\u00e9passer 1. intervalMs number Intervalle (en millisecondes) sur lequel cpuAverage est rapport\u00e9. sendingWebhooks # D\u00e9clench\u00e9 lors de l\u2019envoi de webhooks. Champ Type Description numEvents number Le nombre d\u2019\u00e9v\u00e9nements dans le lot de webhooks envoy\u00e9s. docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. signupVerified # D\u00e9clench\u00e9 apr\u00e8s qu\u2019un utilisateur a v\u00e9rifi\u00e9 avec succ\u00e8s son compte lors de l\u2019inscription. Non d\u00e9clench\u00e9 dans grist-core. Champ Type Description isAnonymousTemplateSignup boolean Si l\u2019utilisateur a consult\u00e9 des mod\u00e8les avant de s\u2019inscrire. templateId string L\u2019identifiant du mod\u00e8le que l\u2019utilisateur a consult\u00e9 en dernier avant de s\u2019inscrire, le cas \u00e9ch\u00e9ant. siteMembership # D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type du site. numOwners number Le nombre d\u2019utilisateurs avec un r\u00f4le de propri\u00e9taire dans ce site. numEditors number Le nombre d\u2019utilisateurs avec un r\u00f4le d\u2019\u00e9diteur dans ce site. numViewers number Le nombre d\u2019utilisateurs avec un r\u00f4le de visualiseur dans ce site. siteUsage # D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type du site. inGoodStanding boolean Si l\u2019abonnement du site est en r\u00e8gle. stripePlanId string L\u2019identifiant du plan Stripe associ\u00e9 \u00e0 ce site. numDocs number Le nombre de documents dans ce site. numWorkspaces number Le nombre d\u2019espaces de travail dans ce site. numMembers number Le nombre de membres du site. lastActivity date Un horodatage de la mise \u00e0 jour la plus r\u00e9cente effectu\u00e9e sur un document du site. tutorialProgressChanged # D\u00e9clench\u00e9 lors des changements de progression du tutoriel. Champ Type Description tutorialForkIdDigest string Un hash de l\u2019identifiant du fork du tutoriel. tutorialTrunkIdDigest string Un hash de l\u2019identifiant du tronc du tutoriel. lastSlideIndex number L\u2019index bas\u00e9 sur 0 de la derni\u00e8re diapositive du tutoriel que l\u2019utilisateur avait ouverte. numSlides number Le nombre total de diapositives dans le tutoriel. percentComplete number Pourcentage d\u2019ach\u00e8vement du tutoriel. tutorialRestarted # D\u00e9clench\u00e9 lorsqu\u2019un tutoriel est red\u00e9marr\u00e9. Champ Type Description tutorialForkIdDigest string Un hash de l\u2019identifiant du fork du tutoriel. tutorialTrunkIdDigest string Un hash de l\u2019identifiant du tronc du tutoriel. docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. watchedVideoTour # D\u00e9clench\u00e9 lorsque la visite vid\u00e9o est ferm\u00e9e. Champ Type Description watchTimeSeconds number Le nombre de secondes \u00e9coul\u00e9es dans le lecteur vid\u00e9o. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"Full telemetry"},{"location":"telemetry-full/#niveau-de-telemetrie-complet","text":"Ceci est un niveau de t\u00e9l\u00e9m\u00e9trie appropri\u00e9 pour une utilisation interne par un service h\u00e9berg\u00e9, avec GRIST_TELEMETRY_URL d\u00e9fini sur un point de terminaison contr\u00f4l\u00e9 par l\u2019op\u00e9rateur du service.","title":"Niveau de t\u00e9l\u00e9m\u00e9trie : complet"},{"location":"telemetry-full/#apiusage","text":"D\u00e9clench\u00e9 lorsqu\u2019une requ\u00eate HTTP avec une cl\u00e9 API est effectu\u00e9e. Champ Type Description method string La m\u00e9thode de la requ\u00eate HTTP (par exemple GET, POST, PUT). userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userAgent string L\u2019en-t\u00eate de la requ\u00eate HTTP User-Agent.","title":"apiUsage"},{"location":"telemetry-full/#beaconopen","text":"D\u00e9clench\u00e9 lorsque HelpScout Beacon est ouvert. Champ Type Description userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"beaconOpen"},{"location":"telemetry-full/#beaconarticleviewed","text":"D\u00e9clench\u00e9 lorsqu\u2019un article est ouvert dans HelpScout Beacon. Champ Type Description articleId string L\u2019identifiant de l\u2019article. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"beaconArticleViewed"},{"location":"telemetry-full/#beaconemailsent","text":"D\u00e9clench\u00e9 lorsqu\u2019un email est envoy\u00e9 dans HelpScout Beacon. Champ Type Description userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"beaconEmailSent"},{"location":"telemetry-full/#beaconsearch","text":"D\u00e9clench\u00e9 lorsqu\u2019une recherche est effectu\u00e9e dans HelpScout Beacon. Champ Type Description searchQuery string La requ\u00eate de recherche. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"beaconSearch"},{"location":"telemetry-full/#documentforked","text":"D\u00e9clench\u00e9 lorsqu\u2019un document est fork\u00e9. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site contenant le document fork\u00e9. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. forkIdDigest string Un hash de l\u2019identifiant du fork. forkDocIdDigest string Un hash de l\u2019identifiant complet du fork, incluant l\u2019identifiant du tronc et l\u2019identifiant du fork. trunkIdDigest string Un hash de l\u2019identifiant du tronc. isTemplate boolean Si le tronc est un mod\u00e8le. lastActivity date Horodatage de la derni\u00e8re mise \u00e0 jour du document tronc.","title":"documentForked"},{"location":"telemetry-full/#documentopened","text":"D\u00e9clench\u00e9 lorsqu\u2019un document public ou un mod\u00e8le est ouvert. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. isPublic boolean Si le document est public. isSnapshot boolean Si un instantan\u00e9 a \u00e9t\u00e9 ouvert. isTemplate boolean Si le document est un mod\u00e8le. lastUpdated date Horodatage de la derni\u00e8re mise \u00e0 jour du document.","title":"documentOpened"},{"location":"telemetry-full/#documentusage","text":"D\u00e9clench\u00e9 \u00e0 l\u2019ouverture et \u00e0 la fermeture du document, ainsi qu\u2019\u00e0 chaque heure pendant qu\u2019un document est ouvert. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. triggeredBy string Ce qui a caus\u00e9 le d\u00e9clenchement de cet \u00e9v\u00e9nement. Peut \u00eatre soit \u201cdocOpen\u201d, \u201cinterval\u201d, ou \u201cdocClose\u201d. isPublic boolean Si le document est public. rowCount number Le nombre de lignes dans le document. dataSizeBytes number La taille totale de toutes les donn\u00e9es dans le document, \u00e0 l\u2019exclusion des pi\u00e8ces jointes. attachmentsSize number La taille totale de toutes les pi\u00e8ces jointes dans le document. numAccessRules number Le nombre de permissions avanc\u00e9es dans le document. numUserAttributes number Le nombre de propri\u00e9t\u00e9s d\u2019utilisateur dans le document. numAttachments number Le nombre de pi\u00e8ces jointes dans le document. attachmentTypes string[] Une liste des extensions de fichiers uniques compil\u00e9es \u00e0 partir de toutes les pi\u00e8ces jointes du document. numCharts number Le nombre de graphiques dans le document. chartTypes string[] Une liste des types de graphiques de chaque graphique dans le document. numLinkedCharts number Le nombre de graphiques li\u00e9s dans le document. numLinkedWidgets number Le nombre de vues li\u00e9es dans le document. numColumns number Le nombre de colonnes dans le document. numColumnsWithConditionalFormatting number Le nombre de colonnes avec un formatage conditionnel dans le document. numFormulaColumns number Le nombre de colonnes de formules dans le document. numTriggerFormulaColumns number Le nombre de colonnes de formules de d\u00e9clenchement dans le document. numSummaryFormulaColumns number Le nombre de colonnes de formules de r\u00e9sum\u00e9 dans le document. numFieldsWithConditionalFormatting number Le nombre de champs avec un formatage conditionnel dans le document. numTables number Le nombre de tables dans le document. numOnDemandTables number Le nombre de tables \u00e0 la demande dans le document. numTablesWithConditionalFormatting number Le nombre de tables avec un formatage conditionnel dans le document. numSummaryTables number Le nombre de tables de r\u00e9sum\u00e9 dans le document. numCustomWidgets number Le nombre de vues personnalis\u00e9es dans le document. customWidgetIds string[] Une liste des identifiants de plugins pour chaque vue personnalis\u00e9e dans le document. Les identifiants des vues non cr\u00e9\u00e9es par Grist Labs sont remplac\u00e9s par \u201cexternalId\u201d.","title":"documentUsage"},{"location":"telemetry-full/#processmonitor","text":"D\u00e9clench\u00e9 toutes les 5 secondes. Champ Type Description heapUsedMB number Taille du tas JS utilis\u00e9, en MiB. heapTotalMB number Taille totale du tas, en MiB, allou\u00e9e pour JS par V8. cpuAverage number Fraction (typiquement entre 0 et 1) de l\u2019utilisation du CPU. Inclut tous les threads, donc peut d\u00e9passer 1. intervalMs number Intervalle (en millisecondes) sur lequel cpuAverage est rapport\u00e9.","title":"processMonitor"},{"location":"telemetry-full/#sendingwebhooks","text":"D\u00e9clench\u00e9 lors de l\u2019envoi de webhooks. Champ Type Description numEvents number Le nombre d\u2019\u00e9v\u00e9nements dans le lot de webhooks envoy\u00e9s. docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"sendingWebhooks"},{"location":"telemetry-full/#signupverified","text":"D\u00e9clench\u00e9 apr\u00e8s qu\u2019un utilisateur a v\u00e9rifi\u00e9 avec succ\u00e8s son compte lors de l\u2019inscription. Non d\u00e9clench\u00e9 dans grist-core. Champ Type Description isAnonymousTemplateSignup boolean Si l\u2019utilisateur a consult\u00e9 des mod\u00e8les avant de s\u2019inscrire. templateId string L\u2019identifiant du mod\u00e8le que l\u2019utilisateur a consult\u00e9 en dernier avant de s\u2019inscrire, le cas \u00e9ch\u00e9ant.","title":"signupVerified"},{"location":"telemetry-full/#sitemembership","text":"D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type du site. numOwners number Le nombre d\u2019utilisateurs avec un r\u00f4le de propri\u00e9taire dans ce site. numEditors number Le nombre d\u2019utilisateurs avec un r\u00f4le d\u2019\u00e9diteur dans ce site. numViewers number Le nombre d\u2019utilisateurs avec un r\u00f4le de visualiseur dans ce site.","title":"siteMembership"},{"location":"telemetry-full/#siteusage","text":"D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type du site. inGoodStanding boolean Si l\u2019abonnement du site est en r\u00e8gle. stripePlanId string L\u2019identifiant du plan Stripe associ\u00e9 \u00e0 ce site. numDocs number Le nombre de documents dans ce site. numWorkspaces number Le nombre d\u2019espaces de travail dans ce site. numMembers number Le nombre de membres du site. lastActivity date Un horodatage de la mise \u00e0 jour la plus r\u00e9cente effectu\u00e9e sur un document du site.","title":"siteUsage"},{"location":"telemetry-full/#tutorialprogresschanged","text":"D\u00e9clench\u00e9 lors des changements de progression du tutoriel. Champ Type Description tutorialForkIdDigest string Un hash de l\u2019identifiant du fork du tutoriel. tutorialTrunkIdDigest string Un hash de l\u2019identifiant du tronc du tutoriel. lastSlideIndex number L\u2019index bas\u00e9 sur 0 de la derni\u00e8re diapositive du tutoriel que l\u2019utilisateur avait ouverte. numSlides number Le nombre total de diapositives dans le tutoriel. percentComplete number Pourcentage d\u2019ach\u00e8vement du tutoriel.","title":"tutorialProgressChanged"},{"location":"telemetry-full/#tutorialrestarted","text":"D\u00e9clench\u00e9 lorsqu\u2019un tutoriel est red\u00e9marr\u00e9. Champ Type Description tutorialForkIdDigest string Un hash de l\u2019identifiant du fork du tutoriel. tutorialTrunkIdDigest string Un hash de l\u2019identifiant du tronc du tutoriel. docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"tutorialRestarted"},{"location":"telemetry-full/#watchedvideotour","text":"D\u00e9clench\u00e9 lorsque la visite vid\u00e9o est ferm\u00e9e. Champ Type Description watchTimeSeconds number Le nombre de secondes \u00e9coul\u00e9es dans le lecteur vid\u00e9o. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"watchedVideoTour"},{"location":"telemetry-limited/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Niveau de t\u00e9l\u00e9m\u00e9trie : limit\u00e9 # Il s\u2019agit d\u2019un niveau de t\u00e9l\u00e9m\u00e9trie appropri\u00e9 pour les instances auto-h\u00e9berg\u00e9es de Grist. Les donn\u00e9es sont transmises \u00e0 Grist Labs. documentForked # D\u00e9clench\u00e9 lorsqu\u2019un document est dupliqu\u00e9. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. forkIdDigest string Un hachage de l\u2019identifiant de la duplication. forkDocIdDigest string Un hachage de l\u2019identifiant complet de la duplication, incluant l\u2019identifiant du tronc et l\u2019identifiant de la duplication. trunkIdDigest string Un hachage de l\u2019identifiant du tronc. isTemplate boolean Indique si le tronc est un mod\u00e8le. lastActivity date Horodatage de la derni\u00e8re mise \u00e0 jour du document tronc. documentOpened # D\u00e9clench\u00e9 lorsqu\u2019un document public ou un mod\u00e8le est ouvert. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. isPublic boolean Indique si le document est public. isSnapshot boolean Indique si une capture instantan\u00e9e a \u00e9t\u00e9 ouverte. isTemplate boolean Indique si le document est un mod\u00e8le. lastUpdated date Horodatage de la derni\u00e8re mise \u00e0 jour du document. documentUsage # D\u00e9clench\u00e9 \u00e0 l\u2019ouverture et \u00e0 la fermeture d\u2019un document, ainsi qu\u2019\u00e0 chaque heure pendant qu\u2019un document est ouvert. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. triggeredBy string Ce qui a caus\u00e9 le d\u00e9clenchement de cet \u00e9v\u00e9nement. Peut \u00eatre soit \u201cdocOpen\u201d, \u201cinterval\u201d, ou \u201cdocClose\u201d. isPublic boolean Indique si le document est public. rowCount number Le nombre de lignes dans le document. dataSizeBytes number La taille totale de toutes les donn\u00e9es dans le document, \u00e0 l\u2019exclusion des pi\u00e8ces jointes. attachmentsSize number La taille totale de toutes les pi\u00e8ces jointes dans le document. numAccessRules number Le nombre de permissions avanc\u00e9es dans le document. numUserAttributes number Le nombre de propri\u00e9t\u00e9s d\u2019utilisateur dans le document. numAttachments number Le nombre de pi\u00e8ces jointes dans le document. attachmentTypes string[] Une liste des extensions de fichiers uniques compil\u00e9es \u00e0 partir de toutes les pi\u00e8ces jointes du document. numCharts number Le nombre de graphiques dans le document. chartTypes string[] Une liste des types de graphiques de chaque graphique dans le document. numLinkedCharts number Le nombre de graphiques li\u00e9s dans le document. numLinkedWidgets number Le nombre de vues li\u00e9es dans le document. numColumns number Le nombre de colonnes dans le document. numColumnsWithConditionalFormatting number Le nombre de colonnes avec mise en forme conditionnelle dans le document. numFormulaColumns number Le nombre de colonnes de formules dans le document. numTriggerFormulaColumns number Le nombre de colonnes de formules d\u00e9clencheuses dans le document. numSummaryFormulaColumns number Le nombre de colonnes de formules r\u00e9capitulatives dans le document. numFieldsWithConditionalFormatting number Le nombre de champs avec mise en forme conditionnelle dans le document. numTables number Le nombre de tables dans le document. numOnDemandTables number Le nombre de tables \u00e0 la demande dans le document. numTablesWithConditionalFormatting number Le nombre de tables avec mise en forme conditionnelle dans le document. numSummaryTables number Le nombre de tables r\u00e9capitulatives dans le document. numCustomWidgets number Le nombre de vues personnalis\u00e9es dans le document. customWidgetIds string[] Une liste des identifiants de plugins pour chaque vue personnalis\u00e9e dans le document. Les identifiants des vues non cr\u00e9\u00e9es par Grist Labs sont remplac\u00e9s par \u201cexternalId\u201d. sendingWebhooks # D\u00e9clench\u00e9 lors de l\u2019envoi de webhooks. Champ Type Description numEvents number Le nombre d\u2019\u00e9v\u00e9nements dans le lot de webhooks envoy\u00e9s. docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. siteMembership # D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type de site. numOwners number Le nombre d\u2019utilisateurs avec un r\u00f4le de propri\u00e9taire dans ce site. numEditors number Le nombre d\u2019utilisateurs avec un r\u00f4le d\u2019\u00e9diteur dans ce site. numViewers number Le nombre d\u2019utilisateurs avec un r\u00f4le de visionneur dans ce site. siteUsage # D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type de site. inGoodStanding boolean Indique si l\u2019abonnement du site est en r\u00e8gle. numDocs number Le nombre de documents dans ce site. numWorkspaces number Le nombre d\u2019espaces de travail dans ce site. numMembers number Le nombre de membres du site. lastActivity date Un horodatage de la mise \u00e0 jour la plus r\u00e9cente effectu\u00e9e sur un document du site. watchedVideoTour # D\u00e9clench\u00e9 lorsque la visite vid\u00e9o est ferm\u00e9e. Champ Type Description watchTimeSeconds number Le nombre de secondes \u00e9coul\u00e9es dans le lecteur vid\u00e9o.","title":"Limited telemetry"},{"location":"telemetry-limited/#niveau-de-telemetrie-limite","text":"Il s\u2019agit d\u2019un niveau de t\u00e9l\u00e9m\u00e9trie appropri\u00e9 pour les instances auto-h\u00e9berg\u00e9es de Grist. Les donn\u00e9es sont transmises \u00e0 Grist Labs.","title":"Niveau de t\u00e9l\u00e9m\u00e9trie : limit\u00e9"},{"location":"telemetry-limited/#documentforked","text":"D\u00e9clench\u00e9 lorsqu\u2019un document est dupliqu\u00e9. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. forkIdDigest string Un hachage de l\u2019identifiant de la duplication. forkDocIdDigest string Un hachage de l\u2019identifiant complet de la duplication, incluant l\u2019identifiant du tronc et l\u2019identifiant de la duplication. trunkIdDigest string Un hachage de l\u2019identifiant du tronc. isTemplate boolean Indique si le tronc est un mod\u00e8le. lastActivity date Horodatage de la derni\u00e8re mise \u00e0 jour du document tronc.","title":"documentForked"},{"location":"telemetry-limited/#documentopened","text":"D\u00e9clench\u00e9 lorsqu\u2019un document public ou un mod\u00e8le est ouvert. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. isPublic boolean Indique si le document est public. isSnapshot boolean Indique si une capture instantan\u00e9e a \u00e9t\u00e9 ouverte. isTemplate boolean Indique si le document est un mod\u00e8le. lastUpdated date Horodatage de la derni\u00e8re mise \u00e0 jour du document.","title":"documentOpened"},{"location":"telemetry-limited/#documentusage","text":"D\u00e9clench\u00e9 \u00e0 l\u2019ouverture et \u00e0 la fermeture d\u2019un document, ainsi qu\u2019\u00e0 chaque heure pendant qu\u2019un document est ouvert. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. triggeredBy string Ce qui a caus\u00e9 le d\u00e9clenchement de cet \u00e9v\u00e9nement. Peut \u00eatre soit \u201cdocOpen\u201d, \u201cinterval\u201d, ou \u201cdocClose\u201d. isPublic boolean Indique si le document est public. rowCount number Le nombre de lignes dans le document. dataSizeBytes number La taille totale de toutes les donn\u00e9es dans le document, \u00e0 l\u2019exclusion des pi\u00e8ces jointes. attachmentsSize number La taille totale de toutes les pi\u00e8ces jointes dans le document. numAccessRules number Le nombre de permissions avanc\u00e9es dans le document. numUserAttributes number Le nombre de propri\u00e9t\u00e9s d\u2019utilisateur dans le document. numAttachments number Le nombre de pi\u00e8ces jointes dans le document. attachmentTypes string[] Une liste des extensions de fichiers uniques compil\u00e9es \u00e0 partir de toutes les pi\u00e8ces jointes du document. numCharts number Le nombre de graphiques dans le document. chartTypes string[] Une liste des types de graphiques de chaque graphique dans le document. numLinkedCharts number Le nombre de graphiques li\u00e9s dans le document. numLinkedWidgets number Le nombre de vues li\u00e9es dans le document. numColumns number Le nombre de colonnes dans le document. numColumnsWithConditionalFormatting number Le nombre de colonnes avec mise en forme conditionnelle dans le document. numFormulaColumns number Le nombre de colonnes de formules dans le document. numTriggerFormulaColumns number Le nombre de colonnes de formules d\u00e9clencheuses dans le document. numSummaryFormulaColumns number Le nombre de colonnes de formules r\u00e9capitulatives dans le document. numFieldsWithConditionalFormatting number Le nombre de champs avec mise en forme conditionnelle dans le document. numTables number Le nombre de tables dans le document. numOnDemandTables number Le nombre de tables \u00e0 la demande dans le document. numTablesWithConditionalFormatting number Le nombre de tables avec mise en forme conditionnelle dans le document. numSummaryTables number Le nombre de tables r\u00e9capitulatives dans le document. numCustomWidgets number Le nombre de vues personnalis\u00e9es dans le document. customWidgetIds string[] Une liste des identifiants de plugins pour chaque vue personnalis\u00e9e dans le document. Les identifiants des vues non cr\u00e9\u00e9es par Grist Labs sont remplac\u00e9s par \u201cexternalId\u201d.","title":"documentUsage"},{"location":"telemetry-limited/#sendingwebhooks","text":"D\u00e9clench\u00e9 lors de l\u2019envoi de webhooks. Champ Type Description numEvents number Le nombre d\u2019\u00e9v\u00e9nements dans le lot de webhooks envoy\u00e9s. docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"sendingWebhooks"},{"location":"telemetry-limited/#sitemembership","text":"D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type de site. numOwners number Le nombre d\u2019utilisateurs avec un r\u00f4le de propri\u00e9taire dans ce site. numEditors number Le nombre d\u2019utilisateurs avec un r\u00f4le d\u2019\u00e9diteur dans ce site. numViewers number Le nombre d\u2019utilisateurs avec un r\u00f4le de visionneur dans ce site.","title":"siteMembership"},{"location":"telemetry-limited/#siteusage","text":"D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type de site. inGoodStanding boolean Indique si l\u2019abonnement du site est en r\u00e8gle. numDocs number Le nombre de documents dans ce site. numWorkspaces number Le nombre d\u2019espaces de travail dans ce site. numMembers number Le nombre de membres du site. lastActivity date Un horodatage de la mise \u00e0 jour la plus r\u00e9cente effectu\u00e9e sur un document du site.","title":"siteUsage"},{"location":"telemetry-limited/#watchedvideotour","text":"D\u00e9clench\u00e9 lorsque la visite vid\u00e9o est ferm\u00e9e. Champ Type Description watchTimeSeconds number Le nombre de secondes \u00e9coul\u00e9es dans le lecteur vid\u00e9o.","title":"watchedVideoTour"},{"location":"telemetry/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Aper\u00e7u de la T\u00e9l\u00e9m\u00e9trie # Le d\u00e9veloppement de Grist est guid\u00e9 par la t\u00e9l\u00e9m\u00e9trie : un ensemble de mesures visant \u00e0 quantifier les aspects de l\u2019utilisation de Grist. Une installation autog\u00e9r\u00e9e de Grist ne fait par d\u00e9faut aucune t\u00e9l\u00e9m\u00e9trie. Lorsque la t\u00e9l\u00e9m\u00e9trie est activ\u00e9e, les donn\u00e9es d\u2019utilisation sont envoy\u00e9es \u00e0 un service maintenu par Grist Labs. La t\u00e9l\u00e9m\u00e9trie peut \u00eatre configur\u00e9e par des variables d\u2019environnement optionnelles : GRIST_TELEMETRY_LEVEL . Cela peut \u00eatre off , limited ou full . La valeur par d\u00e9faut est off . Un r\u00e9glage de limited ou full entra\u00eene l\u2019envoi de donn\u00e9es \u00e0 un service op\u00e9r\u00e9 par Grist Labs. Nous encourageons les utilisateurs \u00e0 r\u00e9gler la t\u00e9l\u00e9m\u00e9trie sur limited afin que leur utilisation soit prise en compte et guide le d\u00e9veloppement de Grist. Nous ne recommandons un r\u00e9glage full que si vous avez utilis\u00e9 GRIST_TELEMETRY_URL pour rediriger la t\u00e9l\u00e9m\u00e9trie vers un service que vous contr\u00f4lez. Cela inclut des identifiants internes \u00e0 votre installation que nous pr\u00e9f\u00e9rerions ne pas conna\u00eetre. GRIST_TELEMETRY_URL . Cela contr\u00f4le o\u00f9 la t\u00e9l\u00e9m\u00e9trie est envoy\u00e9e. Par d\u00e9faut, elle est envoy\u00e9e \u00e0 un service op\u00e9r\u00e9 par Grist Labs. Si vous g\u00e9rez un grand service h\u00e9berg\u00e9, vous pouvez souhaiter diriger la t\u00e9l\u00e9m\u00e9trie vers un service que vous contr\u00f4lez. La t\u00e9l\u00e9m\u00e9trie peut \u00e9galement \u00eatre configur\u00e9e de mani\u00e8re interactive par le propri\u00e9taire d\u2019une installation Grist, voir Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? pour plus de d\u00e9tails. Le r\u00e9glage limited entra\u00eene une t\u00e9l\u00e9m\u00e9trie \u00e0 gros grain. Ce niveau est destin\u00e9 \u00e0 une installation de Grist qui a choisi de fournir de la t\u00e9l\u00e9m\u00e9trie. L\u2019objectif est de comprendre comment Grist est utilis\u00e9 \u201cdans la nature\u201d en termes d\u2019utilisation des fonctionnalit\u00e9s et de comptage des ressources, sans partager de donn\u00e9es commerciales ou d\u2019informations personnelles identifiables. Voir t\u00e9l\u00e9m\u00e9trie limit\u00e9e pour les d\u00e9tails de ce qui est exactement envoy\u00e9. Le r\u00e9glage full donne une t\u00e9l\u00e9m\u00e9trie relativement fine. Ce niveau est destin\u00e9 aux grands services h\u00e9berg\u00e9s, tels que celui g\u00e9r\u00e9 par Grist Labs. Plus d\u2019informations sont enregistr\u00e9es, pour faciliter la gestion du service et le d\u00e9veloppement du produit. Aucune information personnelle identifiable n\u2019est incluse. Des identifiants opaques sont inclus qui, en cas de besoin (par exemple en cas de panne de service), pourraient \u00eatre li\u00e9s \u00e0 des informations personnelles via des magasins non t\u00e9l\u00e9m\u00e9triques. Voir t\u00e9l\u00e9m\u00e9trie compl\u00e8te pour les d\u00e9tails de ce qui est exactement envoy\u00e9.","title":"Overview of telemetry"},{"location":"telemetry/#apercu-de-la-telemetrie","text":"Le d\u00e9veloppement de Grist est guid\u00e9 par la t\u00e9l\u00e9m\u00e9trie : un ensemble de mesures visant \u00e0 quantifier les aspects de l\u2019utilisation de Grist. Une installation autog\u00e9r\u00e9e de Grist ne fait par d\u00e9faut aucune t\u00e9l\u00e9m\u00e9trie. Lorsque la t\u00e9l\u00e9m\u00e9trie est activ\u00e9e, les donn\u00e9es d\u2019utilisation sont envoy\u00e9es \u00e0 un service maintenu par Grist Labs. La t\u00e9l\u00e9m\u00e9trie peut \u00eatre configur\u00e9e par des variables d\u2019environnement optionnelles : GRIST_TELEMETRY_LEVEL . Cela peut \u00eatre off , limited ou full . La valeur par d\u00e9faut est off . Un r\u00e9glage de limited ou full entra\u00eene l\u2019envoi de donn\u00e9es \u00e0 un service op\u00e9r\u00e9 par Grist Labs. Nous encourageons les utilisateurs \u00e0 r\u00e9gler la t\u00e9l\u00e9m\u00e9trie sur limited afin que leur utilisation soit prise en compte et guide le d\u00e9veloppement de Grist. Nous ne recommandons un r\u00e9glage full que si vous avez utilis\u00e9 GRIST_TELEMETRY_URL pour rediriger la t\u00e9l\u00e9m\u00e9trie vers un service que vous contr\u00f4lez. Cela inclut des identifiants internes \u00e0 votre installation que nous pr\u00e9f\u00e9rerions ne pas conna\u00eetre. GRIST_TELEMETRY_URL . Cela contr\u00f4le o\u00f9 la t\u00e9l\u00e9m\u00e9trie est envoy\u00e9e. Par d\u00e9faut, elle est envoy\u00e9e \u00e0 un service op\u00e9r\u00e9 par Grist Labs. Si vous g\u00e9rez un grand service h\u00e9berg\u00e9, vous pouvez souhaiter diriger la t\u00e9l\u00e9m\u00e9trie vers un service que vous contr\u00f4lez. La t\u00e9l\u00e9m\u00e9trie peut \u00e9galement \u00eatre configur\u00e9e de mani\u00e8re interactive par le propri\u00e9taire d\u2019une installation Grist, voir Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? pour plus de d\u00e9tails. Le r\u00e9glage limited entra\u00eene une t\u00e9l\u00e9m\u00e9trie \u00e0 gros grain. Ce niveau est destin\u00e9 \u00e0 une installation de Grist qui a choisi de fournir de la t\u00e9l\u00e9m\u00e9trie. L\u2019objectif est de comprendre comment Grist est utilis\u00e9 \u201cdans la nature\u201d en termes d\u2019utilisation des fonctionnalit\u00e9s et de comptage des ressources, sans partager de donn\u00e9es commerciales ou d\u2019informations personnelles identifiables. Voir t\u00e9l\u00e9m\u00e9trie limit\u00e9e pour les d\u00e9tails de ce qui est exactement envoy\u00e9. Le r\u00e9glage full donne une t\u00e9l\u00e9m\u00e9trie relativement fine. Ce niveau est destin\u00e9 aux grands services h\u00e9berg\u00e9s, tels que celui g\u00e9r\u00e9 par Grist Labs. Plus d\u2019informations sont enregistr\u00e9es, pour faciliter la gestion du service et le d\u00e9veloppement du produit. Aucune information personnelle identifiable n\u2019est incluse. Des identifiants opaques sont inclus qui, en cas de besoin (par exemple en cas de panne de service), pourraient \u00eatre li\u00e9s \u00e0 des informations personnelles via des magasins non t\u00e9l\u00e9m\u00e9triques. Voir t\u00e9l\u00e9m\u00e9trie compl\u00e8te pour les d\u00e9tails de ce qui est exactement envoy\u00e9.","title":"Aper\u00e7u de la T\u00e9l\u00e9m\u00e9trie"},{"location":"timestamps/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Colonnes de timestamp # Il est parfois utile d\u2019avoir des colonnes qui stockent le moment o\u00f9 des enregistrements individuels ont \u00e9t\u00e9 cr\u00e9\u00e9s et mis \u00e0 jour. Cela est utile plus tard, par exemple pour trier les enregistrements par anciennet\u00e9 ou fra\u00eecheur. Grist vous permet de cr\u00e9er facilement de telles colonnes. Une colonne \u201cCr\u00e9\u00e9 le\u201d # Supposons que nous voulions une colonne qui stocke le moment o\u00f9 un enregistrement a \u00e9t\u00e9 cr\u00e9\u00e9. Comme premi\u00e8re \u00e9tape, ajoutez une colonne appel\u00e9e (par exemple) Cr\u00e9\u00e9 le et entrez NOW() comme formule. D\u00e9finissez le type de colonne sur DateTime (voir Cr\u00e9er une colonne date/heure ) et choisissez comment vous souhaitez que l\u2019heure et la date soient affich\u00e9es. Ce que nous souhaitons, c\u2019est que la valeur Cr\u00e9\u00e9 le reste inchang\u00e9e une fois d\u00e9finie, et soit calcul\u00e9e uniquement lors de la cr\u00e9ation d\u2019un enregistrement. Pour que les valeurs restent inchang\u00e9es une fois d\u00e9finies, nous devons changer le comportement de la colonne de Colonne de formule \u00e0 Colonne de donn\u00e9es . Cliquez sur le menu d\u00e9roulant Comportement de la colonne , et choisissez Convertir la colonne en donn\u00e9es : Maintenant, pour calculer les valeurs lors de la cr\u00e9ation d\u2019un enregistrement, s\u00e9lectionnez Appliquer aux nouveaux enregistrements . Et voil\u00e0 ! Tous les nouveaux enregistrements auront Cr\u00e9\u00e9 le d\u00e9fini avec NOW() au moment de leur cr\u00e9ation. Une colonne \u201cMis \u00e0 jour le\u201d # Si nous voulons une colonne qui stocke le moment o\u00f9 un enregistrement est mis \u00e0 jour (par opposition \u00e0 cr\u00e9\u00e9), la proc\u00e9dure est similaire \u00e0 celle pour une colonne \u201cCr\u00e9\u00e9 le\u201d , mais au lieu de Appliquer aux nouveaux enregistrements , s\u00e9lectionnez Appliquer aux modifications des enregistrements . Ensuite, s\u00e9lectionnez N'importe quel champ (en supposant que vous voulez que tout changement dans un enregistrement soit consid\u00e9r\u00e9 comme une mise \u00e0 jour) et appuyez sur OK . Vous pouvez alternativement choisir quelles colonnes \u201ccompter\u201d comme mises \u00e0 jour et lesquelles ignorer. Il est toujours possible pour un utilisateur de modifier manuellement les cellules dans les colonnes Cr\u00e9\u00e9 le et Mis \u00e0 jour le . Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire. Voici un exemple des nouvelles colonnes en action. Un nouvel enregistrement a \u00e9t\u00e9 ajout\u00e9, pour M\u00e9thodes de livraison non orthodoxes , et une heure de cr\u00e9ation et de mise \u00e0 jour ont \u00e9t\u00e9 d\u00e9finies automatiquement. Ensuite, la description de Barbe \u00e0 papa vs Barbe \u00e0 papa a \u00e9t\u00e9 mise \u00e0 jour, et l\u2019heure de mise \u00e0 jour pour cet enregistrement a \u00e9t\u00e9 d\u00e9finie automatiquement. Il serait \u00e9galement simple d\u2019ajouter des colonnes Cr\u00e9\u00e9 par et Mis \u00e0 jour par . Cr\u00e9er les colonnes Cr\u00e9\u00e9 le et Mis \u00e0 jour le comme nous l\u2019avons fait ici les a remplies pour toutes les lignes pr\u00e9existantes avec la date et l\u2019heure actuelles. Si vous pr\u00e9f\u00e9rez qu\u2019elles soient laiss\u00e9es vides, faites simplement l\u2019\u00e9tape Convertir en colonne de donn\u00e9es avant de d\u00e9finir une formule, puis d\u00e9finissez la formule dans la zone Formule optionnelle .","title":"Timestamp columns"},{"location":"timestamps/#colonnes-de-timestamp","text":"Il est parfois utile d\u2019avoir des colonnes qui stockent le moment o\u00f9 des enregistrements individuels ont \u00e9t\u00e9 cr\u00e9\u00e9s et mis \u00e0 jour. Cela est utile plus tard, par exemple pour trier les enregistrements par anciennet\u00e9 ou fra\u00eecheur. Grist vous permet de cr\u00e9er facilement de telles colonnes.","title":"Colonnes de timestamp"},{"location":"timestamps/#une-colonne-cree-le","text":"Supposons que nous voulions une colonne qui stocke le moment o\u00f9 un enregistrement a \u00e9t\u00e9 cr\u00e9\u00e9. Comme premi\u00e8re \u00e9tape, ajoutez une colonne appel\u00e9e (par exemple) Cr\u00e9\u00e9 le et entrez NOW() comme formule. D\u00e9finissez le type de colonne sur DateTime (voir Cr\u00e9er une colonne date/heure ) et choisissez comment vous souhaitez que l\u2019heure et la date soient affich\u00e9es. Ce que nous souhaitons, c\u2019est que la valeur Cr\u00e9\u00e9 le reste inchang\u00e9e une fois d\u00e9finie, et soit calcul\u00e9e uniquement lors de la cr\u00e9ation d\u2019un enregistrement. Pour que les valeurs restent inchang\u00e9es une fois d\u00e9finies, nous devons changer le comportement de la colonne de Colonne de formule \u00e0 Colonne de donn\u00e9es . Cliquez sur le menu d\u00e9roulant Comportement de la colonne , et choisissez Convertir la colonne en donn\u00e9es : Maintenant, pour calculer les valeurs lors de la cr\u00e9ation d\u2019un enregistrement, s\u00e9lectionnez Appliquer aux nouveaux enregistrements . Et voil\u00e0 ! Tous les nouveaux enregistrements auront Cr\u00e9\u00e9 le d\u00e9fini avec NOW() au moment de leur cr\u00e9ation.","title":"Une colonne “Cr\u00e9\u00e9 le”"},{"location":"timestamps/#une-colonne-mis-a-jour-le","text":"Si nous voulons une colonne qui stocke le moment o\u00f9 un enregistrement est mis \u00e0 jour (par opposition \u00e0 cr\u00e9\u00e9), la proc\u00e9dure est similaire \u00e0 celle pour une colonne \u201cCr\u00e9\u00e9 le\u201d , mais au lieu de Appliquer aux nouveaux enregistrements , s\u00e9lectionnez Appliquer aux modifications des enregistrements . Ensuite, s\u00e9lectionnez N'importe quel champ (en supposant que vous voulez que tout changement dans un enregistrement soit consid\u00e9r\u00e9 comme une mise \u00e0 jour) et appuyez sur OK . Vous pouvez alternativement choisir quelles colonnes \u201ccompter\u201d comme mises \u00e0 jour et lesquelles ignorer. Il est toujours possible pour un utilisateur de modifier manuellement les cellules dans les colonnes Cr\u00e9\u00e9 le et Mis \u00e0 jour le . Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire. Voici un exemple des nouvelles colonnes en action. Un nouvel enregistrement a \u00e9t\u00e9 ajout\u00e9, pour M\u00e9thodes de livraison non orthodoxes , et une heure de cr\u00e9ation et de mise \u00e0 jour ont \u00e9t\u00e9 d\u00e9finies automatiquement. Ensuite, la description de Barbe \u00e0 papa vs Barbe \u00e0 papa a \u00e9t\u00e9 mise \u00e0 jour, et l\u2019heure de mise \u00e0 jour pour cet enregistrement a \u00e9t\u00e9 d\u00e9finie automatiquement. Il serait \u00e9galement simple d\u2019ajouter des colonnes Cr\u00e9\u00e9 par et Mis \u00e0 jour par . Cr\u00e9er les colonnes Cr\u00e9\u00e9 le et Mis \u00e0 jour le comme nous l\u2019avons fait ici les a remplies pour toutes les lignes pr\u00e9existantes avec la date et l\u2019heure actuelles. Si vous pr\u00e9f\u00e9rez qu\u2019elles soient laiss\u00e9es vides, faites simplement l\u2019\u00e9tape Convertir en colonne de donn\u00e9es avant de d\u00e9finir une formule, puis d\u00e9finissez la formule dans la zone Formule optionnelle .","title":"Une colonne “Mis \u00e0 jour le”"},{"location":"webhooks/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . description: Comment configurer des webhooks pour certaines int\u00e9grations externes # Webhooks # Les webhooks vous permettent de notifier des services externes chaque fois que des lignes sont ajout\u00e9es \u00e0 une table ou si des lignes existantes sont modifi\u00e9es. Vous pouvez configurer des webhooks depuis la page \u2018Param\u00e8tres du document\u2019. Cliquez sur \u2018Param\u00e8tres\u2019 sous le menu \u2018Outils\u2019 situ\u00e9 en bas du panneau de navigation de gauche lors de la visualisation d\u2019un document. Dans la section \u2018API\u2019 des \u2018Param\u00e8tres du document\u2019, cliquez sur le bouton \u2018G\u00e9rer les webhooks\u2019. Cela vous permettra de d\u00e9finir des webhooks pour votre document, o\u00f9 chaque carte de cette page de param\u00e8tres repr\u00e9sente un webhook pour votre document. Configuration # Chaque webhook a plusieurs champs. Certains champs sont d\u00e9finis par l\u2019utilisateur, et d\u2019autres champs sont en lecture seule et utilis\u00e9s pour enregistrer des informations sur le traitement du webhook. Tous les champs ne sont pas obligatoires. Nom : Un nom court et descriptif donn\u00e9 au webhook. M\u00e9mo (optionnel): Une description plus longue de l\u2019objectif du webhook. Types d\u2019\u00e9v\u00e9nements : Si l\u2019ajout ou la modification des lignes d\u00e9clenche un webhook. Table : La table qui d\u00e9clenchera ce webhook. Filtrer les modifications dans ces colonnes (optionnel): Une liste d\u2019ID de colonnes s\u00e9par\u00e9s par des points-virgules. Si une ligne existante est modifi\u00e9e, le webhook se d\u00e9clenchera uniquement si l\u2019une des colonnes filtr\u00e9es a \u00e9t\u00e9 modifi\u00e9e, et si le webhook est configur\u00e9 pour se d\u00e9clencher lors de modifications. Si un webhook se d\u00e9clenche lors de l\u2019ajout d\u2019une ligne, peu importe quelles colonnes sont d\u00e9finies lorsque la nouvelle ligne est ajout\u00e9e. Colonne pr\u00eate (optionnel): Une colonne bool\u00e9enne, ou Toggle , sur la table qui d\u00e9termine si la ligne doit d\u00e9clencher le webhook ou non. Lorsque la colonne devient vraie, la ligne correspondante d\u00e9clenchera le webhook. URL : L\u2019URL distante du service que le webhook notifiera des lignes ajout\u00e9es ou modifi\u00e9es. Lors de l\u2019auto-h\u00e9bergement, seuls les services externes list\u00e9s par la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS sont autoris\u00e9s. Notez qu\u2019il existe des pr\u00e9occupations de s\u00e9curit\u00e9 en permettant n\u2019importe quel domaine, car les services internes de Grist peuvent devenir vuln\u00e9rables \u00e0 la manipulation. Autorisation d\u2019en-t\u00eate (optionnel): Les informations d\u2019identification \u00e0 fournir \u00e0 l\u2019endpoint du webhook dans l\u2019en-t\u00eate HTTP Authorization . Tous les endpoints ne n\u00e9cessitent pas d\u2019informations d\u2019identification. Il s\u2019agit d\u2019une cha\u00eene statique. Une utilisation courante de ce champ est de fournir un jeton API comme requis par l\u2019URL du webhook. Activ\u00e9 : Si le webhook doit surveiller sa table configur\u00e9e pour les modifications ou non. Si le webhook est d\u00e9sactiv\u00e9, aucune modification de sa table ne le d\u00e9clenchera. Les champs suivants sont informatifs et en lecture seule : ID du webhook : Un ID unique automatique g\u00e9n\u00e9r\u00e9 en interne pour le webhook. Statut : Un objet JSON qui r\u00e9sume le statut actuel du webhook, ainsi que les r\u00e9sultats concernant le nombre de fois o\u00f9 il a \u00e9t\u00e9 invoqu\u00e9. Cela inclut tous les messages d\u2019erreur potentiels ou statuts que le webhook peut avoir re\u00e7us lors de la tentative d\u2019envoi d\u2019une charge utile \u00e0 l\u2019adresse distante. S\u00e9curit\u00e9 # Dans des environnements auto-h\u00e9berg\u00e9s non fiables, les endpoints internes de Grist peuvent \u00eatre expos\u00e9s si tout utilisateur est autoris\u00e9 \u00e0 cr\u00e9er des documents et configurer des webhooks. Il existe deux fa\u00e7ons de r\u00e9duire ce risque : Utilisez la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS pour lister les domaines autoris\u00e9s que les webhooks peuvent utiliser. Utilisez la variable d\u2019environnement GRIST_HTTPS_PROXY pour restreindre les invocations de webhooks \u00e0 passer par ce proxy, tout en d\u00e9finissant ALLOWED_WEBHOOK_DOMAINS=* . De cette mani\u00e8re, tous les domaines sont autoris\u00e9s, mais les webhooks enverront des requ\u00eates via le proxy configur\u00e9, prot\u00e9geant ainsi vos endpoints internes de Grist. C\u2019est la configuration utilis\u00e9e par Grist Labs dans notre environnement h\u00e9berg\u00e9 sur le cloud. Dans un environnement de confiance o\u00f9 des utilisateurs malveillants ne sont pas attendus, la d\u00e9finition de ALLOWED_WEBHOOK_DOMAINS=* seule peut \u00eatre suffisante sans avoir besoin de configurer un proxy. Charges utiles # Lorsqu\u2019un webhook est d\u00e9clench\u00e9, les lignes qui correspondent aux conditions du webhook g\u00e9n\u00e9reront un tableau JSON comme charge utile du webhook. Voici un exemple de charge utile. [ { \"id\": 29, \"manualSort\": 29, \"Title\": \"Trophy\", \"URL\": \"https://example.com/buy/Trophy\", \"Price\": 60, \"Purchase_status\": \"wishlisted\", \"Currency\": \"USD\", \"Play_status\": \"Not started\", \"Box_art\": null, \"Price_CAD_\": 82.362 }, { \"id\": 24, \"manualSort\": 24, \"Title\": \"Dataman\", \"URL\": \"https://example.com/buy/Dataman\", \"Price\": 50, \"Purchase_status\": \"own digitally\", \"Currency\": \"EUR\", \"Play_status\": \"Finished\", \"Box_art\": null, \"Price_CAD_\": 74.71 } ] Plusieurs lignes peuvent d\u00e9clencher simultan\u00e9ment le m\u00eame webhook. Dans ce cas, ces lignes seront envoy\u00e9es ensemble dans la m\u00eame charge utile. La \u2018Colonne pr\u00eate\u2019 dans la configuration du webhook peut \u00eatre utile pour d\u00e9terminer quelles lignes doivent \u00eatre envoy\u00e9es ensemble. Conditions d\u2019erreur # Si un webhook ne parvient pas \u00e0 livrer sa charge utile \u00e0 l\u2019URL sp\u00e9cifi\u00e9e, il continuera \u00e0 r\u00e9essayer p\u00e9riodiquement. La colonne \u2018Statut\u2019 dans la configuration du webhook peut \u00eatre utile pour diagnostiquer de tels probl\u00e8mes, ou pour v\u00e9rifier que les charges utiles ont \u00e9t\u00e9 livr\u00e9es avec succ\u00e8s. File d\u2019attente des webhooks # Les charges utiles des webhooks sont livr\u00e9es selon une file d\u2019attente par lots. Les tentatives d\u2019atteindre un endpoint sont supprim\u00e9es de la file d\u2019attente lorsqu\u2019une livraison r\u00e9ussie se produit. En cas de probl\u00e8me avec la configuration du webhook, il peut \u00eatre utile de purger la file d\u2019attente du webhook. Le bouton \u2018Effacer la file d\u2019attente\u2019 dans la page de configuration du webhook supprimera toutes les invocations en attente du webhook et ignorera les charges utiles associ\u00e9es.","title":"Webhooks"},{"location":"webhooks/#description-comment-configurer-des-webhooks-pour-certaines-integrations-externes","text":"","title":"description: Comment configurer des webhooks pour certaines int\u00e9grations externes"},{"location":"webhooks/#webhooks","text":"Les webhooks vous permettent de notifier des services externes chaque fois que des lignes sont ajout\u00e9es \u00e0 une table ou si des lignes existantes sont modifi\u00e9es. Vous pouvez configurer des webhooks depuis la page \u2018Param\u00e8tres du document\u2019. Cliquez sur \u2018Param\u00e8tres\u2019 sous le menu \u2018Outils\u2019 situ\u00e9 en bas du panneau de navigation de gauche lors de la visualisation d\u2019un document. Dans la section \u2018API\u2019 des \u2018Param\u00e8tres du document\u2019, cliquez sur le bouton \u2018G\u00e9rer les webhooks\u2019. Cela vous permettra de d\u00e9finir des webhooks pour votre document, o\u00f9 chaque carte de cette page de param\u00e8tres repr\u00e9sente un webhook pour votre document.","title":"Webhooks"},{"location":"webhooks/#configuration","text":"Chaque webhook a plusieurs champs. Certains champs sont d\u00e9finis par l\u2019utilisateur, et d\u2019autres champs sont en lecture seule et utilis\u00e9s pour enregistrer des informations sur le traitement du webhook. Tous les champs ne sont pas obligatoires. Nom : Un nom court et descriptif donn\u00e9 au webhook. M\u00e9mo (optionnel): Une description plus longue de l\u2019objectif du webhook. Types d\u2019\u00e9v\u00e9nements : Si l\u2019ajout ou la modification des lignes d\u00e9clenche un webhook. Table : La table qui d\u00e9clenchera ce webhook. Filtrer les modifications dans ces colonnes (optionnel): Une liste d\u2019ID de colonnes s\u00e9par\u00e9s par des points-virgules. Si une ligne existante est modifi\u00e9e, le webhook se d\u00e9clenchera uniquement si l\u2019une des colonnes filtr\u00e9es a \u00e9t\u00e9 modifi\u00e9e, et si le webhook est configur\u00e9 pour se d\u00e9clencher lors de modifications. Si un webhook se d\u00e9clenche lors de l\u2019ajout d\u2019une ligne, peu importe quelles colonnes sont d\u00e9finies lorsque la nouvelle ligne est ajout\u00e9e. Colonne pr\u00eate (optionnel): Une colonne bool\u00e9enne, ou Toggle , sur la table qui d\u00e9termine si la ligne doit d\u00e9clencher le webhook ou non. Lorsque la colonne devient vraie, la ligne correspondante d\u00e9clenchera le webhook. URL : L\u2019URL distante du service que le webhook notifiera des lignes ajout\u00e9es ou modifi\u00e9es. Lors de l\u2019auto-h\u00e9bergement, seuls les services externes list\u00e9s par la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS sont autoris\u00e9s. Notez qu\u2019il existe des pr\u00e9occupations de s\u00e9curit\u00e9 en permettant n\u2019importe quel domaine, car les services internes de Grist peuvent devenir vuln\u00e9rables \u00e0 la manipulation. Autorisation d\u2019en-t\u00eate (optionnel): Les informations d\u2019identification \u00e0 fournir \u00e0 l\u2019endpoint du webhook dans l\u2019en-t\u00eate HTTP Authorization . Tous les endpoints ne n\u00e9cessitent pas d\u2019informations d\u2019identification. Il s\u2019agit d\u2019une cha\u00eene statique. Une utilisation courante de ce champ est de fournir un jeton API comme requis par l\u2019URL du webhook. Activ\u00e9 : Si le webhook doit surveiller sa table configur\u00e9e pour les modifications ou non. Si le webhook est d\u00e9sactiv\u00e9, aucune modification de sa table ne le d\u00e9clenchera. Les champs suivants sont informatifs et en lecture seule : ID du webhook : Un ID unique automatique g\u00e9n\u00e9r\u00e9 en interne pour le webhook. Statut : Un objet JSON qui r\u00e9sume le statut actuel du webhook, ainsi que les r\u00e9sultats concernant le nombre de fois o\u00f9 il a \u00e9t\u00e9 invoqu\u00e9. Cela inclut tous les messages d\u2019erreur potentiels ou statuts que le webhook peut avoir re\u00e7us lors de la tentative d\u2019envoi d\u2019une charge utile \u00e0 l\u2019adresse distante.","title":"Configuration"},{"location":"webhooks/#securite","text":"Dans des environnements auto-h\u00e9berg\u00e9s non fiables, les endpoints internes de Grist peuvent \u00eatre expos\u00e9s si tout utilisateur est autoris\u00e9 \u00e0 cr\u00e9er des documents et configurer des webhooks. Il existe deux fa\u00e7ons de r\u00e9duire ce risque : Utilisez la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS pour lister les domaines autoris\u00e9s que les webhooks peuvent utiliser. Utilisez la variable d\u2019environnement GRIST_HTTPS_PROXY pour restreindre les invocations de webhooks \u00e0 passer par ce proxy, tout en d\u00e9finissant ALLOWED_WEBHOOK_DOMAINS=* . De cette mani\u00e8re, tous les domaines sont autoris\u00e9s, mais les webhooks enverront des requ\u00eates via le proxy configur\u00e9, prot\u00e9geant ainsi vos endpoints internes de Grist. C\u2019est la configuration utilis\u00e9e par Grist Labs dans notre environnement h\u00e9berg\u00e9 sur le cloud. Dans un environnement de confiance o\u00f9 des utilisateurs malveillants ne sont pas attendus, la d\u00e9finition de ALLOWED_WEBHOOK_DOMAINS=* seule peut \u00eatre suffisante sans avoir besoin de configurer un proxy.","title":"S\u00e9curit\u00e9"},{"location":"webhooks/#charges-utiles","text":"Lorsqu\u2019un webhook est d\u00e9clench\u00e9, les lignes qui correspondent aux conditions du webhook g\u00e9n\u00e9reront un tableau JSON comme charge utile du webhook. Voici un exemple de charge utile. [ { \"id\": 29, \"manualSort\": 29, \"Title\": \"Trophy\", \"URL\": \"https://example.com/buy/Trophy\", \"Price\": 60, \"Purchase_status\": \"wishlisted\", \"Currency\": \"USD\", \"Play_status\": \"Not started\", \"Box_art\": null, \"Price_CAD_\": 82.362 }, { \"id\": 24, \"manualSort\": 24, \"Title\": \"Dataman\", \"URL\": \"https://example.com/buy/Dataman\", \"Price\": 50, \"Purchase_status\": \"own digitally\", \"Currency\": \"EUR\", \"Play_status\": \"Finished\", \"Box_art\": null, \"Price_CAD_\": 74.71 } ] Plusieurs lignes peuvent d\u00e9clencher simultan\u00e9ment le m\u00eame webhook. Dans ce cas, ces lignes seront envoy\u00e9es ensemble dans la m\u00eame charge utile. La \u2018Colonne pr\u00eate\u2019 dans la configuration du webhook peut \u00eatre utile pour d\u00e9terminer quelles lignes doivent \u00eatre envoy\u00e9es ensemble.","title":"Charges utiles"},{"location":"webhooks/#conditions-derreur","text":"Si un webhook ne parvient pas \u00e0 livrer sa charge utile \u00e0 l\u2019URL sp\u00e9cifi\u00e9e, il continuera \u00e0 r\u00e9essayer p\u00e9riodiquement. La colonne \u2018Statut\u2019 dans la configuration du webhook peut \u00eatre utile pour diagnostiquer de tels probl\u00e8mes, ou pour v\u00e9rifier que les charges utiles ont \u00e9t\u00e9 livr\u00e9es avec succ\u00e8s.","title":"Conditions d’erreur"},{"location":"webhooks/#file-dattente-des-webhooks","text":"Les charges utiles des webhooks sont livr\u00e9es selon une file d\u2019attente par lots. Les tentatives d\u2019atteindre un endpoint sont supprim\u00e9es de la file d\u2019attente lorsqu\u2019une livraison r\u00e9ussie se produit. En cas de probl\u00e8me avec la configuration du webhook, il peut \u00eatre utile de purger la file d\u2019attente du webhook. Le bouton \u2018Effacer la file d\u2019attente\u2019 dans la page de configuration du webhook supprimera toutes les invocations en attente du webhook et ignorera les charges utiles associ\u00e9es.","title":"File d’attente des webhooks"},{"location":"widget-calendar/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue : Calendrier # La vue calendrier permet de visualiser les donn\u00e9es dans une vue calendrier. Dans Grist, les donn\u00e9es d\u2019\u00e9v\u00e9nements sont stock\u00e9es dans une table de donn\u00e9es. Ensuite, la vue calendrier peut \u00eatre configur\u00e9e pour afficher ces donn\u00e9es. Configuration de vos donn\u00e9es # Dans votre table de donn\u00e9es, vous aurez besoin de deux colonnes de donn\u00e9es, avec la possibilit\u00e9 d\u2019ajouter trois colonnes de donn\u00e9es suppl\u00e9mentaires : Titre : colonne Texte , contenant le titre de votre \u00e9v\u00e9nement. Date de d\u00e9but : colonne Date ou DateHeure , contenant la date, ou la date et l\u2019heure, \u00e0 laquelle l\u2019\u00e9v\u00e9nement commence. (Optionnel) Date de fin : colonne Date ou DateHeure , contenant la date, ou la date et l\u2019heure, \u00e0 laquelle l\u2019\u00e9v\u00e9nement se termine. (Optionnel) Toute la journ\u00e9e ? : colonne Basculer , indiquant si un \u00e9v\u00e9nement dure toute la journ\u00e9e. (Optionnel) Type : colonne Choix ou Liste de choix , contenant la cat\u00e9gorie et le style de l\u2019\u00e9v\u00e9nement. Configuration du calendrier # Ajoutez une vue calendrier depuis le menu \u2018Ajouter Nouveau\u2019. S\u00e9lectionnez la table contenant vos donn\u00e9es d\u2019\u00e9v\u00e9nements. Configurez la vue en s\u00e9lectionnant les colonnes de votre table de donn\u00e9es qui contiennent la Date de d\u00e9but, la Date de fin (optionnel), Toute la journ\u00e9e ? (optionnel), le Titre et le Type (optionnel). Ajouter un nouvel \u00e9v\u00e9nement # Vous pouvez ajouter un nouvel \u00e9v\u00e9nement en double-cliquant sur l\u2019heure de d\u00e9but de l\u2019\u00e9v\u00e9nement dans la vue calendrier. Dans la fen\u00eatre contextuelle, vous pouvez ajouter un titre pour l\u2019\u00e9v\u00e9nement et modifier l\u2019heure de d\u00e9but et de fin. Vous avez \u00e9galement la possibilit\u00e9 de marquer l\u2019\u00e9v\u00e9nement comme \u2018toute la journ\u00e9e\u2019. Vous pouvez \u00e9galement modifier l\u2019heure de d\u00e9but et de fin d\u2019un \u00e9v\u00e9nement en cliquant et en faisant glisser l\u2019\u00e9v\u00e9nement directement sur le calendrier. Pour modifier l\u2019heure de d\u00e9but d\u2019un \u00e9v\u00e9nement, cliquez et faites glisser depuis le milieu de l\u2019\u00e9v\u00e9nement. Lorsque vous modifiez l\u2019heure de d\u00e9but, la dur\u00e9e de l\u2019\u00e9v\u00e9nement restera la m\u00eame. Pour modifier l\u2019heure de fin d\u2019un \u00e9v\u00e9nement, cliquez et faites glisser depuis le bas de l\u2019\u00e9v\u00e9nement. Vous remarquerez que l\u2019ic\u00f4ne est l\u00e9g\u00e8rement diff\u00e9rente de celle qui appara\u00eet lors de la modification de l\u2019heure de d\u00e9but. Toutes les modifications des heures de d\u00e9but et de fin seront apport\u00e9es \u00e0 la table de donn\u00e9es sous-jacente afin que vos donn\u00e9es soient toujours coh\u00e9rentes ! Lier les d\u00e9tails de l\u2019\u00e9v\u00e9nement # Il peut \u00eatre utile de voir plus de d\u00e9tails sur l\u2019\u00e9v\u00e9nement dans une vue table ou fiche. Cet exemple vous guidera \u00e0 travers une vue fiche. Pour cr\u00e9er une vue li\u00e9e, ajoutez un nouveau type de vue tel qu\u2019une table ou une fiche, et s\u00e9lectionnez la m\u00eame table de donn\u00e9es. Sous \u2018S\u00e9lectionner par\u2019, s\u00e9lectionnez la vue calendrier. Ensuite, ajoutez \u00e0 la page. Maintenant, lorsque vous cliquez sur un \u00e9v\u00e9nement dans la vue calendrier, la vue li\u00e9e se mettra \u00e0 jour pour afficher les d\u00e9tails de l\u2019\u00e9v\u00e9nement s\u00e9lectionn\u00e9. R\u00e9duire les vues Faites glisser la vue li\u00e9e dans le grenier en haut de la page pour la r\u00e9duire. La vue restera li\u00e9e mais prendra moins de place sur la page ! Cliquez simplement sur la bo\u00eete pour l\u2019agrandir et voir les d\u00e9tails de l\u2019enregistrement li\u00e9. En savoir plus sur les Mises en page personnalis\u00e9es . Supprimer un \u00e9v\u00e9nement # Pour supprimer un \u00e9v\u00e9nement, double-cliquez sur l\u2019\u00e9v\u00e9nement dans le calendrier puis s\u00e9lectionnez \u2018supprimer\u2019 dans la popup.","title":"Calendar"},{"location":"widget-calendar/#vue-calendrier","text":"La vue calendrier permet de visualiser les donn\u00e9es dans une vue calendrier. Dans Grist, les donn\u00e9es d\u2019\u00e9v\u00e9nements sont stock\u00e9es dans une table de donn\u00e9es. Ensuite, la vue calendrier peut \u00eatre configur\u00e9e pour afficher ces donn\u00e9es.","title":"Vue : Calendrier"},{"location":"widget-calendar/#configuration-de-vos-donnees","text":"Dans votre table de donn\u00e9es, vous aurez besoin de deux colonnes de donn\u00e9es, avec la possibilit\u00e9 d\u2019ajouter trois colonnes de donn\u00e9es suppl\u00e9mentaires : Titre : colonne Texte , contenant le titre de votre \u00e9v\u00e9nement. Date de d\u00e9but : colonne Date ou DateHeure , contenant la date, ou la date et l\u2019heure, \u00e0 laquelle l\u2019\u00e9v\u00e9nement commence. (Optionnel) Date de fin : colonne Date ou DateHeure , contenant la date, ou la date et l\u2019heure, \u00e0 laquelle l\u2019\u00e9v\u00e9nement se termine. (Optionnel) Toute la journ\u00e9e ? : colonne Basculer , indiquant si un \u00e9v\u00e9nement dure toute la journ\u00e9e. (Optionnel) Type : colonne Choix ou Liste de choix , contenant la cat\u00e9gorie et le style de l\u2019\u00e9v\u00e9nement.","title":"Configuration de vos donn\u00e9es"},{"location":"widget-calendar/#configuration-du-calendrier","text":"Ajoutez une vue calendrier depuis le menu \u2018Ajouter Nouveau\u2019. S\u00e9lectionnez la table contenant vos donn\u00e9es d\u2019\u00e9v\u00e9nements. Configurez la vue en s\u00e9lectionnant les colonnes de votre table de donn\u00e9es qui contiennent la Date de d\u00e9but, la Date de fin (optionnel), Toute la journ\u00e9e ? (optionnel), le Titre et le Type (optionnel).","title":"Configuration du calendrier"},{"location":"widget-calendar/#ajouter-un-nouvel-evenement","text":"Vous pouvez ajouter un nouvel \u00e9v\u00e9nement en double-cliquant sur l\u2019heure de d\u00e9but de l\u2019\u00e9v\u00e9nement dans la vue calendrier. Dans la fen\u00eatre contextuelle, vous pouvez ajouter un titre pour l\u2019\u00e9v\u00e9nement et modifier l\u2019heure de d\u00e9but et de fin. Vous avez \u00e9galement la possibilit\u00e9 de marquer l\u2019\u00e9v\u00e9nement comme \u2018toute la journ\u00e9e\u2019. Vous pouvez \u00e9galement modifier l\u2019heure de d\u00e9but et de fin d\u2019un \u00e9v\u00e9nement en cliquant et en faisant glisser l\u2019\u00e9v\u00e9nement directement sur le calendrier. Pour modifier l\u2019heure de d\u00e9but d\u2019un \u00e9v\u00e9nement, cliquez et faites glisser depuis le milieu de l\u2019\u00e9v\u00e9nement. Lorsque vous modifiez l\u2019heure de d\u00e9but, la dur\u00e9e de l\u2019\u00e9v\u00e9nement restera la m\u00eame. Pour modifier l\u2019heure de fin d\u2019un \u00e9v\u00e9nement, cliquez et faites glisser depuis le bas de l\u2019\u00e9v\u00e9nement. Vous remarquerez que l\u2019ic\u00f4ne est l\u00e9g\u00e8rement diff\u00e9rente de celle qui appara\u00eet lors de la modification de l\u2019heure de d\u00e9but. Toutes les modifications des heures de d\u00e9but et de fin seront apport\u00e9es \u00e0 la table de donn\u00e9es sous-jacente afin que vos donn\u00e9es soient toujours coh\u00e9rentes !","title":"Ajouter un nouvel \u00e9v\u00e9nement"},{"location":"widget-calendar/#lier-les-details-de-levenement","text":"Il peut \u00eatre utile de voir plus de d\u00e9tails sur l\u2019\u00e9v\u00e9nement dans une vue table ou fiche. Cet exemple vous guidera \u00e0 travers une vue fiche. Pour cr\u00e9er une vue li\u00e9e, ajoutez un nouveau type de vue tel qu\u2019une table ou une fiche, et s\u00e9lectionnez la m\u00eame table de donn\u00e9es. Sous \u2018S\u00e9lectionner par\u2019, s\u00e9lectionnez la vue calendrier. Ensuite, ajoutez \u00e0 la page. Maintenant, lorsque vous cliquez sur un \u00e9v\u00e9nement dans la vue calendrier, la vue li\u00e9e se mettra \u00e0 jour pour afficher les d\u00e9tails de l\u2019\u00e9v\u00e9nement s\u00e9lectionn\u00e9. R\u00e9duire les vues Faites glisser la vue li\u00e9e dans le grenier en haut de la page pour la r\u00e9duire. La vue restera li\u00e9e mais prendra moins de place sur la page ! Cliquez simplement sur la bo\u00eete pour l\u2019agrandir et voir les d\u00e9tails de l\u2019enregistrement li\u00e9. En savoir plus sur les Mises en page personnalis\u00e9es .","title":"Lier les d\u00e9tails de l’\u00e9v\u00e9nement"},{"location":"widget-calendar/#supprimer-un-evenement","text":"Pour supprimer un \u00e9v\u00e9nement, double-cliquez sur l\u2019\u00e9v\u00e9nement dans le calendrier puis s\u00e9lectionnez \u2018supprimer\u2019 dans la popup.","title":"Supprimer un \u00e9v\u00e9nement"},{"location":"widget-card/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue : Fiche & Liste de Fiches # Les vues Fiche et Liste de Fiches permettent de visualiser les donn\u00e9es sous forme de formulaire ou d\u2019enregistrement, similaire \u00e0 la pr\u00e9sentation des donn\u00e9es dans une application personnalis\u00e9e. Dans Grist, vous pouvez choisir les champs \u00e0 afficher et comment les disposer. Une Liste de Fiches affiche une liste d\u00e9filante de fiches. Une Fiche en affiche une \u00e0 la fois. Une seule Fiche est particuli\u00e8rement utile lorsqu\u2019elle est li\u00e9e \u00e0 une autre vue Table (voir Lier des vues ). Elle peut alors afficher les d\u00e9tails de l\u2019enregistrement s\u00e9lectionn\u00e9. La vue Fiche unique peut \u00e9galement \u00eatre utilis\u00e9e seule. Dans ce cas, vous verrez des boutons de navigation en haut pour passer \u00e0 l\u2019enregistrement suivant ou pr\u00e9c\u00e9dent, ou pour en ajouter un nouveau. S\u00e9lection du th\u00e8me # Le panneau d\u2019options de la vue permet de choisir le th\u00e8me, ou le style, de la fiche : Modifier la disposition de la fiche # Pour configurer la disposition d\u2019une fiche, cliquez sur le bouton vert \u201cModifier la disposition de la fiche\u201d sous le s\u00e9lecteur de th\u00e8me, ou cliquez sur les trois points en haut \u00e0 droite de la vue et s\u00e9lectionnez \u201cModifier la disposition de la fiche\u201d dans le menu. Lorsque l\u2019\u00e9diteur de disposition est actif, vous verrez un seul enregistrement avec des champs d\u00e9pla\u00e7ables et un ensemble de boutons en haut de la vue. Redimensionner un champ # Pour redimensionner un champ, d\u00e9placez la souris vers une bordure verticale s\u00e9parant deux champs et faites glisser la bordure \u00e0 la taille souhait\u00e9e. Seule la largeur des champs peut \u00eatre modifi\u00e9e, tandis que la hauteur change dynamiquement pour s\u2019adapter au contenu du champ. D\u00e9placer un champ # Pour d\u00e9placer un champ, maintenez le bouton de la souris enfonc\u00e9 sur un champ et faites-le glisser. Lorsque vous d\u00e9placez la souris pr\u00e8s des bords d\u2019autres champs, vous remarquerez des bo\u00eetes avec des bordures en pointill\u00e9s indiquant les points de d\u00e9p\u00f4t possibles par rapport aux autres champs. Rel\u00e2chez la souris sur l\u2019une de ces bo\u00eetes pour placer votre champ \u00e0 l\u2019emplacement souhait\u00e9. Supprimer un champ # Pour supprimer un champ, d\u00e9placez la souris dessus. Une ic\u00f4ne \u201cx\u201d appara\u00eetra. Cliquez sur cette ic\u00f4ne pour supprimer le champ. Cela est similaire \u00e0 masquer une colonne, car supprimer un champ d\u2019une vue ne supprime pas les donn\u00e9es sous-jacentes. Vous pouvez \u00e9galement supprimer un champ en le masquant dans la liste \u201cChamps visibles\u201d du panneau lat\u00e9ral, comme d\u00e9crit dans Configurer la liste des champs . Cela est disponible m\u00eame lorsque l\u2019\u00e9diteur de disposition n\u2019est pas actif. Ajouter un champ # Pour ajouter un champ, cliquez sur le bouton \u201cAjouter un champ\u201d en haut de l\u2019\u00e9diteur de disposition. Dans le menu d\u00e9roulant, s\u00e9lectionnez \u201cCr\u00e9er un nouveau champ\u201d pour cr\u00e9er une nouvelle colonne de donn\u00e9es, ou l\u2019un des champs existants dans la table qui ne sont pas actuellement affich\u00e9s dans la fiche. Lorsque vous cliquez sur le champ, il sera ajout\u00e9 en bas de la disposition. Vous pouvez ensuite le d\u00e9placer ou le redimensionner comme d\u00e9crit ci-dessus. Tous les nouveaux champs que vous cr\u00e9ez ne seront ajout\u00e9s aux donn\u00e9es que lorsque vous enregistrerez la disposition. Vous pouvez les renommer dans l\u2019onglet \u201cChamp\u201d du panneau lat\u00e9ral. Vous pouvez \u00e9galement ajouter un champ existant en le rendant visible \u00e0 l\u2019aide de la liste \u201cChamps masqu\u00e9s\u201d dans le panneau lat\u00e9ral, comme d\u00e9crit dans Configurer la liste des champs . Cela est disponible m\u00eame lorsque l\u2019\u00e9diteur de disposition n\u2019est pas actif. Enregistrer la disposition # Une fois que vous avez termin\u00e9 de modifier la disposition, n\u2019oubliez pas de cliquer sur \u201cEnregistrer la disposition\u201d en haut de la vue, ou sur \u201cAnnuler\u201d pour annuler vos modifications. Une fois enregistr\u00e9e, la vue Fiche ou Liste de Fiches se mettra \u00e0 jour pour afficher toutes les fiches dans la disposition mise \u00e0 jour.","title":"Card & card list"},{"location":"widget-card/#vue-fiche-liste-de-fiches","text":"Les vues Fiche et Liste de Fiches permettent de visualiser les donn\u00e9es sous forme de formulaire ou d\u2019enregistrement, similaire \u00e0 la pr\u00e9sentation des donn\u00e9es dans une application personnalis\u00e9e. Dans Grist, vous pouvez choisir les champs \u00e0 afficher et comment les disposer. Une Liste de Fiches affiche une liste d\u00e9filante de fiches. Une Fiche en affiche une \u00e0 la fois. Une seule Fiche est particuli\u00e8rement utile lorsqu\u2019elle est li\u00e9e \u00e0 une autre vue Table (voir Lier des vues ). Elle peut alors afficher les d\u00e9tails de l\u2019enregistrement s\u00e9lectionn\u00e9. La vue Fiche unique peut \u00e9galement \u00eatre utilis\u00e9e seule. Dans ce cas, vous verrez des boutons de navigation en haut pour passer \u00e0 l\u2019enregistrement suivant ou pr\u00e9c\u00e9dent, ou pour en ajouter un nouveau.","title":"Vue : Fiche"},{"location":"widget-card/#selection-du-theme","text":"Le panneau d\u2019options de la vue permet de choisir le th\u00e8me, ou le style, de la fiche :","title":"S\u00e9lection du th\u00e8me"},{"location":"widget-card/#modifier-la-disposition-de-la-fiche","text":"Pour configurer la disposition d\u2019une fiche, cliquez sur le bouton vert \u201cModifier la disposition de la fiche\u201d sous le s\u00e9lecteur de th\u00e8me, ou cliquez sur les trois points en haut \u00e0 droite de la vue et s\u00e9lectionnez \u201cModifier la disposition de la fiche\u201d dans le menu. Lorsque l\u2019\u00e9diteur de disposition est actif, vous verrez un seul enregistrement avec des champs d\u00e9pla\u00e7ables et un ensemble de boutons en haut de la vue.","title":"Modifier la disposition de la fiche"},{"location":"widget-card/#redimensionner-un-champ","text":"Pour redimensionner un champ, d\u00e9placez la souris vers une bordure verticale s\u00e9parant deux champs et faites glisser la bordure \u00e0 la taille souhait\u00e9e. Seule la largeur des champs peut \u00eatre modifi\u00e9e, tandis que la hauteur change dynamiquement pour s\u2019adapter au contenu du champ.","title":"Redimensionner un champ"},{"location":"widget-card/#deplacer-un-champ","text":"Pour d\u00e9placer un champ, maintenez le bouton de la souris enfonc\u00e9 sur un champ et faites-le glisser. Lorsque vous d\u00e9placez la souris pr\u00e8s des bords d\u2019autres champs, vous remarquerez des bo\u00eetes avec des bordures en pointill\u00e9s indiquant les points de d\u00e9p\u00f4t possibles par rapport aux autres champs. Rel\u00e2chez la souris sur l\u2019une de ces bo\u00eetes pour placer votre champ \u00e0 l\u2019emplacement souhait\u00e9.","title":"D\u00e9placer un champ"},{"location":"widget-card/#supprimer-un-champ","text":"Pour supprimer un champ, d\u00e9placez la souris dessus. Une ic\u00f4ne \u201cx\u201d appara\u00eetra. Cliquez sur cette ic\u00f4ne pour supprimer le champ. Cela est similaire \u00e0 masquer une colonne, car supprimer un champ d\u2019une vue ne supprime pas les donn\u00e9es sous-jacentes. Vous pouvez \u00e9galement supprimer un champ en le masquant dans la liste \u201cChamps visibles\u201d du panneau lat\u00e9ral, comme d\u00e9crit dans Configurer la liste des champs . Cela est disponible m\u00eame lorsque l\u2019\u00e9diteur de disposition n\u2019est pas actif.","title":"Supprimer un champ"},{"location":"widget-card/#ajouter-un-champ","text":"Pour ajouter un champ, cliquez sur le bouton \u201cAjouter un champ\u201d en haut de l\u2019\u00e9diteur de disposition. Dans le menu d\u00e9roulant, s\u00e9lectionnez \u201cCr\u00e9er un nouveau champ\u201d pour cr\u00e9er une nouvelle colonne de donn\u00e9es, ou l\u2019un des champs existants dans la table qui ne sont pas actuellement affich\u00e9s dans la fiche. Lorsque vous cliquez sur le champ, il sera ajout\u00e9 en bas de la disposition. Vous pouvez ensuite le d\u00e9placer ou le redimensionner comme d\u00e9crit ci-dessus. Tous les nouveaux champs que vous cr\u00e9ez ne seront ajout\u00e9s aux donn\u00e9es que lorsque vous enregistrerez la disposition. Vous pouvez les renommer dans l\u2019onglet \u201cChamp\u201d du panneau lat\u00e9ral. Vous pouvez \u00e9galement ajouter un champ existant en le rendant visible \u00e0 l\u2019aide de la liste \u201cChamps masqu\u00e9s\u201d dans le panneau lat\u00e9ral, comme d\u00e9crit dans Configurer la liste des champs . Cela est disponible m\u00eame lorsque l\u2019\u00e9diteur de disposition n\u2019est pas actif.","title":"Ajouter un champ"},{"location":"widget-card/#enregistrer-la-disposition","text":"Une fois que vous avez termin\u00e9 de modifier la disposition, n\u2019oubliez pas de cliquer sur \u201cEnregistrer la disposition\u201d en haut de la vue, ou sur \u201cAnnuler\u201d pour annuler vos modifications. Une fois enregistr\u00e9e, la vue Fiche ou Liste de Fiches se mettra \u00e0 jour pour afficher toutes les fiches dans la disposition mise \u00e0 jour.","title":"Enregistrer la disposition"},{"location":"widget-chart/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue : Graphique # Grist prend en charge plusieurs types de graphiques pour vous aider \u00e0 visualiser vos donn\u00e9es facilement. Les graphiques peuvent \u00eatre utilis\u00e9s pour tracer un tableau de donn\u00e9es r\u00e9gulier, une vue li\u00e9e (comme d\u00e9crit dans Lier des vues ), ou un tableau r\u00e9capitulatif (comme d\u00e9crit dans Tableaux r\u00e9capitulatifs ). Les types de graphiques les plus courants sont illustr\u00e9s ici : Types de graphiques # Chaque type de graphique trace une ou plusieurs s\u00e9ries de donn\u00e9es. S\u00e9lectionnez les s\u00e9ries \u00e0 tracer en cliquant sur le texte vert \u2018Ajouter une s\u00e9rie\u2019 dans le panneau de cr\u00e9ation . Dans la zone au-dessus de la section \u201cS\u00e9ries\u201d du panneau de cr\u00e9ation, vous pouvez configurer l\u2019axe des x pour la plupart des graphiques, ou les \u00e9tiquettes pour les graphiques en secteurs et en anneaux. Graphique en barres # N\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires cr\u00e9ent des barres suppl\u00e9mentaires \u00e0 chaque point sur l\u2019axe des x. Pour empiler les s\u00e9ries sur la m\u00eame barre, cochez la case \u201cEmpiler les s\u00e9ries\u201d. Graphique en lignes # N\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des lignes suppl\u00e9mentaires. Graphique en secteurs # N\u00e9cessite des \u00e9tiquettes de tranches et une s\u00e9rie pour les tailles des tranches. Graphique en aires # Similaire \u00e0 un graphique en lignes, n\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des lignes suppl\u00e9mentaires. Nuage de points # N\u00e9cessite une \u00e9tiquette et deux s\u00e9ries ou plus. L\u2019\u00e9tiquette s\u2019applique aux points. Les s\u00e9ries appliquent les valeurs X et Y pour chaque point, respectivement. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des ensembles de points suppl\u00e9mentaires. Graphique de Kaplan-Meier # Le Graphique de Kaplan-Meier est utile pour certaines \u00e9tudes, et n\u00e9cessite une \u00e9tiquette et une s\u00e9rie. L\u2019\u00e9tiquette s\u2019applique aux lignes trac\u00e9es. La s\u00e9rie donne un temps de survie ou un temps jusqu\u2019\u00e0 la d\u00e9faillance de ce point. Le graphique montre les temps de survie sur l\u2019axe des X, et le nombre de points qui survivent \u00e0 ce moment sur l\u2019axe des Y. Options de graphique # Un certain nombre d\u2019options de graphique sont disponibles, certaines d\u2019entre elles sp\u00e9cifiques \u00e0 certains types de graphiques. Diviser les s\u00e9ries : Lorsqu\u2019elle est coch\u00e9e, une s\u00e9rie suppl\u00e9mentaire doit \u00eatre s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant \u2018Diviser les s\u00e9ries\u2019. La s\u00e9rie doit contenir une \u00e9tiquette de groupe pour chaque point de donn\u00e9es. Tous les points avec la m\u00eame valeur de groupe sont trac\u00e9s comme une ligne s\u00e9par\u00e9e. Par exemple : Inverser l\u2019axe Y : Lorsqu\u2019elle est coch\u00e9e, l\u2019axe Y est invers\u00e9, avec les valeurs plus petites en haut et les valeurs plus grandes en bas. Connecter les lacunes [pour les graphiques en lignes uniquement] : Lorsqu\u2019elle est coch\u00e9e, les lacunes caus\u00e9es par des valeurs manquantes sont combl\u00e9es en connectant les points voisins. L\u2019option \u201cAfficher les marqueurs\u201d d\u00e9crite ci-apr\u00e8s peut \u00eatre utilis\u00e9e pour garder un indice visuel des points pr\u00e9sents. Afficher les marqueurs [pour les graphiques en lignes uniquement] : Lorsqu\u2019elle est coch\u00e9e, chaque point sur la ligne est marqu\u00e9 en plus par un petit cercle. Voir l\u2019exemple pour Diviser les s\u00e9ries ci-dessus. Empiler les s\u00e9ries [pour les graphiques en lignes et en barres] : Lorsqu\u2019elle est coch\u00e9e, les s\u00e9ries divis\u00e9es seront empil\u00e9es, plut\u00f4t que montr\u00e9es s\u00e9par\u00e9ment, donnant un total pour vos s\u00e9ries s\u00e9lectionn\u00e9es. Dans cet exemple, nous pouvons voir le revenu total pour chaque mois dans les trois d\u00e9partements. Notez que \u2018Diviser les s\u00e9ries\u2019 doit \u00eatre coch\u00e9e pour s\u00e9lectionner plusieurs s\u00e9ries \u00e0 empiler. Barres d\u2019erreur [pour les graphiques en lignes et en barres] : Lorsqu\u2019elle est r\u00e9gl\u00e9e sur \u201cSym\u00e9trique\u201d, chaque s\u00e9rie Y doit \u00eatre suivie d\u2019une s\u00e9rie pour la longueur des barres d\u2019erreur \u00e0 afficher. Lorsqu\u2019elle est r\u00e9gl\u00e9e sur \u201cAu-dessus+En-dessous\u201d, chaque s\u00e9rie Y doit \u00eatre suivie de deux s\u00e9ries, une pour les barres d\u2019erreur sup\u00e9rieures, et une pour les inf\u00e9rieures. Dans l\u2019exemple ici, \u201cDiviser les s\u00e9ries\u201d est coch\u00e9e. Donc la s\u00e9rie s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant Diviser les s\u00e9ries (\u201cLigne cellulaire\u201d), sp\u00e9cifie comment grouper les donn\u00e9es en lignes. La s\u00e9rie s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant Axe des X (\u201cLog[Drug], uM\u201d), sp\u00e9cifie nos valeurs le long de l\u2019axe des x. Notre premi\u00e8re s\u00e9rie dans la liste des s\u00e9ries (\u201c% Cellules viables\u201d), sp\u00e9cifie nos valeurs de l\u2019axe des y, et la s\u00e9rie qui suit (\u201cSD\u201d), sp\u00e9cifie les barres d\u2019erreur pour ces valeurs Y.","title":"Chart"},{"location":"widget-chart/#vue-graphique","text":"Grist prend en charge plusieurs types de graphiques pour vous aider \u00e0 visualiser vos donn\u00e9es facilement. Les graphiques peuvent \u00eatre utilis\u00e9s pour tracer un tableau de donn\u00e9es r\u00e9gulier, une vue li\u00e9e (comme d\u00e9crit dans Lier des vues ), ou un tableau r\u00e9capitulatif (comme d\u00e9crit dans Tableaux r\u00e9capitulatifs ). Les types de graphiques les plus courants sont illustr\u00e9s ici :","title":"Vue : Graphique"},{"location":"widget-chart/#types-de-graphiques","text":"Chaque type de graphique trace une ou plusieurs s\u00e9ries de donn\u00e9es. S\u00e9lectionnez les s\u00e9ries \u00e0 tracer en cliquant sur le texte vert \u2018Ajouter une s\u00e9rie\u2019 dans le panneau de cr\u00e9ation . Dans la zone au-dessus de la section \u201cS\u00e9ries\u201d du panneau de cr\u00e9ation, vous pouvez configurer l\u2019axe des x pour la plupart des graphiques, ou les \u00e9tiquettes pour les graphiques en secteurs et en anneaux.","title":"Types de graphiques"},{"location":"widget-chart/#graphique-en-barres","text":"N\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires cr\u00e9ent des barres suppl\u00e9mentaires \u00e0 chaque point sur l\u2019axe des x. Pour empiler les s\u00e9ries sur la m\u00eame barre, cochez la case \u201cEmpiler les s\u00e9ries\u201d.","title":"Graphique en barres"},{"location":"widget-chart/#graphique-en-lignes","text":"N\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des lignes suppl\u00e9mentaires.","title":"Graphique en lignes"},{"location":"widget-chart/#graphique-en-secteurs","text":"N\u00e9cessite des \u00e9tiquettes de tranches et une s\u00e9rie pour les tailles des tranches.","title":"Graphique en secteurs"},{"location":"widget-chart/#graphique-en-aires","text":"Similaire \u00e0 un graphique en lignes, n\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des lignes suppl\u00e9mentaires.","title":"Graphique en aires"},{"location":"widget-chart/#nuage-de-points","text":"N\u00e9cessite une \u00e9tiquette et deux s\u00e9ries ou plus. L\u2019\u00e9tiquette s\u2019applique aux points. Les s\u00e9ries appliquent les valeurs X et Y pour chaque point, respectivement. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des ensembles de points suppl\u00e9mentaires.","title":"Nuage de points"},{"location":"widget-chart/#graphique-de-kaplan-meier","text":"Le Graphique de Kaplan-Meier est utile pour certaines \u00e9tudes, et n\u00e9cessite une \u00e9tiquette et une s\u00e9rie. L\u2019\u00e9tiquette s\u2019applique aux lignes trac\u00e9es. La s\u00e9rie donne un temps de survie ou un temps jusqu\u2019\u00e0 la d\u00e9faillance de ce point. Le graphique montre les temps de survie sur l\u2019axe des X, et le nombre de points qui survivent \u00e0 ce moment sur l\u2019axe des Y.","title":"Graphique de Kaplan-Meier"},{"location":"widget-chart/#options-de-graphique","text":"Un certain nombre d\u2019options de graphique sont disponibles, certaines d\u2019entre elles sp\u00e9cifiques \u00e0 certains types de graphiques. Diviser les s\u00e9ries : Lorsqu\u2019elle est coch\u00e9e, une s\u00e9rie suppl\u00e9mentaire doit \u00eatre s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant \u2018Diviser les s\u00e9ries\u2019. La s\u00e9rie doit contenir une \u00e9tiquette de groupe pour chaque point de donn\u00e9es. Tous les points avec la m\u00eame valeur de groupe sont trac\u00e9s comme une ligne s\u00e9par\u00e9e. Par exemple : Inverser l\u2019axe Y : Lorsqu\u2019elle est coch\u00e9e, l\u2019axe Y est invers\u00e9, avec les valeurs plus petites en haut et les valeurs plus grandes en bas. Connecter les lacunes [pour les graphiques en lignes uniquement] : Lorsqu\u2019elle est coch\u00e9e, les lacunes caus\u00e9es par des valeurs manquantes sont combl\u00e9es en connectant les points voisins. L\u2019option \u201cAfficher les marqueurs\u201d d\u00e9crite ci-apr\u00e8s peut \u00eatre utilis\u00e9e pour garder un indice visuel des points pr\u00e9sents. Afficher les marqueurs [pour les graphiques en lignes uniquement] : Lorsqu\u2019elle est coch\u00e9e, chaque point sur la ligne est marqu\u00e9 en plus par un petit cercle. Voir l\u2019exemple pour Diviser les s\u00e9ries ci-dessus. Empiler les s\u00e9ries [pour les graphiques en lignes et en barres] : Lorsqu\u2019elle est coch\u00e9e, les s\u00e9ries divis\u00e9es seront empil\u00e9es, plut\u00f4t que montr\u00e9es s\u00e9par\u00e9ment, donnant un total pour vos s\u00e9ries s\u00e9lectionn\u00e9es. Dans cet exemple, nous pouvons voir le revenu total pour chaque mois dans les trois d\u00e9partements. Notez que \u2018Diviser les s\u00e9ries\u2019 doit \u00eatre coch\u00e9e pour s\u00e9lectionner plusieurs s\u00e9ries \u00e0 empiler. Barres d\u2019erreur [pour les graphiques en lignes et en barres] : Lorsqu\u2019elle est r\u00e9gl\u00e9e sur \u201cSym\u00e9trique\u201d, chaque s\u00e9rie Y doit \u00eatre suivie d\u2019une s\u00e9rie pour la longueur des barres d\u2019erreur \u00e0 afficher. Lorsqu\u2019elle est r\u00e9gl\u00e9e sur \u201cAu-dessus+En-dessous\u201d, chaque s\u00e9rie Y doit \u00eatre suivie de deux s\u00e9ries, une pour les barres d\u2019erreur sup\u00e9rieures, et une pour les inf\u00e9rieures. Dans l\u2019exemple ici, \u201cDiviser les s\u00e9ries\u201d est coch\u00e9e. Donc la s\u00e9rie s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant Diviser les s\u00e9ries (\u201cLigne cellulaire\u201d), sp\u00e9cifie comment grouper les donn\u00e9es en lignes. La s\u00e9rie s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant Axe des X (\u201cLog[Drug], uM\u201d), sp\u00e9cifie nos valeurs le long de l\u2019axe des x. Notre premi\u00e8re s\u00e9rie dans la liste des s\u00e9ries (\u201c% Cellules viables\u201d), sp\u00e9cifie nos valeurs de l\u2019axe des y, et la s\u00e9rie qui suit (\u201cSD\u201d), sp\u00e9cifie les barres d\u2019erreur pour ces valeurs Y.","title":"Options de graphique"},{"location":"widget-custom/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Widget de page : Personnalis\u00e9 # Le widget Personnalis\u00e9 permet \u00e0 un utilisateur d\u2019ins\u00e9rer presque tout dans son document. Pour cr\u00e9er un widget personnalis\u00e9, il faut actuellement des connaissances en d\u00e9veloppement web et un acc\u00e8s \u00e0 un serveur web public (par exemple, GitHub Pages). Une bonne utilisation des widgets personnalis\u00e9s est de visualiser des enregistrements ou des tables de nouvelles mani\u00e8res. Utiliser Grist comme mod\u00e8le de donn\u00e9es et HTML/CSS/JS modernes comme vue est tr\u00e8s puissant. Exemple minimal # Pour d\u00e9montrer \u00e0 un d\u00e9veloppeur web comment fonctionnent les widgets personnalis\u00e9s, il existe un exemple minimal fonctionnel \u00e0 : https://public.getgrist.com/911KcgKA95oQ/Minimal-Custom-Widget/m/fork L\u2019exemple montre une table avec des donn\u00e9es al\u00e9atoires (noms d\u2019animaux de compagnie) et deux widgets personnalis\u00e9s, l\u2019un montrant la ligne s\u00e9lectionn\u00e9e dans la table au format JSON, et l\u2019autre montrant toutes les lignes de la table au format JSON. Si vous modifiez des donn\u00e9es dans la table ou d\u00e9placez le curseur, les widgets personnalis\u00e9s se mettent \u00e0 jour en cons\u00e9quence. Le code source des widgets se trouve \u00e0 : https://github.com/gristlabs/grist-widget/tree/master/inspect Il est r\u00e9duit \u00e0 l\u2019essentiel. Voici le code source complet du widget onRecord qui montre une ligne de donn\u00e9es : onRecord
    En attente de donn\u00e9es...
    Les parties \u201cGrist\u201d de ceci sont : Inclusion de https://docs.getgrist.com/grist-plugin-api.js pour obtenir l\u2019API Grist. Appel de grist.ready pour informer Grist que le widget est pr\u00eat \u00e0 fonctionner. Appel de grist.onRecord pour s\u2019abonner \u00e0 la ligne actuelle de la table. Apr\u00e8s cela, tout le reste est du HTML/CSS/JS classique. Une fois que vous avez des donn\u00e9es qui arrivent, vous pouvez les rendre de la mani\u00e8re que vous souhaitez, en utilisant React, Vue.js ou votre framework pr\u00e9f\u00e9r\u00e9. Par exemple, vous pourriez rendre des enregistrements sous forme de facture imprimable , ou utiliser un format de graphique obscur que Grist ne prend pas actuellement en charge. Ajouter un widget personnalis\u00e9 # Pour ajouter un widget personnalis\u00e9 qui lit \u00e0 partir d\u2019une table, cliquez sur Ajouter nouveau , puis Ajouter un widget \u00e0 la page . Ensuite : Pour S\u00e9lectionner un widget , choisissez Personnalis\u00e9 pour obtenir un widget personnalis\u00e9. Pour S\u00e9lectionner des donn\u00e9es , choisissez la table \u00e0 partir de laquelle vous souhaitez que le widget lise les donn\u00e9es. Optionnellement, choisissez S\u00e9lectionner par pour contr\u00f4ler davantage les donn\u00e9es s\u00e9lectionn\u00e9es (lisez Lier des widgets de page pour les possibilit\u00e9s). Le widget personnalis\u00e9 est initialement vide. Pour le configurer, cliquez sur le bouton \u00e0 trois points en haut \u00e0 droite du widget personnalis\u00e9 et s\u00e9lectionnez \u201cOptions du widget\u201d. Dans la section des param\u00e8tres PERSONNALIS\u00c9 o\u00f9 il est indiqu\u00e9 Entrer l'URL personnalis\u00e9e , mettez le lien vers votre widget personnalis\u00e9. Voici un widget de test pour simplement afficher les donn\u00e9es de la table au format JSON : https://gristlabs.github.io/grist-widget/inspect/onRecords.html Et voici un pour montrer uniquement la ligne s\u00e9lectionn\u00e9e (assurez-vous que \u201cS\u00e9lectionner par\u201d est d\u00e9fini pour le widget personnalis\u00e9) : https://gristlabs.github.io/grist-widget/inspect/onRecord.html Niveau d\u2019acc\u00e8s # Lorsque vous mettez un lien vers une page web personnalis\u00e9e, elle sera imm\u00e9diatement rendue \u00e0 l\u2019int\u00e9rieur de la section. Vous avez maintenant la possibilit\u00e9 d\u2019accorder \u00e0 cette page web l\u2019acc\u00e8s aux donn\u00e9es de votre document. Les niveaux d\u2019acc\u00e8s suivants sont disponibles : Pas d\u2019acc\u00e8s au document : la page web est affich\u00e9e dans le widget, mais elle n\u2019a pas acc\u00e8s au document Grist contenant le widget. Lire la table s\u00e9lectionn\u00e9e : la page web est affich\u00e9e dans le widget et re\u00e7oit un acc\u00e8s en lecture \u00e0 la table que le widget est configur\u00e9 pour s\u00e9lectionner des donn\u00e9es. Acc\u00e8s complet au document : la page web est affich\u00e9e dans le widget et a un acc\u00e8s complet pour lire et modifier le document Grist contenant le widget. La page web doit \u00eatre poss\u00e9d\u00e9e et contr\u00f4l\u00e9e par vous ou par quelqu\u2019un en qui vous avez confiance. Avec les permissions Lire la table s\u00e9lectionn\u00e9e , un widget pourrait envoyer les donn\u00e9es auxquelles il acc\u00e8de \u00e0 un tiers. Avec les permissions Acc\u00e8s complet au document , un widget pourrait envoyer toutes les donn\u00e9es du document \u00e0 un tiers et modifier votre document de n\u2019importe quelle mani\u00e8re. Si vous \u00e9crivez votre propre widget personnalis\u00e9, vous pouvez sp\u00e9cifier le niveau d\u2019acc\u00e8s dont il a besoin dans le message pr\u00eat initial. Les valeurs possibles sont : none , read table et full . Cela indique \u00e0 Grist de demander le niveau d\u2019acc\u00e8s souhait\u00e9 \u00e0 l\u2019utilisateur. Votre widget sera recharg\u00e9 avec le niveau d\u2019acc\u00e8s appropri\u00e9 si l\u2019utilisateur approuve la demande. Si vous souhaitez \u00eatre inform\u00e9 du niveau d\u2019acc\u00e8s, vous pouvez vous abonner \u00e0 l\u2019\u00e9v\u00e9nement onOptions qui est envoy\u00e9 au widget apr\u00e8s qu\u2019il ait inform\u00e9 Grist qu\u2019il est pr\u00eat : grist.onOptions(function(options, interaction) { console.log(interaction.access_level); }); Pour l\u2019instant, il suffit de sauter le param\u00e8tre options (il sera d\u00e9crit dans la section Options de widget ). Le niveau d\u2019acc\u00e8s actuel fait partie du deuxi\u00e8me param\u00e8tre, qui d\u00e9crit comment Grist interagira avec votre widget. Exemple de facture # L\u2019exemple minimal ci-dessus a montr\u00e9 des enregistrements au format JSON simple, mais le widget peut devenir aussi sophistiqu\u00e9 que vous le souhaitez. Voici un exemple montrant un enregistrement sous forme de facture imprimable : Vous pouvez lire les d\u00e9tails sur la fa\u00e7on d\u2019utiliser ce widget dans notre exemple de pr\u00e9paration de facture . Le widget de facture est h\u00e9berg\u00e9 \u00e0 : https://gristlabs.github.io/grist-widget/invoices/ Et le code source HTML/CSS/JS peut \u00eatre consult\u00e9 \u00e0 : https://github.com/gristlabs/grist-widget/tree/master/invoices Il utilise Vue.js et grist.onRecord . Cr\u00e9ation d\u2019un widget personnalis\u00e9 # Comme vous l\u2019avez vu, \u00e9crire un widget simple qui utilise des donn\u00e9es d\u2019une table est tr\u00e8s facile. Tout d\u2019abord, vous devez informer Grist que vous \u00eates pr\u00eat et ensuite vous abonner \u00e0 l\u2019un des \u00e9v\u00e9nements disponibles : onRecord , onRecords ou onOptions . grist.ready(); grist.onRecord(function (record) { // Le curseur a \u00e9t\u00e9 d\u00e9plac\u00e9. }); grist.onRecords(function (record) { // Les donn\u00e9es dans la table ont chang\u00e9. }); grist.onOptions(function (options, interaction) { // La configuration a chang\u00e9. }); Disons que vous souhaitez cr\u00e9er un widget personnalis\u00e9 qui affichera une image \u00e0 partir d\u2019une URL et \u00e9ventuellement une ligne de texte en dessous comme titre de l\u2019image. Vous devrez lire deux valeurs de deux colonnes : Lien et Titre . Vous pourriez acc\u00e9der \u00e0 ces colonnes directement en utilisant les noms de colonnes litt\u00e9raux dans votre script. Voici un exemple complet de code source de widget qui fera le travail :
    Lorsque vous commencez, c\u2019est une bonne approche, mais elle pr\u00e9sente deux inconv\u00e9nients majeurs. Chaque fois que vous renommez une colonne, vous devrez \u00e9galement modifier le code source de votre widget. De plus, utiliser ce widget sur une table diff\u00e9rente ou le partager avec vos amis peut \u00eatre difficile car les noms de colonnes pourraient \u00eatre diff\u00e9rents. Pour aider avec cela, Grist propose l\u2019API de mappage de colonnes. Mappage de colonnes # Au lieu d\u2019utiliser directement les noms de colonnes, vous pouvez demander \u00e0 l\u2019utilisateur de choisir quelle colonne utiliser comme Lien et Titre . La liste des colonnes attendues peut \u00eatre envoy\u00e9e \u00e0 Grist dans l\u2019appel pr\u00eat : grist.ready({columns: ['Lien', 'Titre']}); En utilisant cette information, dans le panneau de cr\u00e9ation, Grist masquera la section r\u00e9guli\u00e8re \u201cColonnes visibles\u201d et affichera des s\u00e9lecteurs de colonnes sp\u00e9cialis\u00e9s. Votre widget recevra cette configuration de mappage dans le param\u00e8tre onRecord ou onRecords dans le deuxi\u00e8me param\u00e8tre. Vous pouvez utiliser cette configuration pour effectuer les mappages vous-m\u00eame ou utiliser la fonction d\u2019assistance mapColumnNames pour le faire pour vous.
    Maintenant, si vous renommez l\u2019une des colonnes, le widget fonctionnera toujours. Vous pouvez \u00e9galement utiliser ce widget dans n\u2019importe quelle autre table ou le partager avec un ami, car il ne d\u00e9pend pas de votre structure de table et peut \u00eatre facilement configur\u00e9. Dans la configuration utilis\u00e9e ci-dessus, nous avons dit \u00e0 Grist que toutes les colonnes sont requises, et l\u2019utilisateur peut choisir n\u2019importe quelle colonne m\u00eame si la colonne ne contient pas de valeur texte. Pour \u00eatre plus pr\u00e9cis, nous pouvons inclure plus d\u2019options dans la demande. Par exemple : grist.ready({columns: [ { name: \"Lien\", // Quel champ nous allons lire. title: \"Lien de l'image\", // Nom de champ convivial. optional: false, // Est-ce un champ optionnel. type: \"Texte\", // Quel type de colonne nous attendons. description: \"Un texte\" // Description d'un champ. allowMultiple: false // Permet l'attribution de plusieurs colonnes. } ]}); Le param\u00e8tre optional est important pour le bon fonctionnement de l\u2019assistant mapColumnNames . Cet assistant ne renverra un enregistrement mapp\u00e9 que lorsque toutes les colonnes requises (non optionnelles) seront choisies. Par d\u00e9faut, Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quel type de colonne. Pour autoriser uniquement une colonne d\u2019un type sp\u00e9cifique, vous devez d\u00e9finir une propri\u00e9t\u00e9 type . Voici tous les types valides : Int ( Colonne enti\u00e8re ), Numeric ( Colonne num\u00e9rique ), Texte , Date , DateTime , Bool ( Colonne de bascule ), Choice , ChoiceList , Ref ( Colonne de r\u00e9f\u00e9rence ), RefList ( Liste de r\u00e9f\u00e9rences ), Attachments . La valeur par d\u00e9faut de type est Any , donc Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quel type de colonne. Vous pouvez \u00e9galement sp\u00e9cifier une liste de types, par exemple Date,DateTime . Dans ce cas, Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quelle colonne qui correspond \u00e0 l\u2019un des types de la liste. Utilisez les champs title et description pour aider vos utilisateurs \u00e0 comprendre quel est le but de la colonne. La description sera affich\u00e9e juste en dessous du nom de la colonne, et le title sera utilis\u00e9 comme \u00e9tiquette de colonne. Les deux sont optionnels et vous pouvez y mettre n\u2019importe quel texte que vous souhaitez. Si vous devez mapper plusieurs colonnes (par exemple dans un widget de graphique personnalis\u00e9), vous pouvez utiliser l\u2019option allowMultiple . Cela permettra \u00e0 vos utilisateurs de choisir un ensemble de colonnes qui seront renvoy\u00e9es sous forme de liste de noms de colonnes de table mapp\u00e9s. L\u2019assistant mapColumnNames renverra alors un tableau de valeurs de colonnes mapp\u00e9es dans un seul champ. Supposons que l\u2019utilisateur supprime une colonne ou change son type de sorte qu\u2019elle ne corresponde plus au type demand\u00e9 par le widget. Dans ce cas, Grist supprimera automatiquement cette colonne du mappage. Options de widget # Si votre widget a besoin de stocker certaines options, Grist propose une API de stockage cl\u00e9-valeur simple que vous pouvez utiliser. Voici quelques extraits de code JavaScript qui montrent comment interagir avec cette API : // Stocker une simple valeur de texte. await grist.setOption('color', '#FF0000'); // Stocker des objets complexes sous forme de JSON. await grist.setOption('settings', {lines: 10, skipFirst: true}); // Lire l'option pr\u00e9c\u00e9demment enregistr\u00e9e const color = await grist.getOption('color'); // Effacer toutes les options. await grist.clearOptions(); // Obtenir et remplacer toutes les options. await grist.getOptions(); await grist.setOptions({...}); Vous pouvez exp\u00e9rimenter cela vous-m\u00eame. Voici un widget de test qui d\u00e9montre comment utiliser cette API : https://gristlabs.github.io/grist-widget/inspect/onOptions.html Lorsque votre widget enregistre ou modifie certaines options, l\u2019ic\u00f4ne en haut de la section devient verte. Vous pouvez soit appliquer ces options au widget, soit annuler cette modification. Cela permet aux visualisateurs (utilisateurs avec un acc\u00e8s en lecture seule) ou aux collaborateurs de configurer votre widget sans \u00e9craser les param\u00e8tres d\u2019origine. Ce comportement devrait vous sembler familier, car cela fonctionne comme le tri et le filtrage sur les vues de table ou de carte. En enregistrant les options actuelles, vous les appliquerez au widget et les rendrez disponibles pour les autres. En utilisant ce menu, vous pouvez \u00e9galement effacer toutes les options pour revenir \u00e0 l\u2019\u00e9tat initial du widget. Pour ce faire, appuyez sur la petite ic\u00f4ne de poubelle, puis sur Enregistrer . Grist d\u00e9clenchera \u00e9galement un \u00e9v\u00e9nement chaque fois que les options sont modifi\u00e9es (ou effac\u00e9es). Voici comment vous pouvez vous abonner \u00e0 cet \u00e9v\u00e9nement. grist.onOptions(function(options, interaction) { if (options) { console.log('Couleur actuelle', options.color); } else { // Aucune option de widget n'a \u00e9t\u00e9 enregistr\u00e9e, retour aux options par d\u00e9faut. } }); Si vous construisez votre propre widget, vous ne devez g\u00e9n\u00e9ralement pas lire les options directement (en utilisant grist.widgetApi.getOption() ). Un meilleur mod\u00e8le consiste \u00e0 les appliquer toutes lorsqu\u2019elles sont modifi\u00e9es. L\u2019utilisation du gestionnaire onOptions rendra votre widget plus facile \u00e0 modifier et \u00e0 comprendre ult\u00e9rieurement. Il y a un sc\u00e9nario suppl\u00e9mentaire \u00e0 couvrir. Supposons que votre widget ait une sorte d\u2019\u00e9cran de configuration personnalis\u00e9. Dans ce cas, vous aurez probablement besoin d\u2019un bouton ou d\u2019un autre \u00e9l\u00e9ment d\u2019interface utilisateur que l\u2019utilisateur peut utiliser pour l\u2019afficher. Cet \u00e9l\u00e9ment d\u2019interface utilisateur suppl\u00e9mentaire sera probablement rarement utilis\u00e9 par vous ou vos collaborateurs, donc il n\u2019est pas logique de l\u2019afficher tout le temps. Pour aider avec cela, Grist propose une option d\u2019interaction suppl\u00e9mentaire que vous pouvez envoyer dans le message pr\u00eat : grist.ready({ onEditOptions: function() { // Votre logique personnalis\u00e9e pour ouvrir l'\u00e9cran de configuration personnalis\u00e9. } }); Cela indiquera \u00e0 Grist d\u2019afficher un bouton suppl\u00e9mentaire Ouvrir la configuration dans le panneau de cr\u00e9ation et le menu de section. Lorsqu\u2019il est cliqu\u00e9, cela d\u00e9clenchera votre gestionnaire, que vous pouvez utiliser pour afficher votre propre \u00e9cran de configuration personnalis\u00e9. Lien de widget personnalis\u00e9 # Les widgets personnalis\u00e9s peuvent \u00e9galement \u00eatre utilis\u00e9s comme source de liaison (voir Lier des widgets ). Tout ce que vous avez \u00e0 faire est d\u2019informer Grist que votre widget prend en charge le lien en passant une option suppl\u00e9mentaire \u00e0 l\u2019appel ready (voir API de widget ) : grist.ready({ allowSelectBy: true }); Cela activera l\u2019option S\u00e9lectionner par dans le panneau de configuration du widget. Vous pouvez maintenant utiliser votre widget pour contr\u00f4ler la position du curseur dans les widgets li\u00e9s. Pour ce faire, vous devez appeler la fonction setCursorPos : // Informer Grist que le curseur doit \u00eatre d\u00e9plac\u00e9 vers la ligne avec l'ID 20. grist.setCursorPos({rowId: 20}); // ou informer que votre widget cr\u00e9e une nouvelle ligne. grist.setCursorPos({rowId: 'new'}); Widgets personnalis\u00e9s pr\u00e9fabriqu\u00e9s # Tous les widgets personnalis\u00e9s pr\u00e9fabriqu\u00e9s sont disponibles dans le panneau de configuration du widget personnalis\u00e9 sur le c\u00f4t\u00e9 droit de l\u2019\u00e9cran sous le menu d\u00e9roulant Personnalis\u00e9. Graphiques avanc\u00e9s # Le widget personnalis\u00e9 Graphiques avanc\u00e9s vous donne plus de puissance et de flexibilit\u00e9 que les graphiques int\u00e9gr\u00e9s de Grist, offrant une grande vari\u00e9t\u00e9 de types de graphiques ainsi qu\u2019un contr\u00f4le accru sur le style et la mise en page. C\u2019est une version de Chart Studio de Plotly, consultez leurs tutoriels pour une aide plus d\u00e9taill\u00e9e. Vous devrez d\u00e9finir le niveau d\u2019acc\u00e8s sur \u201cAcc\u00e8s complet au document\u201d. Ne vous inqui\u00e9tez pas, le widget ne lit que les donn\u00e9es de la table s\u00e9lectionn\u00e9e, ne les envoie \u00e0 aucun serveur et ne modifie ou n\u2019apporte d\u2019autres changements \u00e0 votre document. Voici ce que vous devriez voir : Cliquez sur le grand bouton bleu \u201c+ Trace\u201d pour commencer. Cela ajoutera un panneau comme suit : Cliquez sur \u201cDispersion\u201d pour choisir un type de graphique diff\u00e9rent tel que Bar ou Ligne. Ensuite, cliquez sur les menus d\u00e9roulants \u201cChoisir des donn\u00e9es\u201d pour s\u00e9lectionner les colonnes que vous souhaitez tracer. Vous pouvez ajouter plusieurs traces pour superposer diff\u00e9rents graphiques. Essayez diff\u00e9rents panneaux dans la barre lat\u00e9rale pour personnaliser davantage le graphique. Par exemple, allez dans Style > Axes > Titres pour ajouter une \u00e9tiquette \u00e0 chaque axe. Consultez les tutoriels de studio de graphique pour en savoir plus. Au fur et \u00e0 mesure que vous personnalisez le widget, n\u2019oubliez pas de cliquer r\u00e9guli\u00e8rement sur le bouton \u2018Enregistrer\u2019 au-dessus du widget pour conserver votre configuration. Copier dans le presse-papiers # Copier dans le presse-papiers copie une valeur de la colonne sp\u00e9cifi\u00e9e de l\u2019enregistrement s\u00e9lectionn\u00e9. Lors de la configuration du widget, vous devrez s\u00e9lectionner la colonne \u00e0 partir de laquelle vous souhaitez copier des donn\u00e9es. Notez que vous pouvez \u00e9galement copier des donn\u00e9es d\u2019une cellule s\u00e9lectionn\u00e9e en utilisant le raccourci clavier Ctrl + C sur Windows ou \u2318 + C sur Mac. Pour coller, utilisez Ctrl + V ou \u2318 + V . Vous pouvez trouver un exemple du bouton copier dans le presse-papiers dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le. Vous pouvez \u00e9galement regarder une vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s . Int\u00e9grateur Dropbox # Voir et acc\u00e9der aux fichiers enregistr\u00e9s sur Dropbox. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table pour stocker vos liens Dropbox. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les liens Dropbox et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Int\u00e9grateur Dropbox\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018Lien Dropbox\u2019, s\u00e9lectionnez la colonne qui contient vos liens Dropbox. Vous pouvez cr\u00e9er des liens vers des dossiers ou des fichiers sp\u00e9cifiques dans Dropbox. Cliquez sur \u2018Partager\u2019, puis d\u00e9finissez les permissions pour le lien. Vous pouvez choisir de permettre \u00e0 quiconque ayant le lien de visualiser ou d\u2019\u00e9diter. Cr\u00e9ez ensuite, puis copiez le lien. Collez ce lien dans votre colonne Lien Dropbox dans Grist. Notez que les utilisateurs ne peuvent pas modifier directement dans le widget personnalis\u00e9 m\u00eame si des permissions d\u2019\u00e9dition sont accord\u00e9es. Pour \u00e9diter, s\u00e9lectionnez l\u2019objet dans l\u2019int\u00e9grateur Dropbox et il s\u2019ouvrira dans un nouvel onglet o\u00f9 il pourra \u00eatre modifi\u00e9 directement dans Dropbox. Vous pouvez consulter un exemple de l\u2019int\u00e9grateur Dropbox dans notre Pr\u00e9paration \u00e0 l\u2019ouragan mod\u00e8le. Lecteur vid\u00e9o Grist # Int\u00e9grez des vid\u00e9os provenant de sources en ligne telles que YouTube, Vimeo, Facebook Video, Google Drive et plus encore. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table pour stocker vos URL vid\u00e9o. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les URL vid\u00e9o et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Lecteur vid\u00e9o Grist\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018URL\u2019, s\u00e9lectionnez la colonne qui contient vos URL vid\u00e9o. Pour la plupart des vid\u00e9os en ligne, y compris les vid\u00e9os YouTube et les vid\u00e9os stock\u00e9es sur Google Drive, vous pouvez simplement cliquer sur l\u2019option \u2018Partager\u2019 et copier l\u2019URL. Pour certaines autres vid\u00e9os, vous pourriez voir cette erreur : Si cela se produit, vous devrez prendre l\u2019URL \u00e0 partir du code d\u2019int\u00e9gration. Apr\u00e8s avoir cliqu\u00e9 sur l\u2019option de partage de la vid\u00e9o, cliquez sur l\u2019option \u2018Int\u00e9grer\u2019. Ensuite, cliquez pour copier le code. Le code qu\u2019il vous donne ressemblera \u00e0 ceci : Copiez l\u2019URL qui se trouve entre les guillemets apr\u00e8s src . La portion mise en surbrillance dans la capture d\u2019\u00e9cran ci-dessous est ce que vous copieriez pour cette vid\u00e9o Facebook particuli\u00e8re. Collez cette URL dans votre colonne URL dans Grist et la vid\u00e9o appara\u00eetra maintenant dans le widget personnalis\u00e9 Lecteur vid\u00e9o Grist. Visionneuse HTML # La visionneuse HTML affiche du HTML \u00e9crit dans une cellule. Pour des widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s Markdown et Bloc-notes . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous \u00e9crirez du HTML. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient le HTML et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Visionneuse HTML\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018HTML\u2019, s\u00e9lectionnez la colonne de texte qui contient votre HTML. Votre HTML sera visible dans le widget personnalis\u00e9. Pour obtenir de l\u2019aide sur le formatage HTML, consultez ce guide de W3 Schools : Formatage de texte HTML Vous pouvez trouver un exemple de la visionneuse HTML dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le. Vous pouvez \u00e9galement regarder une vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s . Visionneuse d\u2019images # Voir des images \u00e0 partir d\u2019URL. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous ajouterez l\u2019URL de votre image. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient l\u2019URL de l\u2019image et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Visionneuse d\u2019images\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018URL de l\u2019image\u2019, s\u00e9lectionnez la colonne qui contient les URL de vos images. Pour copier l\u2019URL d\u2019une image, faites un clic droit sur la photo puis \u2018Copier l\u2019adresse de l\u2019image\u2019. Cela copie l\u2019URL dans votre presse-papiers. Collez cette URL dans votre colonne sp\u00e9cifi\u00e9e dans Grist. De plus, vous pouvez ajouter plusieurs images pour un enregistrement sp\u00e9cifique en ajoutant plusieurs URL d\u2019images, s\u00e9par\u00e9es par un espace ou une nouvelle ligne, dans une seule cellule. Veuillez noter qu\u2019une virgule ne fonctionnera pas pour s\u00e9parer les liens. Lorsque plusieurs URL d\u2019images sont pr\u00e9sentes, le widget personnalis\u00e9 visionneuse d\u2019images fonctionnera comme un carrousel. Cliquez sur les fl\u00e8ches pour voir d\u2019autres images. Pour un exemple du widget visionneuse d\u2019images, consultez notre Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis , et ajoutez une critique de parc pendant que vous y \u00eates ! Vous pouvez \u00e9galement consulter notre mod\u00e8le G\u00e9n\u00e9rateur de m\u00e8mes pour un autre excellent exemple. Pour une vid\u00e9o explicative, assurez-vous de regarder notre Webinaire sur les widgets personnalis\u00e9s ! Notebook JupyterLite # Ce widget vous permet d\u2019ex\u00e9cuter du code Python personnalis\u00e9 dans JupyterLite , une version de JupyterLab fonctionnant enti\u00e8rement dans le navigateur. Vous pouvez utiliser la pleine API de plugin de widget personnalis\u00e9e et acc\u00e9der ou modifier n\u2019importe quelles donn\u00e9es dans le document (sous r\u00e9serve des R\u00e8gles d\u2019acc\u00e8s), d\u00e9bloquant presque des possibilit\u00e9s illimit\u00e9es pour les utilisateurs avanc\u00e9s. Vous serez pr\u00e9sent\u00e9 avec un notebook o\u00f9 vous pouvez entrer et ex\u00e9cuter du code Python, par exemple : Apr\u00e8s avoir tap\u00e9 du code dans une cellule, cliquez sur le bouton de lecture ou appuyez sur Shift+Entr\u00e9e pour ex\u00e9cuter cette cellule. Contrairement aux formules, le code n\u2019est pas enregistr\u00e9 automatiquement. Vous devez appuyer sur le bouton \u2018Enregistrer\u2019 habituel au-dessus du widget (en dehors du notebook) pour conserver le code dans votre document Grist. D\u2019autre part, les modifications des param\u00e8tres dans le notebook (par exemple, les raccourcis clavier) sont enregistr\u00e9es dans le stockage local de votre navigateur, donc elles ne sont pas partag\u00e9es avec d\u2019autres utilisateurs du document. Un objet sp\u00e9cial appel\u00e9 grist est automatiquement disponible pour \u00eatre utilis\u00e9 dans le code Python, qui refl\u00e8te de nombreuses m\u00e9thodes courantes de l\u2019API de plugin JS . Notez que beaucoup de ces m\u00e9thodes sont asynchrones, donc vous devriez utiliser await avant de les appeler. async fetch_selected_table() : renvoie les donn\u00e9es de la table soutenant le widget notebook. async fetch_selected_record(row_id=None) : renvoie un enregistrement de la table soutenant le widget notebook. Si row_id est sp\u00e9cifi\u00e9, renvoie l\u2019enregistrement \u00e0 cette ligne. Sinon, renvoie l\u2019enregistrement \u00e0 la position actuelle du curseur dans un widget li\u00e9 au widget notebook. async fetch_table(table_id) : renvoie les donn\u00e9es de la table sp\u00e9cifi\u00e9e. Notez que cela diff\u00e8re de fetch_selected_table (m\u00eame pour la m\u00eame table) de plusieurs mani\u00e8res : Le widget doit avoir un acc\u00e8s complet au document. Toutes les colonnes sont incluses, tandis que fetch_selected_table exclut les colonnes qui sont cach\u00e9es dans la configuration du widget. Toutes les lignes sont incluses, tandis que fetch_selected_table prend en compte les filtres du widget et \u2018S\u00c9LECTIONNER PAR\u2019. Les donn\u00e9es ne sont pas tri\u00e9es selon la configuration du widget. Les donn\u00e9es sont r\u00e9cup\u00e9r\u00e9es depuis le serveur, donc la m\u00e9thode peut \u00eatre plus lente. Les valeurs pour les colonnes de r\u00e9f\u00e9rence sont des ID de ligne de la table r\u00e9f\u00e9renc\u00e9e, tandis que fetch_selected_table renvoie les valeurs affich\u00e9es en fonction de la configuration \u2018AFFICHER LA COLONNE\u2019. on_record(callback) : enregistre une fonction de rappel \u00e0 ex\u00e9cuter lorsque le curseur se d\u00e9place dans un widget li\u00e9 au widget notebook, c\u2019est-\u00e0-dire le widget choisi dans le menu d\u00e9roulant \u201cS\u00c9LECTIONNER PAR\u201d dans la section Donn\u00e9es de la configuration du widget. La fonction de rappel recevra l\u2019enregistrement \u00e0 la position actuelle du curseur. Vous pouvez \u00e9galement l\u2019utiliser comme d\u00e9corateur, c\u2019est-\u00e0-dire @grist.on_record . on_records(callback) : similaire \u00e0 on_record , mais s\u2019ex\u00e9cute lorsque les donn\u00e9es source du widget changent. La fonction de rappel recevra les m\u00eames donn\u00e9es que celles renvoy\u00e9es par fetch_selected_table . get_table(table_id) : renvoie une classe TableOperations similaire \u00e0 l\u2019interface de l\u2019API de plugin JS habituelle pour effectuer des op\u00e9rations de type CRUD sur une table. Voir la documentation de l\u2019API de plugin pour les d\u00e9tails sur les param\u00e8tres. La classe a les m\u00e9thodes suivantes : async create(records, parse_strings=True) async update(records, parse_strings=True) async upsert(records, parse_strings=True, add=True, update=True, on_many=\"first\", allow_empty_require=False) async destroy(row_ids) Vous pouvez \u00e9galement utiliser grist.raw pour un acc\u00e8s direct \u00e0 l\u2019API de plugin, par exemple await grist.raw.docApi.fetchTable(table_id) . Cela peut renvoyer des valeurs de cellule brutes que vous pouvez d\u00e9coder avec grist.decode_cell_value(value) . Vous pouvez utiliser de nombreuses (mais pas toutes) biblioth\u00e8ques tierces dans votre notebook, comme pandas . Beaucoup seront install\u00e9es automatiquement lorsqu\u2019elles seront import\u00e9es. D\u2019autres n\u00e9cessiteront d\u2019ex\u00e9cuter %pip install dans une cellule, par exemple %pip install pandas . Notez que c\u2019est %pip et non !pip comme dans un notebook Jupyter classique. Carte # Le widget de carte personnalis\u00e9 vous permet d\u2019afficher des emplacements en utilisant des coordonn\u00e9es de latitude et de longitude. Si vos donn\u00e9es sont une adresse, plut\u00f4t qu\u2019au format lat-long, Grist peut convertir l\u2019adresse en coordonn\u00e9es lat-long. Si vous utilisez des coordonn\u00e9es lat-long existantes, vous aurez besoin de trois colonnes : Nom, Longitude et Latitude. Si vous utilisez une adresse, vous aurez besoin de six colonnes : Nom, Adresse, G\u00e9ocodage, Longitude, Latitude et Adresse g\u00e9ocod\u00e9e. G\u00e9ocodage est une colonne de type bascule qui doit \u00eatre d\u00e9finie sur vrai pour tout enregistrement que vous souhaitez convertir d\u2019adresse en coordonn\u00e9es lat-long \u00e0 afficher sur la carte. Si vous souhaitez convertir tous les enregistrements, vous pouvez faire de G\u00e9ocodage une colonne de formule avec la formule = True . Cela marquera tous les enregistrements comme vrais. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les adresses ou les coordonn\u00e9es lat-long et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Carte\u2019 dans le menu d\u00e9roulant Personnalis\u00e9. Si vous avez d\u00e9j\u00e0 des coordonn\u00e9es lat-long , vous pouvez d\u00e9finir votre niveau d\u2019acc\u00e8s sur Lire la table s\u00e9lectionn\u00e9e . Si vous utilisez une adresse et qu\u2019elle doit \u00eatre convertie en coordonn\u00e9es lat-long, vous devrez d\u00e9finir votre niveau d\u2019acc\u00e8s sur Acc\u00e8s complet au document car le widget a besoin de la permission d\u2019\u00e9crire dans votre document afin d\u2019ajouter des coordonn\u00e9es lat-long. Mappez toutes les colonnes requises. Notez que Nom, Longitude et Latitude sont \u00e9tiquet\u00e9s comme requis. G\u00e9ocodage, Adresse et Adresse g\u00e9ocod\u00e9e sont list\u00e9s comme optionnels. Si vous utilisez des adresses et que vous avez besoin que Grist les convertisse en coordonn\u00e9es lat-long, vous devez mapper les six colonnes. Apr\u00e8s avoir mapp\u00e9 les colonnes n\u00e9cessaires et s\u00e9lectionn\u00e9 le niveau d\u2019acc\u00e8s appropri\u00e9, le widget de carte se remplira. Vous pouvez configurer la carte pour afficher uniquement l\u2019emplacement s\u00e9lectionn\u00e9 en cliquant sur l\u2019option \u2018Ouvrir la configuration\u2019 dans le panneau de cr\u00e9ation . Ensuite, d\u00e9cochez \u2018Tous les emplacements\u2019. Cliquez sur la coche verte en haut du widget pour enregistrer les param\u00e8tres de configuration mis \u00e0 jour. Consultez notre mod\u00e8le Cartographie des emplacements ou notre Liste de crowdsourcing pour deux excellents exemples ! Pour une vid\u00e9o explicative, consultez notre Webinaire sur les widgets personnalis\u00e9s . Markdown # Le widget personnalis\u00e9 Markdown vous permet de formater du texte en utilisant Markdown tout en affichant le texte format\u00e9 dans un widget modifiable. Pour d\u2019autres widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s HTML et Bloc-notes . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous ajouterez votre texte qui sera format\u00e9 en utilisant Markdown. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient le texte format\u00e9 avec Markdown et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Markdown\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s complet au document . Comme le widget est \u00e9galement un \u00e9diteur, il a besoin de la permission d\u2019\u00e9crire dans le document. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne de texte qui contient le formatage Markdown. Tout formatage Markdown dans la colonne de texte sp\u00e9cifi\u00e9e s\u2019appliquera et sera visible et modifiable dans le widget personnalis\u00e9. Pour \u00e9diter le texte directement dans le widget, cliquez sur l\u2019ic\u00f4ne d\u2019\u00e9dition. Le texte reviendra \u00e0 afficher la syntaxe Markdown qui peut \u00eatre modifi\u00e9e directement dans le widget. Lorsqu\u2019il est en mode \u00e9dition, l\u2019ic\u00f4ne d\u2019\u00e9dition sera remplac\u00e9e par l\u2019ic\u00f4ne de sauvegarde. Assurez-vous de cliquer sur l\u2019ic\u00f4ne de sauvegarde pour enregistrer les modifications et revenir \u00e0 l\u2019affichage du texte format\u00e9. Pour obtenir de l\u2019aide sur le formatage Markdown, consultez le Guide Markdown pour la syntaxe de base. Ce guide est \u00e9galement accessible dans le widget Markdown en cliquant sur l\u2019ic\u00f4ne d\u2019information en haut du widget. Le guide s\u2019ouvrira dans un nouvel onglet de votre navigateur pour une r\u00e9f\u00e9rence facile. Vous pouvez trouver un exemple de l\u2019\u00e9diteur Markdown dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le et consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s . Bloc-notes # Le widget Bloc-notes personnalis\u00e9 vous permet de formater du texte en utilisant un \u00e9diteur de texte enrichi. Pour d\u2019autres widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s HTML et Markdown . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que les d\u00e9tails de notre texte format\u00e9 seront stock\u00e9s. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient la colonne que nous venons d\u2019ajouter et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Bloc-notes\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s complet au document . Comme le widget est \u00e9galement un \u00e9diteur, il a besoin de la permission d\u2019\u00e9crire dans le document. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne cr\u00e9\u00e9e pour stocker notre texte format\u00e9. Si la colonne de texte que vous avez choisie sous Contenu a du texte existant, ce texte appara\u00eetra dans le widget Bloc-notes, pr\u00eat \u00e0 \u00eatre format\u00e9. Utilisez n\u2019importe quelle option montr\u00e9e ici pour formater votre texte. Comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessous, le code pour le texte format\u00e9 n\u2019est pas utile \u00e0 voir dans votre table. Vous \u00e9diterez le texte directement dans le widget Bloc-notes afin que vous puissiez cacher cette colonne de votre table de donn\u00e9es. Consultez notre Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis ou notre \ud83d\uded2 Liste de courses + Planificateur de repas pour deux excellents exemples de Bloc-notes ! Vous pouvez \u00e9galement consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s . \u00c9tiquettes d\u2019impression # Le widget personnalis\u00e9 \u00c9tiquettes d\u2019impression vous permet de personnaliser et d\u2019imprimer des \u00e9tiquettes directement \u00e0 partir de Grist. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. Cette colonne contiendra le texte pour l\u2019\u00e9tiquette. Optionnellement, vous pouvez ajouter une deuxi\u00e8me colonne pour sp\u00e9cifier un nombre d\u2019\u00e9tiquettes, vous permettant d\u2019imprimer plus d\u2019une m\u00eame \u00e9tiquette sans avoir \u00e0 cr\u00e9er des enregistrements en double. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les d\u00e9tails de l\u2019\u00e9tiquette. Pour configurer, s\u00e9lectionnez \u2018Impression d\u2019\u00e9tiquettes\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018\u00c9tiquette\u2019, s\u00e9lectionnez la colonne qui contient le texte \u00e0 inclure sur les \u00e9tiquettes. Si vous souhaitez imprimer plus d\u2019une \u00e9tiquette, s\u00e9lectionnez la colonne qui contient le nombre d\u2019\u00e9tiquettes pour chaque enregistrement que vous souhaitez imprimer. Vous pouvez choisir parmi des tailles de feuille standard dans le menu d\u00e9roulant en haut \u00e0 gauche du widget. Assurez-vous d\u2019enregistrer les modifications en cliquant sur la coche verte en haut \u00e0 droite du widget. Pour laisser des \u00e9tiquettes vides au d\u00e9but de la feuille, cliquez sur l\u2019ic\u00f4ne de param\u00e8tres puis sp\u00e9cifiez combien d\u2019\u00e9tiquettes doivent rester vides. Cela est particuli\u00e8rement utile si une partie de votre feuille d\u2019\u00e9tiquettes a d\u00e9j\u00e0 \u00e9t\u00e9 utilis\u00e9e. Vous pouvez sauter les \u00e9tiquettes utilis\u00e9es et commencer \u00e0 imprimer sur votre premi\u00e8re \u00e9tiquette inutilis\u00e9e. Consultez notre mod\u00e8le Impression d\u2019\u00e9tiquettes d\u2019exp\u00e9dition et notre mod\u00e8le Chasse au tr\u00e9sor pour deux excellents exemples ! Vous pouvez \u00e9galement consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Custom"},{"location":"widget-custom/#widget-de-page-personnalise","text":"Le widget Personnalis\u00e9 permet \u00e0 un utilisateur d\u2019ins\u00e9rer presque tout dans son document. Pour cr\u00e9er un widget personnalis\u00e9, il faut actuellement des connaissances en d\u00e9veloppement web et un acc\u00e8s \u00e0 un serveur web public (par exemple, GitHub Pages). Une bonne utilisation des widgets personnalis\u00e9s est de visualiser des enregistrements ou des tables de nouvelles mani\u00e8res. Utiliser Grist comme mod\u00e8le de donn\u00e9es et HTML/CSS/JS modernes comme vue est tr\u00e8s puissant.","title":"Widget de page : Personnalis\u00e9"},{"location":"widget-custom/#exemple-minimal","text":"Pour d\u00e9montrer \u00e0 un d\u00e9veloppeur web comment fonctionnent les widgets personnalis\u00e9s, il existe un exemple minimal fonctionnel \u00e0 : https://public.getgrist.com/911KcgKA95oQ/Minimal-Custom-Widget/m/fork L\u2019exemple montre une table avec des donn\u00e9es al\u00e9atoires (noms d\u2019animaux de compagnie) et deux widgets personnalis\u00e9s, l\u2019un montrant la ligne s\u00e9lectionn\u00e9e dans la table au format JSON, et l\u2019autre montrant toutes les lignes de la table au format JSON. Si vous modifiez des donn\u00e9es dans la table ou d\u00e9placez le curseur, les widgets personnalis\u00e9s se mettent \u00e0 jour en cons\u00e9quence. Le code source des widgets se trouve \u00e0 : https://github.com/gristlabs/grist-widget/tree/master/inspect Il est r\u00e9duit \u00e0 l\u2019essentiel. Voici le code source complet du widget onRecord qui montre une ligne de donn\u00e9es : onRecord
    En attente de donn\u00e9es...
    Les parties \u201cGrist\u201d de ceci sont : Inclusion de https://docs.getgrist.com/grist-plugin-api.js pour obtenir l\u2019API Grist. Appel de grist.ready pour informer Grist que le widget est pr\u00eat \u00e0 fonctionner. Appel de grist.onRecord pour s\u2019abonner \u00e0 la ligne actuelle de la table. Apr\u00e8s cela, tout le reste est du HTML/CSS/JS classique. Une fois que vous avez des donn\u00e9es qui arrivent, vous pouvez les rendre de la mani\u00e8re que vous souhaitez, en utilisant React, Vue.js ou votre framework pr\u00e9f\u00e9r\u00e9. Par exemple, vous pourriez rendre des enregistrements sous forme de facture imprimable , ou utiliser un format de graphique obscur que Grist ne prend pas actuellement en charge.","title":"Exemple minimal"},{"location":"widget-custom/#ajouter-un-widget-personnalise","text":"Pour ajouter un widget personnalis\u00e9 qui lit \u00e0 partir d\u2019une table, cliquez sur Ajouter nouveau , puis Ajouter un widget \u00e0 la page . Ensuite : Pour S\u00e9lectionner un widget , choisissez Personnalis\u00e9 pour obtenir un widget personnalis\u00e9. Pour S\u00e9lectionner des donn\u00e9es , choisissez la table \u00e0 partir de laquelle vous souhaitez que le widget lise les donn\u00e9es. Optionnellement, choisissez S\u00e9lectionner par pour contr\u00f4ler davantage les donn\u00e9es s\u00e9lectionn\u00e9es (lisez Lier des widgets de page pour les possibilit\u00e9s). Le widget personnalis\u00e9 est initialement vide. Pour le configurer, cliquez sur le bouton \u00e0 trois points en haut \u00e0 droite du widget personnalis\u00e9 et s\u00e9lectionnez \u201cOptions du widget\u201d. Dans la section des param\u00e8tres PERSONNALIS\u00c9 o\u00f9 il est indiqu\u00e9 Entrer l'URL personnalis\u00e9e , mettez le lien vers votre widget personnalis\u00e9. Voici un widget de test pour simplement afficher les donn\u00e9es de la table au format JSON : https://gristlabs.github.io/grist-widget/inspect/onRecords.html Et voici un pour montrer uniquement la ligne s\u00e9lectionn\u00e9e (assurez-vous que \u201cS\u00e9lectionner par\u201d est d\u00e9fini pour le widget personnalis\u00e9) : https://gristlabs.github.io/grist-widget/inspect/onRecord.html","title":"Ajouter un widget personnalis\u00e9"},{"location":"widget-custom/#niveau-dacces","text":"Lorsque vous mettez un lien vers une page web personnalis\u00e9e, elle sera imm\u00e9diatement rendue \u00e0 l\u2019int\u00e9rieur de la section. Vous avez maintenant la possibilit\u00e9 d\u2019accorder \u00e0 cette page web l\u2019acc\u00e8s aux donn\u00e9es de votre document. Les niveaux d\u2019acc\u00e8s suivants sont disponibles : Pas d\u2019acc\u00e8s au document : la page web est affich\u00e9e dans le widget, mais elle n\u2019a pas acc\u00e8s au document Grist contenant le widget. Lire la table s\u00e9lectionn\u00e9e : la page web est affich\u00e9e dans le widget et re\u00e7oit un acc\u00e8s en lecture \u00e0 la table que le widget est configur\u00e9 pour s\u00e9lectionner des donn\u00e9es. Acc\u00e8s complet au document : la page web est affich\u00e9e dans le widget et a un acc\u00e8s complet pour lire et modifier le document Grist contenant le widget. La page web doit \u00eatre poss\u00e9d\u00e9e et contr\u00f4l\u00e9e par vous ou par quelqu\u2019un en qui vous avez confiance. Avec les permissions Lire la table s\u00e9lectionn\u00e9e , un widget pourrait envoyer les donn\u00e9es auxquelles il acc\u00e8de \u00e0 un tiers. Avec les permissions Acc\u00e8s complet au document , un widget pourrait envoyer toutes les donn\u00e9es du document \u00e0 un tiers et modifier votre document de n\u2019importe quelle mani\u00e8re. Si vous \u00e9crivez votre propre widget personnalis\u00e9, vous pouvez sp\u00e9cifier le niveau d\u2019acc\u00e8s dont il a besoin dans le message pr\u00eat initial. Les valeurs possibles sont : none , read table et full . Cela indique \u00e0 Grist de demander le niveau d\u2019acc\u00e8s souhait\u00e9 \u00e0 l\u2019utilisateur. Votre widget sera recharg\u00e9 avec le niveau d\u2019acc\u00e8s appropri\u00e9 si l\u2019utilisateur approuve la demande. Si vous souhaitez \u00eatre inform\u00e9 du niveau d\u2019acc\u00e8s, vous pouvez vous abonner \u00e0 l\u2019\u00e9v\u00e9nement onOptions qui est envoy\u00e9 au widget apr\u00e8s qu\u2019il ait inform\u00e9 Grist qu\u2019il est pr\u00eat : grist.onOptions(function(options, interaction) { console.log(interaction.access_level); }); Pour l\u2019instant, il suffit de sauter le param\u00e8tre options (il sera d\u00e9crit dans la section Options de widget ). Le niveau d\u2019acc\u00e8s actuel fait partie du deuxi\u00e8me param\u00e8tre, qui d\u00e9crit comment Grist interagira avec votre widget.","title":"Niveau d’acc\u00e8s"},{"location":"widget-custom/#exemple-de-facture","text":"L\u2019exemple minimal ci-dessus a montr\u00e9 des enregistrements au format JSON simple, mais le widget peut devenir aussi sophistiqu\u00e9 que vous le souhaitez. Voici un exemple montrant un enregistrement sous forme de facture imprimable : Vous pouvez lire les d\u00e9tails sur la fa\u00e7on d\u2019utiliser ce widget dans notre exemple de pr\u00e9paration de facture . Le widget de facture est h\u00e9berg\u00e9 \u00e0 : https://gristlabs.github.io/grist-widget/invoices/ Et le code source HTML/CSS/JS peut \u00eatre consult\u00e9 \u00e0 : https://github.com/gristlabs/grist-widget/tree/master/invoices Il utilise Vue.js et grist.onRecord .","title":"Exemple de facture"},{"location":"widget-custom/#creation-dun-widget-personnalise","text":"Comme vous l\u2019avez vu, \u00e9crire un widget simple qui utilise des donn\u00e9es d\u2019une table est tr\u00e8s facile. Tout d\u2019abord, vous devez informer Grist que vous \u00eates pr\u00eat et ensuite vous abonner \u00e0 l\u2019un des \u00e9v\u00e9nements disponibles : onRecord , onRecords ou onOptions . grist.ready(); grist.onRecord(function (record) { // Le curseur a \u00e9t\u00e9 d\u00e9plac\u00e9. }); grist.onRecords(function (record) { // Les donn\u00e9es dans la table ont chang\u00e9. }); grist.onOptions(function (options, interaction) { // La configuration a chang\u00e9. }); Disons que vous souhaitez cr\u00e9er un widget personnalis\u00e9 qui affichera une image \u00e0 partir d\u2019une URL et \u00e9ventuellement une ligne de texte en dessous comme titre de l\u2019image. Vous devrez lire deux valeurs de deux colonnes : Lien et Titre . Vous pourriez acc\u00e9der \u00e0 ces colonnes directement en utilisant les noms de colonnes litt\u00e9raux dans votre script. Voici un exemple complet de code source de widget qui fera le travail :
    Lorsque vous commencez, c\u2019est une bonne approche, mais elle pr\u00e9sente deux inconv\u00e9nients majeurs. Chaque fois que vous renommez une colonne, vous devrez \u00e9galement modifier le code source de votre widget. De plus, utiliser ce widget sur une table diff\u00e9rente ou le partager avec vos amis peut \u00eatre difficile car les noms de colonnes pourraient \u00eatre diff\u00e9rents. Pour aider avec cela, Grist propose l\u2019API de mappage de colonnes.","title":"Cr\u00e9ation d’un widget personnalis\u00e9"},{"location":"widget-custom/#mappage-de-colonnes","text":"Au lieu d\u2019utiliser directement les noms de colonnes, vous pouvez demander \u00e0 l\u2019utilisateur de choisir quelle colonne utiliser comme Lien et Titre . La liste des colonnes attendues peut \u00eatre envoy\u00e9e \u00e0 Grist dans l\u2019appel pr\u00eat : grist.ready({columns: ['Lien', 'Titre']}); En utilisant cette information, dans le panneau de cr\u00e9ation, Grist masquera la section r\u00e9guli\u00e8re \u201cColonnes visibles\u201d et affichera des s\u00e9lecteurs de colonnes sp\u00e9cialis\u00e9s. Votre widget recevra cette configuration de mappage dans le param\u00e8tre onRecord ou onRecords dans le deuxi\u00e8me param\u00e8tre. Vous pouvez utiliser cette configuration pour effectuer les mappages vous-m\u00eame ou utiliser la fonction d\u2019assistance mapColumnNames pour le faire pour vous.
    Maintenant, si vous renommez l\u2019une des colonnes, le widget fonctionnera toujours. Vous pouvez \u00e9galement utiliser ce widget dans n\u2019importe quelle autre table ou le partager avec un ami, car il ne d\u00e9pend pas de votre structure de table et peut \u00eatre facilement configur\u00e9. Dans la configuration utilis\u00e9e ci-dessus, nous avons dit \u00e0 Grist que toutes les colonnes sont requises, et l\u2019utilisateur peut choisir n\u2019importe quelle colonne m\u00eame si la colonne ne contient pas de valeur texte. Pour \u00eatre plus pr\u00e9cis, nous pouvons inclure plus d\u2019options dans la demande. Par exemple : grist.ready({columns: [ { name: \"Lien\", // Quel champ nous allons lire. title: \"Lien de l'image\", // Nom de champ convivial. optional: false, // Est-ce un champ optionnel. type: \"Texte\", // Quel type de colonne nous attendons. description: \"Un texte\" // Description d'un champ. allowMultiple: false // Permet l'attribution de plusieurs colonnes. } ]}); Le param\u00e8tre optional est important pour le bon fonctionnement de l\u2019assistant mapColumnNames . Cet assistant ne renverra un enregistrement mapp\u00e9 que lorsque toutes les colonnes requises (non optionnelles) seront choisies. Par d\u00e9faut, Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quel type de colonne. Pour autoriser uniquement une colonne d\u2019un type sp\u00e9cifique, vous devez d\u00e9finir une propri\u00e9t\u00e9 type . Voici tous les types valides : Int ( Colonne enti\u00e8re ), Numeric ( Colonne num\u00e9rique ), Texte , Date , DateTime , Bool ( Colonne de bascule ), Choice , ChoiceList , Ref ( Colonne de r\u00e9f\u00e9rence ), RefList ( Liste de r\u00e9f\u00e9rences ), Attachments . La valeur par d\u00e9faut de type est Any , donc Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quel type de colonne. Vous pouvez \u00e9galement sp\u00e9cifier une liste de types, par exemple Date,DateTime . Dans ce cas, Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quelle colonne qui correspond \u00e0 l\u2019un des types de la liste. Utilisez les champs title et description pour aider vos utilisateurs \u00e0 comprendre quel est le but de la colonne. La description sera affich\u00e9e juste en dessous du nom de la colonne, et le title sera utilis\u00e9 comme \u00e9tiquette de colonne. Les deux sont optionnels et vous pouvez y mettre n\u2019importe quel texte que vous souhaitez. Si vous devez mapper plusieurs colonnes (par exemple dans un widget de graphique personnalis\u00e9), vous pouvez utiliser l\u2019option allowMultiple . Cela permettra \u00e0 vos utilisateurs de choisir un ensemble de colonnes qui seront renvoy\u00e9es sous forme de liste de noms de colonnes de table mapp\u00e9s. L\u2019assistant mapColumnNames renverra alors un tableau de valeurs de colonnes mapp\u00e9es dans un seul champ. Supposons que l\u2019utilisateur supprime une colonne ou change son type de sorte qu\u2019elle ne corresponde plus au type demand\u00e9 par le widget. Dans ce cas, Grist supprimera automatiquement cette colonne du mappage.","title":"Mappage de colonnes"},{"location":"widget-custom/#options-de-widget","text":"Si votre widget a besoin de stocker certaines options, Grist propose une API de stockage cl\u00e9-valeur simple que vous pouvez utiliser. Voici quelques extraits de code JavaScript qui montrent comment interagir avec cette API : // Stocker une simple valeur de texte. await grist.setOption('color', '#FF0000'); // Stocker des objets complexes sous forme de JSON. await grist.setOption('settings', {lines: 10, skipFirst: true}); // Lire l'option pr\u00e9c\u00e9demment enregistr\u00e9e const color = await grist.getOption('color'); // Effacer toutes les options. await grist.clearOptions(); // Obtenir et remplacer toutes les options. await grist.getOptions(); await grist.setOptions({...}); Vous pouvez exp\u00e9rimenter cela vous-m\u00eame. Voici un widget de test qui d\u00e9montre comment utiliser cette API : https://gristlabs.github.io/grist-widget/inspect/onOptions.html Lorsque votre widget enregistre ou modifie certaines options, l\u2019ic\u00f4ne en haut de la section devient verte. Vous pouvez soit appliquer ces options au widget, soit annuler cette modification. Cela permet aux visualisateurs (utilisateurs avec un acc\u00e8s en lecture seule) ou aux collaborateurs de configurer votre widget sans \u00e9craser les param\u00e8tres d\u2019origine. Ce comportement devrait vous sembler familier, car cela fonctionne comme le tri et le filtrage sur les vues de table ou de carte. En enregistrant les options actuelles, vous les appliquerez au widget et les rendrez disponibles pour les autres. En utilisant ce menu, vous pouvez \u00e9galement effacer toutes les options pour revenir \u00e0 l\u2019\u00e9tat initial du widget. Pour ce faire, appuyez sur la petite ic\u00f4ne de poubelle, puis sur Enregistrer . Grist d\u00e9clenchera \u00e9galement un \u00e9v\u00e9nement chaque fois que les options sont modifi\u00e9es (ou effac\u00e9es). Voici comment vous pouvez vous abonner \u00e0 cet \u00e9v\u00e9nement. grist.onOptions(function(options, interaction) { if (options) { console.log('Couleur actuelle', options.color); } else { // Aucune option de widget n'a \u00e9t\u00e9 enregistr\u00e9e, retour aux options par d\u00e9faut. } }); Si vous construisez votre propre widget, vous ne devez g\u00e9n\u00e9ralement pas lire les options directement (en utilisant grist.widgetApi.getOption() ). Un meilleur mod\u00e8le consiste \u00e0 les appliquer toutes lorsqu\u2019elles sont modifi\u00e9es. L\u2019utilisation du gestionnaire onOptions rendra votre widget plus facile \u00e0 modifier et \u00e0 comprendre ult\u00e9rieurement. Il y a un sc\u00e9nario suppl\u00e9mentaire \u00e0 couvrir. Supposons que votre widget ait une sorte d\u2019\u00e9cran de configuration personnalis\u00e9. Dans ce cas, vous aurez probablement besoin d\u2019un bouton ou d\u2019un autre \u00e9l\u00e9ment d\u2019interface utilisateur que l\u2019utilisateur peut utiliser pour l\u2019afficher. Cet \u00e9l\u00e9ment d\u2019interface utilisateur suppl\u00e9mentaire sera probablement rarement utilis\u00e9 par vous ou vos collaborateurs, donc il n\u2019est pas logique de l\u2019afficher tout le temps. Pour aider avec cela, Grist propose une option d\u2019interaction suppl\u00e9mentaire que vous pouvez envoyer dans le message pr\u00eat : grist.ready({ onEditOptions: function() { // Votre logique personnalis\u00e9e pour ouvrir l'\u00e9cran de configuration personnalis\u00e9. } }); Cela indiquera \u00e0 Grist d\u2019afficher un bouton suppl\u00e9mentaire Ouvrir la configuration dans le panneau de cr\u00e9ation et le menu de section. Lorsqu\u2019il est cliqu\u00e9, cela d\u00e9clenchera votre gestionnaire, que vous pouvez utiliser pour afficher votre propre \u00e9cran de configuration personnalis\u00e9.","title":"Options de widget"},{"location":"widget-custom/#lien-de-widget-personnalise","text":"Les widgets personnalis\u00e9s peuvent \u00e9galement \u00eatre utilis\u00e9s comme source de liaison (voir Lier des widgets ). Tout ce que vous avez \u00e0 faire est d\u2019informer Grist que votre widget prend en charge le lien en passant une option suppl\u00e9mentaire \u00e0 l\u2019appel ready (voir API de widget ) : grist.ready({ allowSelectBy: true }); Cela activera l\u2019option S\u00e9lectionner par dans le panneau de configuration du widget. Vous pouvez maintenant utiliser votre widget pour contr\u00f4ler la position du curseur dans les widgets li\u00e9s. Pour ce faire, vous devez appeler la fonction setCursorPos : // Informer Grist que le curseur doit \u00eatre d\u00e9plac\u00e9 vers la ligne avec l'ID 20. grist.setCursorPos({rowId: 20}); // ou informer que votre widget cr\u00e9e une nouvelle ligne. grist.setCursorPos({rowId: 'new'});","title":"Lien de widget personnalis\u00e9"},{"location":"widget-custom/#widgets-personnalises-prefabriques","text":"Tous les widgets personnalis\u00e9s pr\u00e9fabriqu\u00e9s sont disponibles dans le panneau de configuration du widget personnalis\u00e9 sur le c\u00f4t\u00e9 droit de l\u2019\u00e9cran sous le menu d\u00e9roulant Personnalis\u00e9.","title":"Widgets personnalis\u00e9s pr\u00e9fabriqu\u00e9s"},{"location":"widget-custom/#graphiques-avances","text":"Le widget personnalis\u00e9 Graphiques avanc\u00e9s vous donne plus de puissance et de flexibilit\u00e9 que les graphiques int\u00e9gr\u00e9s de Grist, offrant une grande vari\u00e9t\u00e9 de types de graphiques ainsi qu\u2019un contr\u00f4le accru sur le style et la mise en page. C\u2019est une version de Chart Studio de Plotly, consultez leurs tutoriels pour une aide plus d\u00e9taill\u00e9e. Vous devrez d\u00e9finir le niveau d\u2019acc\u00e8s sur \u201cAcc\u00e8s complet au document\u201d. Ne vous inqui\u00e9tez pas, le widget ne lit que les donn\u00e9es de la table s\u00e9lectionn\u00e9e, ne les envoie \u00e0 aucun serveur et ne modifie ou n\u2019apporte d\u2019autres changements \u00e0 votre document. Voici ce que vous devriez voir : Cliquez sur le grand bouton bleu \u201c+ Trace\u201d pour commencer. Cela ajoutera un panneau comme suit : Cliquez sur \u201cDispersion\u201d pour choisir un type de graphique diff\u00e9rent tel que Bar ou Ligne. Ensuite, cliquez sur les menus d\u00e9roulants \u201cChoisir des donn\u00e9es\u201d pour s\u00e9lectionner les colonnes que vous souhaitez tracer. Vous pouvez ajouter plusieurs traces pour superposer diff\u00e9rents graphiques. Essayez diff\u00e9rents panneaux dans la barre lat\u00e9rale pour personnaliser davantage le graphique. Par exemple, allez dans Style > Axes > Titres pour ajouter une \u00e9tiquette \u00e0 chaque axe. Consultez les tutoriels de studio de graphique pour en savoir plus. Au fur et \u00e0 mesure que vous personnalisez le widget, n\u2019oubliez pas de cliquer r\u00e9guli\u00e8rement sur le bouton \u2018Enregistrer\u2019 au-dessus du widget pour conserver votre configuration.","title":"Graphiques avanc\u00e9s"},{"location":"widget-custom/#copier-dans-le-presse-papiers","text":"Copier dans le presse-papiers copie une valeur de la colonne sp\u00e9cifi\u00e9e de l\u2019enregistrement s\u00e9lectionn\u00e9. Lors de la configuration du widget, vous devrez s\u00e9lectionner la colonne \u00e0 partir de laquelle vous souhaitez copier des donn\u00e9es. Notez que vous pouvez \u00e9galement copier des donn\u00e9es d\u2019une cellule s\u00e9lectionn\u00e9e en utilisant le raccourci clavier Ctrl + C sur Windows ou \u2318 + C sur Mac. Pour coller, utilisez Ctrl + V ou \u2318 + V . Vous pouvez trouver un exemple du bouton copier dans le presse-papiers dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le. Vous pouvez \u00e9galement regarder une vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Copier dans le presse-papiers"},{"location":"widget-custom/#integrateur-dropbox","text":"Voir et acc\u00e9der aux fichiers enregistr\u00e9s sur Dropbox. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table pour stocker vos liens Dropbox. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les liens Dropbox et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Int\u00e9grateur Dropbox\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018Lien Dropbox\u2019, s\u00e9lectionnez la colonne qui contient vos liens Dropbox. Vous pouvez cr\u00e9er des liens vers des dossiers ou des fichiers sp\u00e9cifiques dans Dropbox. Cliquez sur \u2018Partager\u2019, puis d\u00e9finissez les permissions pour le lien. Vous pouvez choisir de permettre \u00e0 quiconque ayant le lien de visualiser ou d\u2019\u00e9diter. Cr\u00e9ez ensuite, puis copiez le lien. Collez ce lien dans votre colonne Lien Dropbox dans Grist. Notez que les utilisateurs ne peuvent pas modifier directement dans le widget personnalis\u00e9 m\u00eame si des permissions d\u2019\u00e9dition sont accord\u00e9es. Pour \u00e9diter, s\u00e9lectionnez l\u2019objet dans l\u2019int\u00e9grateur Dropbox et il s\u2019ouvrira dans un nouvel onglet o\u00f9 il pourra \u00eatre modifi\u00e9 directement dans Dropbox. Vous pouvez consulter un exemple de l\u2019int\u00e9grateur Dropbox dans notre Pr\u00e9paration \u00e0 l\u2019ouragan mod\u00e8le.","title":"Int\u00e9grateur Dropbox"},{"location":"widget-custom/#lecteur-video-grist","text":"Int\u00e9grez des vid\u00e9os provenant de sources en ligne telles que YouTube, Vimeo, Facebook Video, Google Drive et plus encore. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table pour stocker vos URL vid\u00e9o. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les URL vid\u00e9o et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Lecteur vid\u00e9o Grist\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018URL\u2019, s\u00e9lectionnez la colonne qui contient vos URL vid\u00e9o. Pour la plupart des vid\u00e9os en ligne, y compris les vid\u00e9os YouTube et les vid\u00e9os stock\u00e9es sur Google Drive, vous pouvez simplement cliquer sur l\u2019option \u2018Partager\u2019 et copier l\u2019URL. Pour certaines autres vid\u00e9os, vous pourriez voir cette erreur : Si cela se produit, vous devrez prendre l\u2019URL \u00e0 partir du code d\u2019int\u00e9gration. Apr\u00e8s avoir cliqu\u00e9 sur l\u2019option de partage de la vid\u00e9o, cliquez sur l\u2019option \u2018Int\u00e9grer\u2019. Ensuite, cliquez pour copier le code. Le code qu\u2019il vous donne ressemblera \u00e0 ceci : Copiez l\u2019URL qui se trouve entre les guillemets apr\u00e8s src . La portion mise en surbrillance dans la capture d\u2019\u00e9cran ci-dessous est ce que vous copieriez pour cette vid\u00e9o Facebook particuli\u00e8re. Collez cette URL dans votre colonne URL dans Grist et la vid\u00e9o appara\u00eetra maintenant dans le widget personnalis\u00e9 Lecteur vid\u00e9o Grist.","title":"Lecteur vid\u00e9o Grist"},{"location":"widget-custom/#visionneuse-html","text":"La visionneuse HTML affiche du HTML \u00e9crit dans une cellule. Pour des widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s Markdown et Bloc-notes . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous \u00e9crirez du HTML. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient le HTML et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Visionneuse HTML\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018HTML\u2019, s\u00e9lectionnez la colonne de texte qui contient votre HTML. Votre HTML sera visible dans le widget personnalis\u00e9. Pour obtenir de l\u2019aide sur le formatage HTML, consultez ce guide de W3 Schools : Formatage de texte HTML Vous pouvez trouver un exemple de la visionneuse HTML dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le. Vous pouvez \u00e9galement regarder une vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Visionneuse HTML"},{"location":"widget-custom/#visionneuse-dimages","text":"Voir des images \u00e0 partir d\u2019URL. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous ajouterez l\u2019URL de votre image. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient l\u2019URL de l\u2019image et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Visionneuse d\u2019images\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018URL de l\u2019image\u2019, s\u00e9lectionnez la colonne qui contient les URL de vos images. Pour copier l\u2019URL d\u2019une image, faites un clic droit sur la photo puis \u2018Copier l\u2019adresse de l\u2019image\u2019. Cela copie l\u2019URL dans votre presse-papiers. Collez cette URL dans votre colonne sp\u00e9cifi\u00e9e dans Grist. De plus, vous pouvez ajouter plusieurs images pour un enregistrement sp\u00e9cifique en ajoutant plusieurs URL d\u2019images, s\u00e9par\u00e9es par un espace ou une nouvelle ligne, dans une seule cellule. Veuillez noter qu\u2019une virgule ne fonctionnera pas pour s\u00e9parer les liens. Lorsque plusieurs URL d\u2019images sont pr\u00e9sentes, le widget personnalis\u00e9 visionneuse d\u2019images fonctionnera comme un carrousel. Cliquez sur les fl\u00e8ches pour voir d\u2019autres images. Pour un exemple du widget visionneuse d\u2019images, consultez notre Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis , et ajoutez une critique de parc pendant que vous y \u00eates ! Vous pouvez \u00e9galement consulter notre mod\u00e8le G\u00e9n\u00e9rateur de m\u00e8mes pour un autre excellent exemple. Pour une vid\u00e9o explicative, assurez-vous de regarder notre Webinaire sur les widgets personnalis\u00e9s !","title":"Visionneuse d’images"},{"location":"widget-custom/#notebook-jupyterlite","text":"Ce widget vous permet d\u2019ex\u00e9cuter du code Python personnalis\u00e9 dans JupyterLite , une version de JupyterLab fonctionnant enti\u00e8rement dans le navigateur. Vous pouvez utiliser la pleine API de plugin de widget personnalis\u00e9e et acc\u00e9der ou modifier n\u2019importe quelles donn\u00e9es dans le document (sous r\u00e9serve des R\u00e8gles d\u2019acc\u00e8s), d\u00e9bloquant presque des possibilit\u00e9s illimit\u00e9es pour les utilisateurs avanc\u00e9s. Vous serez pr\u00e9sent\u00e9 avec un notebook o\u00f9 vous pouvez entrer et ex\u00e9cuter du code Python, par exemple : Apr\u00e8s avoir tap\u00e9 du code dans une cellule, cliquez sur le bouton de lecture ou appuyez sur Shift+Entr\u00e9e pour ex\u00e9cuter cette cellule. Contrairement aux formules, le code n\u2019est pas enregistr\u00e9 automatiquement. Vous devez appuyer sur le bouton \u2018Enregistrer\u2019 habituel au-dessus du widget (en dehors du notebook) pour conserver le code dans votre document Grist. D\u2019autre part, les modifications des param\u00e8tres dans le notebook (par exemple, les raccourcis clavier) sont enregistr\u00e9es dans le stockage local de votre navigateur, donc elles ne sont pas partag\u00e9es avec d\u2019autres utilisateurs du document. Un objet sp\u00e9cial appel\u00e9 grist est automatiquement disponible pour \u00eatre utilis\u00e9 dans le code Python, qui refl\u00e8te de nombreuses m\u00e9thodes courantes de l\u2019API de plugin JS . Notez que beaucoup de ces m\u00e9thodes sont asynchrones, donc vous devriez utiliser await avant de les appeler. async fetch_selected_table() : renvoie les donn\u00e9es de la table soutenant le widget notebook. async fetch_selected_record(row_id=None) : renvoie un enregistrement de la table soutenant le widget notebook. Si row_id est sp\u00e9cifi\u00e9, renvoie l\u2019enregistrement \u00e0 cette ligne. Sinon, renvoie l\u2019enregistrement \u00e0 la position actuelle du curseur dans un widget li\u00e9 au widget notebook. async fetch_table(table_id) : renvoie les donn\u00e9es de la table sp\u00e9cifi\u00e9e. Notez que cela diff\u00e8re de fetch_selected_table (m\u00eame pour la m\u00eame table) de plusieurs mani\u00e8res : Le widget doit avoir un acc\u00e8s complet au document. Toutes les colonnes sont incluses, tandis que fetch_selected_table exclut les colonnes qui sont cach\u00e9es dans la configuration du widget. Toutes les lignes sont incluses, tandis que fetch_selected_table prend en compte les filtres du widget et \u2018S\u00c9LECTIONNER PAR\u2019. Les donn\u00e9es ne sont pas tri\u00e9es selon la configuration du widget. Les donn\u00e9es sont r\u00e9cup\u00e9r\u00e9es depuis le serveur, donc la m\u00e9thode peut \u00eatre plus lente. Les valeurs pour les colonnes de r\u00e9f\u00e9rence sont des ID de ligne de la table r\u00e9f\u00e9renc\u00e9e, tandis que fetch_selected_table renvoie les valeurs affich\u00e9es en fonction de la configuration \u2018AFFICHER LA COLONNE\u2019. on_record(callback) : enregistre une fonction de rappel \u00e0 ex\u00e9cuter lorsque le curseur se d\u00e9place dans un widget li\u00e9 au widget notebook, c\u2019est-\u00e0-dire le widget choisi dans le menu d\u00e9roulant \u201cS\u00c9LECTIONNER PAR\u201d dans la section Donn\u00e9es de la configuration du widget. La fonction de rappel recevra l\u2019enregistrement \u00e0 la position actuelle du curseur. Vous pouvez \u00e9galement l\u2019utiliser comme d\u00e9corateur, c\u2019est-\u00e0-dire @grist.on_record . on_records(callback) : similaire \u00e0 on_record , mais s\u2019ex\u00e9cute lorsque les donn\u00e9es source du widget changent. La fonction de rappel recevra les m\u00eames donn\u00e9es que celles renvoy\u00e9es par fetch_selected_table . get_table(table_id) : renvoie une classe TableOperations similaire \u00e0 l\u2019interface de l\u2019API de plugin JS habituelle pour effectuer des op\u00e9rations de type CRUD sur une table. Voir la documentation de l\u2019API de plugin pour les d\u00e9tails sur les param\u00e8tres. La classe a les m\u00e9thodes suivantes : async create(records, parse_strings=True) async update(records, parse_strings=True) async upsert(records, parse_strings=True, add=True, update=True, on_many=\"first\", allow_empty_require=False) async destroy(row_ids) Vous pouvez \u00e9galement utiliser grist.raw pour un acc\u00e8s direct \u00e0 l\u2019API de plugin, par exemple await grist.raw.docApi.fetchTable(table_id) . Cela peut renvoyer des valeurs de cellule brutes que vous pouvez d\u00e9coder avec grist.decode_cell_value(value) . Vous pouvez utiliser de nombreuses (mais pas toutes) biblioth\u00e8ques tierces dans votre notebook, comme pandas . Beaucoup seront install\u00e9es automatiquement lorsqu\u2019elles seront import\u00e9es. D\u2019autres n\u00e9cessiteront d\u2019ex\u00e9cuter %pip install dans une cellule, par exemple %pip install pandas . Notez que c\u2019est %pip et non !pip comme dans un notebook Jupyter classique.","title":"Notebook JupyterLite"},{"location":"widget-custom/#carte","text":"Le widget de carte personnalis\u00e9 vous permet d\u2019afficher des emplacements en utilisant des coordonn\u00e9es de latitude et de longitude. Si vos donn\u00e9es sont une adresse, plut\u00f4t qu\u2019au format lat-long, Grist peut convertir l\u2019adresse en coordonn\u00e9es lat-long. Si vous utilisez des coordonn\u00e9es lat-long existantes, vous aurez besoin de trois colonnes : Nom, Longitude et Latitude. Si vous utilisez une adresse, vous aurez besoin de six colonnes : Nom, Adresse, G\u00e9ocodage, Longitude, Latitude et Adresse g\u00e9ocod\u00e9e. G\u00e9ocodage est une colonne de type bascule qui doit \u00eatre d\u00e9finie sur vrai pour tout enregistrement que vous souhaitez convertir d\u2019adresse en coordonn\u00e9es lat-long \u00e0 afficher sur la carte. Si vous souhaitez convertir tous les enregistrements, vous pouvez faire de G\u00e9ocodage une colonne de formule avec la formule = True . Cela marquera tous les enregistrements comme vrais. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les adresses ou les coordonn\u00e9es lat-long et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Carte\u2019 dans le menu d\u00e9roulant Personnalis\u00e9. Si vous avez d\u00e9j\u00e0 des coordonn\u00e9es lat-long , vous pouvez d\u00e9finir votre niveau d\u2019acc\u00e8s sur Lire la table s\u00e9lectionn\u00e9e . Si vous utilisez une adresse et qu\u2019elle doit \u00eatre convertie en coordonn\u00e9es lat-long, vous devrez d\u00e9finir votre niveau d\u2019acc\u00e8s sur Acc\u00e8s complet au document car le widget a besoin de la permission d\u2019\u00e9crire dans votre document afin d\u2019ajouter des coordonn\u00e9es lat-long. Mappez toutes les colonnes requises. Notez que Nom, Longitude et Latitude sont \u00e9tiquet\u00e9s comme requis. G\u00e9ocodage, Adresse et Adresse g\u00e9ocod\u00e9e sont list\u00e9s comme optionnels. Si vous utilisez des adresses et que vous avez besoin que Grist les convertisse en coordonn\u00e9es lat-long, vous devez mapper les six colonnes. Apr\u00e8s avoir mapp\u00e9 les colonnes n\u00e9cessaires et s\u00e9lectionn\u00e9 le niveau d\u2019acc\u00e8s appropri\u00e9, le widget de carte se remplira. Vous pouvez configurer la carte pour afficher uniquement l\u2019emplacement s\u00e9lectionn\u00e9 en cliquant sur l\u2019option \u2018Ouvrir la configuration\u2019 dans le panneau de cr\u00e9ation . Ensuite, d\u00e9cochez \u2018Tous les emplacements\u2019. Cliquez sur la coche verte en haut du widget pour enregistrer les param\u00e8tres de configuration mis \u00e0 jour. Consultez notre mod\u00e8le Cartographie des emplacements ou notre Liste de crowdsourcing pour deux excellents exemples ! Pour une vid\u00e9o explicative, consultez notre Webinaire sur les widgets personnalis\u00e9s .","title":"Carte"},{"location":"widget-custom/#markdown","text":"Le widget personnalis\u00e9 Markdown vous permet de formater du texte en utilisant Markdown tout en affichant le texte format\u00e9 dans un widget modifiable. Pour d\u2019autres widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s HTML et Bloc-notes . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous ajouterez votre texte qui sera format\u00e9 en utilisant Markdown. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient le texte format\u00e9 avec Markdown et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Markdown\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s complet au document . Comme le widget est \u00e9galement un \u00e9diteur, il a besoin de la permission d\u2019\u00e9crire dans le document. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne de texte qui contient le formatage Markdown. Tout formatage Markdown dans la colonne de texte sp\u00e9cifi\u00e9e s\u2019appliquera et sera visible et modifiable dans le widget personnalis\u00e9. Pour \u00e9diter le texte directement dans le widget, cliquez sur l\u2019ic\u00f4ne d\u2019\u00e9dition. Le texte reviendra \u00e0 afficher la syntaxe Markdown qui peut \u00eatre modifi\u00e9e directement dans le widget. Lorsqu\u2019il est en mode \u00e9dition, l\u2019ic\u00f4ne d\u2019\u00e9dition sera remplac\u00e9e par l\u2019ic\u00f4ne de sauvegarde. Assurez-vous de cliquer sur l\u2019ic\u00f4ne de sauvegarde pour enregistrer les modifications et revenir \u00e0 l\u2019affichage du texte format\u00e9. Pour obtenir de l\u2019aide sur le formatage Markdown, consultez le Guide Markdown pour la syntaxe de base. Ce guide est \u00e9galement accessible dans le widget Markdown en cliquant sur l\u2019ic\u00f4ne d\u2019information en haut du widget. Le guide s\u2019ouvrira dans un nouvel onglet de votre navigateur pour une r\u00e9f\u00e9rence facile. Vous pouvez trouver un exemple de l\u2019\u00e9diteur Markdown dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le et consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Markdown"},{"location":"widget-custom/#bloc-notes","text":"Le widget Bloc-notes personnalis\u00e9 vous permet de formater du texte en utilisant un \u00e9diteur de texte enrichi. Pour d\u2019autres widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s HTML et Markdown . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que les d\u00e9tails de notre texte format\u00e9 seront stock\u00e9s. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient la colonne que nous venons d\u2019ajouter et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Bloc-notes\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s complet au document . Comme le widget est \u00e9galement un \u00e9diteur, il a besoin de la permission d\u2019\u00e9crire dans le document. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne cr\u00e9\u00e9e pour stocker notre texte format\u00e9. Si la colonne de texte que vous avez choisie sous Contenu a du texte existant, ce texte appara\u00eetra dans le widget Bloc-notes, pr\u00eat \u00e0 \u00eatre format\u00e9. Utilisez n\u2019importe quelle option montr\u00e9e ici pour formater votre texte. Comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessous, le code pour le texte format\u00e9 n\u2019est pas utile \u00e0 voir dans votre table. Vous \u00e9diterez le texte directement dans le widget Bloc-notes afin que vous puissiez cacher cette colonne de votre table de donn\u00e9es. Consultez notre Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis ou notre \ud83d\uded2 Liste de courses + Planificateur de repas pour deux excellents exemples de Bloc-notes ! Vous pouvez \u00e9galement consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Bloc-notes"},{"location":"widget-custom/#etiquettes-dimpression","text":"Le widget personnalis\u00e9 \u00c9tiquettes d\u2019impression vous permet de personnaliser et d\u2019imprimer des \u00e9tiquettes directement \u00e0 partir de Grist. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. Cette colonne contiendra le texte pour l\u2019\u00e9tiquette. Optionnellement, vous pouvez ajouter une deuxi\u00e8me colonne pour sp\u00e9cifier un nombre d\u2019\u00e9tiquettes, vous permettant d\u2019imprimer plus d\u2019une m\u00eame \u00e9tiquette sans avoir \u00e0 cr\u00e9er des enregistrements en double. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les d\u00e9tails de l\u2019\u00e9tiquette. Pour configurer, s\u00e9lectionnez \u2018Impression d\u2019\u00e9tiquettes\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018\u00c9tiquette\u2019, s\u00e9lectionnez la colonne qui contient le texte \u00e0 inclure sur les \u00e9tiquettes. Si vous souhaitez imprimer plus d\u2019une \u00e9tiquette, s\u00e9lectionnez la colonne qui contient le nombre d\u2019\u00e9tiquettes pour chaque enregistrement que vous souhaitez imprimer. Vous pouvez choisir parmi des tailles de feuille standard dans le menu d\u00e9roulant en haut \u00e0 gauche du widget. Assurez-vous d\u2019enregistrer les modifications en cliquant sur la coche verte en haut \u00e0 droite du widget. Pour laisser des \u00e9tiquettes vides au d\u00e9but de la feuille, cliquez sur l\u2019ic\u00f4ne de param\u00e8tres puis sp\u00e9cifiez combien d\u2019\u00e9tiquettes doivent rester vides. Cela est particuli\u00e8rement utile si une partie de votre feuille d\u2019\u00e9tiquettes a d\u00e9j\u00e0 \u00e9t\u00e9 utilis\u00e9e. Vous pouvez sauter les \u00e9tiquettes utilis\u00e9es et commencer \u00e0 imprimer sur votre premi\u00e8re \u00e9tiquette inutilis\u00e9e. Consultez notre mod\u00e8le Impression d\u2019\u00e9tiquettes d\u2019exp\u00e9dition et notre mod\u00e8le Chasse au tr\u00e9sor pour deux excellents exemples ! Vous pouvez \u00e9galement consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"\u00c9tiquettes d’impression"},{"location":"widget-form/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue fiche : Formulaire # La vue formulaire vous permet de collecter des donn\u00e9es dans une vue formulaire qui remplit votre table de donn\u00e9es Grist lors de la soumission. Configurer vos donn\u00e9es # Cr\u00e9ez une table contenant les colonnes de donn\u00e9es que vous souhaitez remplir via le formulaire. Cr\u00e9er votre formulaire # Ajoutez une vue formulaire depuis le menu \u201cAjouter nouveau\u201d. S\u00e9lectionnez la table de donn\u00e9es que vous souhaitez remplir avec les donn\u00e9es du formulaire. Ensuite, personnalisez le formulaire \u00e0 votre guise ! Par d\u00e9faut, la vue formulaire inclura des \u00e9l\u00e9ments pour les en-t\u00eates et les descriptions ainsi que toutes les colonnes (champs) de la table de donn\u00e9es sous-jacente. Ajouter et supprimer des \u00e9l\u00e9ments # Pour ajouter des \u00e9l\u00e9ments suppl\u00e9mentaires au formulaire, cliquez sur l\u2019ic\u00f4ne + en bas du formulaire. Dans le menu, vous pouvez ajouter les \u00e9l\u00e9ments suivants : Nouvelle question : S\u00e9lectionnez un type de colonne pour cr\u00e9er un nouveau champ. \u201c\u2022\u2022\u2022 Plus >\u201d ouvrira un menu \u00e9tendu listant tous les types de colonnes. Ajouter une nouvelle question ajoutera une nouvelle colonne \u00e0 la table de donn\u00e9es sous-jacente. Champs non appari\u00e9s : Liste tous les champs cach\u00e9s de la table de donn\u00e9es sous-jacente. Blocs de construction : Personnalisez davantage en ajoutant ces \u00e9l\u00e9ments suppl\u00e9mentaires ! Vous pouvez supprimer tout \u00e9l\u00e9ment du formulaire en survolant l\u2019objet et en cliquant sur l\u2019ic\u00f4ne de la corbeille pour supprimer. Vous pouvez masquer tout champ inutile du formulaire en survolant l\u2019objet et en cliquant sur l\u2019ic\u00f4ne x. Configurer les champs # Vous pouvez fournir des titres alternatifs pour vos champs de formulaire, plut\u00f4t que d\u2019utiliser le m\u00eame nom de colonne de la table de donn\u00e9es sous-jacente. Par exemple, sur notre formulaire, nous avons un bouton bascule intitul\u00e9 \u201cPouvons-nous vous contacter ?\u201d. Dans la table de donn\u00e9es, cette colonne est \u00e9tiquet\u00e9e \u201cOk pour contacter ?\u201d. Les titres des champs peuvent \u00eatre configur\u00e9s sous l\u2019onglet \u201cChamp\u201d du panneau de cr\u00e9ation. Pour rendre un champ de formulaire obligatoire, cochez la case \u00e0 c\u00f4t\u00e9 de \u201cChamp obligatoire\u201d. Si un utilisateur tente de soumettre un formulaire sans remplir le champ obligatoire, il recevra une alerte pour remplir le champ. Configurer les blocs de construction # Les blocs de construction En-t\u00eate et Paragraphe peuvent \u00eatre \u00e9dit\u00e9s soit directement dans le bloc, soit depuis le panneau de cr\u00e9ation. Dans le panneau de cr\u00e9ation, vous avez des options d\u2019alignement de texte disponibles. Pour un formatage suppl\u00e9mentaire, les deux \u00e9l\u00e9ments permettent l\u2019utilisation du formatage Markdown. Pour obtenir de l\u2019aide sur le formatage Markdown, consultez le Guide Markdown . Formatage HTML Les balises HTML peuvent \u00eatre utilis\u00e9es dans le texte format\u00e9 en Markdown. Assurez-vous de s\u00e9parer les \u00e9l\u00e9ments HTML de niveau bloc comme
    et

    des autres \u00e9l\u00e9ments en utilisant des lignes vides. Configurer les options de soumission # Vous avez \u00e9galement la possibilit\u00e9 de configurer diff\u00e9rents param\u00e8tres pour le bouton \u201cSoumettre\u201d. Vous pouvez changer l\u2019\u00e9tiquette du bouton, mettre \u00e0 jour le texte de succ\u00e8s qui appara\u00eet apr\u00e8s la soumission d\u2019un formulaire et choisir d\u2019autoriser plusieurs soumissions de formulaire. Vous avez \u00e9galement la possibilit\u00e9 de s\u00e9lectionner une URL sp\u00e9cifique vers laquelle rediriger apr\u00e8s la soumission. Ces options sont toutes disponibles sous l\u2019onglet \u201cFormulaire\u201d et le sous-onglet \u201cSoumission\u201d du panneau de cr\u00e9ation. Publier votre formulaire # Une fois que vous avez termin\u00e9 de personnaliser votre formulaire, vous avez la possibilit\u00e9 de pr\u00e9visualiser votre formulaire avant de le publier. La pr\u00e9visualisation vous permettra de voir \u00e0 quoi ressemblera votre formulaire pour les utilisateurs finaux, sans le rendre disponible pour l\u2019utilisation. Apr\u00e8s avoir confirm\u00e9 que tout est comme vous le souhaitez, vous pouvez publier votre formulaire. Notez que seuls les utilisateurs ayant un acc\u00e8s \u201cPROPRI\u00c9TAIRE\u201d ont la permission de publier un formulaire. La premi\u00e8re fois que vous publiez un formulaire, la popup d\u2019information suivante appara\u00eetra, expliquant les permissions qu\u2019un formulaire publi\u00e9 accorde. Une fois qu\u2019un formulaire a \u00e9t\u00e9 publi\u00e9, un bouton appara\u00eetra pour copier le lien vers le formulaire. Partagez ce lien avec les utilisateurs finaux pour qu\u2019ils remplissent votre formulaire ! Vous avez \u00e9galement la possibilit\u00e9 de d\u00e9publier votre formulaire. Notez que d\u00e9publier le formulaire d\u00e9sactivera le lien de partage. Les utilisateurs acc\u00e9dant au formulaire via ce lien verront alors une erreur. Soumissions de formulaire # Apr\u00e8s avoir partag\u00e9 le lien vers votre formulaire publi\u00e9, les utilisateurs finaux peuvent soumettre des donn\u00e9es \u00e0 votre document Grist via le formulaire. Toutes les donn\u00e9es soumises appara\u00eetront dans votre table de donn\u00e9es sous-jacente dans votre document Grist ! Collecter des donn\u00e9es n\u2019a jamais \u00e9t\u00e9 aussi facile. \ud83d\ude0d","title":"Form"},{"location":"widget-form/#vue-fiche-formulaire","text":"La vue formulaire vous permet de collecter des donn\u00e9es dans une vue formulaire qui remplit votre table de donn\u00e9es Grist lors de la soumission.","title":"Vue fiche : Formulaire"},{"location":"widget-form/#configurer-vos-donnees","text":"Cr\u00e9ez une table contenant les colonnes de donn\u00e9es que vous souhaitez remplir via le formulaire.","title":"Configurer vos donn\u00e9es"},{"location":"widget-form/#creer-votre-formulaire","text":"Ajoutez une vue formulaire depuis le menu \u201cAjouter nouveau\u201d. S\u00e9lectionnez la table de donn\u00e9es que vous souhaitez remplir avec les donn\u00e9es du formulaire. Ensuite, personnalisez le formulaire \u00e0 votre guise ! Par d\u00e9faut, la vue formulaire inclura des \u00e9l\u00e9ments pour les en-t\u00eates et les descriptions ainsi que toutes les colonnes (champs) de la table de donn\u00e9es sous-jacente.","title":"Cr\u00e9er votre formulaire"},{"location":"widget-form/#ajouter-et-supprimer-des-elements","text":"Pour ajouter des \u00e9l\u00e9ments suppl\u00e9mentaires au formulaire, cliquez sur l\u2019ic\u00f4ne + en bas du formulaire. Dans le menu, vous pouvez ajouter les \u00e9l\u00e9ments suivants : Nouvelle question : S\u00e9lectionnez un type de colonne pour cr\u00e9er un nouveau champ. \u201c\u2022\u2022\u2022 Plus >\u201d ouvrira un menu \u00e9tendu listant tous les types de colonnes. Ajouter une nouvelle question ajoutera une nouvelle colonne \u00e0 la table de donn\u00e9es sous-jacente. Champs non appari\u00e9s : Liste tous les champs cach\u00e9s de la table de donn\u00e9es sous-jacente. Blocs de construction : Personnalisez davantage en ajoutant ces \u00e9l\u00e9ments suppl\u00e9mentaires ! Vous pouvez supprimer tout \u00e9l\u00e9ment du formulaire en survolant l\u2019objet et en cliquant sur l\u2019ic\u00f4ne de la corbeille pour supprimer. Vous pouvez masquer tout champ inutile du formulaire en survolant l\u2019objet et en cliquant sur l\u2019ic\u00f4ne x.","title":"Ajouter et supprimer des \u00e9l\u00e9ments"},{"location":"widget-form/#configurer-les-champs","text":"Vous pouvez fournir des titres alternatifs pour vos champs de formulaire, plut\u00f4t que d\u2019utiliser le m\u00eame nom de colonne de la table de donn\u00e9es sous-jacente. Par exemple, sur notre formulaire, nous avons un bouton bascule intitul\u00e9 \u201cPouvons-nous vous contacter ?\u201d. Dans la table de donn\u00e9es, cette colonne est \u00e9tiquet\u00e9e \u201cOk pour contacter ?\u201d. Les titres des champs peuvent \u00eatre configur\u00e9s sous l\u2019onglet \u201cChamp\u201d du panneau de cr\u00e9ation. Pour rendre un champ de formulaire obligatoire, cochez la case \u00e0 c\u00f4t\u00e9 de \u201cChamp obligatoire\u201d. Si un utilisateur tente de soumettre un formulaire sans remplir le champ obligatoire, il recevra une alerte pour remplir le champ.","title":"Configurer les champs"},{"location":"widget-form/#configurer-les-blocs-de-construction","text":"Les blocs de construction En-t\u00eate et Paragraphe peuvent \u00eatre \u00e9dit\u00e9s soit directement dans le bloc, soit depuis le panneau de cr\u00e9ation. Dans le panneau de cr\u00e9ation, vous avez des options d\u2019alignement de texte disponibles. Pour un formatage suppl\u00e9mentaire, les deux \u00e9l\u00e9ments permettent l\u2019utilisation du formatage Markdown. Pour obtenir de l\u2019aide sur le formatage Markdown, consultez le Guide Markdown . Formatage HTML Les balises HTML peuvent \u00eatre utilis\u00e9es dans le texte format\u00e9 en Markdown. Assurez-vous de s\u00e9parer les \u00e9l\u00e9ments HTML de niveau bloc comme

    et

    des autres \u00e9l\u00e9ments en utilisant des lignes vides.","title":"Configurer les blocs de construction"},{"location":"widget-form/#configurer-les-options-de-soumission","text":"Vous avez \u00e9galement la possibilit\u00e9 de configurer diff\u00e9rents param\u00e8tres pour le bouton \u201cSoumettre\u201d. Vous pouvez changer l\u2019\u00e9tiquette du bouton, mettre \u00e0 jour le texte de succ\u00e8s qui appara\u00eet apr\u00e8s la soumission d\u2019un formulaire et choisir d\u2019autoriser plusieurs soumissions de formulaire. Vous avez \u00e9galement la possibilit\u00e9 de s\u00e9lectionner une URL sp\u00e9cifique vers laquelle rediriger apr\u00e8s la soumission. Ces options sont toutes disponibles sous l\u2019onglet \u201cFormulaire\u201d et le sous-onglet \u201cSoumission\u201d du panneau de cr\u00e9ation.","title":"Configurer les options de soumission"},{"location":"widget-form/#publier-votre-formulaire","text":"Une fois que vous avez termin\u00e9 de personnaliser votre formulaire, vous avez la possibilit\u00e9 de pr\u00e9visualiser votre formulaire avant de le publier. La pr\u00e9visualisation vous permettra de voir \u00e0 quoi ressemblera votre formulaire pour les utilisateurs finaux, sans le rendre disponible pour l\u2019utilisation. Apr\u00e8s avoir confirm\u00e9 que tout est comme vous le souhaitez, vous pouvez publier votre formulaire. Notez que seuls les utilisateurs ayant un acc\u00e8s \u201cPROPRI\u00c9TAIRE\u201d ont la permission de publier un formulaire. La premi\u00e8re fois que vous publiez un formulaire, la popup d\u2019information suivante appara\u00eetra, expliquant les permissions qu\u2019un formulaire publi\u00e9 accorde. Une fois qu\u2019un formulaire a \u00e9t\u00e9 publi\u00e9, un bouton appara\u00eetra pour copier le lien vers le formulaire. Partagez ce lien avec les utilisateurs finaux pour qu\u2019ils remplissent votre formulaire ! Vous avez \u00e9galement la possibilit\u00e9 de d\u00e9publier votre formulaire. Notez que d\u00e9publier le formulaire d\u00e9sactivera le lien de partage. Les utilisateurs acc\u00e9dant au formulaire via ce lien verront alors une erreur.","title":"Publier votre formulaire"},{"location":"widget-form/#soumissions-de-formulaire","text":"Apr\u00e8s avoir partag\u00e9 le lien vers votre formulaire publi\u00e9, les utilisateurs finaux peuvent soumettre des donn\u00e9es \u00e0 votre document Grist via le formulaire. Toutes les donn\u00e9es soumises appara\u00eetront dans votre table de donn\u00e9es sous-jacente dans votre document Grist ! Collecter des donn\u00e9es n\u2019a jamais \u00e9t\u00e9 aussi facile. \ud83d\ude0d","title":"Soumissions de formulaire"},{"location":"widget-table/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue Table: Tableau # La Table vue est une grille polyvalente semblable \u00e0 une feuille de calcul. Voici quelques fonctionnalit\u00e9s utiles \u00e0 conna\u00eetre. Op\u00e9rations sur les colonnes # Redimensionner les colonnes : Cliquez sur la ligne entre les en-t\u00eates de colonne et faites-la glisser pour redimensionner les colonnes. R\u00e9organiser les colonnes : Avec une colonne s\u00e9lectionn\u00e9e, faites glisser son en-t\u00eate pour la d\u00e9placer \u00e0 un autre endroit par rapport aux autres colonnes. (Vous pouvez \u00e9galement le faire en r\u00e9organisant les champs dans le panneau d\u2019options de la vue.) Renommer les colonnes : Avec une colonne s\u00e9lectionn\u00e9e, cliquez sur son en-t\u00eate pour la renommer. Appuyez sur Entr\u00e9e pour enregistrer le nouveau nom. Ajouter des colonnes : Cliquez sur l\u2019ic\u00f4ne \u201c+\u201d \u00e0 droite de tous les en-t\u00eates de colonne pour ajouter une nouvelle colonne ou afficher l\u2019une des colonnes masqu\u00e9es. Le menu de la colonne permet \u00e9galement d\u2019ins\u00e9rer une nouvelle colonne \u00e0 c\u00f4t\u00e9 d\u2019une colonne existante, tout comme les raccourcis clavier Alt + + (ins\u00e9rer avant) et Alt + = (ins\u00e9rer apr\u00e8s). Apr\u00e8s avoir ajout\u00e9 une colonne, le nom de la colonne (d\u00e9fini par d\u00e9faut sur \u201cA\u201d, \u201cB\u201d, \u201cC\u201d, etc.) est imm\u00e9diatement s\u00e9lectionn\u00e9 et mis en surbrillance pour vous permettre de le renommer rapidement. Tapez simplement le nouveau nom et appuyez sur Entr\u00e9e , ou appuyez sur \u00c9chap pour conserver le nom par d\u00e9faut. Masquer les colonnes : D\u00e9placez la souris sur l\u2019en-t\u00eate de la colonne et cliquez sur le triangle pour ouvrir le menu de la colonne. Cliquez sur \u201cMasquer la colonne\u201d pour masquer la colonne. La colonne reste dans les donn\u00e9es sous-jacentes et peut \u00eatre affich\u00e9e \u00e0 nouveau en utilisant l\u2019ic\u00f4ne \u201c+\u201d \u00e0 droite des en-t\u00eates de colonne, ou la liste des champs dans le panneau d\u2019options de la vue. Supprimer les colonnes : Supprimez la colonne de donn\u00e9es r\u00e9elle en utilisant l\u2019option du menu de la colonne ou le raccourci clavier Alt + Moins . Le tableau est la seule vue qui permet de supprimer une colonne. Remarque : supprimer et masquer sont diff\u00e9rents. Masquer une colonne la retire uniquement de la vue actuelle, mais la laisse dans les donn\u00e9es et disponible pour les formules. Supprimer une colonne la retire de partout. (Bien s\u00fbr, la fonction d\u2019annulation fonctionne toujours pour l\u2019une ou l\u2019autre op\u00e9ration !) Op\u00e9rations sur les lignes # Ajouter des lignes : Tapez dans la derni\u00e8re ligne d\u2019un tableau, qui est mise en surbrillance pour indiquer qu\u2019elle est un espace r\u00e9serv\u00e9 pour l\u2019ajout de nouveaux enregistrements. Faites un clic droit sur un num\u00e9ro de ligne pour ins\u00e9rer une ligne vide \u00e0 c\u00f4t\u00e9 d\u2019une ligne existante, ou utilisez les raccourcis clavier \u2318 \u21e7 = (Mac) ou Ctrl + Shift + = (Windows) pour ins\u00e9rer avant, et \u2318 = (Mac) ou Ctrl + = (Windows) pour ins\u00e9rer apr\u00e8s. Supprimer des lignes : Faites un clic droit sur un num\u00e9ro de ligne et s\u00e9lectionnez l\u2019option \u201cSupprimer\u201d pour supprimer une ligne, ou utilisez le raccourci \u2318 + Moins (Mac) ou Ctrl + Moins (Windows). Si vous s\u00e9lectionnez une intervalle de cellules d\u2019abord, l\u2019une ou l\u2019autre de ces actions de suppression supprimera toutes les lignes incluses dans l\u2019intervalle. Lien vers des lignes : Faites un clic droit sur un num\u00e9ro de ligne et s\u00e9lectionnez \u201cCopier le lien d\u2019ancrage\u201d pour copier un lien vers la cellule s\u00e9lectionn\u00e9e de cette ligne. Le lien sera plac\u00e9 dans votre presse-papiers, pr\u00eat \u00e0 \u00eatre coll\u00e9 dans un e-mail ou une application de messagerie instantan\u00e9e. Le lien ne s\u2019ouvrira que pour les personnes ayant acc\u00e8s au document. Navigation et s\u00e9lection # Naviguer en utilisant les raccourcis : Utilisez les raccourcis clavier pour naviguer dans la grille : Tab , Shift + Tab D\u00e9placez-vous vers la colonne suivante ou pr\u00e9c\u00e9dente, en enregistrant les modifications si vous \u00e9ditez une cellule. \u2318 + Haut (Mac) ou Ctrl + Haut (Windows) D\u00e9placez-vous vers la premi\u00e8re ligne. \u2318 + Bas (Mac) ou Ctrl + Bas (Windows) D\u00e9placez-vous vers la derni\u00e8re ligne. Accueil ou Fn + \u2190 (Mac) D\u00e9placez-vous au d\u00e9but d\u2019une ligne. Fin ou Fn + \u2192 (Mac) D\u00e9placez-vous \u00e0 la fin d\u2019une ligne. PageDown ou Fn + \u2193 (Mac) D\u00e9placez-vous d\u2019une page de lignes vers le bas. PageUp ou Fn + \u2191 (Mac) D\u00e9placez-vous d\u2019une page de lignes vers le haut. Alt + Bas , Alt + Haut D\u00e9placez-vous de cinq lignes vers le bas ou vers le haut. S\u00e9lectionner des intervalles : Cliquez et faites glisser la souris sur la grille pour s\u00e9lectionner un intervalle de cellules \u00e0 copier (copier et coller en utilisant les raccourcis clavier habituels pour votre ordinateur). Une autre fa\u00e7on de s\u00e9lectionner un intervalle est de cliquer sur une cellule, puis de maintenir Shift tout en cliquant sur une autre cellule, ou tout en naviguant avec les touches fl\u00e9ch\u00e9es. Remplir les donn\u00e9es vers le bas : S\u00e9lectionnez un intervalle de cellules et appuyez sur \u2318 + D (Mac) ou Ctrl + D (Windows) pour remplir tout l\u2019intervalle s\u00e9lectionn\u00e9 avec les valeurs des cellules de la premi\u00e8re ligne de l\u2019intervalle. Personnalisation # Personnaliser l\u2019apparence du tableau : Dans le panneau d\u2019options de la vue, vous pouvez d\u00e9sactiver les lignes de grille horizontales ou verticales, ou activer le z\u00e9brage. Par exemple, cela vous permet de changer l\u2019apparence de votre grille en une liste comme celle-ci :","title":"Table widget"},{"location":"widget-table/#vue-table-tableau","text":"La Table vue est une grille polyvalente semblable \u00e0 une feuille de calcul. Voici quelques fonctionnalit\u00e9s utiles \u00e0 conna\u00eetre.","title":"Vue Table: Tableau"},{"location":"widget-table/#operations-sur-les-colonnes","text":"Redimensionner les colonnes : Cliquez sur la ligne entre les en-t\u00eates de colonne et faites-la glisser pour redimensionner les colonnes. R\u00e9organiser les colonnes : Avec une colonne s\u00e9lectionn\u00e9e, faites glisser son en-t\u00eate pour la d\u00e9placer \u00e0 un autre endroit par rapport aux autres colonnes. (Vous pouvez \u00e9galement le faire en r\u00e9organisant les champs dans le panneau d\u2019options de la vue.) Renommer les colonnes : Avec une colonne s\u00e9lectionn\u00e9e, cliquez sur son en-t\u00eate pour la renommer. Appuyez sur Entr\u00e9e pour enregistrer le nouveau nom. Ajouter des colonnes : Cliquez sur l\u2019ic\u00f4ne \u201c+\u201d \u00e0 droite de tous les en-t\u00eates de colonne pour ajouter une nouvelle colonne ou afficher l\u2019une des colonnes masqu\u00e9es. Le menu de la colonne permet \u00e9galement d\u2019ins\u00e9rer une nouvelle colonne \u00e0 c\u00f4t\u00e9 d\u2019une colonne existante, tout comme les raccourcis clavier Alt + + (ins\u00e9rer avant) et Alt + = (ins\u00e9rer apr\u00e8s). Apr\u00e8s avoir ajout\u00e9 une colonne, le nom de la colonne (d\u00e9fini par d\u00e9faut sur \u201cA\u201d, \u201cB\u201d, \u201cC\u201d, etc.) est imm\u00e9diatement s\u00e9lectionn\u00e9 et mis en surbrillance pour vous permettre de le renommer rapidement. Tapez simplement le nouveau nom et appuyez sur Entr\u00e9e , ou appuyez sur \u00c9chap pour conserver le nom par d\u00e9faut. Masquer les colonnes : D\u00e9placez la souris sur l\u2019en-t\u00eate de la colonne et cliquez sur le triangle pour ouvrir le menu de la colonne. Cliquez sur \u201cMasquer la colonne\u201d pour masquer la colonne. La colonne reste dans les donn\u00e9es sous-jacentes et peut \u00eatre affich\u00e9e \u00e0 nouveau en utilisant l\u2019ic\u00f4ne \u201c+\u201d \u00e0 droite des en-t\u00eates de colonne, ou la liste des champs dans le panneau d\u2019options de la vue. Supprimer les colonnes : Supprimez la colonne de donn\u00e9es r\u00e9elle en utilisant l\u2019option du menu de la colonne ou le raccourci clavier Alt + Moins . Le tableau est la seule vue qui permet de supprimer une colonne. Remarque : supprimer et masquer sont diff\u00e9rents. Masquer une colonne la retire uniquement de la vue actuelle, mais la laisse dans les donn\u00e9es et disponible pour les formules. Supprimer une colonne la retire de partout. (Bien s\u00fbr, la fonction d\u2019annulation fonctionne toujours pour l\u2019une ou l\u2019autre op\u00e9ration !)","title":"Op\u00e9rations sur les colonnes"},{"location":"widget-table/#operations-sur-les-lignes","text":"Ajouter des lignes : Tapez dans la derni\u00e8re ligne d\u2019un tableau, qui est mise en surbrillance pour indiquer qu\u2019elle est un espace r\u00e9serv\u00e9 pour l\u2019ajout de nouveaux enregistrements. Faites un clic droit sur un num\u00e9ro de ligne pour ins\u00e9rer une ligne vide \u00e0 c\u00f4t\u00e9 d\u2019une ligne existante, ou utilisez les raccourcis clavier \u2318 \u21e7 = (Mac) ou Ctrl + Shift + = (Windows) pour ins\u00e9rer avant, et \u2318 = (Mac) ou Ctrl + = (Windows) pour ins\u00e9rer apr\u00e8s. Supprimer des lignes : Faites un clic droit sur un num\u00e9ro de ligne et s\u00e9lectionnez l\u2019option \u201cSupprimer\u201d pour supprimer une ligne, ou utilisez le raccourci \u2318 + Moins (Mac) ou Ctrl + Moins (Windows). Si vous s\u00e9lectionnez une intervalle de cellules d\u2019abord, l\u2019une ou l\u2019autre de ces actions de suppression supprimera toutes les lignes incluses dans l\u2019intervalle. Lien vers des lignes : Faites un clic droit sur un num\u00e9ro de ligne et s\u00e9lectionnez \u201cCopier le lien d\u2019ancrage\u201d pour copier un lien vers la cellule s\u00e9lectionn\u00e9e de cette ligne. Le lien sera plac\u00e9 dans votre presse-papiers, pr\u00eat \u00e0 \u00eatre coll\u00e9 dans un e-mail ou une application de messagerie instantan\u00e9e. Le lien ne s\u2019ouvrira que pour les personnes ayant acc\u00e8s au document.","title":"Op\u00e9rations sur les lignes"},{"location":"widget-table/#navigation-et-selection","text":"Naviguer en utilisant les raccourcis : Utilisez les raccourcis clavier pour naviguer dans la grille : Tab , Shift + Tab D\u00e9placez-vous vers la colonne suivante ou pr\u00e9c\u00e9dente, en enregistrant les modifications si vous \u00e9ditez une cellule. \u2318 + Haut (Mac) ou Ctrl + Haut (Windows) D\u00e9placez-vous vers la premi\u00e8re ligne. \u2318 + Bas (Mac) ou Ctrl + Bas (Windows) D\u00e9placez-vous vers la derni\u00e8re ligne. Accueil ou Fn + \u2190 (Mac) D\u00e9placez-vous au d\u00e9but d\u2019une ligne. Fin ou Fn + \u2192 (Mac) D\u00e9placez-vous \u00e0 la fin d\u2019une ligne. PageDown ou Fn + \u2193 (Mac) D\u00e9placez-vous d\u2019une page de lignes vers le bas. PageUp ou Fn + \u2191 (Mac) D\u00e9placez-vous d\u2019une page de lignes vers le haut. Alt + Bas , Alt + Haut D\u00e9placez-vous de cinq lignes vers le bas ou vers le haut. S\u00e9lectionner des intervalles : Cliquez et faites glisser la souris sur la grille pour s\u00e9lectionner un intervalle de cellules \u00e0 copier (copier et coller en utilisant les raccourcis clavier habituels pour votre ordinateur). Une autre fa\u00e7on de s\u00e9lectionner un intervalle est de cliquer sur une cellule, puis de maintenir Shift tout en cliquant sur une autre cellule, ou tout en naviguant avec les touches fl\u00e9ch\u00e9es. Remplir les donn\u00e9es vers le bas : S\u00e9lectionnez un intervalle de cellules et appuyez sur \u2318 + D (Mac) ou Ctrl + D (Windows) pour remplir tout l\u2019intervalle s\u00e9lectionn\u00e9 avec les valeurs des cellules de la premi\u00e8re ligne de l\u2019intervalle.","title":"Navigation et s\u00e9lection"},{"location":"widget-table/#personnalisation","text":"Personnaliser l\u2019apparence du tableau : Dans le panneau d\u2019options de la vue, vous pouvez d\u00e9sactiver les lignes de grille horizontales ou verticales, ou activer le z\u00e9brage. Par exemple, cela vous permet de changer l\u2019apparence de votre grille en une liste comme celle-ci :","title":"Personnalisation"},{"location":"workspaces/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Espaces de travail # Les documents peuvent \u00eatre regroup\u00e9s dans des dossiers appel\u00e9s \u201cespaces de travail\u201d qui peuvent \u00eatre partag\u00e9s en tant qu\u2019unit\u00e9 unique avec d\u2019autres utilisateurs. Cela est pratique, par exemple, pour les documents li\u00e9s \u00e0 un seul projet. Lorsqu\u2019un site est cr\u00e9\u00e9 pour la premi\u00e8re fois, il poss\u00e8de un seul dossier appel\u00e9 \u201cHome\u201d. Vous pouvez renommer cet dossier si vous le souhaitez, en survolant le nom de l\u2019dossier dans la barre de gauche, en cliquant sur l\u2019ic\u00f4ne \u00e0 trois points, puis en s\u00e9lectionnant \u201cRenommer\u201d. Encore mieux, vous pouvez cr\u00e9er de nouveaux espaces de travail, afin de regrouper vos documents et de les partager en tant qu\u2019unit\u00e9. Pour ajouter un document \u00e0 un dossier sp\u00e9cifique, cliquez sur cet dossier dans la barre de gauche, puis s\u00e9lectionnez \u201cAjouter nouveau\u201d, puis \u201cCr\u00e9er un document vide\u201d (ou \u201cImporter un document\u201d). Pour d\u00e9placer un document d\u2019un dossier \u00e0 un autre, survolez le document, cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom du document, puis s\u00e9lectionnez \u201cD\u00e9placer\u201d. Vous aurez alors la possibilit\u00e9 de choisir l\u2019dossier souhait\u00e9. G\u00e9rer l\u2019acc\u00e8s # Sur les espaces d\u2019\u00e9quipe , les propri\u00e9taires d\u2019espaces de travail peuvent contr\u00f4ler qui a acc\u00e8s \u00e0 un dossier en utilisant \u201cG\u00e9rer les utilisateurs.\u201d Les contr\u00f4les sont similaires \u00e0 ceux pour partager des documents . Les espaces de travail dans les espaces personnels ne peuvent pas \u00eatre partag\u00e9s. Les visualisateurs d\u2019un espace d\u2019\u00e9quipe seront \u00e9galement des visualisateurs de tous ses espaces de travail. Il en va de m\u00eame pour les \u00e9diteurs et les propri\u00e9taires. Pour exclure un dossier de l\u2019h\u00e9ritage des visualisateurs, \u00e9diteurs et propri\u00e9taires de l\u2019espace d\u2019\u00e9quipe, d\u00e9finissez \u201cH\u00e9riter l\u2019acc\u00e8s\u201d sur \u201cAucun\u201d. Vous pouvez \u00e9galement le d\u00e9finir sur \u201cVisualisation uniquement\u201d pour limiter l\u2019h\u00e9ritage aux droits de visualisation, ou \u201cVisualisation & \u00c9dition\u201d pour limiter l\u2019h\u00e9ritage aux droits de visualisation et d\u2019\u00e9dition (en excluant le droit de contr\u00f4ler les options de partage). Il est possible d\u2019\u00eatre \u00e9diteur/propri\u00e9taire d\u2019un dossier et de ne pas pouvoir ouvrir tous les documents de cet dossier. Cela peut se produire si un propri\u00e9taire de document limite l\u2019h\u00e9ritage \u00e0 \u201cAucun\u201d. Vous verrez toujours le document list\u00e9, de sorte que si vous d\u00e9cidez de supprimer l\u2019dossier, vous saurez ce que vous supprimez. Les visualisateurs d\u2019un dossier ne verront que les documents auxquels ils ont acc\u00e8s list\u00e9s.","title":"Workspaces"},{"location":"workspaces/#espaces-de-travail","text":"Les documents peuvent \u00eatre regroup\u00e9s dans des dossiers appel\u00e9s \u201cespaces de travail\u201d qui peuvent \u00eatre partag\u00e9s en tant qu\u2019unit\u00e9 unique avec d\u2019autres utilisateurs. Cela est pratique, par exemple, pour les documents li\u00e9s \u00e0 un seul projet. Lorsqu\u2019un site est cr\u00e9\u00e9 pour la premi\u00e8re fois, il poss\u00e8de un seul dossier appel\u00e9 \u201cHome\u201d. Vous pouvez renommer cet dossier si vous le souhaitez, en survolant le nom de l\u2019dossier dans la barre de gauche, en cliquant sur l\u2019ic\u00f4ne \u00e0 trois points, puis en s\u00e9lectionnant \u201cRenommer\u201d. Encore mieux, vous pouvez cr\u00e9er de nouveaux espaces de travail, afin de regrouper vos documents et de les partager en tant qu\u2019unit\u00e9. Pour ajouter un document \u00e0 un dossier sp\u00e9cifique, cliquez sur cet dossier dans la barre de gauche, puis s\u00e9lectionnez \u201cAjouter nouveau\u201d, puis \u201cCr\u00e9er un document vide\u201d (ou \u201cImporter un document\u201d). Pour d\u00e9placer un document d\u2019un dossier \u00e0 un autre, survolez le document, cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom du document, puis s\u00e9lectionnez \u201cD\u00e9placer\u201d. Vous aurez alors la possibilit\u00e9 de choisir l\u2019dossier souhait\u00e9.","title":"Espaces de travail"},{"location":"workspaces/#gerer-lacces","text":"Sur les espaces d\u2019\u00e9quipe , les propri\u00e9taires d\u2019espaces de travail peuvent contr\u00f4ler qui a acc\u00e8s \u00e0 un dossier en utilisant \u201cG\u00e9rer les utilisateurs.\u201d Les contr\u00f4les sont similaires \u00e0 ceux pour partager des documents . Les espaces de travail dans les espaces personnels ne peuvent pas \u00eatre partag\u00e9s. Les visualisateurs d\u2019un espace d\u2019\u00e9quipe seront \u00e9galement des visualisateurs de tous ses espaces de travail. Il en va de m\u00eame pour les \u00e9diteurs et les propri\u00e9taires. Pour exclure un dossier de l\u2019h\u00e9ritage des visualisateurs, \u00e9diteurs et propri\u00e9taires de l\u2019espace d\u2019\u00e9quipe, d\u00e9finissez \u201cH\u00e9riter l\u2019acc\u00e8s\u201d sur \u201cAucun\u201d. Vous pouvez \u00e9galement le d\u00e9finir sur \u201cVisualisation uniquement\u201d pour limiter l\u2019h\u00e9ritage aux droits de visualisation, ou \u201cVisualisation & \u00c9dition\u201d pour limiter l\u2019h\u00e9ritage aux droits de visualisation et d\u2019\u00e9dition (en excluant le droit de contr\u00f4ler les options de partage). Il est possible d\u2019\u00eatre \u00e9diteur/propri\u00e9taire d\u2019un dossier et de ne pas pouvoir ouvrir tous les documents de cet dossier. Cela peut se produire si un propri\u00e9taire de document limite l\u2019h\u00e9ritage \u00e0 \u201cAucun\u201d. Vous verrez toujours le document list\u00e9, de sorte que si vous d\u00e9cidez de supprimer l\u2019dossier, vous saurez ce que vous supprimez. Les visualisateurs d\u2019un dossier ne verront que les documents auxquels ils ont acc\u00e8s list\u00e9s.","title":"G\u00e9rer l’acc\u00e8s"},{"location":"examples/2020-06-book-club/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Listes de Livres avec Recherche en Biblioth\u00e8que et en Magasin # S\u2019il y a une chose meilleure que lire un livre, c\u2019est lire avec des amis. Organiser un club de lecture est assez simple. Le club fonctionnera mieux si tout le monde obtient effectivement le livre et a des opinions sur ce qu\u2019il faut lire la prochaine fois. Grist peut aider avec tout cela. Pour inciter tout le monde \u00e0 obtenir le livre, il est utile d\u2019avoir des liens pour emprunter le livre \u00e0 votre biblioth\u00e8que locale et pour acheter le livre dans votre magasin local (ou non local). Et pour des id\u00e9es sur ce qu\u2019il faut lire la prochaine fois, il est utile de pouvoir facilement sugg\u00e9rer des livres et de d\u00e9couvrir les livres que d\u2019autres sugg\u00e8rent via des sites comme GoodReads, Wikipedia et Amazon. Supposons que nous commencions par une simple table de livres, avec les titres des livres et les noms des auteurs. Pour emprunter ou acheter le livre, il est pr\u00e9f\u00e9rable d\u2019avoir son code ISBN unique, afin qu\u2019il n\u2019y ait aucune ambigu\u00eft\u00e9 ou confusion. Une chose que nous pouvons faire est d\u2019ajouter un lien pour rechercher un livre sur isbnsearch.org par son titre et son auteur. Pour ce faire, ajoutez une nouvelle colonne, puis d\u00e9finissez-la comme une colonne HyperLink : Ce que nous allons faire, c\u2019est remplir cette colonne en utilisant une formule qui prend le titre du livre et le nom de l\u2019auteur, et les utilise comme mots-cl\u00e9s pour rechercher sur le site isbnsearch.org . Voici la formule : import urllib keywords = ($Title or \"\") + \" \" + ($Author or \"\") \"[isbn] https://isbnsearch.org/search?s=\" + urllib.quote(keywords) Les URL avec des espaces, des apostrophes ou d\u2019autres lettres \u00e9tranges que vous pourriez trouver dans les noms n\u00e9cessitent un encodage sp\u00e9cial, nous avons donc utilis\u00e9 le module python urllib pour nous assurer que tout est encod\u00e9 correctement. Maintenant, nous avons un lien [isbn] pratique \u00e0 c\u00f4t\u00e9 de chaque livre : Nous pouvons cliquer sur la fl\u00e8che \u00e0 c\u00f4t\u00e9 de [isbn] , localiser le livre et noter son code ISBN dans une nouvelle colonne : Ensuite, nous pouvons l\u2019ajouter \u00e0 notre liste de livres. Maintenant que nous avons un coup de main pour trouver les ISBN, ajoutons quelques livres de plus : Recherche en biblioth\u00e8que et en magasin # Une fois que nous avons l\u2019ISBN, ajouter un lien pour acheter le livre est facile. Voici une formule pour le site indiebound.org , qui aux \u00c9tats-Unis est susceptible d\u2019avoir une librairie ind\u00e9pendante pr\u00e8s de chez vous en tant que membre : \"[buy] https://indiebound.org/book/\" + $ISBN Si vous n\u2019avez pas de librairie locale, il y a Amazon, ou \u00e0 peu pr\u00e8s n\u2019importe quel site que vous aimez (trouvez simplement une page de recherche sur leur site et faites correspondre le mod\u00e8le). import urllib keywords = ($Title or \"\") + \" \" + ($Author or \"\") + \" \" + ($ISBN or \"\") \"[amazon] https://www.amazon.com/s?i=stripbooks&k=\" + urllib.quote($keywords) Les nouveaux liens ressemblent \u00e0 ceci : Cliquer sur le lien [buy] pr\u00e8s d\u2019un livre nous am\u00e8ne maintenant \u00e0 ce livre sur indiebound.org . Pour votre biblioth\u00e8que locale, la m\u00eame id\u00e9e est tr\u00e8s probablement applicable. Par exemple, dans le nord du New Jersey, aux \u00c9tats-Unis, voici ce que vous voulez : import urllib prefix = \"[borrow] https://catalog.bccls.org/polaris/search/searchresults.aspx?ctx=placeholder&type=Keyword&by=ISBN&term=\" prefix + urllib.quote($ISBN) Et voici comment consulter Goodreads pour voir ce que les gens pensent d\u2019un livre : \"[opinion] https://www.goodreads.com/search?q=\" + $ISBN Et Wikipedia pour commencer une plong\u00e9e en profondeur : import urllib keywords = ($Title or \"\") + \" \" + ($Author.Name or \"\") \"[wikipedia] https://en.wikipedia.org/wiki/Special:Search/\" + urllib.quote(keywords) Une fois que nous avons tous ces liens, il est logique d\u2019ajouter une vue fiche afin que nous puissions les disposer : Mod\u00e8le pr\u00eat \u00e0 l\u2019emploi # Voici une exemple de liste de livres avec laquelle vous pouvez jouer. Les livres r\u00e9pertori\u00e9s peuvent ne pas \u00eatre \u00e0 votre go\u00fbt, bien s\u00fbr ! Ajustez selon vos pr\u00e9f\u00e9rences.","title":"Book club links"},{"location":"examples/2020-06-book-club/#listes-de-livres-avec-recherche-en-bibliotheque-et-en-magasin","text":"S\u2019il y a une chose meilleure que lire un livre, c\u2019est lire avec des amis. Organiser un club de lecture est assez simple. Le club fonctionnera mieux si tout le monde obtient effectivement le livre et a des opinions sur ce qu\u2019il faut lire la prochaine fois. Grist peut aider avec tout cela. Pour inciter tout le monde \u00e0 obtenir le livre, il est utile d\u2019avoir des liens pour emprunter le livre \u00e0 votre biblioth\u00e8que locale et pour acheter le livre dans votre magasin local (ou non local). Et pour des id\u00e9es sur ce qu\u2019il faut lire la prochaine fois, il est utile de pouvoir facilement sugg\u00e9rer des livres et de d\u00e9couvrir les livres que d\u2019autres sugg\u00e8rent via des sites comme GoodReads, Wikipedia et Amazon. Supposons que nous commencions par une simple table de livres, avec les titres des livres et les noms des auteurs. Pour emprunter ou acheter le livre, il est pr\u00e9f\u00e9rable d\u2019avoir son code ISBN unique, afin qu\u2019il n\u2019y ait aucune ambigu\u00eft\u00e9 ou confusion. Une chose que nous pouvons faire est d\u2019ajouter un lien pour rechercher un livre sur isbnsearch.org par son titre et son auteur. Pour ce faire, ajoutez une nouvelle colonne, puis d\u00e9finissez-la comme une colonne HyperLink : Ce que nous allons faire, c\u2019est remplir cette colonne en utilisant une formule qui prend le titre du livre et le nom de l\u2019auteur, et les utilise comme mots-cl\u00e9s pour rechercher sur le site isbnsearch.org . Voici la formule : import urllib keywords = ($Title or \"\") + \" \" + ($Author or \"\") \"[isbn] https://isbnsearch.org/search?s=\" + urllib.quote(keywords) Les URL avec des espaces, des apostrophes ou d\u2019autres lettres \u00e9tranges que vous pourriez trouver dans les noms n\u00e9cessitent un encodage sp\u00e9cial, nous avons donc utilis\u00e9 le module python urllib pour nous assurer que tout est encod\u00e9 correctement. Maintenant, nous avons un lien [isbn] pratique \u00e0 c\u00f4t\u00e9 de chaque livre : Nous pouvons cliquer sur la fl\u00e8che \u00e0 c\u00f4t\u00e9 de [isbn] , localiser le livre et noter son code ISBN dans une nouvelle colonne : Ensuite, nous pouvons l\u2019ajouter \u00e0 notre liste de livres. Maintenant que nous avons un coup de main pour trouver les ISBN, ajoutons quelques livres de plus :","title":"Listes de Livres avec Recherche en Biblioth\u00e8que et en Magasin"},{"location":"examples/2020-06-book-club/#recherche-en-bibliotheque-et-en-magasin","text":"Une fois que nous avons l\u2019ISBN, ajouter un lien pour acheter le livre est facile. Voici une formule pour le site indiebound.org , qui aux \u00c9tats-Unis est susceptible d\u2019avoir une librairie ind\u00e9pendante pr\u00e8s de chez vous en tant que membre : \"[buy] https://indiebound.org/book/\" + $ISBN Si vous n\u2019avez pas de librairie locale, il y a Amazon, ou \u00e0 peu pr\u00e8s n\u2019importe quel site que vous aimez (trouvez simplement une page de recherche sur leur site et faites correspondre le mod\u00e8le). import urllib keywords = ($Title or \"\") + \" \" + ($Author or \"\") + \" \" + ($ISBN or \"\") \"[amazon] https://www.amazon.com/s?i=stripbooks&k=\" + urllib.quote($keywords) Les nouveaux liens ressemblent \u00e0 ceci : Cliquer sur le lien [buy] pr\u00e8s d\u2019un livre nous am\u00e8ne maintenant \u00e0 ce livre sur indiebound.org . Pour votre biblioth\u00e8que locale, la m\u00eame id\u00e9e est tr\u00e8s probablement applicable. Par exemple, dans le nord du New Jersey, aux \u00c9tats-Unis, voici ce que vous voulez : import urllib prefix = \"[borrow] https://catalog.bccls.org/polaris/search/searchresults.aspx?ctx=placeholder&type=Keyword&by=ISBN&term=\" prefix + urllib.quote($ISBN) Et voici comment consulter Goodreads pour voir ce que les gens pensent d\u2019un livre : \"[opinion] https://www.goodreads.com/search?q=\" + $ISBN Et Wikipedia pour commencer une plong\u00e9e en profondeur : import urllib keywords = ($Title or \"\") + \" \" + ($Author.Name or \"\") \"[wikipedia] https://en.wikipedia.org/wiki/Special:Search/\" + urllib.quote(keywords) Une fois que nous avons tous ces liens, il est logique d\u2019ajouter une vue fiche afin que nous puissions les disposer :","title":"Recherche en biblioth\u00e8que et en magasin"},{"location":"examples/2020-06-book-club/#modele-pret-a-lemploi","text":"Voici une exemple de liste de livres avec laquelle vous pouvez jouer. Les livres r\u00e9pertori\u00e9s peuvent ne pas \u00eatre \u00e0 votre go\u00fbt, bien s\u00fbr ! Ajustez selon vos pr\u00e9f\u00e9rences.","title":"Mod\u00e8le pr\u00eat \u00e0 l’emploi"},{"location":"examples/2020-06-credit-card/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . D\u00e9couper et Analyser les D\u00e9penses # Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit, par exemple si vous souhaitez voir les transactions par : Cat\u00e9gorie Membre de la carte Mois Combinaison de l\u2019un des \u00e9l\u00e9ments ci-dessus Voici un exemple utilisant des donn\u00e9es d\u2019American Express (r\u00e9dig\u00e9es pour des raisons de confidentialit\u00e9, bien s\u00fbr). Voir ci-dessous pour l\u2019utiliser comme mod\u00e8le pour vos propres donn\u00e9es. Cette premi\u00e8re page est un tableau de bord : elle montre quelques graphiques r\u00e9capitulatifs \u2014 vos d\u00e9penses par mois, et deux graphiques circulaires pour vous permettre de voir rapidement quel membre de la carte ou quelle cat\u00e9gorie a le plus de d\u00e9penses. Les trois pages suivantes montrent des r\u00e9partitions par Cat\u00e9gorie, Membre de la carte et par Mois. En plus des totaux par Cat\u00e9gorie, vous pouvez cliquer sur n\u2019importe quelle Cat\u00e9gorie pour voir toutes les transactions qu\u2019elle contient, puis cliquer sur n\u2019importe quelle transaction pour voir ses d\u00e9tails complets. Voici l\u2019 exemple avec des donn\u00e9es d\u2019\u00e9chantillon que vous pouvez essayer. Pour l\u2019utiliser avec vos propres donn\u00e9es, commencez par t\u00e9l\u00e9charger vos transactions. Pour les cartes de cr\u00e9dit American Express : Connectez-vous sur https://americanexpress.com Allez dans l\u2019onglet \u201cStatements & Activity\u201d, puis s\u00e9lectionnez \u201cView By Year\u201d ou \u201cCustom Date Range\u201d. Cliquez sur l\u2019ic\u00f4ne \u201cDownload your Transactions\u201d. Lorsque vous \u00eates invit\u00e9 \u00e0 choisir le format de t\u00e9l\u00e9chargement, s\u00e9lectionnez \u201cCSV\u201d et cochez la case qui dit \u201cInclude all additional transaction details\u201d. Pour importer ces donn\u00e9es dans Grist : Ouvrez le mod\u00e8le ici . Cliquez sur le bouton \u201cAdd New\u201d et choisissez \u201cImport from file\u201d. Dans la bo\u00eete de dialogue qui s\u2019affiche, changez \u201cTo\u201d table de \u201cNew Table\u201d \u00e0 \u201cActivity\u201d, comme suit : Cliquez sur \u201cImport\u201d, et vous avez termin\u00e9. Vos donn\u00e9es sont pr\u00eates \u00e0 \u00eatre explor\u00e9es. Note Lorsque vous commencez avec un lien de mod\u00e8le, votre copie du document n\u2019est initialement pas sauvegard\u00e9e. Pour conserver ces donn\u00e9es pour plus tard, cliquez sur \u201cSave Copy\u201d, et donnez un nom au document. Vous verrez le document plus tard sur votre page d\u2019accueil Grist \u00e0 https://docs.getgrist.com . Un mod\u00e8le comme celui-ci ne prend pas longtemps \u00e0 pr\u00e9parer. Il utilise une combinaison de tables de synth\u00e8se et de liaison de vues . Vous avez des retours ou des am\u00e9liorations \u00e0 proposer ? Veuillez nous les partager par email \u00e0 support@getgrist.com .","title":"Credit card expenses"},{"location":"examples/2020-06-credit-card/#decouper-et-analyser-les-depenses","text":"Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit, par exemple si vous souhaitez voir les transactions par : Cat\u00e9gorie Membre de la carte Mois Combinaison de l\u2019un des \u00e9l\u00e9ments ci-dessus Voici un exemple utilisant des donn\u00e9es d\u2019American Express (r\u00e9dig\u00e9es pour des raisons de confidentialit\u00e9, bien s\u00fbr). Voir ci-dessous pour l\u2019utiliser comme mod\u00e8le pour vos propres donn\u00e9es. Cette premi\u00e8re page est un tableau de bord : elle montre quelques graphiques r\u00e9capitulatifs \u2014 vos d\u00e9penses par mois, et deux graphiques circulaires pour vous permettre de voir rapidement quel membre de la carte ou quelle cat\u00e9gorie a le plus de d\u00e9penses. Les trois pages suivantes montrent des r\u00e9partitions par Cat\u00e9gorie, Membre de la carte et par Mois. En plus des totaux par Cat\u00e9gorie, vous pouvez cliquer sur n\u2019importe quelle Cat\u00e9gorie pour voir toutes les transactions qu\u2019elle contient, puis cliquer sur n\u2019importe quelle transaction pour voir ses d\u00e9tails complets. Voici l\u2019 exemple avec des donn\u00e9es d\u2019\u00e9chantillon que vous pouvez essayer. Pour l\u2019utiliser avec vos propres donn\u00e9es, commencez par t\u00e9l\u00e9charger vos transactions. Pour les cartes de cr\u00e9dit American Express : Connectez-vous sur https://americanexpress.com Allez dans l\u2019onglet \u201cStatements & Activity\u201d, puis s\u00e9lectionnez \u201cView By Year\u201d ou \u201cCustom Date Range\u201d. Cliquez sur l\u2019ic\u00f4ne \u201cDownload your Transactions\u201d. Lorsque vous \u00eates invit\u00e9 \u00e0 choisir le format de t\u00e9l\u00e9chargement, s\u00e9lectionnez \u201cCSV\u201d et cochez la case qui dit \u201cInclude all additional transaction details\u201d. Pour importer ces donn\u00e9es dans Grist : Ouvrez le mod\u00e8le ici . Cliquez sur le bouton \u201cAdd New\u201d et choisissez \u201cImport from file\u201d. Dans la bo\u00eete de dialogue qui s\u2019affiche, changez \u201cTo\u201d table de \u201cNew Table\u201d \u00e0 \u201cActivity\u201d, comme suit : Cliquez sur \u201cImport\u201d, et vous avez termin\u00e9. Vos donn\u00e9es sont pr\u00eates \u00e0 \u00eatre explor\u00e9es. Note Lorsque vous commencez avec un lien de mod\u00e8le, votre copie du document n\u2019est initialement pas sauvegard\u00e9e. Pour conserver ces donn\u00e9es pour plus tard, cliquez sur \u201cSave Copy\u201d, et donnez un nom au document. Vous verrez le document plus tard sur votre page d\u2019accueil Grist \u00e0 https://docs.getgrist.com . Un mod\u00e8le comme celui-ci ne prend pas longtemps \u00e0 pr\u00e9parer. Il utilise une combinaison de tables de synth\u00e8se et de liaison de vues . Vous avez des retours ou des am\u00e9liorations \u00e0 proposer ? Veuillez nous les partager par email \u00e0 support@getgrist.com .","title":"D\u00e9couper et Analyser les D\u00e9penses"},{"location":"examples/2020-07-email-compose/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Pr\u00e9parer des Emails en Utilisant des Formules # Vous savez peut-\u00eatre d\u00e9j\u00e0 que vous pouvez ajouter des champs de lien hypertexte dans Grist. Vous savez peut-\u00eatre aussi que les liens \u201cmailto\u201d ouvrent un programme de messagerie pour cr\u00e9er un nouveau message \u00e9lectronique. Il est moins connu que les liens \u201cmailto\u201d permettent de pr\u00e9-remplir de nombreuses parties du message \u00e9lectronique. Si vous utilisez Grist pour stocker des contacts, vous pouvez essentiellement cr\u00e9er des mod\u00e8les d\u2019email en utilisant des formules Grist. Liens Mailto Simples # Le lien \u201cmailto\u201d le plus simple dans Grist ressemble \u00e0 mailto:someone@example.com . Lorsque la colonne est d\u00e9finie sur Texte et que son format est d\u00e9fini sur Hyperlien, elle s\u2019affiche comme someone@example.com . Si vous avez une table avec les colonnes Full_Name et Email , ajoutez une autre colonne avec cette formule : \"Compose Email mailto:%s\" % ($Email) . D\u00e9finissez son type sur Texte et son format de cellule sur Hyperlien : Vous obtiendrez un lien dans chaque ligne de la personne, sur lequel vous pouvez cliquer pour commencer \u00e0 composer un email \u00e0 cette personne : Voyez un exemple de cela en action ici : Composition Simple . Cc, Bcc, Objet, Corps # En plus d\u2019ouvrir votre programme de messagerie et de remplir le champ \u201c\u00c0\u201d, un lien \u201cmailto\u201d peut remplir d\u2019autres parties de l\u2019email, en utilisant ce format : mailto:?cc=&bcc=&reply-to=&subject=&body= Tous les champs sont facultatifs. Vous pouvez sp\u00e9cifier plusieurs adresses email pour les listes To/Cc/Bcc en les s\u00e9parant par des virgules. Les valeurs de chaque champ doivent \u00eatre encod\u00e9es en pourcentage , ce qui peut \u00eatre fait en Python en utilisant urllib.parse.quote . Pour assembler cela, cette formule produira un hyperlien pour cr\u00e9er un email pr\u00e9-rempli : from urllib.parse import quote return \"Compose mailto:%s?cc=sales@example.com&subject=%s&body=%s\" % ( quote($Email), quote($Subject), quote($Body)) Un exemple en direct de cela est ici : Composition Avanc\u00e9e . Envoyer des Emails \u00e0 Plusieurs Personnes # Les liens email sont tr\u00e8s pratiques pour envoyer des emails \u00e0 un groupe de personnes, comme des \u00e9tudiants dans une classe, ou des personnes sur un certain projet. Par exemple, si vous avez une colonne de r\u00e9f\u00e9rence \u201cProjet\u201d qui lie une personne \u00e0 un projet, alors dans la table des projets, vous pouvez rechercher toutes les personnes associ\u00e9es en utilisant lookupRecords . Vous pouvez ensuite cr\u00e9er un lien pour les envoyer un email en groupe : from urllib.parse import quote people = People.lookupRecords(Project=$id) return \"Email Group mailto:%s\" % quote(\", \".join(people.Email)) Vous pouvez voir cette formule en action dans Composition de Groupe . N\u2019utilisez pas cela pour remplacer une plateforme de marketing par email : comme les emails utilisent votre programme de messagerie habituel, vous ne devriez pas l\u2019utiliser pour envoyer des emails \u00e0 des milliers de personnes. Mais pour de petits groupes, cela peut \u00eatre tr\u00e8s pratique. Configurer le Programme de Messagerie # Si vos liens \u201cmailto\u201d ne fonctionnent pas, ou n\u2019ouvrent pas votre programme de messagerie pr\u00e9f\u00e9r\u00e9, voici un article pour vous aider \u00e0 le configurer : Changer le programme de messagerie par d\u00e9faut . Si vous avez besoin de plus de d\u00e9tails, voici quelques liens suppl\u00e9mentaires : Pour ouvrir un programme de bureau (comme Mail, Thunderbird, etc.) sur un Mac : Instructions . Pour ouvrir un programme de bureau (comme Outlook, etc.) sur Windows : Instructions . Pour ouvrir Gmail dans Chrome et d\u2019autres navigateurs : Instructions . Pour ouvrir un webmail (comme Gmail ou Yahoo! Mail) ou un programme de bureau dans Firefox : Instructions .","title":"Prefill emails"},{"location":"examples/2020-07-email-compose/#preparer-des-emails-en-utilisant-des-formules","text":"Vous savez peut-\u00eatre d\u00e9j\u00e0 que vous pouvez ajouter des champs de lien hypertexte dans Grist. Vous savez peut-\u00eatre aussi que les liens \u201cmailto\u201d ouvrent un programme de messagerie pour cr\u00e9er un nouveau message \u00e9lectronique. Il est moins connu que les liens \u201cmailto\u201d permettent de pr\u00e9-remplir de nombreuses parties du message \u00e9lectronique. Si vous utilisez Grist pour stocker des contacts, vous pouvez essentiellement cr\u00e9er des mod\u00e8les d\u2019email en utilisant des formules Grist.","title":"Pr\u00e9parer des Emails en Utilisant des Formules"},{"location":"examples/2020-07-email-compose/#liens-mailto-simples","text":"Le lien \u201cmailto\u201d le plus simple dans Grist ressemble \u00e0 mailto:someone@example.com . Lorsque la colonne est d\u00e9finie sur Texte et que son format est d\u00e9fini sur Hyperlien, elle s\u2019affiche comme someone@example.com . Si vous avez une table avec les colonnes Full_Name et Email , ajoutez une autre colonne avec cette formule : \"Compose Email mailto:%s\" % ($Email) . D\u00e9finissez son type sur Texte et son format de cellule sur Hyperlien : Vous obtiendrez un lien dans chaque ligne de la personne, sur lequel vous pouvez cliquer pour commencer \u00e0 composer un email \u00e0 cette personne : Voyez un exemple de cela en action ici : Composition Simple .","title":"Liens Mailto Simples"},{"location":"examples/2020-07-email-compose/#cc-bcc-objet-corps","text":"En plus d\u2019ouvrir votre programme de messagerie et de remplir le champ \u201c\u00c0\u201d, un lien \u201cmailto\u201d peut remplir d\u2019autres parties de l\u2019email, en utilisant ce format : mailto:?cc=&bcc=&reply-to=&subject=&body= Tous les champs sont facultatifs. Vous pouvez sp\u00e9cifier plusieurs adresses email pour les listes To/Cc/Bcc en les s\u00e9parant par des virgules. Les valeurs de chaque champ doivent \u00eatre encod\u00e9es en pourcentage , ce qui peut \u00eatre fait en Python en utilisant urllib.parse.quote . Pour assembler cela, cette formule produira un hyperlien pour cr\u00e9er un email pr\u00e9-rempli : from urllib.parse import quote return \"Compose mailto:%s?cc=sales@example.com&subject=%s&body=%s\" % ( quote($Email), quote($Subject), quote($Body)) Un exemple en direct de cela est ici : Composition Avanc\u00e9e .","title":"Cc, Bcc, Objet, Corps"},{"location":"examples/2020-07-email-compose/#envoyer-des-emails-a-plusieurs-personnes","text":"Les liens email sont tr\u00e8s pratiques pour envoyer des emails \u00e0 un groupe de personnes, comme des \u00e9tudiants dans une classe, ou des personnes sur un certain projet. Par exemple, si vous avez une colonne de r\u00e9f\u00e9rence \u201cProjet\u201d qui lie une personne \u00e0 un projet, alors dans la table des projets, vous pouvez rechercher toutes les personnes associ\u00e9es en utilisant lookupRecords . Vous pouvez ensuite cr\u00e9er un lien pour les envoyer un email en groupe : from urllib.parse import quote people = People.lookupRecords(Project=$id) return \"Email Group mailto:%s\" % quote(\", \".join(people.Email)) Vous pouvez voir cette formule en action dans Composition de Groupe . N\u2019utilisez pas cela pour remplacer une plateforme de marketing par email : comme les emails utilisent votre programme de messagerie habituel, vous ne devriez pas l\u2019utiliser pour envoyer des emails \u00e0 des milliers de personnes. Mais pour de petits groupes, cela peut \u00eatre tr\u00e8s pratique.","title":"Envoyer des Emails \u00e0 Plusieurs Personnes"},{"location":"examples/2020-07-email-compose/#configurer-le-programme-de-messagerie","text":"Si vos liens \u201cmailto\u201d ne fonctionnent pas, ou n\u2019ouvrent pas votre programme de messagerie pr\u00e9f\u00e9r\u00e9, voici un article pour vous aider \u00e0 le configurer : Changer le programme de messagerie par d\u00e9faut . Si vous avez besoin de plus de d\u00e9tails, voici quelques liens suppl\u00e9mentaires : Pour ouvrir un programme de bureau (comme Mail, Thunderbird, etc.) sur un Mac : Instructions . Pour ouvrir un programme de bureau (comme Outlook, etc.) sur Windows : Instructions . Pour ouvrir Gmail dans Chrome et d\u2019autres navigateurs : Instructions . Pour ouvrir un webmail (comme Gmail ou Yahoo! Mail) ou un programme de bureau dans Firefox : Instructions .","title":"Configurer le Programme de Messagerie"},{"location":"examples/2020-08-invoices/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Pr\u00e9paration des factures # Si vous enregistrez qui est factur\u00e9 pour quoi dans Grist, il peut \u00eatre pratique de g\u00e9n\u00e9rer des factures directement \u00e0 c\u00f4t\u00e9 de ces enregistrements. Ce tutoriel vous montre comment configurer un document comme celui-ci : Vous pouvez trouver un mod\u00e8le fini \u00e0 l\u2019adresse https://templates.getgrist.com/9NH6D58FmxwP/Invoicing . Si vous souhaitez ajouter des factures \u00e0 un document existant et les faire fonctionner comme vous le souhaitez, comprendre ce tutoriel devrait vous y aider. Configuration d\u2019une table de factures # Tout d\u2019abord, cr\u00e9ez une table pour enregistrer les factures en cr\u00e9ant un document vide et en renommant Table1 en Factures : Maintenant, ajoutons une vue \u00e0 c\u00f4t\u00e9 de la table pour voir les factures termin\u00e9es. Il existe toutes sortes de styles de factures possibles, donc Grist permet aux d\u00e9veloppeurs web de cr\u00e9er les leurs en utilisant des Widgets Personnalis\u00e9s. Nous utiliserons un exemple de style de facture publi\u00e9 par Grist, mais si cela ne correspond pas \u00e0 vos besoins, tout d\u00e9veloppeur web pourrait l\u2019ajuster pour vous. Cliquez sur Ajouter Nouveau , puis Ajouter Widget \u00e0 la Page . Ensuite : Pour S\u00e9lectionner Widget , choisissez Personnalis\u00e9 puisque nous utiliserons un Widget Personnalis\u00e9. Pour S\u00e9lectionner Donn\u00e9es , choisissez Factures puisque nous afficherons les donn\u00e9es de la table des factures. Pour S\u00e9lectionner Par , choisissez FACTURES afin que le Widget Personnalis\u00e9 affiche les donn\u00e9es de la facture actuellement s\u00e9lectionn\u00e9e par l\u2019utilisateur. Super, nous avons maintenant deux vues, une Vue Table qui contiendra les donn\u00e9es des factures, et une Vue Personnalis\u00e9e qui affichera ces donn\u00e9es sous forme de facture bien format\u00e9e et imprimable. La Vue Personnalis\u00e9e commence par \u00eatre vide ; s\u00e9lectionnez Options du Widget pour sp\u00e9cifier ce que nous voulons y mettre : Dans la section PERSONNALIS\u00c9 o\u00f9 il est indiqu\u00e9 URL compl\u00e8te de la page web \u00e0 afficher , mettez ce lien : https://gristlabs.github.io/grist-widget/invoices/ Et r\u00e9glez Acc\u00e8s sur lire table . Cela accorde au Widget Personnalis\u00e9 l\u2019acc\u00e8s en lecture \u00e0 la table des Factures. Maintenant, placez ce que vous voulez dans une ligne de la table des Factures (j\u2019ai juste ajout\u00e9 le num\u00e9ro 1 ). Une facture incompl\u00e8te appara\u00eetra imm\u00e9diatement : La facture incompl\u00e8te montre quels noms de colonnes utiliser pour contr\u00f4ler quelles parties de la facture. Une bo\u00eete noire suppl\u00e9mentaire montre quelles colonnes le widget comprend, quelles colonnes il ignore, et quelles colonnes suppl\u00e9mentaires le widget pourrait utiliser. Actuellement, il dit qu\u2019il ne reconna\u00eet aucune des colonnes pr\u00e9sentes, qu\u2019il attend des colonnes comme Num\u00e9ro , Client , Articles , etc., et qu\u2019il ignore les colonnes par d\u00e9faut A , B et C dans la table des Factures. En regardant le d\u00e9but de la facture, nous voyons un espace pour un num\u00e9ro de facture, NUM\u00c9RO DE FACTURE : #Num\u00e9ro . Renommons donc la colonne A en Num\u00e9ro , nous pourrions laisser la valeur \u00e0 1, mais cela donnerait l\u2019impression que nous n\u2019avons pas encore fait beaucoup d\u2019affaires. Je vais choisir de d\u00e9finir le num\u00e9ro de facture comme \u00e9tant $id + 51371 , o\u00f9 $id est un identifiant num\u00e9rique auto-incr\u00e9ment\u00e9 attribu\u00e9 \u00e0 chaque ligne. Mais vous pouvez le d\u00e9finir manuellement ou avec une formule diff\u00e9rente. D\u00e8s qu\u2019il est d\u00e9fini, la facture se met \u00e0 jour : La prochaine colonne sugg\u00e9r\u00e9e par la bo\u00eete d\u2019aide est Client , alors renommons la colonne B en Client . Plus tard, nous donnerons des informations sur le client de mani\u00e8re structur\u00e9e, mais pour l\u2019instant, mettons juste du texte ici (utilisez Shift + Entr\u00e9e pour ins\u00e9rer des sauts de ligne) : Super, maintenant la bo\u00eete Client est remplie. La prochaine colonne sugg\u00e9r\u00e9e est Articles , alors renommons la colonne C en Articles . Plus tard, nous donnerons des informations sur les articles de mani\u00e8re structur\u00e9e, mais pour l\u2019instant, mettons juste du texte ici : Et maintenant la Description est d\u00e9finie. Il nous manque un total, alors ajoutons une colonne appel\u00e9e Total et d\u00e9finissons-la \u00e0 100 : La facture ne se mettra pas \u00e0 jour imm\u00e9diatement. C\u2019est la premi\u00e8re nouvelle colonne que nous avons ajout\u00e9e - jusqu\u2019\u00e0 pr\u00e9sent, nous les avons renomm\u00e9es. Lorsque nous avons cr\u00e9\u00e9 le Widget Personnalis\u00e9, il a re\u00e7u l\u2019acc\u00e8s aux colonnes qui existaient au moment de la cr\u00e9ation. Pour permettre au widget de voir la nouvelle colonne, ouvrez \u00e0 nouveau Options du Widget et d\u00e9placez Total de Colonnes Cach\u00e9es \u00e0 Colonnes Visibles : Super, la facture s\u2019est mise \u00e0 jour. Maintenant, d\u00e9finissons qui \u00e9met la facture en ajoutant une colonne \u00c9metteur (n\u2019oubliez pas de la rendre visible pour le widget via Options du Widget ). Comme derni\u00e8re \u00e9tape pour cr\u00e9er une facture utilisable, ajoutons une colonne \u00c9mise et mettons-y la date d\u2019aujourd\u2019hui (n\u2019oubliez pas de la rendre visible pour le widget via Options du Widget ). D\u00e8s que la facture a une date, la bo\u00eete d\u2019aide noire dispara\u00eetra : D\u2019accord ! Si quelqu\u2019un m\u2019envoyait cela, je le paierais. Vous devriez me donner un coup de pouce en lui donnant une date d\u2019\u00e9ch\u00e9ance. Ajoutons une colonne \u00c9ch\u00e9ance et d\u00e9finissons-la \u00e0 un mois \u00e0 partir de la date \u00c9mise . N\u2019oubliez pas de rendre la colonne \u00c9ch\u00e9ance visible pour le widget via Options du Widget . Assurez-vous \u00e9galement de d\u00e9finir le Type de Colonne pour \u00c9mise sur Date sinon vous ne pourrez pas faire de calculs de date dessus (ce sera juste une cha\u00eene de caract\u00e8res). S\u2019il y a des instructions sp\u00e9ciales \u00e0 accompagner avec la facture, nous pouvons ajouter une colonne Note . N\u2019oubliez pas de la rendre visible pour le widget via Options du Widget . Entrer les informations du client # Maintenant, faisons deux changements utiles \u00e0 la configuration de la facture : Mettre les informations du client dans une table s\u00e9par\u00e9e, pour ne pas avoir \u00e0 ressaisir leur adresse \u00e0 chaque fois que nous les facturons (et nous pouvons importer les adresses en vrac). Entrer les articles et les prix dans une table, pour que les factures multi-articles soient faciles \u00e0 faire (et nous pouvons utiliser des formules et des recherches pour les prix si nous le souhaitons). Avant de le faire, nous devons informer Grist que le contenu de la facture d\u00e9pendra de ces autres tables, afin qu\u2019il puisse la mettre \u00e0 jour lorsque quelque chose change, et s\u2019assurer que la facture ait acc\u00e8s \u00e0 tout ce dont elle a besoin. Cr\u00e9ez une colonne nomm\u00e9e R\u00e9f\u00e9rences et donnez-lui cette formule : = RECORD(rec, expand_refs=1) Cela signifie \u201cprendre l\u2019enregistrement actuel et l\u2019emballer, y compris tout ce qu\u2019il r\u00e9f\u00e9rence directement\u201d. \u00c9tant donn\u00e9 que Grist est une feuille de calcul, cela implique \u00e9galement \u201cmettre \u00e0 jour tout ce qui d\u00e9pend de cette colonne si quelque chose dans les r\u00e9f\u00e9rences change\u201d. N\u2019oubliez pas de rendre la colonne R\u00e9f\u00e9rences visible pour le widget via Options du Widget , afin que le widget soit mis \u00e0 jour au fur et \u00e0 mesure que nous ajoutons et modifions le mat\u00e9riel r\u00e9f\u00e9renc\u00e9. Lorsque le widget de facture voit une colonne nomm\u00e9e \u201cR\u00e9f\u00e9rences\u201d, il remplit la facture en utilisant les valeurs \u201cemball\u00e9es\u201d dans cette colonne, plut\u00f4t que les champs individuels de la facture. Le b\u00e9n\u00e9fice sera vu dans l\u2019\u00e9tape suivante, car ces valeurs emball\u00e9es peuvent inclure des donn\u00e9es provenant d\u2019enregistrements li\u00e9s. Ensuite, pla\u00e7ons les informations du client dans une table s\u00e9par\u00e9e. Ajoutez une nouvelle table \u00e0 la page pour entrer les informations de l\u2019entreprise en cliquant sur Ajouter Nouveau , Ajouter Widget \u00e0 la Page , puis S\u00e9lectionner Widget > Table et S\u00e9lectionner Donn\u00e9es > Nouvelle Table : Puis renommez la table en Entreprises . Vider \u00e9galement la colonne Client pour que nous puissions voir l\u2019aide sur ce que le widget attend l\u00e0 : Le widget sugg\u00e8re les colonnes Nom , Rue1 , Rue2 , Ville , \u00c9tat et Code Postal . Fournissons donc ces colonnes dans notre table Entreprises , et remplissons-les pour un client exemple. Ensuite, placez le m\u00eame Nom dans la colonne Client , et dans Options de Colonne d\u00e9finissez le Type de Colonne sur R\u00e9f\u00e9rence . R\u00e9f\u00e9rez-vous \u00e0 Entreprises Nom si Grist ne le devine pas automatiquement. Une fois que vous appuyez sur Appliquer , vous verrez une section Client bien format\u00e9e. Entrer les informations de l\u2019\u00e9metteur # Nous pourrions faire la m\u00eame chose pour la colonne \u00c9metteur que nous avons fait pour la colonne Client , et en faire une r\u00e9f\u00e9rence \u00e0 la table Entreprises ou une table s\u00e9par\u00e9e. Cependant, si vous utilisez toujours le m\u00eame nom et la m\u00eame adresse pour votre entreprise, vous pouvez \u00e9viter de configurer une r\u00e9f\u00e9rence en entrant une formule comme celle-ci dans la colonne \u00c9metteur (commencez \u00e0 taper avec = pour en faire une formule) : { \"Nom\": \"Applaudissements Tonitruants\", \"Rue1\": \"6502 Route Automatis\u00e9e\", \"Ville\": \"New York\", \"\u00c9tat\": \"NY\", \"Code Postal\": \"10003\", \"Email\": \"applaudissements@tonnerre.com\", \"T\u00e9l\u00e9phone\": \"+1-800-YAY-YAYS\", \"Site Web\": \"applaudissements.com\" } Puis d\u00e9finissez le Type de Colonne pour \u00c9metteur sur Any dans le panneau de droite. Remarquez comment les emails, les num\u00e9ros de t\u00e9l\u00e9phone et les liens sont sp\u00e9cialement format\u00e9s par le widget. Entrer les informations des articles # Maintenant, configurons la liste des articles et des prix qui est au c\u0153ur d\u2019une facture. Videz la colonne Articles pour voir ce que nous pouvons y mettre. Elle montrera que Articles peut \u00eatre une liste, o\u00f9 chaque article a une Description , un Prix , une Quantit\u00e9 et un Total . Ajoutons donc une table Articles comme nous avons ajout\u00e9 Entreprises , et donnons-lui ces quatre colonnes. Nous pouvons d\u00e9finir Total avec cette formule simple : $Prix * $Quantit\u00e9 Maintenant, nous devons tirer ces articles dans la table Factures pour que le Widget Personnalis\u00e9 y ait acc\u00e8s. D\u00e9finissez la colonne Articles sur la formule Articles.lookupRecords() , puis r\u00e9initialisez son type de colonne sur Any . Cette formule n\u00e9cessite un peu plus de travail, ce que nous ferons bient\u00f4t, mais commen\u00e7ons par cela. Super, notre facture se met \u00e0 jour correctement ! Supprimez la colonne Total pour obtenir une colonne calcul\u00e9e automatiquement : Il est probablement plus confortable d\u2019\u00e9diter les factures comme une Vue Fiche plut\u00f4t qu\u2019une Vue Table, alors changeons cela en utilisant Options du Widget , Table , Changer Widget , Fiche , Enregistrer . Vous pouvez personnaliser la mise en page de la fiche \u00e0 votre go\u00fbt. Pour ajouter une nouvelle facture, cliquez sur le petit + au-dessus de la fiche des factures, d\u00e9finissez une date \u00c9mise , et choisissez soit le Client existant soit ajoutez un nouveau. Une fois que nous avons une deuxi\u00e8me facture, il devient clair que nous avons n\u00e9glig\u00e9 la formule pour collecter les articles de la facture - toutes les factures contiennent tous les articles. Pas de probl\u00e8me, nous pouvons \u00eatre plus sp\u00e9cifiques en ajoutant une colonne Facture aux Articles et en la configurant pour faire r\u00e9f\u00e9rence \u00e0 des Factures sp\u00e9cifiques : Une fois cela fait, nous pouvons saupoudrer un peu de poussi\u00e8re de f\u00e9e Grist, et aller dans Options du Widget pour la Vue Table ARTICLES , cliquer sur Changer Widget , et d\u00e9finir S\u00c9LECTIONNER PAR sur FICHE FACTURES . Une fois cela enregistr\u00e9, seuls les articles de la facture actuellement s\u00e9lectionn\u00e9e sont affich\u00e9s. Encore mieux, lorsque vous ajoutez de nouveaux articles, la colonne facture est automatiquement d\u00e9finie sur la facture que vous visualisez. Vous pouvez donc simplement masquer la colonne facture et l\u2019oublier. Maintenant, informons le Widget Personnalis\u00e9 des articles \u00e0 utiliser en mettant \u00e0 jour la formule Articles pour \u00eatre plus pr\u00e9cise : Articles.lookupRecords(Facture=$id) Avec cela, entrer de nouvelles factures devient un jeu d\u2019enfant ! Cliquez sur + pour ajouter une nouvelle fiche de facture. Choisissez le client, d\u00e9finissez la date d\u2019\u00e9mission. Ajoutez des articles. Termin\u00e9 ! Finition # Vous pouvez ajuster la configuration \u00e0 votre go\u00fbt. Par exemple, je choisirais d\u2019ajouter de nouveaux clients sur une page s\u00e9par\u00e9e ( B ou Entreprises sur le panneau de gauche) car c\u2019est relativement peu fr\u00e9quent ; vous pourriez choisir de garder cela sur la m\u00eame page. Je n\u2019ai pas besoin de d\u00e9ductions ou de taxes, si vous en avez besoin vous pourriez ajouter des colonnes et/ou des formules pour cela. Le widget de facture personnalis\u00e9 fonctionne pour moi tel quel, mais si j\u2019avais besoin de modifier quelque chose, je pourrais copier le d\u00e9p\u00f4t GitHub dans lequel il se trouve et le changer un peu (ou engager un d\u00e9veloppeur web pour le faire pour moi - ils n\u2019ont pas besoin d\u2019\u00eatre des experts Grist). Pour les d\u00e9veloppeurs int\u00e9ress\u00e9s, le code GitHub est ici : https://github.com/gristlabs/grist-widget/tree/master/invoices . Amusez-vous bien et bonne chance pour \u00eatre pay\u00e9 !","title":"Prepare invoices"},{"location":"examples/2020-08-invoices/#preparation-des-factures","text":"Si vous enregistrez qui est factur\u00e9 pour quoi dans Grist, il peut \u00eatre pratique de g\u00e9n\u00e9rer des factures directement \u00e0 c\u00f4t\u00e9 de ces enregistrements. Ce tutoriel vous montre comment configurer un document comme celui-ci : Vous pouvez trouver un mod\u00e8le fini \u00e0 l\u2019adresse https://templates.getgrist.com/9NH6D58FmxwP/Invoicing . Si vous souhaitez ajouter des factures \u00e0 un document existant et les faire fonctionner comme vous le souhaitez, comprendre ce tutoriel devrait vous y aider.","title":"Pr\u00e9paration des factures"},{"location":"examples/2020-08-invoices/#configuration-dune-table-de-factures","text":"Tout d\u2019abord, cr\u00e9ez une table pour enregistrer les factures en cr\u00e9ant un document vide et en renommant Table1 en Factures : Maintenant, ajoutons une vue \u00e0 c\u00f4t\u00e9 de la table pour voir les factures termin\u00e9es. Il existe toutes sortes de styles de factures possibles, donc Grist permet aux d\u00e9veloppeurs web de cr\u00e9er les leurs en utilisant des Widgets Personnalis\u00e9s. Nous utiliserons un exemple de style de facture publi\u00e9 par Grist, mais si cela ne correspond pas \u00e0 vos besoins, tout d\u00e9veloppeur web pourrait l\u2019ajuster pour vous. Cliquez sur Ajouter Nouveau , puis Ajouter Widget \u00e0 la Page . Ensuite : Pour S\u00e9lectionner Widget , choisissez Personnalis\u00e9 puisque nous utiliserons un Widget Personnalis\u00e9. Pour S\u00e9lectionner Donn\u00e9es , choisissez Factures puisque nous afficherons les donn\u00e9es de la table des factures. Pour S\u00e9lectionner Par , choisissez FACTURES afin que le Widget Personnalis\u00e9 affiche les donn\u00e9es de la facture actuellement s\u00e9lectionn\u00e9e par l\u2019utilisateur. Super, nous avons maintenant deux vues, une Vue Table qui contiendra les donn\u00e9es des factures, et une Vue Personnalis\u00e9e qui affichera ces donn\u00e9es sous forme de facture bien format\u00e9e et imprimable. La Vue Personnalis\u00e9e commence par \u00eatre vide ; s\u00e9lectionnez Options du Widget pour sp\u00e9cifier ce que nous voulons y mettre : Dans la section PERSONNALIS\u00c9 o\u00f9 il est indiqu\u00e9 URL compl\u00e8te de la page web \u00e0 afficher , mettez ce lien : https://gristlabs.github.io/grist-widget/invoices/ Et r\u00e9glez Acc\u00e8s sur lire table . Cela accorde au Widget Personnalis\u00e9 l\u2019acc\u00e8s en lecture \u00e0 la table des Factures. Maintenant, placez ce que vous voulez dans une ligne de la table des Factures (j\u2019ai juste ajout\u00e9 le num\u00e9ro 1 ). Une facture incompl\u00e8te appara\u00eetra imm\u00e9diatement : La facture incompl\u00e8te montre quels noms de colonnes utiliser pour contr\u00f4ler quelles parties de la facture. Une bo\u00eete noire suppl\u00e9mentaire montre quelles colonnes le widget comprend, quelles colonnes il ignore, et quelles colonnes suppl\u00e9mentaires le widget pourrait utiliser. Actuellement, il dit qu\u2019il ne reconna\u00eet aucune des colonnes pr\u00e9sentes, qu\u2019il attend des colonnes comme Num\u00e9ro , Client , Articles , etc., et qu\u2019il ignore les colonnes par d\u00e9faut A , B et C dans la table des Factures. En regardant le d\u00e9but de la facture, nous voyons un espace pour un num\u00e9ro de facture, NUM\u00c9RO DE FACTURE : #Num\u00e9ro . Renommons donc la colonne A en Num\u00e9ro , nous pourrions laisser la valeur \u00e0 1, mais cela donnerait l\u2019impression que nous n\u2019avons pas encore fait beaucoup d\u2019affaires. Je vais choisir de d\u00e9finir le num\u00e9ro de facture comme \u00e9tant $id + 51371 , o\u00f9 $id est un identifiant num\u00e9rique auto-incr\u00e9ment\u00e9 attribu\u00e9 \u00e0 chaque ligne. Mais vous pouvez le d\u00e9finir manuellement ou avec une formule diff\u00e9rente. D\u00e8s qu\u2019il est d\u00e9fini, la facture se met \u00e0 jour : La prochaine colonne sugg\u00e9r\u00e9e par la bo\u00eete d\u2019aide est Client , alors renommons la colonne B en Client . Plus tard, nous donnerons des informations sur le client de mani\u00e8re structur\u00e9e, mais pour l\u2019instant, mettons juste du texte ici (utilisez Shift + Entr\u00e9e pour ins\u00e9rer des sauts de ligne) : Super, maintenant la bo\u00eete Client est remplie. La prochaine colonne sugg\u00e9r\u00e9e est Articles , alors renommons la colonne C en Articles . Plus tard, nous donnerons des informations sur les articles de mani\u00e8re structur\u00e9e, mais pour l\u2019instant, mettons juste du texte ici : Et maintenant la Description est d\u00e9finie. Il nous manque un total, alors ajoutons une colonne appel\u00e9e Total et d\u00e9finissons-la \u00e0 100 : La facture ne se mettra pas \u00e0 jour imm\u00e9diatement. C\u2019est la premi\u00e8re nouvelle colonne que nous avons ajout\u00e9e - jusqu\u2019\u00e0 pr\u00e9sent, nous les avons renomm\u00e9es. Lorsque nous avons cr\u00e9\u00e9 le Widget Personnalis\u00e9, il a re\u00e7u l\u2019acc\u00e8s aux colonnes qui existaient au moment de la cr\u00e9ation. Pour permettre au widget de voir la nouvelle colonne, ouvrez \u00e0 nouveau Options du Widget et d\u00e9placez Total de Colonnes Cach\u00e9es \u00e0 Colonnes Visibles : Super, la facture s\u2019est mise \u00e0 jour. Maintenant, d\u00e9finissons qui \u00e9met la facture en ajoutant une colonne \u00c9metteur (n\u2019oubliez pas de la rendre visible pour le widget via Options du Widget ). Comme derni\u00e8re \u00e9tape pour cr\u00e9er une facture utilisable, ajoutons une colonne \u00c9mise et mettons-y la date d\u2019aujourd\u2019hui (n\u2019oubliez pas de la rendre visible pour le widget via Options du Widget ). D\u00e8s que la facture a une date, la bo\u00eete d\u2019aide noire dispara\u00eetra : D\u2019accord ! Si quelqu\u2019un m\u2019envoyait cela, je le paierais. Vous devriez me donner un coup de pouce en lui donnant une date d\u2019\u00e9ch\u00e9ance. Ajoutons une colonne \u00c9ch\u00e9ance et d\u00e9finissons-la \u00e0 un mois \u00e0 partir de la date \u00c9mise . N\u2019oubliez pas de rendre la colonne \u00c9ch\u00e9ance visible pour le widget via Options du Widget . Assurez-vous \u00e9galement de d\u00e9finir le Type de Colonne pour \u00c9mise sur Date sinon vous ne pourrez pas faire de calculs de date dessus (ce sera juste une cha\u00eene de caract\u00e8res). S\u2019il y a des instructions sp\u00e9ciales \u00e0 accompagner avec la facture, nous pouvons ajouter une colonne Note . N\u2019oubliez pas de la rendre visible pour le widget via Options du Widget .","title":"Configuration d’une table de factures"},{"location":"examples/2020-08-invoices/#entrer-les-informations-du-client","text":"Maintenant, faisons deux changements utiles \u00e0 la configuration de la facture : Mettre les informations du client dans une table s\u00e9par\u00e9e, pour ne pas avoir \u00e0 ressaisir leur adresse \u00e0 chaque fois que nous les facturons (et nous pouvons importer les adresses en vrac). Entrer les articles et les prix dans une table, pour que les factures multi-articles soient faciles \u00e0 faire (et nous pouvons utiliser des formules et des recherches pour les prix si nous le souhaitons). Avant de le faire, nous devons informer Grist que le contenu de la facture d\u00e9pendra de ces autres tables, afin qu\u2019il puisse la mettre \u00e0 jour lorsque quelque chose change, et s\u2019assurer que la facture ait acc\u00e8s \u00e0 tout ce dont elle a besoin. Cr\u00e9ez une colonne nomm\u00e9e R\u00e9f\u00e9rences et donnez-lui cette formule : = RECORD(rec, expand_refs=1) Cela signifie \u201cprendre l\u2019enregistrement actuel et l\u2019emballer, y compris tout ce qu\u2019il r\u00e9f\u00e9rence directement\u201d. \u00c9tant donn\u00e9 que Grist est une feuille de calcul, cela implique \u00e9galement \u201cmettre \u00e0 jour tout ce qui d\u00e9pend de cette colonne si quelque chose dans les r\u00e9f\u00e9rences change\u201d. N\u2019oubliez pas de rendre la colonne R\u00e9f\u00e9rences visible pour le widget via Options du Widget , afin que le widget soit mis \u00e0 jour au fur et \u00e0 mesure que nous ajoutons et modifions le mat\u00e9riel r\u00e9f\u00e9renc\u00e9. Lorsque le widget de facture voit une colonne nomm\u00e9e \u201cR\u00e9f\u00e9rences\u201d, il remplit la facture en utilisant les valeurs \u201cemball\u00e9es\u201d dans cette colonne, plut\u00f4t que les champs individuels de la facture. Le b\u00e9n\u00e9fice sera vu dans l\u2019\u00e9tape suivante, car ces valeurs emball\u00e9es peuvent inclure des donn\u00e9es provenant d\u2019enregistrements li\u00e9s. Ensuite, pla\u00e7ons les informations du client dans une table s\u00e9par\u00e9e. Ajoutez une nouvelle table \u00e0 la page pour entrer les informations de l\u2019entreprise en cliquant sur Ajouter Nouveau , Ajouter Widget \u00e0 la Page , puis S\u00e9lectionner Widget > Table et S\u00e9lectionner Donn\u00e9es > Nouvelle Table : Puis renommez la table en Entreprises . Vider \u00e9galement la colonne Client pour que nous puissions voir l\u2019aide sur ce que le widget attend l\u00e0 : Le widget sugg\u00e8re les colonnes Nom , Rue1 , Rue2 , Ville , \u00c9tat et Code Postal . Fournissons donc ces colonnes dans notre table Entreprises , et remplissons-les pour un client exemple. Ensuite, placez le m\u00eame Nom dans la colonne Client , et dans Options de Colonne d\u00e9finissez le Type de Colonne sur R\u00e9f\u00e9rence . R\u00e9f\u00e9rez-vous \u00e0 Entreprises Nom si Grist ne le devine pas automatiquement. Une fois que vous appuyez sur Appliquer , vous verrez une section Client bien format\u00e9e.","title":"Entrer les informations du client"},{"location":"examples/2020-08-invoices/#entrer-les-informations-de-lemetteur","text":"Nous pourrions faire la m\u00eame chose pour la colonne \u00c9metteur que nous avons fait pour la colonne Client , et en faire une r\u00e9f\u00e9rence \u00e0 la table Entreprises ou une table s\u00e9par\u00e9e. Cependant, si vous utilisez toujours le m\u00eame nom et la m\u00eame adresse pour votre entreprise, vous pouvez \u00e9viter de configurer une r\u00e9f\u00e9rence en entrant une formule comme celle-ci dans la colonne \u00c9metteur (commencez \u00e0 taper avec = pour en faire une formule) : { \"Nom\": \"Applaudissements Tonitruants\", \"Rue1\": \"6502 Route Automatis\u00e9e\", \"Ville\": \"New York\", \"\u00c9tat\": \"NY\", \"Code Postal\": \"10003\", \"Email\": \"applaudissements@tonnerre.com\", \"T\u00e9l\u00e9phone\": \"+1-800-YAY-YAYS\", \"Site Web\": \"applaudissements.com\" } Puis d\u00e9finissez le Type de Colonne pour \u00c9metteur sur Any dans le panneau de droite. Remarquez comment les emails, les num\u00e9ros de t\u00e9l\u00e9phone et les liens sont sp\u00e9cialement format\u00e9s par le widget.","title":"Entrer les informations de l’\u00e9metteur"},{"location":"examples/2020-08-invoices/#entrer-les-informations-des-articles","text":"Maintenant, configurons la liste des articles et des prix qui est au c\u0153ur d\u2019une facture. Videz la colonne Articles pour voir ce que nous pouvons y mettre. Elle montrera que Articles peut \u00eatre une liste, o\u00f9 chaque article a une Description , un Prix , une Quantit\u00e9 et un Total . Ajoutons donc une table Articles comme nous avons ajout\u00e9 Entreprises , et donnons-lui ces quatre colonnes. Nous pouvons d\u00e9finir Total avec cette formule simple : $Prix * $Quantit\u00e9 Maintenant, nous devons tirer ces articles dans la table Factures pour que le Widget Personnalis\u00e9 y ait acc\u00e8s. D\u00e9finissez la colonne Articles sur la formule Articles.lookupRecords() , puis r\u00e9initialisez son type de colonne sur Any . Cette formule n\u00e9cessite un peu plus de travail, ce que nous ferons bient\u00f4t, mais commen\u00e7ons par cela. Super, notre facture se met \u00e0 jour correctement ! Supprimez la colonne Total pour obtenir une colonne calcul\u00e9e automatiquement : Il est probablement plus confortable d\u2019\u00e9diter les factures comme une Vue Fiche plut\u00f4t qu\u2019une Vue Table, alors changeons cela en utilisant Options du Widget , Table , Changer Widget , Fiche , Enregistrer . Vous pouvez personnaliser la mise en page de la fiche \u00e0 votre go\u00fbt. Pour ajouter une nouvelle facture, cliquez sur le petit + au-dessus de la fiche des factures, d\u00e9finissez une date \u00c9mise , et choisissez soit le Client existant soit ajoutez un nouveau. Une fois que nous avons une deuxi\u00e8me facture, il devient clair que nous avons n\u00e9glig\u00e9 la formule pour collecter les articles de la facture - toutes les factures contiennent tous les articles. Pas de probl\u00e8me, nous pouvons \u00eatre plus sp\u00e9cifiques en ajoutant une colonne Facture aux Articles et en la configurant pour faire r\u00e9f\u00e9rence \u00e0 des Factures sp\u00e9cifiques : Une fois cela fait, nous pouvons saupoudrer un peu de poussi\u00e8re de f\u00e9e Grist, et aller dans Options du Widget pour la Vue Table ARTICLES , cliquer sur Changer Widget , et d\u00e9finir S\u00c9LECTIONNER PAR sur FICHE FACTURES . Une fois cela enregistr\u00e9, seuls les articles de la facture actuellement s\u00e9lectionn\u00e9e sont affich\u00e9s. Encore mieux, lorsque vous ajoutez de nouveaux articles, la colonne facture est automatiquement d\u00e9finie sur la facture que vous visualisez. Vous pouvez donc simplement masquer la colonne facture et l\u2019oublier. Maintenant, informons le Widget Personnalis\u00e9 des articles \u00e0 utiliser en mettant \u00e0 jour la formule Articles pour \u00eatre plus pr\u00e9cise : Articles.lookupRecords(Facture=$id) Avec cela, entrer de nouvelles factures devient un jeu d\u2019enfant ! Cliquez sur + pour ajouter une nouvelle fiche de facture. Choisissez le client, d\u00e9finissez la date d\u2019\u00e9mission. Ajoutez des articles. Termin\u00e9 !","title":"Entrer les informations des articles"},{"location":"examples/2020-08-invoices/#finition","text":"Vous pouvez ajuster la configuration \u00e0 votre go\u00fbt. Par exemple, je choisirais d\u2019ajouter de nouveaux clients sur une page s\u00e9par\u00e9e ( B ou Entreprises sur le panneau de gauche) car c\u2019est relativement peu fr\u00e9quent ; vous pourriez choisir de garder cela sur la m\u00eame page. Je n\u2019ai pas besoin de d\u00e9ductions ou de taxes, si vous en avez besoin vous pourriez ajouter des colonnes et/ou des formules pour cela. Le widget de facture personnalis\u00e9 fonctionne pour moi tel quel, mais si j\u2019avais besoin de modifier quelque chose, je pourrais copier le d\u00e9p\u00f4t GitHub dans lequel il se trouve et le changer un peu (ou engager un d\u00e9veloppeur web pour le faire pour moi - ils n\u2019ont pas besoin d\u2019\u00eatre des experts Grist). Pour les d\u00e9veloppeurs int\u00e9ress\u00e9s, le code GitHub est ici : https://github.com/gristlabs/grist-widget/tree/master/invoices . Amusez-vous bien et bonne chance pour \u00eatre pay\u00e9 !","title":"Finition"},{"location":"examples/2020-09-payroll/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Suivi de la Paie # Si vous avez des employ\u00e9s, alors vous suivez la paie. Vous utilisez peut-\u00eatre un service de paie, et il vous demande probablement de saisir les heures de chaque employ\u00e9 une fois par mois. C\u2019est l\u00e0 que Grist peut vous aider \u00e0 suivre les choses de mani\u00e8re pratique et \u00e0 r\u00e9duire les erreurs, surtout si vous avez des employ\u00e9s \u00e0 temps partiel. Le Mod\u00e8le de Paie # Le mod\u00e8le finalis\u00e9 est ici : https://templates.getgrist.com/5pHLanQNThxk/Payroll . N\u2019h\u00e9sitez pas \u00e0 l\u2019ouvrir dans une fen\u00eatre s\u00e9par\u00e9e et \u00e0 essayer les choses vous-m\u00eame au fur et \u00e0 mesure. Le mod\u00e8le r\u00e9pond \u00e0 quelques besoins : Nous devons pouvoir ajouter des employ\u00e9s et conserver leurs informations de contact de base. Nous devons d\u00e9finir les taux auxquels les gens sont pay\u00e9s, et ces taux peuvent changer au fil du temps. Dans notre exemple, les taux varient \u00e9galement selon le r\u00f4le : la m\u00eame personne peut travailler comme Instructeur dans un programme et comme Coordinateur dans un autre, \u00e0 des taux diff\u00e9rents. Nous devons saisir les heures de chaque personne. Nous devons obtenir les totaux mensuels, \u00e0 la fois pour saisir les donn\u00e9es dans notre service de paie et pour v\u00e9rifier que tout correspond. La Page \u201cPersonnes\u201d # Commen\u00e7ons par l\u2019onglet \u201cPersonnes\u201d dans l\u2019exemple. Il r\u00e9pond \u00e0 nos besoins (1), (2) et (3). En haut, nous avons une liste de personnes, avec des informations de contact telles que l\u2019adresse et le num\u00e9ro de t\u00e9l\u00e9phone. Pour ajouter une nouvelle personne, cliquez dans la derni\u00e8re ligne de la table PERSONNES et saisissez les donn\u00e9es. En dessous, nous avons une fiche pour la personne s\u00e9lectionn\u00e9e \u2013 un moyen pratique de visualiser ou de mettre \u00e0 jour l\u2019enregistrement de la personne s\u00e9lectionn\u00e9e. \u00c0 c\u00f4t\u00e9, il y a les taux pour cette personne. Nous suivons tous les taux, pas seulement le plus r\u00e9cent, ainsi que la date d\u2019effet de chaque taux. Pour ajouter un nouveau taux, s\u00e9lectionnez une personne, cliquez dans la derni\u00e8re ligne de la table TAUX et saisissez la date d\u2019effet dans la colonne D\u00e9but du Taux (peut-\u00eatre en utilisant le raccourci pour la date d\u2019aujourd\u2019hui : \u2318 + ; (point-virgule) sur Mac ou Ctrl + ; sur Windows). D\u00e9finissez le R\u00f4le auquel il s\u2019applique et le Taux Horaire . Le champ Commentaire est pour vos propres notes. Ne modifiez pas les valeurs des taux existants, sinon les calculs de paie pass\u00e9s seront affect\u00e9s. Lorsque vous accordez une augmentation \u00e0 quelqu\u2019un, ajoutez-la comme une nouvelle ligne. De cette fa\u00e7on, l\u2019historique complet est conserv\u00e9 et disponible pour r\u00e9f\u00e9rence. La Page \u201cPaie\u201d # Pour saisir les heures de paie, passez \u00e0 la page \u201cPaie\u201d. C\u2019est la t\u00e2che la plus courante, nous avons donc plac\u00e9 cette page en premier dans la liste des pages pour qu\u2019elle s\u2019ouvre par d\u00e9faut lorsque vous ouvrez le document. Faites d\u00e9filer jusqu\u2019en bas (vous pouvez utiliser ces raccourcis pratiques : \u2318 \u2193 sur Mac, Ctrl + \u2193 sur Windows). Pour ajouter une entr\u00e9e de paie, saisissez la date (ou utilisez le s\u00e9lecteur de date), s\u00e9lectionnez la personne en utilisant l\u2019auto-compl\u00e9tion, s\u00e9lectionnez son r\u00f4le et saisissez ses heures. Les quelques colonnes suivantes recherchent automatiquement le taux pertinent et calculent le paiement. Si vous souhaitez saisir des heures pour un intervalle de dates, par exemple pour une semaine particuli\u00e8re ou pour quelqu\u2019un travaillant \u00e0 temps plein ce mois-ci, vous pouvez utiliser Date comme date de d\u00e9but et saisir \u00e9galement une Date de Fin . L\u2019\u00e9l\u00e9ment int\u00e9ressant de cette page est la fa\u00e7on dont le taux Par Heure est recherch\u00e9. Vous n\u2019avez pas besoin de vous en soucier si vous utilisez simplement le mod\u00e8le, mais si vous aimez regarder sous le capot ou si vous avez besoin de personnaliser cela davantage selon vos besoins, je vais l\u2019expliquer en d\u00e9tail ci-dessous. La Page \u201cP\u00e9riodes de Paie\u201d # Ici, les totaux pour chaque p\u00e9riode sont automatiquement totalis\u00e9s pour r\u00e9pondre \u00e0 notre besoin (5) \u2014 voir un aper\u00e7u, saisir des donn\u00e9es dans un syst\u00e8me de paie et v\u00e9rifier que tout correspond. La derni\u00e8re p\u00e9riode de paie (dans notre cas, un mois) se trouve en haut de la table en haut \u00e0 gauche. Vous pouvez s\u00e9lectionner n\u2019importe quelle p\u00e9riode de paie pour voir un graphique circulaire avec un aper\u00e7u des paiements r\u00e9partis par r\u00f4le et une table de combien chaque personne a gagn\u00e9 ce mois-l\u00e0. Les noms et les heures dans la derni\u00e8re table sont g\u00e9n\u00e9ralement tout ce dont un service de paie a besoin. De plus, nous avons inclus une colonne Dates r\u00e9sumant les dates travaill\u00e9es ce mois-ci : pour les personnes travaillant \u00e0 temps partiel, cela aide \u00e0 se souvenir de quand le revenu a \u00e9t\u00e9 gagn\u00e9. Cela pourrait \u00eatre une note pratique \u00e0 inclure dans un bulletin de paie si votre service de paie le permet. C\u2019est tout ! Nous avons maintenant un suivi de la paie pratique et simple. Sous le capot # J\u2019ai promis de montrer comment les taux sont recherch\u00e9s. Ouvrez la page \u201cPaie\u201d, cliquez sur n\u2019importe quelle cellule dans la colonne Par Heure et appuyez sur Entr\u00e9e . La formule que vous voyez est une fonction Python complexe, mais elle est intentionnellement d\u00e9compos\u00e9e en morceaux, avec des commentaires expliquant ce que fait chaque ligne : # Obtenez tous les taux pour la Personne et le R\u00f4le dans cette ligne. rates = Rates.lookupRecords(Person=$Person, Role=$Role) # S\u00e9lectionnez uniquement les taux dont le D\u00e9but_Taux est avant ou \u00e0 la date de cette ligne. past_rates = [r for r in rates if r.Rate_Start <= $Date] # S\u00e9lectionnez le plus r\u00e9cent des past_rates, c'est-\u00e0-dire le maximum par D\u00e9but_Taux. current_rate = max(past_rates, key=lambda r: r.Rate_Start) # Retournez le Taux_Horaire de l'enregistrement de taux pertinent. return current_rate.Hourly_Rate (Si cela semble trop compliqu\u00e9, bonne chance pour essayer de faire la m\u00eame chose dans une feuille de calcul traditionnelle !) Lisez les commentaires dans ce code pour comprendre les \u00e9tapes. Pour ceux qui connaissent Python, cela peut d\u00e9j\u00e0 avoir un sens parfait. Pour ceux qui ne le connaissent pas, voici les liens pertinents vers la documentation de Grist et de Python : lookupRecords : comment nous recherchons tous les taux pour la personne et le r\u00f4le donn\u00e9s. list comprehensions : comment nous filtrons uniquement les taux avec un D\u00e9but_Taux ant\u00e9rieur. max function : comment nous choisissons l\u2019enregistrement de taux avec le D\u00e9but_Taux le plus r\u00e9cent. .Field : comment nous obtenons le champ Taux_Horaire de l\u2019enregistrement de taux. Cette formule est \u00e9galement une bonne illustration de l\u2019utilit\u00e9 de disposer de Python, ainsi que de formules multi-lignes, de variables et de commentaires. Utilisation du mod\u00e8le de paie # Pour commencer \u00e0 utiliser cet exemple pour votre propre paie, commencez par le mod\u00e8le : ALLER AU MOD\u00c8LE puis cliquez sur \u201cEnregistrer une copie\u201d : Ensuite, cochez la case \u201cComme Mod\u00e8le\u201d. Votre copie inclura alors toute la structure, la logique et les mises en page du document de paie sans aucune des donn\u00e9es d\u2019exemple.","title":"Track payroll"},{"location":"examples/2020-09-payroll/#suivi-de-la-paie","text":"Si vous avez des employ\u00e9s, alors vous suivez la paie. Vous utilisez peut-\u00eatre un service de paie, et il vous demande probablement de saisir les heures de chaque employ\u00e9 une fois par mois. C\u2019est l\u00e0 que Grist peut vous aider \u00e0 suivre les choses de mani\u00e8re pratique et \u00e0 r\u00e9duire les erreurs, surtout si vous avez des employ\u00e9s \u00e0 temps partiel.","title":"Suivi de la Paie"},{"location":"examples/2020-09-payroll/#le-modele-de-paie","text":"Le mod\u00e8le finalis\u00e9 est ici : https://templates.getgrist.com/5pHLanQNThxk/Payroll . N\u2019h\u00e9sitez pas \u00e0 l\u2019ouvrir dans une fen\u00eatre s\u00e9par\u00e9e et \u00e0 essayer les choses vous-m\u00eame au fur et \u00e0 mesure. Le mod\u00e8le r\u00e9pond \u00e0 quelques besoins : Nous devons pouvoir ajouter des employ\u00e9s et conserver leurs informations de contact de base. Nous devons d\u00e9finir les taux auxquels les gens sont pay\u00e9s, et ces taux peuvent changer au fil du temps. Dans notre exemple, les taux varient \u00e9galement selon le r\u00f4le : la m\u00eame personne peut travailler comme Instructeur dans un programme et comme Coordinateur dans un autre, \u00e0 des taux diff\u00e9rents. Nous devons saisir les heures de chaque personne. Nous devons obtenir les totaux mensuels, \u00e0 la fois pour saisir les donn\u00e9es dans notre service de paie et pour v\u00e9rifier que tout correspond.","title":"Le Mod\u00e8le de Paie"},{"location":"examples/2020-09-payroll/#la-page-personnes","text":"Commen\u00e7ons par l\u2019onglet \u201cPersonnes\u201d dans l\u2019exemple. Il r\u00e9pond \u00e0 nos besoins (1), (2) et (3). En haut, nous avons une liste de personnes, avec des informations de contact telles que l\u2019adresse et le num\u00e9ro de t\u00e9l\u00e9phone. Pour ajouter une nouvelle personne, cliquez dans la derni\u00e8re ligne de la table PERSONNES et saisissez les donn\u00e9es. En dessous, nous avons une fiche pour la personne s\u00e9lectionn\u00e9e \u2013 un moyen pratique de visualiser ou de mettre \u00e0 jour l\u2019enregistrement de la personne s\u00e9lectionn\u00e9e. \u00c0 c\u00f4t\u00e9, il y a les taux pour cette personne. Nous suivons tous les taux, pas seulement le plus r\u00e9cent, ainsi que la date d\u2019effet de chaque taux. Pour ajouter un nouveau taux, s\u00e9lectionnez une personne, cliquez dans la derni\u00e8re ligne de la table TAUX et saisissez la date d\u2019effet dans la colonne D\u00e9but du Taux (peut-\u00eatre en utilisant le raccourci pour la date d\u2019aujourd\u2019hui : \u2318 + ; (point-virgule) sur Mac ou Ctrl + ; sur Windows). D\u00e9finissez le R\u00f4le auquel il s\u2019applique et le Taux Horaire . Le champ Commentaire est pour vos propres notes. Ne modifiez pas les valeurs des taux existants, sinon les calculs de paie pass\u00e9s seront affect\u00e9s. Lorsque vous accordez une augmentation \u00e0 quelqu\u2019un, ajoutez-la comme une nouvelle ligne. De cette fa\u00e7on, l\u2019historique complet est conserv\u00e9 et disponible pour r\u00e9f\u00e9rence.","title":"La Page “Personnes”"},{"location":"examples/2020-09-payroll/#la-page-paie","text":"Pour saisir les heures de paie, passez \u00e0 la page \u201cPaie\u201d. C\u2019est la t\u00e2che la plus courante, nous avons donc plac\u00e9 cette page en premier dans la liste des pages pour qu\u2019elle s\u2019ouvre par d\u00e9faut lorsque vous ouvrez le document. Faites d\u00e9filer jusqu\u2019en bas (vous pouvez utiliser ces raccourcis pratiques : \u2318 \u2193 sur Mac, Ctrl + \u2193 sur Windows). Pour ajouter une entr\u00e9e de paie, saisissez la date (ou utilisez le s\u00e9lecteur de date), s\u00e9lectionnez la personne en utilisant l\u2019auto-compl\u00e9tion, s\u00e9lectionnez son r\u00f4le et saisissez ses heures. Les quelques colonnes suivantes recherchent automatiquement le taux pertinent et calculent le paiement. Si vous souhaitez saisir des heures pour un intervalle de dates, par exemple pour une semaine particuli\u00e8re ou pour quelqu\u2019un travaillant \u00e0 temps plein ce mois-ci, vous pouvez utiliser Date comme date de d\u00e9but et saisir \u00e9galement une Date de Fin . L\u2019\u00e9l\u00e9ment int\u00e9ressant de cette page est la fa\u00e7on dont le taux Par Heure est recherch\u00e9. Vous n\u2019avez pas besoin de vous en soucier si vous utilisez simplement le mod\u00e8le, mais si vous aimez regarder sous le capot ou si vous avez besoin de personnaliser cela davantage selon vos besoins, je vais l\u2019expliquer en d\u00e9tail ci-dessous.","title":"La Page “Paie”"},{"location":"examples/2020-09-payroll/#la-page-periodes-de-paie","text":"Ici, les totaux pour chaque p\u00e9riode sont automatiquement totalis\u00e9s pour r\u00e9pondre \u00e0 notre besoin (5) \u2014 voir un aper\u00e7u, saisir des donn\u00e9es dans un syst\u00e8me de paie et v\u00e9rifier que tout correspond. La derni\u00e8re p\u00e9riode de paie (dans notre cas, un mois) se trouve en haut de la table en haut \u00e0 gauche. Vous pouvez s\u00e9lectionner n\u2019importe quelle p\u00e9riode de paie pour voir un graphique circulaire avec un aper\u00e7u des paiements r\u00e9partis par r\u00f4le et une table de combien chaque personne a gagn\u00e9 ce mois-l\u00e0. Les noms et les heures dans la derni\u00e8re table sont g\u00e9n\u00e9ralement tout ce dont un service de paie a besoin. De plus, nous avons inclus une colonne Dates r\u00e9sumant les dates travaill\u00e9es ce mois-ci : pour les personnes travaillant \u00e0 temps partiel, cela aide \u00e0 se souvenir de quand le revenu a \u00e9t\u00e9 gagn\u00e9. Cela pourrait \u00eatre une note pratique \u00e0 inclure dans un bulletin de paie si votre service de paie le permet. C\u2019est tout ! Nous avons maintenant un suivi de la paie pratique et simple.","title":"La Page “P\u00e9riodes de Paie”"},{"location":"examples/2020-09-payroll/#sous-le-capot","text":"J\u2019ai promis de montrer comment les taux sont recherch\u00e9s. Ouvrez la page \u201cPaie\u201d, cliquez sur n\u2019importe quelle cellule dans la colonne Par Heure et appuyez sur Entr\u00e9e . La formule que vous voyez est une fonction Python complexe, mais elle est intentionnellement d\u00e9compos\u00e9e en morceaux, avec des commentaires expliquant ce que fait chaque ligne : # Obtenez tous les taux pour la Personne et le R\u00f4le dans cette ligne. rates = Rates.lookupRecords(Person=$Person, Role=$Role) # S\u00e9lectionnez uniquement les taux dont le D\u00e9but_Taux est avant ou \u00e0 la date de cette ligne. past_rates = [r for r in rates if r.Rate_Start <= $Date] # S\u00e9lectionnez le plus r\u00e9cent des past_rates, c'est-\u00e0-dire le maximum par D\u00e9but_Taux. current_rate = max(past_rates, key=lambda r: r.Rate_Start) # Retournez le Taux_Horaire de l'enregistrement de taux pertinent. return current_rate.Hourly_Rate (Si cela semble trop compliqu\u00e9, bonne chance pour essayer de faire la m\u00eame chose dans une feuille de calcul traditionnelle !) Lisez les commentaires dans ce code pour comprendre les \u00e9tapes. Pour ceux qui connaissent Python, cela peut d\u00e9j\u00e0 avoir un sens parfait. Pour ceux qui ne le connaissent pas, voici les liens pertinents vers la documentation de Grist et de Python : lookupRecords : comment nous recherchons tous les taux pour la personne et le r\u00f4le donn\u00e9s. list comprehensions : comment nous filtrons uniquement les taux avec un D\u00e9but_Taux ant\u00e9rieur. max function : comment nous choisissons l\u2019enregistrement de taux avec le D\u00e9but_Taux le plus r\u00e9cent. .Field : comment nous obtenons le champ Taux_Horaire de l\u2019enregistrement de taux. Cette formule est \u00e9galement une bonne illustration de l\u2019utilit\u00e9 de disposer de Python, ainsi que de formules multi-lignes, de variables et de commentaires.","title":"Sous le capot"},{"location":"examples/2020-09-payroll/#utilisation-du-modele-de-paie","text":"Pour commencer \u00e0 utiliser cet exemple pour votre propre paie, commencez par le mod\u00e8le : ALLER AU MOD\u00c8LE puis cliquez sur \u201cEnregistrer une copie\u201d : Ensuite, cochez la case \u201cComme Mod\u00e8le\u201d. Votre copie inclura alors toute la structure, la logique et les mises en page du document de paie sans aucune des donn\u00e9es d\u2019exemple.","title":"Utilisation du mod\u00e8le de paie"},{"location":"examples/2020-10-print-labels/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Impression d\u2019\u00c9tiquettes d\u2019Adresse # Imprimez-vous des \u00e9tiquettes d\u2019adresse ? En g\u00e9n\u00e9ral, cela implique quelques \u00e9tapes : d\u2019abord exporter les adresses, puis les importer dans Word ou un autre logiciel capable de les disposer pour un type d\u2019\u00e9tiquette particulier. Si vous maintenez des adresses dans Grist \u2013 ou utilisez des \u00e9tiquettes pour des badges nominatifs, des conteneurs de stockage, des affaires d\u2019enfants, ou d\u2019autres utilisations cr\u00e9atives \u2013 vous pouvez ajouter une vue personnalis\u00e9e pour avoir vos \u00e9tiquettes imprimables disponibles en un clic. Mod\u00e8le Pr\u00eat \u00e0 l\u2019Emploi # Laissez-moi d\u2019abord partager un mod\u00e8le. Plus tard, je d\u00e9crirai comment ajouter la m\u00eame fonctionnalit\u00e9 \u00e0 un document existant, par exemple pour ajouter des \u00e9tiquettes d\u2019adresse \u00e0 c\u00f4t\u00e9 des donn\u00e9es de CRM ou de Paie . Le mod\u00e8le est disponible \u00e0 : https://templates.getgrist.com/9nNr9uQwoXWA/Print-Mailing-Labels . Vous pouvez l\u2019utiliser imm\u00e9diatement. Il suffit de taper vos propres adresses. Le mod\u00e8le montre quelques variations de ce que vous pouvez faire. \u00c9tiquettes pour une table d\u2019adresses # C\u2019est ce que vous voyez sur la premi\u00e8re page : Vous pouvez utiliser le menu d\u00e9roulant en haut de la vue des \u00e9tiquettes pour s\u00e9lectionner la taille des \u00e9tiquettes, en fonction du papier d\u2019\u00e9tiquettes que vous pr\u00e9voyez d\u2019utiliser. Ce qui est r\u00e9ellement imprim\u00e9 est une colonne cach\u00e9e nomm\u00e9e LabelText . Si vous affichez cette colonne, ou la trouvez dans la page \u201cAdresses\u201d (o\u00f9 elle est visible), vous verrez que c\u2019est une formule qui assemble toutes les parties d\u2019une adresse. (Nous entrerons dans les d\u00e9tails de cette formule ci-dessous.) Pour imprimer les \u00e9tiquettes, s\u00e9lectionnez \u201cImprimer la vue\u201d dans le menu au-dessus de la vue des \u00e9tiquettes (voir aussi les Notes d\u2019Impression ci-dessous) : Une feuille d\u2019\u00e9tiquettes pour la m\u00eame adresse # Si vous avez besoin de nombreuses \u00e9tiquettes identiques, par exemple pour une adresse de retour, ajoutez une autre colonne nomm\u00e9e LabelCount . Ceci est illustr\u00e9 dans la page \u201cFeuilles d\u2019\u00c9tiquettes\u201d. Si vous avez plusieurs adresses dans la table et que vous souhaitez n\u2019en imprimer qu\u2019une seule, il suffit de d\u00e9finir le compte \u00e0 z\u00e9ro pour les adresses que vous ne souhaitez pas inclure. Une liste filtr\u00e9e d\u2019\u00e9tiquettes # Il existe plusieurs fa\u00e7ons d\u2019imprimer seulement quelques \u00e9tiquettes \u00e0 partir d\u2019une table plus grande, et celles-ci sont illustr\u00e9es dans le mod\u00e8le li\u00e9 : La page \u201c\u00c9tiquettes d\u2019Adresse\u201d inclut un bouton de filtre pour \u00c9tat , qui permet un filtrage simple par \u00e9tat. Vous pouvez cliquer sur le bouton + pour cr\u00e9er facilement des filtres suppl\u00e9mentaires comme celui-ci : Pour imprimer seulement quelques \u00e9tiquettes \u00e0 partir d\u2019une table plus grande, vous pouvez utiliser la colonne LabelCount avec une formule. Cette formule peut produire 1 pour une \u00e9tiquette qui doit \u00eatre incluse, ou 0 pour une \u00e9tiquette qui ne doit pas l\u2019\u00eatre. La page \u201cFiltr\u00e9 par Formule\u201d montre un exemple, avec la formule simple qui inclut uniquement les adresses de Californie : IF($State == \"CA\", 1, 0) : La page \u201cFiltr\u00e9 Manuellement\u201d inclut une colonne S\u00e9lectionner pour Imprimer . Cliquez sur n\u2019importe quel bouton pour inclure la ligne correspondante dans la feuille d\u2019\u00e9tiquettes. ALLER AU MOD\u00c8LE Ajouter des \u00c9tiquettes \u00e0 Votre Document # Si vous avez un document avec des adresses, vous pouvez ajouter une page avec des \u00e9tiquettes d\u2019adresse, et les \u00e9tiquettes seront l\u00e0 \u2013 \u00e0 jour et pr\u00eates pour vous \u2013 chaque fois que vous l\u2019ouvrez. Je vais supposer que vous avez d\u00e9j\u00e0 une page qui montre une table avec des adresses. Peut-\u00eatre s\u2019appelle-t-elle \u201cPersonnes\u201d, \u201cClients\u201d ou \u201cEmploy\u00e9s\u201d. Ouvrez le menu \u00e0 c\u00f4t\u00e9 du nom de la page dans le panneau de gauche, et cliquez sur \u201cDupliquer\u201d : Cela vous donne une nouvelle page. Nous ajouterons les \u00e9tiquettes ici, pour \u00e9viter de prendre de la place sur la page que vous utilisez \u00e0 d\u2019autres fins. Ajouter la formule LabelText # Ensuite, ajoutez une colonne \u00e0 la table avec les adresses, et nommez-la LabelText . Tapez une formule qui produit une adresse format\u00e9e sur plusieurs lignes. Voici un exemple, mais vous devrez peut-\u00eatre renommer, ajouter ou supprimer des champs en fonction des noms de vos colonnes : \"%s\\n%s %s\\n%s, %s %s\" % ($Name, $Street1, $Street2, $City, $State, $Zip) Notez qu\u2019il s\u2019agit de la syntaxe Python pour formater des cha\u00eenes de caract\u00e8res. Voici un guide bref pour d\u00e9coder cela : Chaque %s est remplac\u00e9 par la valeur suivante de la liste entre parenth\u00e8ses apr\u00e8s % . \\n ins\u00e8re une nouvelle ligne. $Name etc. sont des variables Grist correspondant aux champs de l\u2019enregistrement actuel. Ajouter la Vue Personnalis\u00e9e # Cliquez sur le bouton Ajouter Nouveau et s\u00e9lectionnez Ajouter une Vue \u00e0 la Page . Dans la bo\u00eete de dialogue qui appara\u00eet, s\u00e9lectionnez la vue Personnalis\u00e9e et la table qui contient les adresses : Cliquez sur Ajouter \u00e0 la Page . Ouvrez le menu au-dessus de la vue et s\u00e9lectionnez \u201cOptions de la Vue\u201d : Dans le panneau de droite qui s\u2019ouvre, dans la section \u201cPersonnalis\u00e9\u201d, entrez l\u2019URL de la vue qui impl\u00e9mente la fonctionnalit\u00e9 des \u00e9tiquettes d\u2019adresse : https://gristlabs.github.io/grist-widget/printlabels/ Ensuite, changez le menu d\u00e9roulant \u201cAcc\u00e8s\u201d de aucun \u00e0 lire la table . Vous devriez maintenant voir vos \u00e9tiquettes ! Si ce n\u2019est pas le cas, v\u00e9rifiez que LabelText est list\u00e9 ci-dessous sous \u201cColonnes Visibles\u201d. (Si c\u2019est sous \u201cColonnes Cach\u00e9es\u201d, cliquez sur l\u2019ic\u00f4ne \u201c\u0153il\u201d pour le rendre visible \u00e0 la vue.) Vous pouvez ajouter une autre colonne nomm\u00e9e LabelCount pour imprimer plusieurs \u00e9tiquettes ou en omettre certaines. Si vous le faites, assurez-vous simplement de l\u2019ajouter aux \u201cColonnes Visibles\u201d de la Vue Personnalis\u00e9e, car ce sont les seules colonnes disponibles pour elle. D\u00e9finir la Taille Pr\u00e9f\u00e9r\u00e9e des \u00c9tiquettes # La vue des \u00e9tiquettes se souvient de la derni\u00e8re taille d\u2019\u00e9tiquette que vous avez choisie. Si vous pr\u00e9f\u00e9rez qu\u2019elle s\u2019ouvre toujours \u00e0 une taille fixe, vous pouvez ajouter la taille pr\u00e9f\u00e9r\u00e9e dans l\u2019URL de la vue (dans le panneau de droite), par exemple : https://gristlabs.github.io/grist-widget/printlabels/#labels10 Les tailles disponibles sont labels8 , labels10 , labels20 , labels30 , labels60 et labels80 , chacune correspondant \u00e0 un type standard de papier d\u2019\u00e9tiquettes (tous bas\u00e9s sur le format de papier US Letter). Dans le document d\u2019exemple, cela est illustr\u00e9 dans la vue sur la page \u201cFiltr\u00e9\u201d. Notes d\u2019Impression # La vue utilise le navigateur pour l\u2019impression. Pour correspondre exactement aux tailles du papier d\u2019\u00e9tiquettes, v\u00e9rifiez bien que vous n\u2019avez pas de param\u00e8tres qui changeraient l\u2019\u00e9chelle, et v\u00e9rifiez l\u2019Aper\u00e7u avant impression avant d\u2019imprimer. S\u2019il y a une \u00e9chelle d\u00e9finie, elle doit \u00eatre \u201c100%\u201d, et des options telles que \u201cIgnorer l\u2019\u00c9chelle et R\u00e9duire pour Adapter \u00e0 la Largeur de la Page\u201d doivent \u00eatre d\u00e9sactiv\u00e9es. Personnalisation Suppl\u00e9mentaire # Cette fonctionnalit\u00e9 est construite en utilisant les Vues Personnalis\u00e9es . Elle vous permet, ou permet \u00e0 un d\u00e9veloppeur tiers, de la personnaliser davantage en utilisant HTML, CSS et Javascript. Pour les d\u00e9veloppeurs int\u00e9ress\u00e9s, le code de cette vue est disponible \u00e0 https://github.com/gristlabs/grist-widget/tree/master/printlabels .","title":"Print mailing labels"},{"location":"examples/2020-10-print-labels/#impression-detiquettes-dadresse","text":"Imprimez-vous des \u00e9tiquettes d\u2019adresse ? En g\u00e9n\u00e9ral, cela implique quelques \u00e9tapes : d\u2019abord exporter les adresses, puis les importer dans Word ou un autre logiciel capable de les disposer pour un type d\u2019\u00e9tiquette particulier. Si vous maintenez des adresses dans Grist \u2013 ou utilisez des \u00e9tiquettes pour des badges nominatifs, des conteneurs de stockage, des affaires d\u2019enfants, ou d\u2019autres utilisations cr\u00e9atives \u2013 vous pouvez ajouter une vue personnalis\u00e9e pour avoir vos \u00e9tiquettes imprimables disponibles en un clic.","title":"Impression d’\u00c9tiquettes d’Adresse"},{"location":"examples/2020-10-print-labels/#modele-pret-a-lemploi","text":"Laissez-moi d\u2019abord partager un mod\u00e8le. Plus tard, je d\u00e9crirai comment ajouter la m\u00eame fonctionnalit\u00e9 \u00e0 un document existant, par exemple pour ajouter des \u00e9tiquettes d\u2019adresse \u00e0 c\u00f4t\u00e9 des donn\u00e9es de CRM ou de Paie . Le mod\u00e8le est disponible \u00e0 : https://templates.getgrist.com/9nNr9uQwoXWA/Print-Mailing-Labels . Vous pouvez l\u2019utiliser imm\u00e9diatement. Il suffit de taper vos propres adresses. Le mod\u00e8le montre quelques variations de ce que vous pouvez faire.","title":"Mod\u00e8le Pr\u00eat \u00e0 l’Emploi"},{"location":"examples/2020-10-print-labels/#etiquettes-pour-une-table-dadresses","text":"C\u2019est ce que vous voyez sur la premi\u00e8re page : Vous pouvez utiliser le menu d\u00e9roulant en haut de la vue des \u00e9tiquettes pour s\u00e9lectionner la taille des \u00e9tiquettes, en fonction du papier d\u2019\u00e9tiquettes que vous pr\u00e9voyez d\u2019utiliser. Ce qui est r\u00e9ellement imprim\u00e9 est une colonne cach\u00e9e nomm\u00e9e LabelText . Si vous affichez cette colonne, ou la trouvez dans la page \u201cAdresses\u201d (o\u00f9 elle est visible), vous verrez que c\u2019est une formule qui assemble toutes les parties d\u2019une adresse. (Nous entrerons dans les d\u00e9tails de cette formule ci-dessous.) Pour imprimer les \u00e9tiquettes, s\u00e9lectionnez \u201cImprimer la vue\u201d dans le menu au-dessus de la vue des \u00e9tiquettes (voir aussi les Notes d\u2019Impression ci-dessous) :","title":"\u00c9tiquettes pour une table d’adresses"},{"location":"examples/2020-10-print-labels/#une-feuille-detiquettes-pour-la-meme-adresse","text":"Si vous avez besoin de nombreuses \u00e9tiquettes identiques, par exemple pour une adresse de retour, ajoutez une autre colonne nomm\u00e9e LabelCount . Ceci est illustr\u00e9 dans la page \u201cFeuilles d\u2019\u00c9tiquettes\u201d. Si vous avez plusieurs adresses dans la table et que vous souhaitez n\u2019en imprimer qu\u2019une seule, il suffit de d\u00e9finir le compte \u00e0 z\u00e9ro pour les adresses que vous ne souhaitez pas inclure.","title":"Une feuille d’\u00e9tiquettes pour la m\u00eame adresse"},{"location":"examples/2020-10-print-labels/#une-liste-filtree-detiquettes","text":"Il existe plusieurs fa\u00e7ons d\u2019imprimer seulement quelques \u00e9tiquettes \u00e0 partir d\u2019une table plus grande, et celles-ci sont illustr\u00e9es dans le mod\u00e8le li\u00e9 : La page \u201c\u00c9tiquettes d\u2019Adresse\u201d inclut un bouton de filtre pour \u00c9tat , qui permet un filtrage simple par \u00e9tat. Vous pouvez cliquer sur le bouton + pour cr\u00e9er facilement des filtres suppl\u00e9mentaires comme celui-ci : Pour imprimer seulement quelques \u00e9tiquettes \u00e0 partir d\u2019une table plus grande, vous pouvez utiliser la colonne LabelCount avec une formule. Cette formule peut produire 1 pour une \u00e9tiquette qui doit \u00eatre incluse, ou 0 pour une \u00e9tiquette qui ne doit pas l\u2019\u00eatre. La page \u201cFiltr\u00e9 par Formule\u201d montre un exemple, avec la formule simple qui inclut uniquement les adresses de Californie : IF($State == \"CA\", 1, 0) : La page \u201cFiltr\u00e9 Manuellement\u201d inclut une colonne S\u00e9lectionner pour Imprimer . Cliquez sur n\u2019importe quel bouton pour inclure la ligne correspondante dans la feuille d\u2019\u00e9tiquettes. ALLER AU MOD\u00c8LE","title":"Une liste filtr\u00e9e d’\u00e9tiquettes"},{"location":"examples/2020-10-print-labels/#ajouter-des-etiquettes-a-votre-document","text":"Si vous avez un document avec des adresses, vous pouvez ajouter une page avec des \u00e9tiquettes d\u2019adresse, et les \u00e9tiquettes seront l\u00e0 \u2013 \u00e0 jour et pr\u00eates pour vous \u2013 chaque fois que vous l\u2019ouvrez. Je vais supposer que vous avez d\u00e9j\u00e0 une page qui montre une table avec des adresses. Peut-\u00eatre s\u2019appelle-t-elle \u201cPersonnes\u201d, \u201cClients\u201d ou \u201cEmploy\u00e9s\u201d. Ouvrez le menu \u00e0 c\u00f4t\u00e9 du nom de la page dans le panneau de gauche, et cliquez sur \u201cDupliquer\u201d : Cela vous donne une nouvelle page. Nous ajouterons les \u00e9tiquettes ici, pour \u00e9viter de prendre de la place sur la page que vous utilisez \u00e0 d\u2019autres fins.","title":"Ajouter des \u00c9tiquettes \u00e0 Votre Document"},{"location":"examples/2020-10-print-labels/#ajouter-la-formule-labeltext","text":"Ensuite, ajoutez une colonne \u00e0 la table avec les adresses, et nommez-la LabelText . Tapez une formule qui produit une adresse format\u00e9e sur plusieurs lignes. Voici un exemple, mais vous devrez peut-\u00eatre renommer, ajouter ou supprimer des champs en fonction des noms de vos colonnes : \"%s\\n%s %s\\n%s, %s %s\" % ($Name, $Street1, $Street2, $City, $State, $Zip) Notez qu\u2019il s\u2019agit de la syntaxe Python pour formater des cha\u00eenes de caract\u00e8res. Voici un guide bref pour d\u00e9coder cela : Chaque %s est remplac\u00e9 par la valeur suivante de la liste entre parenth\u00e8ses apr\u00e8s % . \\n ins\u00e8re une nouvelle ligne. $Name etc. sont des variables Grist correspondant aux champs de l\u2019enregistrement actuel.","title":"Ajouter la formule LabelText"},{"location":"examples/2020-10-print-labels/#ajouter-la-vue-personnalisee","text":"Cliquez sur le bouton Ajouter Nouveau et s\u00e9lectionnez Ajouter une Vue \u00e0 la Page . Dans la bo\u00eete de dialogue qui appara\u00eet, s\u00e9lectionnez la vue Personnalis\u00e9e et la table qui contient les adresses : Cliquez sur Ajouter \u00e0 la Page . Ouvrez le menu au-dessus de la vue et s\u00e9lectionnez \u201cOptions de la Vue\u201d : Dans le panneau de droite qui s\u2019ouvre, dans la section \u201cPersonnalis\u00e9\u201d, entrez l\u2019URL de la vue qui impl\u00e9mente la fonctionnalit\u00e9 des \u00e9tiquettes d\u2019adresse : https://gristlabs.github.io/grist-widget/printlabels/ Ensuite, changez le menu d\u00e9roulant \u201cAcc\u00e8s\u201d de aucun \u00e0 lire la table . Vous devriez maintenant voir vos \u00e9tiquettes ! Si ce n\u2019est pas le cas, v\u00e9rifiez que LabelText est list\u00e9 ci-dessous sous \u201cColonnes Visibles\u201d. (Si c\u2019est sous \u201cColonnes Cach\u00e9es\u201d, cliquez sur l\u2019ic\u00f4ne \u201c\u0153il\u201d pour le rendre visible \u00e0 la vue.) Vous pouvez ajouter une autre colonne nomm\u00e9e LabelCount pour imprimer plusieurs \u00e9tiquettes ou en omettre certaines. Si vous le faites, assurez-vous simplement de l\u2019ajouter aux \u201cColonnes Visibles\u201d de la Vue Personnalis\u00e9e, car ce sont les seules colonnes disponibles pour elle.","title":"Ajouter la Vue Personnalis\u00e9e"},{"location":"examples/2020-10-print-labels/#definir-la-taille-preferee-des-etiquettes","text":"La vue des \u00e9tiquettes se souvient de la derni\u00e8re taille d\u2019\u00e9tiquette que vous avez choisie. Si vous pr\u00e9f\u00e9rez qu\u2019elle s\u2019ouvre toujours \u00e0 une taille fixe, vous pouvez ajouter la taille pr\u00e9f\u00e9r\u00e9e dans l\u2019URL de la vue (dans le panneau de droite), par exemple : https://gristlabs.github.io/grist-widget/printlabels/#labels10 Les tailles disponibles sont labels8 , labels10 , labels20 , labels30 , labels60 et labels80 , chacune correspondant \u00e0 un type standard de papier d\u2019\u00e9tiquettes (tous bas\u00e9s sur le format de papier US Letter). Dans le document d\u2019exemple, cela est illustr\u00e9 dans la vue sur la page \u201cFiltr\u00e9\u201d.","title":"D\u00e9finir la Taille Pr\u00e9f\u00e9r\u00e9e des \u00c9tiquettes"},{"location":"examples/2020-10-print-labels/#notes-dimpression","text":"La vue utilise le navigateur pour l\u2019impression. Pour correspondre exactement aux tailles du papier d\u2019\u00e9tiquettes, v\u00e9rifiez bien que vous n\u2019avez pas de param\u00e8tres qui changeraient l\u2019\u00e9chelle, et v\u00e9rifiez l\u2019Aper\u00e7u avant impression avant d\u2019imprimer. S\u2019il y a une \u00e9chelle d\u00e9finie, elle doit \u00eatre \u201c100%\u201d, et des options telles que \u201cIgnorer l\u2019\u00c9chelle et R\u00e9duire pour Adapter \u00e0 la Largeur de la Page\u201d doivent \u00eatre d\u00e9sactiv\u00e9es.","title":"Notes d’Impression"},{"location":"examples/2020-10-print-labels/#personnalisation-supplementaire","text":"Cette fonctionnalit\u00e9 est construite en utilisant les Vues Personnalis\u00e9es . Elle vous permet, ou permet \u00e0 un d\u00e9veloppeur tiers, de la personnaliser davantage en utilisant HTML, CSS et Javascript. Pour les d\u00e9veloppeurs int\u00e9ress\u00e9s, le code de cette vue est disponible \u00e0 https://github.com/gristlabs/grist-widget/tree/master/printlabels .","title":"Personnalisation Suppl\u00e9mentaire"},{"location":"examples/2020-11-treasure-hunt/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Planifier une Chasse au Tr\u00e9sor # Une chasse au tr\u00e9sor est une activit\u00e9 ludique pour une f\u00eate qui se d\u00e9roule ainsi : Tous les joueurs (les \u201cchercheurs\u201d) \u00e9coutent un indice pour un emplacement, puis partent \u00e0 sa recherche. Lorsque les chercheurs trouvent l\u2019emplacement, ils d\u00e9couvrent un autre indice \u00e0 lire. Chaque indice m\u00e8ne \u00e0 un nouvel emplacement, jusqu\u2019\u00e0 ce que finalement, au lieu d\u2019un indice, le chercheur trouve un tr\u00e9sor ! Les chercheurs peuvent \u00eatre regroup\u00e9s en \u00e9quipes selon les besoins, en fonction de leur \u00e2ge. La chasse r\u00e9compense vraiment la pr\u00e9paration, et Grist peut vous aider avec cela. Voici un exemple de chasse : Vous pouvez jouer avec l\u2019exemple vous-m\u00eame ici : https://templates.getgrist.com/ihsZTnKTF7Lr/Treasure-Hunt Une fois pr\u00eat \u00e0 commencer votre propre chasse compl\u00e8tement nouvelle, il suffit de faire \u201cEnregistrer une copie\u201d et de s\u00e9lectionner \u201cComme mod\u00e8le\u201d. Lieux # Tout d\u2019abord, pensez aux endroits o\u00f9 envoyer les chercheurs. Vous recherchez des endroits qui ont un caract\u00e8re ou une utilisation particuli\u00e8re, et o\u00f9 il y a des recoins ou des cachettes \u00e9vidents pour cacher un indice. L\u2019ensemble des lieux doit couvrir autant d\u2019espace que possible dans votre territoire. Il est acceptable de choisir des endroits proches les uns des autres, tant que quelqu\u2019un cherchant un indice autour de l\u2019un d\u2019eux ne s\u2019\u00e9gare pas vers l\u2019autre. Personnellement, je prends un certain plaisir sadique \u00e0 faire retracer leurs pas aux chercheurs sur la plus longue distance aussi souvent que possible. Par exemple, dans un appartement, les affiches et les peintures peuvent \u00eatre de bons endroits pour cacher des indices derri\u00e8re, ou des livres visuellement distinctifs sur une \u00e9tag\u00e8re. Pour d\u2019autres endroits comme l\u2019\u00e9vier de la cuisine ou les porte-serviettes, vous devez consid\u00e9rer si les indices survivront assez longtemps pour \u00eatre trouv\u00e9s ! Entrez tous les endroits auxquels vous pensez dans la vue \u201cPlaces\u201d du document de Chasse au Tr\u00e9sor. Ne vous inqui\u00e9tez pas encore de leur ordre. Indices # Maintenant que vous avez pens\u00e9 \u00e0 quelques endroits, r\u00e9fl\u00e9chissez aux indices pour eux. Dans le document de Chasse au Tr\u00e9sor, cliquez sur un endroit que vous avez ajout\u00e9, puis essayez de penser \u00e0 au moins un indice pour celui-ci. Mettez ces indices dans la vue \u201cClues\u201d. C\u2019est un bon moment pour partager le document, car vous ne savez jamais qui dans votre famille aura l\u2019esprit tordu n\u00e9cessaire pour trouver les indices les plus originaux. Ou peut-\u00eatre que vous le savez. Il n\u2019est pas n\u00e9cessaire de vous restreindre aux personnes qui seront pr\u00e9sentes. Surtout cette ann\u00e9e marqu\u00e9e par le COVID, cela peut \u00eatre un plaisir pour les personnes qui connaissent votre espace d\u2019avant mais ne peuvent pas \u00eatre physiquement pr\u00e9sentes de le visualiser et de proposer des cachettes astucieuses pour torturer ceux qui le sont. Le Sentier # Maintenant que vous avez des lieux et des indices, il ne reste plus qu\u2019\u00e0 les assembler en un sentier s\u00e9quentiel. Vous pouvez le faire dans la vue \u201cTrail\u201d. Commencez simplement \u00e0 taper l\u2019indice avec lequel vous voulez commencer, utilisez l\u2019 autocompl\u00e9tion pour le confirmer. Puis passez \u00e0 l\u2019indice suivant, dans l\u2019ordre que vous souhaitez. Choisissez un indice par emplacement. Grist montrera o\u00f9 chaque indice doit \u00eatre cach\u00e9 pour que la s\u00e9quence fonctionne, ce qui n\u2019est d\u00e9finitivement pas de la science-fus\u00e9e mais reste \u00e9tonnamment facile \u00e0 perdre de vue (surtout pour les jeunes cr\u00e9ateurs de sentiers). Il vous avertira \u00e9galement si vous avez r\u00e9p\u00e9t\u00e9 le m\u00eame emplacement deux fois. Impression # Lorsque votre sentier est pr\u00eat, le document dispose d\u2019une page \u201cPrint\u201d o\u00f9 vous pouvez imprimer les indices pr\u00eats \u00e0 \u00eatre cach\u00e9s, et la liste des endroits o\u00f9 les cacher si vous d\u00e9l\u00e9guez cette t\u00e2che \u00e0 des aides enthousiastes. Si le sentier est en ext\u00e9rieur, et qu\u2019il peut pleuvoir, il est judicieux d\u2019envelopper les indices dans du papier aluminium ou du plastique. Les id\u00e9es de lieux et d\u2019indices sont bonnes \u00e0 conserver pour de futurs \u00e9v\u00e9nements, soit sous forme de document Grist, soit sous forme d\u2019impression. Profitez de la chasse, et si vous trouvez des am\u00e9liorations \u00e0 apporter au tableur, faites-le nous savoir !","title":"Treasure hunt"},{"location":"examples/2020-11-treasure-hunt/#planifier-une-chasse-au-tresor","text":"Une chasse au tr\u00e9sor est une activit\u00e9 ludique pour une f\u00eate qui se d\u00e9roule ainsi : Tous les joueurs (les \u201cchercheurs\u201d) \u00e9coutent un indice pour un emplacement, puis partent \u00e0 sa recherche. Lorsque les chercheurs trouvent l\u2019emplacement, ils d\u00e9couvrent un autre indice \u00e0 lire. Chaque indice m\u00e8ne \u00e0 un nouvel emplacement, jusqu\u2019\u00e0 ce que finalement, au lieu d\u2019un indice, le chercheur trouve un tr\u00e9sor ! Les chercheurs peuvent \u00eatre regroup\u00e9s en \u00e9quipes selon les besoins, en fonction de leur \u00e2ge. La chasse r\u00e9compense vraiment la pr\u00e9paration, et Grist peut vous aider avec cela. Voici un exemple de chasse : Vous pouvez jouer avec l\u2019exemple vous-m\u00eame ici : https://templates.getgrist.com/ihsZTnKTF7Lr/Treasure-Hunt Une fois pr\u00eat \u00e0 commencer votre propre chasse compl\u00e8tement nouvelle, il suffit de faire \u201cEnregistrer une copie\u201d et de s\u00e9lectionner \u201cComme mod\u00e8le\u201d.","title":"Planifier une Chasse au Tr\u00e9sor"},{"location":"examples/2020-11-treasure-hunt/#lieux","text":"Tout d\u2019abord, pensez aux endroits o\u00f9 envoyer les chercheurs. Vous recherchez des endroits qui ont un caract\u00e8re ou une utilisation particuli\u00e8re, et o\u00f9 il y a des recoins ou des cachettes \u00e9vidents pour cacher un indice. L\u2019ensemble des lieux doit couvrir autant d\u2019espace que possible dans votre territoire. Il est acceptable de choisir des endroits proches les uns des autres, tant que quelqu\u2019un cherchant un indice autour de l\u2019un d\u2019eux ne s\u2019\u00e9gare pas vers l\u2019autre. Personnellement, je prends un certain plaisir sadique \u00e0 faire retracer leurs pas aux chercheurs sur la plus longue distance aussi souvent que possible. Par exemple, dans un appartement, les affiches et les peintures peuvent \u00eatre de bons endroits pour cacher des indices derri\u00e8re, ou des livres visuellement distinctifs sur une \u00e9tag\u00e8re. Pour d\u2019autres endroits comme l\u2019\u00e9vier de la cuisine ou les porte-serviettes, vous devez consid\u00e9rer si les indices survivront assez longtemps pour \u00eatre trouv\u00e9s ! Entrez tous les endroits auxquels vous pensez dans la vue \u201cPlaces\u201d du document de Chasse au Tr\u00e9sor. Ne vous inqui\u00e9tez pas encore de leur ordre.","title":"Lieux"},{"location":"examples/2020-11-treasure-hunt/#indices","text":"Maintenant que vous avez pens\u00e9 \u00e0 quelques endroits, r\u00e9fl\u00e9chissez aux indices pour eux. Dans le document de Chasse au Tr\u00e9sor, cliquez sur un endroit que vous avez ajout\u00e9, puis essayez de penser \u00e0 au moins un indice pour celui-ci. Mettez ces indices dans la vue \u201cClues\u201d. C\u2019est un bon moment pour partager le document, car vous ne savez jamais qui dans votre famille aura l\u2019esprit tordu n\u00e9cessaire pour trouver les indices les plus originaux. Ou peut-\u00eatre que vous le savez. Il n\u2019est pas n\u00e9cessaire de vous restreindre aux personnes qui seront pr\u00e9sentes. Surtout cette ann\u00e9e marqu\u00e9e par le COVID, cela peut \u00eatre un plaisir pour les personnes qui connaissent votre espace d\u2019avant mais ne peuvent pas \u00eatre physiquement pr\u00e9sentes de le visualiser et de proposer des cachettes astucieuses pour torturer ceux qui le sont.","title":"Indices"},{"location":"examples/2020-11-treasure-hunt/#le-sentier","text":"Maintenant que vous avez des lieux et des indices, il ne reste plus qu\u2019\u00e0 les assembler en un sentier s\u00e9quentiel. Vous pouvez le faire dans la vue \u201cTrail\u201d. Commencez simplement \u00e0 taper l\u2019indice avec lequel vous voulez commencer, utilisez l\u2019 autocompl\u00e9tion pour le confirmer. Puis passez \u00e0 l\u2019indice suivant, dans l\u2019ordre que vous souhaitez. Choisissez un indice par emplacement. Grist montrera o\u00f9 chaque indice doit \u00eatre cach\u00e9 pour que la s\u00e9quence fonctionne, ce qui n\u2019est d\u00e9finitivement pas de la science-fus\u00e9e mais reste \u00e9tonnamment facile \u00e0 perdre de vue (surtout pour les jeunes cr\u00e9ateurs de sentiers). Il vous avertira \u00e9galement si vous avez r\u00e9p\u00e9t\u00e9 le m\u00eame emplacement deux fois.","title":"Le Sentier"},{"location":"examples/2020-11-treasure-hunt/#impression","text":"Lorsque votre sentier est pr\u00eat, le document dispose d\u2019une page \u201cPrint\u201d o\u00f9 vous pouvez imprimer les indices pr\u00eats \u00e0 \u00eatre cach\u00e9s, et la liste des endroits o\u00f9 les cacher si vous d\u00e9l\u00e9guez cette t\u00e2che \u00e0 des aides enthousiastes. Si le sentier est en ext\u00e9rieur, et qu\u2019il peut pleuvoir, il est judicieux d\u2019envelopper les indices dans du papier aluminium ou du plastique. Les id\u00e9es de lieux et d\u2019indices sont bonnes \u00e0 conserver pour de futurs \u00e9v\u00e9nements, soit sous forme de document Grist, soit sous forme d\u2019impression. Profitez de la chasse, et si vous trouvez des am\u00e9liorations \u00e0 apporter au tableur, faites-le nous savoir !","title":"Impression"},{"location":"examples/2020-12-map/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Ajouter une Carte # Il peut \u00eatre utile parfois de visualiser des listes de lieux sur une carte g\u00e9ographique. Grist peut le faire si une table a au moins une colonne Nom , Latitude et Longitude . Supposons que nous ayons une liste de certains des plus grands objets en Am\u00e9rique : La premi\u00e8re \u00e9tape pour cr\u00e9er une carte pour ceux-ci est d\u2019ajouter une Vue personnalis\u00e9e \u00e0 la page : Une fois que nous avons configur\u00e9 la vue pour \u00eatre https://gristlabs.github.io/grist-widget/map/ et lui avons donn\u00e9 l\u2019acc\u00e8s Lire table , une carte devrait appara\u00eetre : Cliquer sur les objets de la liste fait appara\u00eetre le \u201cpop-up\u201d correspondant sur la carte. Nous pouvons ajouter d\u2019autres sections selon nos go\u00fbts, comme une vue \u201cfiche\u201d d\u00e9taill\u00e9e des d\u00e9tails de l\u2019attraction. Cet exemple est disponible \u00e0 https://public.getgrist.com/3boQPJrgFmFi/Large-in-America/m/fork . Cet exemple a quelques colonnes cach\u00e9es li\u00e9es \u00e0 la g\u00e9ocodage (le processus de calcul automatique des coordonn\u00e9es \u00e0 partir des adresses). Vous pouvez voir ces colonnes sur la deuxi\u00e8me page appel\u00e9e G\u00e9ocodage . Elles sont Geocode , Adresse et AdresseG\u00e9ocod\u00e9e . Si vous souhaitez utiliser la g\u00e9ocodage, vous aurez besoin de ces trois colonnes, et de donner \u00e0 la vue carte un acc\u00e8s complet \u00e0 votre document afin qu\u2019elle puisse stocker les r\u00e9sultats. Adresse doit contenir exactement ce que vous voulez passer au g\u00e9ocodeur. Dans l\u2019exemple, c\u2019est simplement \", \".join([$Ville, $\u00c9tat]) . AdresseG\u00e9ocod\u00e9e doit \u00eatre laiss\u00e9e intacte ; c\u2019est un espace pour que le g\u00e9ocodeur stocke des informations. Enfin, Geocode est un interrupteur qui doit \u00eatre activ\u00e9 pour g\u00e9n\u00e9rer automatiquement les latitudes et longitudes. Le g\u00e9ocodeur ne touchera aucune ligne avec Geocode d\u00e9sactiv\u00e9. Lorsque Geocode est activ\u00e9 pour une ligne, les latitudes et longitudes sont calcul\u00e9es et stock\u00e9es automatiquement pour cette ligne en utilisant Nominatim . La Politique d\u2019utilisation de Nominatim permet une utilisation cr\u00e9ative limit\u00e9e et non massive. Un g\u00e9ocodage robuste n\u00e9cessite g\u00e9n\u00e9ralement un compte avec un service externe et une cl\u00e9 API secr\u00e8te. Nous pr\u00e9voyons bient\u00f4t d\u2019avoir un moyen pratique de stocker des secrets dans un document, et nous pourrons alors supporter des options de g\u00e9ocodage flexibles. Si vous \u00eates int\u00e9ress\u00e9 par un aper\u00e7u de cette fonctionnalit\u00e9, veuillez nous contacter ! Enfin, si vous connaissez un peu de HTML/CSS/JS, ou si vous avez un d\u00e9veloppeur web dans votre \u00e9quipe, vous trouverez la vue carte personnalis\u00e9e simple \u00e0 restyler selon vos go\u00fbts. Si vous avez besoin d\u2019aide, faites-le nous savoir.","title":"Map"},{"location":"examples/2020-12-map/#ajouter-une-carte","text":"Il peut \u00eatre utile parfois de visualiser des listes de lieux sur une carte g\u00e9ographique. Grist peut le faire si une table a au moins une colonne Nom , Latitude et Longitude . Supposons que nous ayons une liste de certains des plus grands objets en Am\u00e9rique : La premi\u00e8re \u00e9tape pour cr\u00e9er une carte pour ceux-ci est d\u2019ajouter une Vue personnalis\u00e9e \u00e0 la page : Une fois que nous avons configur\u00e9 la vue pour \u00eatre https://gristlabs.github.io/grist-widget/map/ et lui avons donn\u00e9 l\u2019acc\u00e8s Lire table , une carte devrait appara\u00eetre : Cliquer sur les objets de la liste fait appara\u00eetre le \u201cpop-up\u201d correspondant sur la carte. Nous pouvons ajouter d\u2019autres sections selon nos go\u00fbts, comme une vue \u201cfiche\u201d d\u00e9taill\u00e9e des d\u00e9tails de l\u2019attraction. Cet exemple est disponible \u00e0 https://public.getgrist.com/3boQPJrgFmFi/Large-in-America/m/fork . Cet exemple a quelques colonnes cach\u00e9es li\u00e9es \u00e0 la g\u00e9ocodage (le processus de calcul automatique des coordonn\u00e9es \u00e0 partir des adresses). Vous pouvez voir ces colonnes sur la deuxi\u00e8me page appel\u00e9e G\u00e9ocodage . Elles sont Geocode , Adresse et AdresseG\u00e9ocod\u00e9e . Si vous souhaitez utiliser la g\u00e9ocodage, vous aurez besoin de ces trois colonnes, et de donner \u00e0 la vue carte un acc\u00e8s complet \u00e0 votre document afin qu\u2019elle puisse stocker les r\u00e9sultats. Adresse doit contenir exactement ce que vous voulez passer au g\u00e9ocodeur. Dans l\u2019exemple, c\u2019est simplement \", \".join([$Ville, $\u00c9tat]) . AdresseG\u00e9ocod\u00e9e doit \u00eatre laiss\u00e9e intacte ; c\u2019est un espace pour que le g\u00e9ocodeur stocke des informations. Enfin, Geocode est un interrupteur qui doit \u00eatre activ\u00e9 pour g\u00e9n\u00e9rer automatiquement les latitudes et longitudes. Le g\u00e9ocodeur ne touchera aucune ligne avec Geocode d\u00e9sactiv\u00e9. Lorsque Geocode est activ\u00e9 pour une ligne, les latitudes et longitudes sont calcul\u00e9es et stock\u00e9es automatiquement pour cette ligne en utilisant Nominatim . La Politique d\u2019utilisation de Nominatim permet une utilisation cr\u00e9ative limit\u00e9e et non massive. Un g\u00e9ocodage robuste n\u00e9cessite g\u00e9n\u00e9ralement un compte avec un service externe et une cl\u00e9 API secr\u00e8te. Nous pr\u00e9voyons bient\u00f4t d\u2019avoir un moyen pratique de stocker des secrets dans un document, et nous pourrons alors supporter des options de g\u00e9ocodage flexibles. Si vous \u00eates int\u00e9ress\u00e9 par un aper\u00e7u de cette fonctionnalit\u00e9, veuillez nous contacter ! Enfin, si vous connaissez un peu de HTML/CSS/JS, ou si vous avez un d\u00e9veloppeur web dans votre \u00e9quipe, vous trouverez la vue carte personnalis\u00e9e simple \u00e0 restyler selon vos go\u00fbts. Si vous avez besoin d\u2019aide, faites-le nous savoir.","title":"Ajouter une Carte"},{"location":"examples/2021-01-tasks/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Gestion des T\u00e2ches pour les \u00c9quipes # J\u2019\u00e9tais surpris d\u2019apprendre que beaucoup de gens pr\u00e9f\u00e8rent un tableur \u00e0 un logiciel de gestion de projet. Pourquoi ? Parce que c\u2019est plus simple. Eh bien, je suis d\u2019accord ! Depuis l\u2019ann\u00e9e derni\u00e8re, nous utilisons Grist en interne pour g\u00e9rer les projets et les t\u00e2ches au sein de Grist Labs. C\u2019est d\u2019une simplicit\u00e9 d\u00e9concertante, et cela fonctionne parfaitement pour nous. Notre Flux de Travail # Nous avons une petite \u00e9quipe et des r\u00e9unions r\u00e9guli\u00e8res programm\u00e9es. Les objectifs de ces r\u00e9unions sont de passer en revue tout le travail qui a \u00e9t\u00e9 assign\u00e9 et de finir avec une liste de nouvelles t\u00e2ches. Apr\u00e8s la r\u00e9union, chacun peut voir exactement ce qu\u2019on attend de lui pour la prochaine fois. Vous pouvez explorer l\u2019exemple sur https://public.getgrist.com/hik1whAV5snj/Task-Management/m/fork . Structure # La structure est simple. Il y a trois tables : People , c\u2019est-\u00e0-dire les membres de l\u2019\u00e9quipe, Check-Ins , identifi\u00e9s par date, Tasks , chacune associ\u00e9e \u00e0 une personne et \u00e0 un check-in. Nous avons une \u201cpersonne\u201d sp\u00e9ciale nomm\u00e9e \u201cBacklog\u201d. C\u2019est notre fa\u00e7on d\u2019enregistrer les t\u00e2ches qui ne sont pas encore assign\u00e9es \u00e0 quelqu\u2019un. Mes T\u00e2ches # La page appel\u00e9e Main montre tous les check-ins, ordonn\u00e9s avec le plus r\u00e9cent en haut. Lorsque celui-ci est s\u00e9lectionn\u00e9, la table TASKS montre toutes les t\u00e2ches actuellement assign\u00e9es, tri\u00e9es par personne. C\u2019est l\u00e0 que je regarde pour me rappeler ce qui est \u00e0 faire ensuite, et pour avoir le plaisir de cocher une t\u00e2che comme termin\u00e9e d\u00e8s que je l\u2019ai termin\u00e9e. Check-ins # De nos jours, tout le monde travaille \u00e0 distance, donc les check-ins se font via Zoom. Tout le monde ouvre le document Grist \u201cCheck-Ins\u201d, et une personne se charge de faire les mises \u00e0 jour et partage son \u00e9cran pour que les autres puissent suivre. Tout d\u2019abord, cr\u00e9ez un enregistrement pour le check-in d\u2019aujourd\u2019hui : cliquez dans la table CHECK_INS, et appuyez sur Ctrl + = ( \u2318 = sur Mac) pour ajouter un nouvel enregistrement, puis Ctrl + ; ( \u2318 + ; sur Mac) pour ins\u00e9rer la date d\u2019aujourd\u2019hui. Ensuite, cliquez sur la deuxi\u00e8me date (check-in pr\u00e9c\u00e9dent) pour passer en revue le travail pr\u00e9c\u00e9demment assign\u00e9. C\u2019est l\u00e0 que nous prenons tour \u00e0 tour pour passer en revue les t\u00e2ches termin\u00e9es. C\u2019est une occasion de marquer les choses comme compl\u00e8tes. Si une t\u00e2che n\u2019a pas \u00e9t\u00e9 commenc\u00e9e, changez la date associ\u00e9e \u00e0 la date d\u2019aujourd\u2019hui \u2013 cela d\u00e9placera la t\u00e2che. Il y a un champ pour enregistrer des notes optionnelles sur le r\u00e9sultat. Si une t\u00e2che n\u2019a \u00e9t\u00e9 que partiellement termin\u00e9e, nous notons ce qui a \u00e9t\u00e9 fait, la marquons comme compl\u00e8te, et cr\u00e9ons une nouvelle t\u00e2che dans le check-in d\u2019aujourd\u2019hui pour le travail restant. Toutes les t\u00e2ches de suivi sont \u00e9galement cr\u00e9\u00e9es pour le check-in d\u2019aujourd\u2019hui. \u00c0 la fin, toutes les t\u00e2ches encore associ\u00e9es au dernier check-in sont marqu\u00e9es comme termin\u00e9es. C\u2019est un enregistrement satisfaisant du travail de chacun ! Maintenant, cliquez sur le check-in d\u2019aujourd\u2019hui. Toutes les t\u00e2ches qui ont \u00e9t\u00e9 d\u00e9plac\u00e9es ou les t\u00e2ches de suivi cr\u00e9\u00e9es seront ici. C\u2019est une occasion de cr\u00e9er et d\u2019assigner de nouvelles t\u00e2ches, et de revoir le backlog. Backlog # Chaque fois qu\u2019une nouvelle t\u00e2che appara\u00eet (par exemple un bug \u00e0 corriger), n\u2019importe qui peut l\u2019ajouter au dernier check-in. Elle peut \u00eatre assign\u00e9e \u00e0 une personne imm\u00e9diatement, mais si ce n\u2019est pas urgent, elle peut \u00eatre assign\u00e9e \u00e0 \u201cBacklog\u201d. Pendant le check-in, nous passons en revue les nouveaux \u00e9l\u00e9ments du backlog et leur attribuons une priorit\u00e9 : juste un num\u00e9ro. Il y a une page s\u00e9par\u00e9e Backlog pour voir toutes les t\u00e2ches du backlog, ordonn\u00e9es par priorit\u00e9 de la plus haute \u00e0 la plus basse. Lors de l\u2019assignation des t\u00e2ches pendant le check-in, visitez cette page pour voir s\u2019il y a quelque chose de haute priorit\u00e9 qui devrait \u00eatre assign\u00e9. Si quelqu\u2019un a du temps libre, il y a g\u00e9n\u00e9ralement beaucoup de petits \u00e9l\u00e9ments de faible priorit\u00e9 qui peuvent \u00e9galement \u00eatre pris en charge. C\u2019est \u00e0 peu pr\u00e8s tout. La derni\u00e8re page que nous utilisons s\u2019appelle By Person , et c\u2019est juste une mani\u00e8re utile de voir toutes les t\u00e2ches termin\u00e9es et en attente pour une personne donn\u00e9e. C\u2019est une r\u00e9f\u00e9rence utile pour les bilans trimestriels. Document de Gestion des T\u00e2ches # Le document d\u2019exemple est disponible sur https://public.getgrist.com/hik1whAV5snj/Task-Management/m/fork . Il ne semble pas plus compliqu\u00e9 qu\u2019une liste de t\u00e2ches, et c\u2019est le but ! Pour commencer \u00e0 l\u2019utiliser pour vos propres t\u00e2ches, ouvrez le menu Partager ( ), et cliquez sur \u201cDupliquer le Document\u2026\u201d. Donnez-lui un nom et cochez la case \u201cComme Mod\u00e8le\u201d. Votre copie inclura alors la structure et les mises en page sans aucune des donn\u00e9es d\u2019exemple. Profitez-en ! Que vos t\u00e2ches soient termin\u00e9es \u00e0 temps !","title":"Task management"},{"location":"examples/2021-01-tasks/#gestion-des-taches-pour-les-equipes","text":"J\u2019\u00e9tais surpris d\u2019apprendre que beaucoup de gens pr\u00e9f\u00e8rent un tableur \u00e0 un logiciel de gestion de projet. Pourquoi ? Parce que c\u2019est plus simple. Eh bien, je suis d\u2019accord ! Depuis l\u2019ann\u00e9e derni\u00e8re, nous utilisons Grist en interne pour g\u00e9rer les projets et les t\u00e2ches au sein de Grist Labs. C\u2019est d\u2019une simplicit\u00e9 d\u00e9concertante, et cela fonctionne parfaitement pour nous.","title":"Gestion des T\u00e2ches pour les \u00c9quipes"},{"location":"examples/2021-01-tasks/#notre-flux-de-travail","text":"Nous avons une petite \u00e9quipe et des r\u00e9unions r\u00e9guli\u00e8res programm\u00e9es. Les objectifs de ces r\u00e9unions sont de passer en revue tout le travail qui a \u00e9t\u00e9 assign\u00e9 et de finir avec une liste de nouvelles t\u00e2ches. Apr\u00e8s la r\u00e9union, chacun peut voir exactement ce qu\u2019on attend de lui pour la prochaine fois. Vous pouvez explorer l\u2019exemple sur https://public.getgrist.com/hik1whAV5snj/Task-Management/m/fork .","title":"Notre Flux de Travail"},{"location":"examples/2021-01-tasks/#structure","text":"La structure est simple. Il y a trois tables : People , c\u2019est-\u00e0-dire les membres de l\u2019\u00e9quipe, Check-Ins , identifi\u00e9s par date, Tasks , chacune associ\u00e9e \u00e0 une personne et \u00e0 un check-in. Nous avons une \u201cpersonne\u201d sp\u00e9ciale nomm\u00e9e \u201cBacklog\u201d. C\u2019est notre fa\u00e7on d\u2019enregistrer les t\u00e2ches qui ne sont pas encore assign\u00e9es \u00e0 quelqu\u2019un.","title":"Structure"},{"location":"examples/2021-01-tasks/#mes-taches","text":"La page appel\u00e9e Main montre tous les check-ins, ordonn\u00e9s avec le plus r\u00e9cent en haut. Lorsque celui-ci est s\u00e9lectionn\u00e9, la table TASKS montre toutes les t\u00e2ches actuellement assign\u00e9es, tri\u00e9es par personne. C\u2019est l\u00e0 que je regarde pour me rappeler ce qui est \u00e0 faire ensuite, et pour avoir le plaisir de cocher une t\u00e2che comme termin\u00e9e d\u00e8s que je l\u2019ai termin\u00e9e.","title":"Mes T\u00e2ches"},{"location":"examples/2021-01-tasks/#check-ins","text":"De nos jours, tout le monde travaille \u00e0 distance, donc les check-ins se font via Zoom. Tout le monde ouvre le document Grist \u201cCheck-Ins\u201d, et une personne se charge de faire les mises \u00e0 jour et partage son \u00e9cran pour que les autres puissent suivre. Tout d\u2019abord, cr\u00e9ez un enregistrement pour le check-in d\u2019aujourd\u2019hui : cliquez dans la table CHECK_INS, et appuyez sur Ctrl + = ( \u2318 = sur Mac) pour ajouter un nouvel enregistrement, puis Ctrl + ; ( \u2318 + ; sur Mac) pour ins\u00e9rer la date d\u2019aujourd\u2019hui. Ensuite, cliquez sur la deuxi\u00e8me date (check-in pr\u00e9c\u00e9dent) pour passer en revue le travail pr\u00e9c\u00e9demment assign\u00e9. C\u2019est l\u00e0 que nous prenons tour \u00e0 tour pour passer en revue les t\u00e2ches termin\u00e9es. C\u2019est une occasion de marquer les choses comme compl\u00e8tes. Si une t\u00e2che n\u2019a pas \u00e9t\u00e9 commenc\u00e9e, changez la date associ\u00e9e \u00e0 la date d\u2019aujourd\u2019hui \u2013 cela d\u00e9placera la t\u00e2che. Il y a un champ pour enregistrer des notes optionnelles sur le r\u00e9sultat. Si une t\u00e2che n\u2019a \u00e9t\u00e9 que partiellement termin\u00e9e, nous notons ce qui a \u00e9t\u00e9 fait, la marquons comme compl\u00e8te, et cr\u00e9ons une nouvelle t\u00e2che dans le check-in d\u2019aujourd\u2019hui pour le travail restant. Toutes les t\u00e2ches de suivi sont \u00e9galement cr\u00e9\u00e9es pour le check-in d\u2019aujourd\u2019hui. \u00c0 la fin, toutes les t\u00e2ches encore associ\u00e9es au dernier check-in sont marqu\u00e9es comme termin\u00e9es. C\u2019est un enregistrement satisfaisant du travail de chacun ! Maintenant, cliquez sur le check-in d\u2019aujourd\u2019hui. Toutes les t\u00e2ches qui ont \u00e9t\u00e9 d\u00e9plac\u00e9es ou les t\u00e2ches de suivi cr\u00e9\u00e9es seront ici. C\u2019est une occasion de cr\u00e9er et d\u2019assigner de nouvelles t\u00e2ches, et de revoir le backlog.","title":"Check-ins"},{"location":"examples/2021-01-tasks/#backlog","text":"Chaque fois qu\u2019une nouvelle t\u00e2che appara\u00eet (par exemple un bug \u00e0 corriger), n\u2019importe qui peut l\u2019ajouter au dernier check-in. Elle peut \u00eatre assign\u00e9e \u00e0 une personne imm\u00e9diatement, mais si ce n\u2019est pas urgent, elle peut \u00eatre assign\u00e9e \u00e0 \u201cBacklog\u201d. Pendant le check-in, nous passons en revue les nouveaux \u00e9l\u00e9ments du backlog et leur attribuons une priorit\u00e9 : juste un num\u00e9ro. Il y a une page s\u00e9par\u00e9e Backlog pour voir toutes les t\u00e2ches du backlog, ordonn\u00e9es par priorit\u00e9 de la plus haute \u00e0 la plus basse. Lors de l\u2019assignation des t\u00e2ches pendant le check-in, visitez cette page pour voir s\u2019il y a quelque chose de haute priorit\u00e9 qui devrait \u00eatre assign\u00e9. Si quelqu\u2019un a du temps libre, il y a g\u00e9n\u00e9ralement beaucoup de petits \u00e9l\u00e9ments de faible priorit\u00e9 qui peuvent \u00e9galement \u00eatre pris en charge. C\u2019est \u00e0 peu pr\u00e8s tout. La derni\u00e8re page que nous utilisons s\u2019appelle By Person , et c\u2019est juste une mani\u00e8re utile de voir toutes les t\u00e2ches termin\u00e9es et en attente pour une personne donn\u00e9e. C\u2019est une r\u00e9f\u00e9rence utile pour les bilans trimestriels.","title":"Backlog"},{"location":"examples/2021-01-tasks/#document-de-gestion-des-taches","text":"Le document d\u2019exemple est disponible sur https://public.getgrist.com/hik1whAV5snj/Task-Management/m/fork . Il ne semble pas plus compliqu\u00e9 qu\u2019une liste de t\u00e2ches, et c\u2019est le but ! Pour commencer \u00e0 l\u2019utiliser pour vos propres t\u00e2ches, ouvrez le menu Partager ( ), et cliquez sur \u201cDupliquer le Document\u2026\u201d. Donnez-lui un nom et cochez la case \u201cComme Mod\u00e8le\u201d. Votre copie inclura alors la structure et les mises en page sans aucune des donn\u00e9es d\u2019exemple. Profitez-en ! Que vos t\u00e2ches soient termin\u00e9es \u00e0 temps !","title":"Document de Gestion des T\u00e2ches"},{"location":"examples/2021-03-leads/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Une table de prospects, avec des affectations # Les permissions avanc\u00e9es vous permettent de contr\u00f4ler comment un document partag\u00e9 est utilis\u00e9, et de maintenir une s\u00e9paration des r\u00f4les et des responsabilit\u00e9s. Dans cet exemple, nous supposons qu\u2019un entrepreneur utilise Grist comme un outil de suivi de prospects pour les ventes et les conseillers potentiels : Notre entrepreneur souhaite d\u00e9l\u00e9guer les prospects de vente \u00e0 une petite \u00e9quipe de freelances, et garder les conseillers potentiels priv\u00e9s. Ils veulent pouvoir assigner quelqu\u2019un pour suivre un prospect simplement en \u00e9crivant ses initiales dans une colonne \u201cAffectation\u201d, et ne permettre \u00e0 personne d\u2019autre de changer cette affectation. Voici les r\u00e8gles qu\u2019ils ont \u00e9tablies, que vous pouvez voir vous-m\u00eame en visitant l\u2019exemple : Il y a trois blocs de r\u00e8gles. Tout d\u2019abord, la r\u00e8gle pour la table des Conseillers : Cela restreint tout acc\u00e8s \u00e0 la table des Conseillers au propri\u00e9taire. Nous supposons que le document est d\u00e9tenu par l\u2019entrepreneur, et partag\u00e9 avec d\u2019autres en tant qu\u2019\u00e9diteur. Ensuite, il y a des r\u00e8gles pour la table des Prospects : Nous permettons uniquement au propri\u00e9taire de mettre \u00e0 jour quoi que ce soit dans les colonnes Nom ou Affectation. Nous interdisons \u00e0 quiconque autre que le propri\u00e9taire de supprimer une ligne de la table des Prospects. Ensuite, il y a des r\u00e8gles par d\u00e9faut, non sp\u00e9cifiques \u00e0 une table : Nous interdisons \u00e0 quiconque autre que le propri\u00e9taire de modifier la structure du document. Les r\u00e8gles restantes ici sont simplement le comportement par d\u00e9faut de tout document. Il y a aussi deux r\u00e8gles avanc\u00e9es sous forme de cases \u00e0 cocher, qui seraient typiquement d\u00e9sactiv\u00e9es. Elles donnent une permission sp\u00e9ciale pour voir les permissions avanc\u00e9es et copier ce document m\u00eame si normalement cela ne serait pas autoris\u00e9. Ce sont des exceptions utiles pour un document d\u2019exemple sans information sensible. Pour jouer avec le document, il est pr\u00e9f\u00e9rable d\u2019en faire une copie et d\u2019en devenir le propri\u00e9taire. Cliquez sur \u201cEnregistrer une copie\u201d, et placez le document dans votre espace personnel ou dans un espace d\u2019\u00e9quipe. Partagez le document avec quelqu\u2019un d\u2019autre en tant qu\u2019\u00e9diteur et assurez-vous qu\u2019ils voient ce que vous attendez . Vous voudrez d\u00e9sactiver les \u201cR\u00e8gles avanc\u00e9es\u201d qui vous ont permis d\u2019inspecter l\u2019exemple et d\u2019en faire une copie compl\u00e8te : N\u2019oubliez pas de cliquer sur \u201cEnregistrer\u201d apr\u00e8s avoir modifi\u00e9 les r\u00e8gles, afin qu\u2019elles prennent effet. Acc\u00e8s par utilisateur # Supposons que nous voulions maintenant restreindre les prospects pour qu\u2019ils ne soient vus que par la personne \u00e0 qui ils sont assign\u00e9s (ou par le propri\u00e9taire). Nous pouvons le faire de plusieurs fa\u00e7ons. Une mani\u00e8re pratique est d\u2019ajouter une table listant les membres de l\u2019\u00e9quipe, y compris leur adresse e-mail : Une fois que nous avons une telle table, nous pouvons faire en sorte que la colonne Affectation s\u2019y r\u00e9f\u00e8re. Voir https://public.getgrist.com/vuPduz2UdJDi/Lead-list-with-team/m/fork pour l\u2019exemple complet (vous devrez en faire une copie pour obtenir un acc\u00e8s complet, sinon vous verrez une vue filtr\u00e9e). Nous pouvons ensuite utiliser les membres de l\u2019\u00e9quipe dans les r\u00e8gles, via une table de propri\u00e9t\u00e9 d\u2019utilisateur : Ensuite, chaque utilisateur avec qui le document est partag\u00e9 (autre que les propri\u00e9taires) verra une vue filtr\u00e9e de seulement les prospects qui leur sont assign\u00e9s : Lisez notre introduction aux permissions avanc\u00e9es pour en savoir plus sur ce que vous pouvez faire avec les permissions avanc\u00e9es.","title":"Lead list"},{"location":"examples/2021-03-leads/#une-table-de-prospects-avec-des-affectations","text":"Les permissions avanc\u00e9es vous permettent de contr\u00f4ler comment un document partag\u00e9 est utilis\u00e9, et de maintenir une s\u00e9paration des r\u00f4les et des responsabilit\u00e9s. Dans cet exemple, nous supposons qu\u2019un entrepreneur utilise Grist comme un outil de suivi de prospects pour les ventes et les conseillers potentiels : Notre entrepreneur souhaite d\u00e9l\u00e9guer les prospects de vente \u00e0 une petite \u00e9quipe de freelances, et garder les conseillers potentiels priv\u00e9s. Ils veulent pouvoir assigner quelqu\u2019un pour suivre un prospect simplement en \u00e9crivant ses initiales dans une colonne \u201cAffectation\u201d, et ne permettre \u00e0 personne d\u2019autre de changer cette affectation. Voici les r\u00e8gles qu\u2019ils ont \u00e9tablies, que vous pouvez voir vous-m\u00eame en visitant l\u2019exemple : Il y a trois blocs de r\u00e8gles. Tout d\u2019abord, la r\u00e8gle pour la table des Conseillers : Cela restreint tout acc\u00e8s \u00e0 la table des Conseillers au propri\u00e9taire. Nous supposons que le document est d\u00e9tenu par l\u2019entrepreneur, et partag\u00e9 avec d\u2019autres en tant qu\u2019\u00e9diteur. Ensuite, il y a des r\u00e8gles pour la table des Prospects : Nous permettons uniquement au propri\u00e9taire de mettre \u00e0 jour quoi que ce soit dans les colonnes Nom ou Affectation. Nous interdisons \u00e0 quiconque autre que le propri\u00e9taire de supprimer une ligne de la table des Prospects. Ensuite, il y a des r\u00e8gles par d\u00e9faut, non sp\u00e9cifiques \u00e0 une table : Nous interdisons \u00e0 quiconque autre que le propri\u00e9taire de modifier la structure du document. Les r\u00e8gles restantes ici sont simplement le comportement par d\u00e9faut de tout document. Il y a aussi deux r\u00e8gles avanc\u00e9es sous forme de cases \u00e0 cocher, qui seraient typiquement d\u00e9sactiv\u00e9es. Elles donnent une permission sp\u00e9ciale pour voir les permissions avanc\u00e9es et copier ce document m\u00eame si normalement cela ne serait pas autoris\u00e9. Ce sont des exceptions utiles pour un document d\u2019exemple sans information sensible. Pour jouer avec le document, il est pr\u00e9f\u00e9rable d\u2019en faire une copie et d\u2019en devenir le propri\u00e9taire. Cliquez sur \u201cEnregistrer une copie\u201d, et placez le document dans votre espace personnel ou dans un espace d\u2019\u00e9quipe. Partagez le document avec quelqu\u2019un d\u2019autre en tant qu\u2019\u00e9diteur et assurez-vous qu\u2019ils voient ce que vous attendez . Vous voudrez d\u00e9sactiver les \u201cR\u00e8gles avanc\u00e9es\u201d qui vous ont permis d\u2019inspecter l\u2019exemple et d\u2019en faire une copie compl\u00e8te : N\u2019oubliez pas de cliquer sur \u201cEnregistrer\u201d apr\u00e8s avoir modifi\u00e9 les r\u00e8gles, afin qu\u2019elles prennent effet.","title":"Une table de prospects, avec des affectations"},{"location":"examples/2021-03-leads/#acces-par-utilisateur","text":"Supposons que nous voulions maintenant restreindre les prospects pour qu\u2019ils ne soient vus que par la personne \u00e0 qui ils sont assign\u00e9s (ou par le propri\u00e9taire). Nous pouvons le faire de plusieurs fa\u00e7ons. Une mani\u00e8re pratique est d\u2019ajouter une table listant les membres de l\u2019\u00e9quipe, y compris leur adresse e-mail : Une fois que nous avons une telle table, nous pouvons faire en sorte que la colonne Affectation s\u2019y r\u00e9f\u00e8re. Voir https://public.getgrist.com/vuPduz2UdJDi/Lead-list-with-team/m/fork pour l\u2019exemple complet (vous devrez en faire une copie pour obtenir un acc\u00e8s complet, sinon vous verrez une vue filtr\u00e9e). Nous pouvons ensuite utiliser les membres de l\u2019\u00e9quipe dans les r\u00e8gles, via une table de propri\u00e9t\u00e9 d\u2019utilisateur : Ensuite, chaque utilisateur avec qui le document est partag\u00e9 (autre que les propri\u00e9taires) verra une vue filtr\u00e9e de seulement les prospects qui leur sont assign\u00e9s : Lisez notre introduction aux permissions avanc\u00e9es pour en savoir plus sur ce que vous pouvez faire avec les permissions avanc\u00e9es.","title":"Acc\u00e8s par utilisateur"},{"location":"examples/2021-04-link-keys/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Cr\u00e9er des Liens Uniques en 4 \u00c9tapes # Dans Grist, les \u201ccl\u00e9s de lien\u201d sont des param\u00e8tres d\u2019URL qui, lorsqu\u2019ils sont combin\u00e9s avec la variable user.LinkKey dans les permissions avanc\u00e9es , d\u00e9termineront quelles donn\u00e9es un destinataire de lien est autoris\u00e9 \u00e0 voir. Vous pouvez apprendre \u00e0 le faire en quatre \u00e9tapes faciles. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et modifier en suivant ce guide. Dans notre exemple, vous \u00eates un tuteur priv\u00e9 qui utilise Grist pour suivre les heures, les paiements et les donn\u00e9es des clients. Vous souhaitez partager l\u2019historique des sessions et des paiements avec les parents via un lien qui ne montre que les donn\u00e9es de leur famille. Une fa\u00e7on simple de le faire serait de d\u00e9finir des permissions avanc\u00e9es qui limitent la vue d\u2019un destinataire de lien uniquement aux enregistrements li\u00e9s \u00e0 leur famille. Faisons cela maintenant. Le tuteur priv\u00e9 peut voir toutes les donn\u00e9es, mais un parent ne peut voir que les donn\u00e9es de sa famille. \u00c9tape 1 : Cr\u00e9er un identifiant unique # Dans la table des familles, cr\u00e9ez une nouvelle colonne dans laquelle vous utiliserez la fonction UUID() de Grist pour g\u00e9n\u00e9rer et attribuer une cl\u00e9 unique \u00e0 chaque famille. Convertissez la colonne en colonne de donn\u00e9es pour figer ses valeurs. Vous remarquerez que notre formule a chang\u00e9 en formule d\u2019initialisation. S\u00e9lectionnez \u2018Appliquer aux nouveaux enregistrements\u2019. Cela garantira que les nouvelles lignes se verront \u00e9galement attribuer un identifiant unique. \u00c9tape 2 : Connecter l\u2019UUID aux enregistrements dans d\u2019autres tables # Dans les tables \u00c9tudiants, Sessions et Paiements, ajoutez une colonne qui lie chaque enregistrement \u00e0 l\u2019UUID de la famille r\u00e9f\u00e9renc\u00e9e. Nommez ces colonnes \u201cUUID\u201d, avec la formule simple $Family.UUID . Vous ne savez pas comment cela fonctionne ? R\u00e9visez les puissantes colonnes de r\u00e9f\u00e9rence de Grist. Astuce : La formule $Family.UUID r\u00e9cup\u00e8re l\u2019UUID de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans la colonne Famille. \u00c9tape 3 : Cr\u00e9er des liens uniques # Dans la table des familles, cr\u00e9ez une nouvelle colonne dans laquelle vous utiliserez la fonction SELF_HYPERLINK() de Grist pour g\u00e9n\u00e9rer des hyperliens. Utilisez la formule SELF_HYPERLINK(LinkKey_UUID=$UUID) pour cr\u00e9er une cl\u00e9 de lien appel\u00e9e \u201cUUID\u201d qui d\u00e9finit le param\u00e8tre d\u2019URL \u00e0 un $UUID sp\u00e9cifique dans un enregistrement. Convertissez le type de colonne en Texte > Hyperlien. Comment cela fonctionne-t-il ? Le lien g\u00e9n\u00e9r\u00e9 pour \u201cRaddon, Fin\u201d est .../Private-Tutor-recUUID/p/9?UUID_=6752c258-443d-4a2c-800d-1491da265b72 . La \u201ccl\u00e9 de lien\u201d est la partie de l\u2019URL qui lit ?UUID_=6752c258-443d-4a2c-800d-1491da265b72 . \u00c9tape 4 : Cr\u00e9er des permissions avanc\u00e9es # Ouvrez la page des Permissions Avanc\u00e9es depuis le panneau de gauche et cr\u00e9ez des r\u00e8gles pour donner un acc\u00e8s limit\u00e9 \u00e0 vos clients. R\u00e9fl\u00e9chissons \u00e0 qui devrait acc\u00e9der \u00e0 chaque table et quelles parties de celle-ci devraient \u00eatre accessibles. Vous, le propri\u00e9taire du document, devez avoir un acc\u00e8s complet pour Lire (R), Mettre \u00e0 jour (U), Cr\u00e9er (C) et Supprimer (D) des enregistrements dans chaque table. Ajoutez la r\u00e8gle user.Access in [OWNER] \u00e0 chaque table pour accorder aux propri\u00e9taires un acc\u00e8s complet. Pourquoi user.Access ? Consultez les conditions des permissions avanc\u00e9es pour en savoir plus. Les parents consultant le document doivent avoir un acc\u00e8s en lecture seule uniquement aux enregistrements li\u00e9s \u00e0 leur famille. Dans les \u00e9tapes pr\u00e9c\u00e9dentes, nous avons cr\u00e9\u00e9 un identifiant unique (UUID) pour chaque famille, connect\u00e9 les enregistrements pertinents dans toutes les tables \u00e0 un UUID, et g\u00e9n\u00e9r\u00e9 des URL avec des cl\u00e9s de lien incluant ces UUID. Maintenant, nous devons cr\u00e9er des permissions avanc\u00e9es qui correspondent aux UUID et aux cl\u00e9s de lien URL. Pour ce faire, ajoutez la r\u00e8gle user.LinkKey.UUID == rec.UUID \u00e0 chaque table . Cela indique \u00e0 Grist de regarder la cl\u00e9 de lien de l\u2019URL (nomm\u00e9e UUID) et de la faire correspondre aux enregistrements incluant ce m\u00eame UUID. D\u00e9finissez l\u2019acc\u00e8s en lecture seule en cliquant sur le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cpermissions\u201d. Assurez-vous que l\u2019acc\u00e8s public est activ\u00e9 dans le panneau \u201cG\u00e9rer les utilisateurs\u201d (voir Partage ). Astuce : Ne modifiez pas les r\u00e8gles par d\u00e9faut. L\u2019acc\u00e8s au niveau des lignes est accord\u00e9 dans les tables pertinentes. Vous l\u2019avez fait ! Ce n\u2019est que le d\u00e9but. Il y a beaucoup plus que vous pouvez faire avec les cl\u00e9s de lien. Consultez un autre exemple pour approfondir encore plus votre compr\u00e9hension des cl\u00e9s de lien. Besoin d\u2019aide suppl\u00e9mentaire ? Consultez la solution du tutoriel ici . Faites une copie pour voir toutes les donn\u00e9es :","title":"Link keys guide"},{"location":"examples/2021-04-link-keys/#creer-des-liens-uniques-en-4-etapes","text":"Dans Grist, les \u201ccl\u00e9s de lien\u201d sont des param\u00e8tres d\u2019URL qui, lorsqu\u2019ils sont combin\u00e9s avec la variable user.LinkKey dans les permissions avanc\u00e9es , d\u00e9termineront quelles donn\u00e9es un destinataire de lien est autoris\u00e9 \u00e0 voir. Vous pouvez apprendre \u00e0 le faire en quatre \u00e9tapes faciles. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et modifier en suivant ce guide. Dans notre exemple, vous \u00eates un tuteur priv\u00e9 qui utilise Grist pour suivre les heures, les paiements et les donn\u00e9es des clients. Vous souhaitez partager l\u2019historique des sessions et des paiements avec les parents via un lien qui ne montre que les donn\u00e9es de leur famille. Une fa\u00e7on simple de le faire serait de d\u00e9finir des permissions avanc\u00e9es qui limitent la vue d\u2019un destinataire de lien uniquement aux enregistrements li\u00e9s \u00e0 leur famille. Faisons cela maintenant. Le tuteur priv\u00e9 peut voir toutes les donn\u00e9es, mais un parent ne peut voir que les donn\u00e9es de sa famille.","title":"Cr\u00e9er des Liens Uniques en 4 \u00c9tapes"},{"location":"examples/2021-04-link-keys/#etape-1-creer-un-identifiant-unique","text":"Dans la table des familles, cr\u00e9ez une nouvelle colonne dans laquelle vous utiliserez la fonction UUID() de Grist pour g\u00e9n\u00e9rer et attribuer une cl\u00e9 unique \u00e0 chaque famille. Convertissez la colonne en colonne de donn\u00e9es pour figer ses valeurs. Vous remarquerez que notre formule a chang\u00e9 en formule d\u2019initialisation. S\u00e9lectionnez \u2018Appliquer aux nouveaux enregistrements\u2019. Cela garantira que les nouvelles lignes se verront \u00e9galement attribuer un identifiant unique.","title":"\u00c9tape 1 : Cr\u00e9er un identifiant unique"},{"location":"examples/2021-04-link-keys/#etape-2-connecter-luuid-aux-enregistrements-dans-dautres-tables","text":"Dans les tables \u00c9tudiants, Sessions et Paiements, ajoutez une colonne qui lie chaque enregistrement \u00e0 l\u2019UUID de la famille r\u00e9f\u00e9renc\u00e9e. Nommez ces colonnes \u201cUUID\u201d, avec la formule simple $Family.UUID . Vous ne savez pas comment cela fonctionne ? R\u00e9visez les puissantes colonnes de r\u00e9f\u00e9rence de Grist. Astuce : La formule $Family.UUID r\u00e9cup\u00e8re l\u2019UUID de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans la colonne Famille.","title":"\u00c9tape 2 : Connecter l’UUID aux enregistrements dans d’autres tables"},{"location":"examples/2021-04-link-keys/#etape-3-creer-des-liens-uniques","text":"Dans la table des familles, cr\u00e9ez une nouvelle colonne dans laquelle vous utiliserez la fonction SELF_HYPERLINK() de Grist pour g\u00e9n\u00e9rer des hyperliens. Utilisez la formule SELF_HYPERLINK(LinkKey_UUID=$UUID) pour cr\u00e9er une cl\u00e9 de lien appel\u00e9e \u201cUUID\u201d qui d\u00e9finit le param\u00e8tre d\u2019URL \u00e0 un $UUID sp\u00e9cifique dans un enregistrement. Convertissez le type de colonne en Texte > Hyperlien. Comment cela fonctionne-t-il ? Le lien g\u00e9n\u00e9r\u00e9 pour \u201cRaddon, Fin\u201d est .../Private-Tutor-recUUID/p/9?UUID_=6752c258-443d-4a2c-800d-1491da265b72 . La \u201ccl\u00e9 de lien\u201d est la partie de l\u2019URL qui lit ?UUID_=6752c258-443d-4a2c-800d-1491da265b72 .","title":"\u00c9tape 3 : Cr\u00e9er des liens uniques"},{"location":"examples/2021-04-link-keys/#etape-4-creer-des-permissions-avancees","text":"Ouvrez la page des Permissions Avanc\u00e9es depuis le panneau de gauche et cr\u00e9ez des r\u00e8gles pour donner un acc\u00e8s limit\u00e9 \u00e0 vos clients. R\u00e9fl\u00e9chissons \u00e0 qui devrait acc\u00e9der \u00e0 chaque table et quelles parties de celle-ci devraient \u00eatre accessibles. Vous, le propri\u00e9taire du document, devez avoir un acc\u00e8s complet pour Lire (R), Mettre \u00e0 jour (U), Cr\u00e9er (C) et Supprimer (D) des enregistrements dans chaque table. Ajoutez la r\u00e8gle user.Access in [OWNER] \u00e0 chaque table pour accorder aux propri\u00e9taires un acc\u00e8s complet. Pourquoi user.Access ? Consultez les conditions des permissions avanc\u00e9es pour en savoir plus. Les parents consultant le document doivent avoir un acc\u00e8s en lecture seule uniquement aux enregistrements li\u00e9s \u00e0 leur famille. Dans les \u00e9tapes pr\u00e9c\u00e9dentes, nous avons cr\u00e9\u00e9 un identifiant unique (UUID) pour chaque famille, connect\u00e9 les enregistrements pertinents dans toutes les tables \u00e0 un UUID, et g\u00e9n\u00e9r\u00e9 des URL avec des cl\u00e9s de lien incluant ces UUID. Maintenant, nous devons cr\u00e9er des permissions avanc\u00e9es qui correspondent aux UUID et aux cl\u00e9s de lien URL. Pour ce faire, ajoutez la r\u00e8gle user.LinkKey.UUID == rec.UUID \u00e0 chaque table . Cela indique \u00e0 Grist de regarder la cl\u00e9 de lien de l\u2019URL (nomm\u00e9e UUID) et de la faire correspondre aux enregistrements incluant ce m\u00eame UUID. D\u00e9finissez l\u2019acc\u00e8s en lecture seule en cliquant sur le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cpermissions\u201d. Assurez-vous que l\u2019acc\u00e8s public est activ\u00e9 dans le panneau \u201cG\u00e9rer les utilisateurs\u201d (voir Partage ). Astuce : Ne modifiez pas les r\u00e8gles par d\u00e9faut. L\u2019acc\u00e8s au niveau des lignes est accord\u00e9 dans les tables pertinentes. Vous l\u2019avez fait ! Ce n\u2019est que le d\u00e9but. Il y a beaucoup plus que vous pouvez faire avec les cl\u00e9s de lien. Consultez un autre exemple pour approfondir encore plus votre compr\u00e9hension des cl\u00e9s de lien. Besoin d\u2019aide suppl\u00e9mentaire ? Consultez la solution du tutoriel ici . Faites une copie pour voir toutes les donn\u00e9es :","title":"\u00c9tape 4 : Cr\u00e9er des permissions avanc\u00e9es"},{"location":"examples/2021-05-reference-columns/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Guide des Colonnes de R\u00e9f\u00e9rence # Ma\u00eetriser les Colonnes de R\u00e9f\u00e9rence en 3 \u00c9tapes # Dans Grist, les colonnes de r\u00e9f\u00e9rence sont l\u2019outil cl\u00e9 pour organiser les donn\u00e9es relationnelles. Les colonnes de r\u00e9f\u00e9rence indiquent \u00e0 Grist que deux tables distinctes sont li\u00e9es et sp\u00e9cifient quels enregistrements au sein de ces tables sont li\u00e9s. Par exemple, si vous avez une table de Chiens et une table de Propri\u00e9taires de Chiens , vous pouvez vouloir que chaque enregistrement de chien fasse explicitement r\u00e9f\u00e9rence \u00e0 l\u2019 enregistrement de son propri\u00e9taire dans Propri\u00e9taires de Chiens . Les colonnes de r\u00e9f\u00e9rence sont un outil puissant pour rechercher des donn\u00e9es \u00e0 partir d\u2019une table li\u00e9e et pour cr\u00e9er des mises en page hautement productives. Vous pouvez apprendre \u00e0 le faire en trois \u00e9tapes faciles. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et modifier en suivant ce guide. Utiliser les Colonnes de R\u00e9f\u00e9rence pour Organiser les Donn\u00e9es Li\u00e9es # Dans notre exemple, vous \u00eates un graphiste postulant \u00e0 des emplois, et vous utilisez Grist pour suivre votre processus de candidature. Dans le mod\u00e8le, vous avez quatre tables : Candidatures , \u00c9tapes , T\u00e2ches , et Contacts . Votre objectif est de relier les donn\u00e9es pertinentes entre les tables et de cr\u00e9er un tableau de bord personnalis\u00e9 o\u00f9 vous pouvez facilement voir le statut de chaque candidature, et ajouter de nouvelles candidatures et de nouvelles \u00e9tapes facilement. Dans ce tableau de bord , cliquer sur chaque candidature montre uniquement les \u00e9tapes li\u00e9es \u00e0 cette candidature. Nous pouvons cr\u00e9er cette relation en utilisant des colonnes de r\u00e9f\u00e9rence. Cr\u00e9ons ce tableau de bord ensemble. \u00c9tape 1 : Cr\u00e9er des R\u00e9f\u00e9rences # Les colonnes de r\u00e9f\u00e9rence sont un type de colonne disponible sous TYPE DE COLONNE. Il est utile de penser \u00e0 la table avec la colonne de r\u00e9f\u00e9rence comme la table de r\u00e9f\u00e9rence , et \u00e0 la table qui est r\u00e9f\u00e9renc\u00e9e comme la table sous-jacente . Convertir des Colonnes de Texte en Colonnes de R\u00e9f\u00e9rence # Si vous avez d\u00e9j\u00e0 du texte dans la colonne s\u00e9lectionn\u00e9e, d\u00e9finissez le TYPE DE COLONNE dans le panneau de droite sur \u201cR\u00e9f\u00e9rence\u201d. Grist devinera la table sous-jacente et la colonne que vous souhaitez afficher dans la colonne de r\u00e9f\u00e9rence. Vous pouvez revoir et modifier cette supposition et d\u00e9finir la table sous-jacente et la colonne d\u2019affichage appropri\u00e9es. DONN\u00c9ES DE LA TABLE pointe vers la table sous-jacente. AFFICHER LA COLONNE d\u00e9finit la valeur d\u2019affichage dans la colonne de r\u00e9f\u00e9rence. Par exemple, dans la table \u00c9tapes , convertissez la colonne R\u00f4le en une colonne de r\u00e9f\u00e9rence. DONN\u00c9ES DE LA TABLE doit pointer vers Candidatures . AFFICHER LA COLONNE doit \u00eatre d\u00e9fini sur R\u00f4le . Notez que la colonne de r\u00e9f\u00e9rence fait r\u00e9f\u00e9rence \u00e0 l\u2019 ensemble de l\u2019enregistrement et que vous choisissez quelle colonne afficher dans la colonne de r\u00e9f\u00e9rence. Astuce : Vous pouvez facilement identifier les colonnes de r\u00e9f\u00e9rence par les ic\u00f4nes de maillon de cha\u00eene dans les cellules de la colonne. Cr\u00e9er des Colonnes de R\u00e9f\u00e9rence # Dans la table Contacts , nous avons une liste de contacts qui ne sont associ\u00e9s \u00e0 aucune candidature ou entreprise. Cr\u00e9ons une nouvelle colonne appel\u00e9e Entreprise , d\u00e9finissons son type sur R\u00e9f\u00e9rence, et pointons vers Candidatures comme table sous-jacente avec Entreprise comme affichage dans la colonne de r\u00e9f\u00e9rence. Cliquez sur la cellule vide pour ouvrir un menu d\u00e9roulant et s\u00e9lectionnez manuellement l\u2019entreprise pour laquelle chaque contact travaille. Regardez l\u2019adresse e-mail pour un indice. Note : Vous pouvez toujours cliquer sur une cellule de Colonne de R\u00e9f\u00e9rence pour ouvrir le menu d\u00e9roulant et s\u00e9lectionner une nouvelle valeur. \u00c9tape 2 : Rechercher des Donn\u00e9es Suppl\u00e9mentaires dans l\u2019Enregistrement R\u00e9f\u00e9renc\u00e9 # Rappelez-vous que la colonne de r\u00e9f\u00e9rence fait r\u00e9f\u00e9rence \u00e0 une autre table et corr\u00e8le deux enregistrements sp\u00e9cifiques. Bien que vous voyiez une colonne sp\u00e9cifique dans l\u2019 affichage de la colonne de r\u00e9f\u00e9rence, la r\u00e9f\u00e9rence est faite \u00e0 l\u2019 ensemble de l\u2019enregistrement . Cela nous permet de rechercher des champs de donn\u00e9es suppl\u00e9mentaires dans l\u2019enregistrement li\u00e9 en utilisant une formule simple. Essayons cela. \u00c0 l\u2019\u00e9tape 1, dans la table \u00c9tapes , nous avons cr\u00e9\u00e9 une colonne de r\u00e9f\u00e9rence appel\u00e9e R\u00f4le . Il serait utile de voir \u00e9galement pour chaque enregistrement \u00c9tape , l\u2019entreprise pertinente. Par exemple, dans la ligne 1, nous voyons l\u2019\u00e9v\u00e9nement de l\u2019\u00e9tape \u201cRejet\u00e9!\u201d pour le r\u00f4le \u201cResponsable du Design Num\u00e9rique\u201d. Il n\u2019est pas imm\u00e9diatement apparent de quelle entreprise il s\u2019agit. Utilisons la colonne de r\u00e9f\u00e9rence R\u00f4le pour rechercher facilement l\u2019entreprise list\u00e9e dans l\u2019enregistrement \u201cResponsable du Design Num\u00e9rique\u201d dans la table Candidatures . Pour ce faire, nous cr\u00e9ons une colonne appel\u00e9e Entreprise et nous utilisons la formule $Role.Entreprise . La structure de la formule est $[ID de la Colonne de R\u00e9f\u00e9rence dans la Table de R\u00e9f\u00e9rence].[ID de la Colonne dans la Table Sous-jacente] . Grist compl\u00e9tera \u00e9galement automatiquement des parties de la formule pendant que vous la tapez. Il y a une autre fa\u00e7on d\u2019ajouter plusieurs colonnes \u00e0 partir d\u2019une table sous-jacente. Si vous \u00eates int\u00e9ress\u00e9 \u00e0 en savoir plus, visitez la section d\u2019aide sur les colonnes de r\u00e9f\u00e9rence de notre site web. \u00c9tape 3 : Cr\u00e9er une Mise en Page Hautement Productive avec des Tables Li\u00e9es # L\u2019une des fonctionnalit\u00e9s les plus puissantes de Grist est la capacit\u00e9 de lier des tables li\u00e9es sur la m\u00eame page pour cr\u00e9er des mises en page hautement productives. Dans le tableau de bord final montr\u00e9 au d\u00e9but de ce tutoriel, nous avons vu que cliquer sur une candidature remplissait une vue des \u00e9tapes li\u00e9es \u00e0 cette candidature. Faisons cela maintenant en ajoutant \u00c9tapes comme vue \u00e0 la page Candidatures . ( R\u00e9visez les vues ici .) Ajouter la table comme vue de Liste de Fiches rend les donn\u00e9es plus faciles \u00e0 visualiser. De m\u00eame, vous pouvez vouloir changer la table Candidatures en une vue de Liste de Fiches. Dans le menu LISTE DE FICHES \u00e0 droite, s\u00e9lectionnez DONN\u00c9ES pour d\u00e9finir les r\u00e8gles de s\u00e9lection des donn\u00e9es. Sous S\u00c9LECTIONNER PAR, vous verrez l\u2019option \u201cLISTE_DE_FICHES CANDIDATURES\u201d. Cette option est uniquement disponible parce qu\u2019\u00e0 l\u2019\u00e9tape 1, nous avons cr\u00e9\u00e9 une r\u00e9f\u00e9rence de la table \u00c9tapes \u00e0 la table Candidatures dans la colonne de r\u00e9f\u00e9rence R\u00f4le . Cette r\u00e9f\u00e9rence indique \u00e0 Grist quelles \u00e9tapes sont li\u00e9es \u00e0 quelles candidatures. F\u00e9licitations ! Vous savez maintenant comment utiliser les colonnes de r\u00e9f\u00e9rence pour organiser des donn\u00e9es li\u00e9es, donner une structure \u00e0 vos donn\u00e9es, et cr\u00e9er des vues li\u00e9es dans des mises en page productives. Si vous le souhaitez, comparez votre document \u00e0 la solution du tutoriel . Approfondir : Combiner des Formules et des Colonnes de R\u00e9f\u00e9rence # Si vous \u00eates \u00e0 l\u2019aise avec les formules, essayez d\u2019utiliser des formules dans les colonnes de r\u00e9f\u00e9rence pour rendre Grist un outil encore plus puissant. Dans la solution du tutoriel , nous avons utilis\u00e9 une formule pour faire plus. La formule dans le champ Derni\u00e8re \u00c9tape dans la vue Candidatures recherche la date la plus r\u00e9cente dans les enregistrements li\u00e9s dans la table \u00c9tapes . Ainsi, ajouter une nouvelle \u00e9tape avec une date plus r\u00e9cente mettrait automatiquement \u00e0 jour ce champ. Vous pouvez en apprendre plus sur les formules de recherche sur notre site web . Parce que Derni\u00e8re \u00c9tape est \u00e0 la fois une colonne de formule et une colonne de r\u00e9f\u00e9rence, nous avons \u00e9galement fait ce qui suit en suivant la formule d\u00e9crite \u00e0 l\u2019\u00e9tape 2 de ce tutoriel. Le champ Statut utilise la formule $Derni\u00e8re_\u00c9tape.Tour pour rechercher le statut du tour de l\u2019\u00e9tape li\u00e9e. Le champ Mis \u00e0 Jour Le utilise la formule $Derni\u00e8re_\u00c9tape.Date pour rechercher la date de l\u2019\u00e9tape li\u00e9e. En faisant cela, le statut et la date se mettent \u00e9galement \u00e0 jour automatiquement lorsque le champ Derni\u00e8re \u00c9tape se met \u00e0 jour. Besoin d\u2019aide suppl\u00e9mentaire ? Jetez un coup d\u2019\u0153il \u00e0 la solution du tutoriel , ou contactez-nous \u00e0 support@getgrist.com .","title":"Reference columns guide"},{"location":"examples/2021-05-reference-columns/#guide-des-colonnes-de-reference","text":"","title":"Guide des Colonnes de R\u00e9f\u00e9rence"},{"location":"examples/2021-05-reference-columns/#maitriser-les-colonnes-de-reference-en-3-etapes","text":"Dans Grist, les colonnes de r\u00e9f\u00e9rence sont l\u2019outil cl\u00e9 pour organiser les donn\u00e9es relationnelles. Les colonnes de r\u00e9f\u00e9rence indiquent \u00e0 Grist que deux tables distinctes sont li\u00e9es et sp\u00e9cifient quels enregistrements au sein de ces tables sont li\u00e9s. Par exemple, si vous avez une table de Chiens et une table de Propri\u00e9taires de Chiens , vous pouvez vouloir que chaque enregistrement de chien fasse explicitement r\u00e9f\u00e9rence \u00e0 l\u2019 enregistrement de son propri\u00e9taire dans Propri\u00e9taires de Chiens . Les colonnes de r\u00e9f\u00e9rence sont un outil puissant pour rechercher des donn\u00e9es \u00e0 partir d\u2019une table li\u00e9e et pour cr\u00e9er des mises en page hautement productives. Vous pouvez apprendre \u00e0 le faire en trois \u00e9tapes faciles. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et modifier en suivant ce guide.","title":"Ma\u00eetriser les Colonnes de R\u00e9f\u00e9rence en 3 \u00c9tapes"},{"location":"examples/2021-05-reference-columns/#utiliser-les-colonnes-de-reference-pour-organiser-les-donnees-liees","text":"Dans notre exemple, vous \u00eates un graphiste postulant \u00e0 des emplois, et vous utilisez Grist pour suivre votre processus de candidature. Dans le mod\u00e8le, vous avez quatre tables : Candidatures , \u00c9tapes , T\u00e2ches , et Contacts . Votre objectif est de relier les donn\u00e9es pertinentes entre les tables et de cr\u00e9er un tableau de bord personnalis\u00e9 o\u00f9 vous pouvez facilement voir le statut de chaque candidature, et ajouter de nouvelles candidatures et de nouvelles \u00e9tapes facilement. Dans ce tableau de bord , cliquer sur chaque candidature montre uniquement les \u00e9tapes li\u00e9es \u00e0 cette candidature. Nous pouvons cr\u00e9er cette relation en utilisant des colonnes de r\u00e9f\u00e9rence. Cr\u00e9ons ce tableau de bord ensemble.","title":"Utiliser les Colonnes de R\u00e9f\u00e9rence pour Organiser les Donn\u00e9es Li\u00e9es"},{"location":"examples/2021-05-reference-columns/#etape-1-creer-des-references","text":"Les colonnes de r\u00e9f\u00e9rence sont un type de colonne disponible sous TYPE DE COLONNE. Il est utile de penser \u00e0 la table avec la colonne de r\u00e9f\u00e9rence comme la table de r\u00e9f\u00e9rence , et \u00e0 la table qui est r\u00e9f\u00e9renc\u00e9e comme la table sous-jacente .","title":"\u00c9tape 1 : Cr\u00e9er des R\u00e9f\u00e9rences"},{"location":"examples/2021-05-reference-columns/#convertir-des-colonnes-de-texte-en-colonnes-de-reference","text":"Si vous avez d\u00e9j\u00e0 du texte dans la colonne s\u00e9lectionn\u00e9e, d\u00e9finissez le TYPE DE COLONNE dans le panneau de droite sur \u201cR\u00e9f\u00e9rence\u201d. Grist devinera la table sous-jacente et la colonne que vous souhaitez afficher dans la colonne de r\u00e9f\u00e9rence. Vous pouvez revoir et modifier cette supposition et d\u00e9finir la table sous-jacente et la colonne d\u2019affichage appropri\u00e9es. DONN\u00c9ES DE LA TABLE pointe vers la table sous-jacente. AFFICHER LA COLONNE d\u00e9finit la valeur d\u2019affichage dans la colonne de r\u00e9f\u00e9rence. Par exemple, dans la table \u00c9tapes , convertissez la colonne R\u00f4le en une colonne de r\u00e9f\u00e9rence. DONN\u00c9ES DE LA TABLE doit pointer vers Candidatures . AFFICHER LA COLONNE doit \u00eatre d\u00e9fini sur R\u00f4le . Notez que la colonne de r\u00e9f\u00e9rence fait r\u00e9f\u00e9rence \u00e0 l\u2019 ensemble de l\u2019enregistrement et que vous choisissez quelle colonne afficher dans la colonne de r\u00e9f\u00e9rence. Astuce : Vous pouvez facilement identifier les colonnes de r\u00e9f\u00e9rence par les ic\u00f4nes de maillon de cha\u00eene dans les cellules de la colonne.","title":"Convertir des Colonnes de Texte en Colonnes de R\u00e9f\u00e9rence"},{"location":"examples/2021-05-reference-columns/#creer-des-colonnes-de-reference","text":"Dans la table Contacts , nous avons une liste de contacts qui ne sont associ\u00e9s \u00e0 aucune candidature ou entreprise. Cr\u00e9ons une nouvelle colonne appel\u00e9e Entreprise , d\u00e9finissons son type sur R\u00e9f\u00e9rence, et pointons vers Candidatures comme table sous-jacente avec Entreprise comme affichage dans la colonne de r\u00e9f\u00e9rence. Cliquez sur la cellule vide pour ouvrir un menu d\u00e9roulant et s\u00e9lectionnez manuellement l\u2019entreprise pour laquelle chaque contact travaille. Regardez l\u2019adresse e-mail pour un indice. Note : Vous pouvez toujours cliquer sur une cellule de Colonne de R\u00e9f\u00e9rence pour ouvrir le menu d\u00e9roulant et s\u00e9lectionner une nouvelle valeur.","title":"Cr\u00e9er des Colonnes de R\u00e9f\u00e9rence"},{"location":"examples/2021-05-reference-columns/#etape-2-rechercher-des-donnees-supplementaires-dans-lenregistrement-reference","text":"Rappelez-vous que la colonne de r\u00e9f\u00e9rence fait r\u00e9f\u00e9rence \u00e0 une autre table et corr\u00e8le deux enregistrements sp\u00e9cifiques. Bien que vous voyiez une colonne sp\u00e9cifique dans l\u2019 affichage de la colonne de r\u00e9f\u00e9rence, la r\u00e9f\u00e9rence est faite \u00e0 l\u2019 ensemble de l\u2019enregistrement . Cela nous permet de rechercher des champs de donn\u00e9es suppl\u00e9mentaires dans l\u2019enregistrement li\u00e9 en utilisant une formule simple. Essayons cela. \u00c0 l\u2019\u00e9tape 1, dans la table \u00c9tapes , nous avons cr\u00e9\u00e9 une colonne de r\u00e9f\u00e9rence appel\u00e9e R\u00f4le . Il serait utile de voir \u00e9galement pour chaque enregistrement \u00c9tape , l\u2019entreprise pertinente. Par exemple, dans la ligne 1, nous voyons l\u2019\u00e9v\u00e9nement de l\u2019\u00e9tape \u201cRejet\u00e9!\u201d pour le r\u00f4le \u201cResponsable du Design Num\u00e9rique\u201d. Il n\u2019est pas imm\u00e9diatement apparent de quelle entreprise il s\u2019agit. Utilisons la colonne de r\u00e9f\u00e9rence R\u00f4le pour rechercher facilement l\u2019entreprise list\u00e9e dans l\u2019enregistrement \u201cResponsable du Design Num\u00e9rique\u201d dans la table Candidatures . Pour ce faire, nous cr\u00e9ons une colonne appel\u00e9e Entreprise et nous utilisons la formule $Role.Entreprise . La structure de la formule est $[ID de la Colonne de R\u00e9f\u00e9rence dans la Table de R\u00e9f\u00e9rence].[ID de la Colonne dans la Table Sous-jacente] . Grist compl\u00e9tera \u00e9galement automatiquement des parties de la formule pendant que vous la tapez. Il y a une autre fa\u00e7on d\u2019ajouter plusieurs colonnes \u00e0 partir d\u2019une table sous-jacente. Si vous \u00eates int\u00e9ress\u00e9 \u00e0 en savoir plus, visitez la section d\u2019aide sur les colonnes de r\u00e9f\u00e9rence de notre site web.","title":"\u00c9tape 2 : Rechercher des Donn\u00e9es Suppl\u00e9mentaires dans l’Enregistrement R\u00e9f\u00e9renc\u00e9"},{"location":"examples/2021-05-reference-columns/#etape-3-creer-une-mise-en-page-hautement-productive-avec-des-tables-liees","text":"L\u2019une des fonctionnalit\u00e9s les plus puissantes de Grist est la capacit\u00e9 de lier des tables li\u00e9es sur la m\u00eame page pour cr\u00e9er des mises en page hautement productives. Dans le tableau de bord final montr\u00e9 au d\u00e9but de ce tutoriel, nous avons vu que cliquer sur une candidature remplissait une vue des \u00e9tapes li\u00e9es \u00e0 cette candidature. Faisons cela maintenant en ajoutant \u00c9tapes comme vue \u00e0 la page Candidatures . ( R\u00e9visez les vues ici .) Ajouter la table comme vue de Liste de Fiches rend les donn\u00e9es plus faciles \u00e0 visualiser. De m\u00eame, vous pouvez vouloir changer la table Candidatures en une vue de Liste de Fiches. Dans le menu LISTE DE FICHES \u00e0 droite, s\u00e9lectionnez DONN\u00c9ES pour d\u00e9finir les r\u00e8gles de s\u00e9lection des donn\u00e9es. Sous S\u00c9LECTIONNER PAR, vous verrez l\u2019option \u201cLISTE_DE_FICHES CANDIDATURES\u201d. Cette option est uniquement disponible parce qu\u2019\u00e0 l\u2019\u00e9tape 1, nous avons cr\u00e9\u00e9 une r\u00e9f\u00e9rence de la table \u00c9tapes \u00e0 la table Candidatures dans la colonne de r\u00e9f\u00e9rence R\u00f4le . Cette r\u00e9f\u00e9rence indique \u00e0 Grist quelles \u00e9tapes sont li\u00e9es \u00e0 quelles candidatures. F\u00e9licitations ! Vous savez maintenant comment utiliser les colonnes de r\u00e9f\u00e9rence pour organiser des donn\u00e9es li\u00e9es, donner une structure \u00e0 vos donn\u00e9es, et cr\u00e9er des vues li\u00e9es dans des mises en page productives. Si vous le souhaitez, comparez votre document \u00e0 la solution du tutoriel .","title":"\u00c9tape 3 : Cr\u00e9er une Mise en Page Hautement Productive avec des Tables Li\u00e9es"},{"location":"examples/2021-05-reference-columns/#approfondir-combiner-des-formules-et-des-colonnes-de-reference","text":"Si vous \u00eates \u00e0 l\u2019aise avec les formules, essayez d\u2019utiliser des formules dans les colonnes de r\u00e9f\u00e9rence pour rendre Grist un outil encore plus puissant. Dans la solution du tutoriel , nous avons utilis\u00e9 une formule pour faire plus. La formule dans le champ Derni\u00e8re \u00c9tape dans la vue Candidatures recherche la date la plus r\u00e9cente dans les enregistrements li\u00e9s dans la table \u00c9tapes . Ainsi, ajouter une nouvelle \u00e9tape avec une date plus r\u00e9cente mettrait automatiquement \u00e0 jour ce champ. Vous pouvez en apprendre plus sur les formules de recherche sur notre site web . Parce que Derni\u00e8re \u00c9tape est \u00e0 la fois une colonne de formule et une colonne de r\u00e9f\u00e9rence, nous avons \u00e9galement fait ce qui suit en suivant la formule d\u00e9crite \u00e0 l\u2019\u00e9tape 2 de ce tutoriel. Le champ Statut utilise la formule $Derni\u00e8re_\u00c9tape.Tour pour rechercher le statut du tour de l\u2019\u00e9tape li\u00e9e. Le champ Mis \u00e0 Jour Le utilise la formule $Derni\u00e8re_\u00c9tape.Date pour rechercher la date de l\u2019\u00e9tape li\u00e9e. En faisant cela, le statut et la date se mettent \u00e9galement \u00e0 jour automatiquement lorsque le champ Derni\u00e8re \u00c9tape se met \u00e0 jour. Besoin d\u2019aide suppl\u00e9mentaire ? Jetez un coup d\u2019\u0153il \u00e0 la solution du tutoriel , ou contactez-nous \u00e0 support@getgrist.com .","title":"Approfondir : Combiner des Formules et des Colonnes de R\u00e9f\u00e9rence"},{"location":"examples/2021-06-timesheets/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Guide des Tables de R\u00e9sum\u00e9 # Ma\u00eetriser les Tables de R\u00e9sum\u00e9 avec 2 Concepts # Dans Grist, les tables de r\u00e9sum\u00e9 sont l\u2019outil principal de l\u2019analyse de donn\u00e9es. Elles sont similaires aux tableaux crois\u00e9s dynamiques dans les feuilles de calcul et aux fonctions de regroupement dans les bases de donn\u00e9es. Elles permettent de r\u00e9sumer les tables en regroupant les enregistrements en cat\u00e9gories sp\u00e9cifiques. Par exemple, si vous avez une table de champions olympiques, il peut \u00eatre utile de regrouper les enregistrements des champions par pays ou par sport \u2014 ou par une combinaison de pays et de sport. Une fois les enregistrements tri\u00e9s en cat\u00e9gories utiles, vous pouvez ensuite vouloir calculer des sommes en utilisant ces groupes d\u2019enregistrements. Grist utilise un champ sp\u00e9cial astucieux, disponible dans les formules sous la forme de $group . Les tables de r\u00e9sum\u00e9 facilitent la cr\u00e9ation de pages dans lesquelles vous pouvez rapidement capturer des informations utiles sur les donn\u00e9es. Vous pouvez apprendre \u00e0 le faire en apprenant deux concepts : cr\u00e9er des tables de r\u00e9sum\u00e9 et utiliser $group dans les formules. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple ( https://public.getgrist.com/x527ESJATWNS/Time-Sheets-Tutorial ) que vous pouvez copier et \u00e9diter en suivant ce guide. Utiliser les Tables de R\u00e9sum\u00e9 pour Analyser les Donn\u00e9es # Dans notre exemple, vous travaillez pour le d\u00e9partement RH d\u2019une usine de bonbons qui embauche des contractuels travaillant pour divers d\u00e9partements. Dans le mod\u00e8le, votre \u00e9quipe a cr\u00e9\u00e9 un suivi avanc\u00e9 des feuilles de temps. Il y a une page o\u00f9 les contractuels peuvent facilement ajouter des feuilles de temps pour des mois s\u00e9lectionn\u00e9s. Il serait utile d\u2019avoir des pages suppl\u00e9mentaires qui r\u00e9sument les d\u00e9penses par mois, par d\u00e9partement et par contractuel. Votre objectif dans ce tutoriel est de construire ces pages de r\u00e9sum\u00e9. Cr\u00e9er des Tables de R\u00e9sum\u00e9 # \u00c9tape 1 : Cr\u00e9er une table de r\u00e9sum\u00e9 # Commen\u00e7ons par cr\u00e9er une table de r\u00e9sum\u00e9 qui regroupe les enregistrements dans la table des feuilles de temps par mois. Grist facilite la cr\u00e9ation de tables de r\u00e9sum\u00e9. Cliquez simplement sur Ajouter Nouveau > Ajouter Page > Entr\u00e9es de Feuille de Temps > > Mois . Cela g\u00e9n\u00e9rera une table de r\u00e9sum\u00e9 avec quelques colonnes. Dans ce cas, nous avons les trois colonnes suivantes. Premi\u00e8re Colonne : Liste des groupes de mois, de janvier \u00e0 juin 2021. Deuxi\u00e8me Colonne : Un d\u00e9compte du nombre total d\u2019enregistrements dans chaque mois, par exemple en janvier il y a 12 enregistrements de feuilles de temps. Troisi\u00e8me Colonne : Une somme des heures travaill\u00e9es dans chaque mois, par exemple en janvier le total des heures travaill\u00e9es dans ces 12 enregistrements de feuilles de temps est de 81 heures. Note : Grist additionnera automatiquement toutes les colonnes num\u00e9riques, vous faisant gagner du temps. \u00c9tape 2 : Cr\u00e9er des tables de r\u00e9sum\u00e9 avec plusieurs cat\u00e9gories # Il peut \u00eatre utile de regrouper \u00e9galement les feuilles de temps par une combinaison de cat\u00e9gories. Par exemple, nous pouvons vouloir savoir combien de temps et d\u2019argent ont \u00e9t\u00e9 d\u00e9pens\u00e9s sur un compte particulier dans un mois particulier, ou sur un employ\u00e9 sp\u00e9cifique dans un compte et un mois sp\u00e9cifiques. Lors de la cr\u00e9ation d\u2019une table de r\u00e9sum\u00e9, vous pouvez s\u00e9lectionner plusieurs colonnes par lesquelles regrouper les donn\u00e9es. Ajoutons deux nouvelles tables de r\u00e9sum\u00e9. Lors de l\u2019ajout de ces vues, assurez-vous de S\u00e9lectionner Par la premi\u00e8re vue que nous avons cr\u00e9\u00e9e sur cette page. Cela liera les tables de sorte que la s\u00e9lection d\u2019un mois dans la premi\u00e8re vue mettra \u00e0 jour dynamiquement les enregistrements dans les nouvelles vues. Pas s\u00fbr de comprendre pourquoi ? R\u00e9visez lien des vues . Ajouter Nouveau > Ajouter Vue \u00e0 la Page > Entr\u00e9es de Feuille de Temps > > Mois et Compte Ajouter Nouveau > Ajouter Vue \u00e0 la Page > Entr\u00e9es de Feuille de Temps > > Mois et Compte et Employ\u00e9 Pour visualiser plus facilement ces donn\u00e9es, faites glisser et d\u00e9posez les nouvelles tables de mani\u00e8re \u00e0 ce qu\u2019elles soient dispos\u00e9es verticalement. Vous pouvez \u00e9galement vouloir masquer les colonnes de d\u00e9compte. Super ! Mais maintenant nous voulons ajouter le total des d\u00e9penses en dollars dans chacune de ces cat\u00e9gories. C\u2019est simple \u00e0 faire avec des formules de r\u00e9sum\u00e9. Calculer les Totaux en Utilisant des Formules de R\u00e9sum\u00e9 # Suivez-vous la vid\u00e9o ? Visitez la solution du tutoriel si vous \u00eates bloqu\u00e9. Notez qu\u2019il y a des permissions avanc\u00e9es en place pour la solution du tutoriel qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. \u00c9tape 1 : Comprendre le champ $group dans les formules # Dans Grist, $group est un objet Python sp\u00e9cial qui repr\u00e9sente une collection d\u2019enregistrements r\u00e9sum\u00e9s par la ligne de r\u00e9sum\u00e9 actuelle. Si vous regardez la formule dans la colonne Heures Travaill\u00e9es , vous verrez SUM($group.Heures_Travaill\u00e9es) . Cela prend la somme des Heures Travaill\u00e9es dans un groupe . Dans cet exemple, dans la ligne 1, le groupe est janvier 2021. Ainsi, dans cette ligne, la formule additionne les heures travaill\u00e9es dans le groupe de janvier 2021. Dans la ligne 2, le groupe est f\u00e9vrier 2021 et la formule additionne les heures travaill\u00e9es en f\u00e9vrier. Si vous jetez un coup d\u2019\u0153il \u00e0 la colonne count , que nous avons pr\u00e9c\u00e9demment masqu\u00e9e, vous trouverez la formule len($group) . La fonction len (qui signifie longueur) compte tous les enregistrements appartenant au groupe r\u00e9sum\u00e9 dans une ligne particuli\u00e8re. Une autre fa\u00e7on d\u2019exprimer un ensemble d\u2019enregistrements est de parcourir la liste des enregistrements dans un groupe en utilisant une variable. Vous pouvez nommer la variable comme vous le souhaitez ; nous utiliserons r (pour \u201crecord\u201d). Nous pouvons r\u00e9\u00e9crire la formule dans Heures Travaill\u00e9es comme sum(r.Heures_Travaill\u00e9es for r in $group) . \u00c9tape 2 : Utiliser $group dans les formules # Calculons le total des d\u00e9penses en dollars pour les heures travaill\u00e9es dans chaque mois. La formule est sum(r.Heures_Travaill\u00e9es * r.FeuilleDeTemps.Taux_Horaire for r in $group) . Puisque chaque enregistrement r dans le groupe est un enregistrement dans la table sous-jacente ( Entr\u00e9es de Feuille de Temps ), r.Heures_Travaill\u00e9es se r\u00e9f\u00e8re au champ dans cette table. Dans la table Entr\u00e9es de Feuille de Temps , la colonne FeuilleDeTemps est une colonne de r\u00e9f\u00e9rence qui fait r\u00e9f\u00e9rence \u00e0 un enregistrement entier dans la table Feuilles de Temps . Ainsi, nous devons sp\u00e9cifier davantage quel champ de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 doit \u00eatre inclus dans le calcul de la formule, qui dans ce cas est Taux_Horaire . Pour en savoir plus sur les colonnes de r\u00e9f\u00e9rence, visitez notre guide des colonnes de r\u00e9f\u00e9rence . Nous pouvons appliquer la m\u00eame formule aux deux autres tables de r\u00e9sum\u00e9 sur cette page. Dans la deuxi\u00e8me table, la fonction $group regroupe les \u00e9l\u00e9ments dans le m\u00eame mois ET compte. Dans la troisi\u00e8me table, la fonction $group regroupe les d\u00e9penses dans le m\u00eame mois ET compte ET par le m\u00eame employ\u00e9. Et c\u2019est tout ! Vous l\u2019avez fait. Vous avez reconstruit la page de r\u00e9sum\u00e9 mensuel. Voyez si vous pouvez appliquer ces concepts pour reconstruire la page de r\u00e9sum\u00e9 des contractuels. Le saviez-vous ? Si n\u00e9cessaire, vous pouvez \u00e9galement ajouter des conditions \u00e0 cette formule. Par exemple, sum(r.Heures_Travaill\u00e9es * r.FeuilleDeTemps.Taux_Horaire for r in $group if r.Heures_Travaill\u00e9es > 0) n\u2019additionnera que les enregistrements dans lesquels il y a une valeur positive dans le champ Heures Travaill\u00e9es . Visitez notre r\u00e9f\u00e9rence des fonctions pour en savoir plus. Besoin de plus d\u2019aide ? Visitez la solution du tutoriel ou contactez-nous \u00e0 support@getgrist.com . Notez qu\u2019il y a des permissions avanc\u00e9es en place pour la solution du tutoriel qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages.","title":"Summary tables guide"},{"location":"examples/2021-06-timesheets/#guide-des-tables-de-resume","text":"","title":"Guide des Tables de R\u00e9sum\u00e9"},{"location":"examples/2021-06-timesheets/#maitriser-les-tables-de-resume-avec-2-concepts","text":"Dans Grist, les tables de r\u00e9sum\u00e9 sont l\u2019outil principal de l\u2019analyse de donn\u00e9es. Elles sont similaires aux tableaux crois\u00e9s dynamiques dans les feuilles de calcul et aux fonctions de regroupement dans les bases de donn\u00e9es. Elles permettent de r\u00e9sumer les tables en regroupant les enregistrements en cat\u00e9gories sp\u00e9cifiques. Par exemple, si vous avez une table de champions olympiques, il peut \u00eatre utile de regrouper les enregistrements des champions par pays ou par sport \u2014 ou par une combinaison de pays et de sport. Une fois les enregistrements tri\u00e9s en cat\u00e9gories utiles, vous pouvez ensuite vouloir calculer des sommes en utilisant ces groupes d\u2019enregistrements. Grist utilise un champ sp\u00e9cial astucieux, disponible dans les formules sous la forme de $group . Les tables de r\u00e9sum\u00e9 facilitent la cr\u00e9ation de pages dans lesquelles vous pouvez rapidement capturer des informations utiles sur les donn\u00e9es. Vous pouvez apprendre \u00e0 le faire en apprenant deux concepts : cr\u00e9er des tables de r\u00e9sum\u00e9 et utiliser $group dans les formules. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple ( https://public.getgrist.com/x527ESJATWNS/Time-Sheets-Tutorial ) que vous pouvez copier et \u00e9diter en suivant ce guide.","title":"Ma\u00eetriser les Tables de R\u00e9sum\u00e9 avec 2 Concepts"},{"location":"examples/2021-06-timesheets/#utiliser-les-tables-de-resume-pour-analyser-les-donnees","text":"Dans notre exemple, vous travaillez pour le d\u00e9partement RH d\u2019une usine de bonbons qui embauche des contractuels travaillant pour divers d\u00e9partements. Dans le mod\u00e8le, votre \u00e9quipe a cr\u00e9\u00e9 un suivi avanc\u00e9 des feuilles de temps. Il y a une page o\u00f9 les contractuels peuvent facilement ajouter des feuilles de temps pour des mois s\u00e9lectionn\u00e9s. Il serait utile d\u2019avoir des pages suppl\u00e9mentaires qui r\u00e9sument les d\u00e9penses par mois, par d\u00e9partement et par contractuel. Votre objectif dans ce tutoriel est de construire ces pages de r\u00e9sum\u00e9.","title":"Utiliser les Tables de R\u00e9sum\u00e9 pour Analyser les Donn\u00e9es"},{"location":"examples/2021-06-timesheets/#creer-des-tables-de-resume","text":"","title":"Cr\u00e9er des Tables de R\u00e9sum\u00e9"},{"location":"examples/2021-06-timesheets/#etape-1-creer-une-table-de-resume","text":"Commen\u00e7ons par cr\u00e9er une table de r\u00e9sum\u00e9 qui regroupe les enregistrements dans la table des feuilles de temps par mois. Grist facilite la cr\u00e9ation de tables de r\u00e9sum\u00e9. Cliquez simplement sur Ajouter Nouveau > Ajouter Page > Entr\u00e9es de Feuille de Temps > > Mois . Cela g\u00e9n\u00e9rera une table de r\u00e9sum\u00e9 avec quelques colonnes. Dans ce cas, nous avons les trois colonnes suivantes. Premi\u00e8re Colonne : Liste des groupes de mois, de janvier \u00e0 juin 2021. Deuxi\u00e8me Colonne : Un d\u00e9compte du nombre total d\u2019enregistrements dans chaque mois, par exemple en janvier il y a 12 enregistrements de feuilles de temps. Troisi\u00e8me Colonne : Une somme des heures travaill\u00e9es dans chaque mois, par exemple en janvier le total des heures travaill\u00e9es dans ces 12 enregistrements de feuilles de temps est de 81 heures. Note : Grist additionnera automatiquement toutes les colonnes num\u00e9riques, vous faisant gagner du temps.","title":"\u00c9tape 1 : Cr\u00e9er une table de r\u00e9sum\u00e9"},{"location":"examples/2021-06-timesheets/#etape-2-creer-des-tables-de-resume-avec-plusieurs-categories","text":"Il peut \u00eatre utile de regrouper \u00e9galement les feuilles de temps par une combinaison de cat\u00e9gories. Par exemple, nous pouvons vouloir savoir combien de temps et d\u2019argent ont \u00e9t\u00e9 d\u00e9pens\u00e9s sur un compte particulier dans un mois particulier, ou sur un employ\u00e9 sp\u00e9cifique dans un compte et un mois sp\u00e9cifiques. Lors de la cr\u00e9ation d\u2019une table de r\u00e9sum\u00e9, vous pouvez s\u00e9lectionner plusieurs colonnes par lesquelles regrouper les donn\u00e9es. Ajoutons deux nouvelles tables de r\u00e9sum\u00e9. Lors de l\u2019ajout de ces vues, assurez-vous de S\u00e9lectionner Par la premi\u00e8re vue que nous avons cr\u00e9\u00e9e sur cette page. Cela liera les tables de sorte que la s\u00e9lection d\u2019un mois dans la premi\u00e8re vue mettra \u00e0 jour dynamiquement les enregistrements dans les nouvelles vues. Pas s\u00fbr de comprendre pourquoi ? R\u00e9visez lien des vues . Ajouter Nouveau > Ajouter Vue \u00e0 la Page > Entr\u00e9es de Feuille de Temps > > Mois et Compte Ajouter Nouveau > Ajouter Vue \u00e0 la Page > Entr\u00e9es de Feuille de Temps > > Mois et Compte et Employ\u00e9 Pour visualiser plus facilement ces donn\u00e9es, faites glisser et d\u00e9posez les nouvelles tables de mani\u00e8re \u00e0 ce qu\u2019elles soient dispos\u00e9es verticalement. Vous pouvez \u00e9galement vouloir masquer les colonnes de d\u00e9compte. Super ! Mais maintenant nous voulons ajouter le total des d\u00e9penses en dollars dans chacune de ces cat\u00e9gories. C\u2019est simple \u00e0 faire avec des formules de r\u00e9sum\u00e9.","title":"\u00c9tape 2 : Cr\u00e9er des tables de r\u00e9sum\u00e9 avec plusieurs cat\u00e9gories"},{"location":"examples/2021-06-timesheets/#calculer-les-totaux-en-utilisant-des-formules-de-resume","text":"Suivez-vous la vid\u00e9o ? Visitez la solution du tutoriel si vous \u00eates bloqu\u00e9. Notez qu\u2019il y a des permissions avanc\u00e9es en place pour la solution du tutoriel qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages.","title":"Calculer les Totaux en Utilisant des Formules de R\u00e9sum\u00e9"},{"location":"examples/2021-06-timesheets/#etape-1-comprendre-le-champ-group-dans-les-formules","text":"Dans Grist, $group est un objet Python sp\u00e9cial qui repr\u00e9sente une collection d\u2019enregistrements r\u00e9sum\u00e9s par la ligne de r\u00e9sum\u00e9 actuelle. Si vous regardez la formule dans la colonne Heures Travaill\u00e9es , vous verrez SUM($group.Heures_Travaill\u00e9es) . Cela prend la somme des Heures Travaill\u00e9es dans un groupe . Dans cet exemple, dans la ligne 1, le groupe est janvier 2021. Ainsi, dans cette ligne, la formule additionne les heures travaill\u00e9es dans le groupe de janvier 2021. Dans la ligne 2, le groupe est f\u00e9vrier 2021 et la formule additionne les heures travaill\u00e9es en f\u00e9vrier. Si vous jetez un coup d\u2019\u0153il \u00e0 la colonne count , que nous avons pr\u00e9c\u00e9demment masqu\u00e9e, vous trouverez la formule len($group) . La fonction len (qui signifie longueur) compte tous les enregistrements appartenant au groupe r\u00e9sum\u00e9 dans une ligne particuli\u00e8re. Une autre fa\u00e7on d\u2019exprimer un ensemble d\u2019enregistrements est de parcourir la liste des enregistrements dans un groupe en utilisant une variable. Vous pouvez nommer la variable comme vous le souhaitez ; nous utiliserons r (pour \u201crecord\u201d). Nous pouvons r\u00e9\u00e9crire la formule dans Heures Travaill\u00e9es comme sum(r.Heures_Travaill\u00e9es for r in $group) .","title":"\u00c9tape 1 : Comprendre le champ $group dans les formules"},{"location":"examples/2021-06-timesheets/#etape-2-utiliser-group-dans-les-formules","text":"Calculons le total des d\u00e9penses en dollars pour les heures travaill\u00e9es dans chaque mois. La formule est sum(r.Heures_Travaill\u00e9es * r.FeuilleDeTemps.Taux_Horaire for r in $group) . Puisque chaque enregistrement r dans le groupe est un enregistrement dans la table sous-jacente ( Entr\u00e9es de Feuille de Temps ), r.Heures_Travaill\u00e9es se r\u00e9f\u00e8re au champ dans cette table. Dans la table Entr\u00e9es de Feuille de Temps , la colonne FeuilleDeTemps est une colonne de r\u00e9f\u00e9rence qui fait r\u00e9f\u00e9rence \u00e0 un enregistrement entier dans la table Feuilles de Temps . Ainsi, nous devons sp\u00e9cifier davantage quel champ de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 doit \u00eatre inclus dans le calcul de la formule, qui dans ce cas est Taux_Horaire . Pour en savoir plus sur les colonnes de r\u00e9f\u00e9rence, visitez notre guide des colonnes de r\u00e9f\u00e9rence . Nous pouvons appliquer la m\u00eame formule aux deux autres tables de r\u00e9sum\u00e9 sur cette page. Dans la deuxi\u00e8me table, la fonction $group regroupe les \u00e9l\u00e9ments dans le m\u00eame mois ET compte. Dans la troisi\u00e8me table, la fonction $group regroupe les d\u00e9penses dans le m\u00eame mois ET compte ET par le m\u00eame employ\u00e9. Et c\u2019est tout ! Vous l\u2019avez fait. Vous avez reconstruit la page de r\u00e9sum\u00e9 mensuel. Voyez si vous pouvez appliquer ces concepts pour reconstruire la page de r\u00e9sum\u00e9 des contractuels. Le saviez-vous ? Si n\u00e9cessaire, vous pouvez \u00e9galement ajouter des conditions \u00e0 cette formule. Par exemple, sum(r.Heures_Travaill\u00e9es * r.FeuilleDeTemps.Taux_Horaire for r in $group if r.Heures_Travaill\u00e9es > 0) n\u2019additionnera que les enregistrements dans lesquels il y a une valeur positive dans le champ Heures Travaill\u00e9es . Visitez notre r\u00e9f\u00e9rence des fonctions pour en savoir plus. Besoin de plus d\u2019aide ? Visitez la solution du tutoriel ou contactez-nous \u00e0 support@getgrist.com . Notez qu\u2019il y a des permissions avanc\u00e9es en place pour la solution du tutoriel qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages.","title":"\u00c9tape 2 : Utiliser $group dans les formules"},{"location":"examples/2021-07-auto-stamps/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Guide des Horodatages Automatiques et des Utilisateurs # Il est parfois utile de savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour ou cr\u00e9\u00e9 pour la derni\u00e8re fois, et par qui. Grist rend simple la cr\u00e9ation de colonnes qui horodatent un enregistrement ou ajoutent le nom d\u2019un utilisateur lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. Cela permet de trier les enregistrements par anciennet\u00e9, de d\u00e9terminer depuis combien de temps un enregistrement existe, ou de suivre rapidement la derni\u00e8re modification jusqu\u2019\u00e0 son auteur. Ceci est particuli\u00e8rement utile lorsque l\u2019on travaille en \u00e9quipe. Supposons que vous ayez un document de suivi des opportunit\u00e9s de vente. Il peut \u00eatre utile de savoir la derni\u00e8re fois qu\u2019un commercial a agi sur une opportunit\u00e9 particuli\u00e8re, et de d\u00e9terminer combien de temps cette opportunit\u00e9 est en attente. Nous avons cr\u00e9\u00e9 un tutoriel bas\u00e9 sur notre Suivi des Demandes de Subvention mod\u00e8le. Pour suivre ce guide, commencez par cette version incompl\u00e8te du mod\u00e8le qui manque de colonnes d\u2019horodatage et de nom d\u2019utilisateur. Nous les recr\u00e9erons ensemble dans ce tutoriel. Cr\u00e9ez une copie et modifiez le mod\u00e8le en suivant ce guide. Ouvrir le Mod\u00e8le de Tutoriel Aper\u00e7u du Mod\u00e8le : Suivi des Demandes de Subvention # Dans ce mod\u00e8le, une ONG ax\u00e9e sur les projets de conservation des oc\u00e9ans suit ses demandes de subvention soumis \u00e0 des fondations ax\u00e9es sur la mer. Voici une r\u00e9partition de la structure du document. Le Tableau de Bord des Demandes montre toutes les demandes, les d\u00e9tails des demandes, les d\u00e9tails des fondations, et les t\u00e2ches associ\u00e9es dans une vue utile. T\u00e2ches par Personnel liste le personnel de l\u2019ONG, les demandes qu\u2019ils supervisent, et les t\u00e2ches assign\u00e9es \u00e0 chaque membre de l\u2019\u00e9quipe. Nos Programmes liste les programmes que l\u2019ONG cherche \u00e0 financer. Vue d'ensemble de notre Financement fournit une vue d\u2019ensemble du financement avec deux graphiques : (i) r\u00e9partition des fonds dans le pipeline de collecte de fonds, et (ii) r\u00e9partition du financement total attribu\u00e9 \u00e0 des programmes sp\u00e9cifiques de l\u2019ONG. Fondations avec lesquelles nous travaillons liste les fondations auxquelles l\u2019ONG a demand\u00e9 des financements. Cette page liste \u00e9galement les demandes et les t\u00e2ches associ\u00e9es. Cr\u00e9ation de Colonnes d\u2019Horodatage # Les colonnes peuvent horodater un enregistrement lorsqu\u2019il est cr\u00e9\u00e9 ou mis \u00e0 jour en utilisant la formule NOW() . Ajoutons une colonne au table T\u00e2ches pour suivre la derni\u00e8re mise \u00e0 jour d\u2019une t\u00e2che. Cela peut \u00eatre accompli en trois \u00e9tapes. Dans la table T\u00e2ches , cr\u00e9ez une colonne intitul\u00e9e \u2018Derni\u00e8re Mise \u00e0 Jour\u2019 et dans les types de colonne, s\u00e9lectionnez DateHeure pour choisir votre format de date et heure souhait\u00e9. Convertissez la colonne en une colonne de donn\u00e9es en cliquant sur le menu d\u00e9roulant ACTIONS dans le panneau de cr\u00e9ation. Cela emp\u00eache la formule de se d\u00e9clencher \u00e0 chaque chargement du document. Une fois convertie en colonne de donn\u00e9es, entrez la formule NOW() . Vous verrez deux options de case \u00e0 cocher sous la formule. Appliquer aux nouveaux enregistrements d\u00e9clenche la formule uniquement lorsqu\u2019un enregistrement est cr\u00e9\u00e9. Appliquer aux modifications d'enregistrement d\u00e9clenche la formule lorsqu\u2019un enregistrement est mis \u00e0 jour. S\u00e9lectionnez Appliquer aux modifications d'enregistrement pour ouvrir un sous-menu o\u00f9 vous pouvez s\u00e9lectionner quels champs, lorsqu\u2019ils sont mis \u00e0 jour, d\u00e9clencheront la formule. Dans ce cas, nous s\u00e9lectionnerons Tout Champ , ce qui signifie que la mise \u00e0 jour de n\u2019importe quel champ dans cet enregistrement d\u00e9clenchera la mise \u00e0 jour de la formule d\u2019horodatage. Super ! Vous suivez maintenant la derni\u00e8re mise \u00e0 jour d\u2019une t\u00e2che. Ensuite, vous voudrez peut-\u00eatre savoir qui a cr\u00e9\u00e9 une t\u00e2che car cette personne peut avoir le plus d\u2019informations sur les objectifs et les param\u00e8tres de la t\u00e2che. C\u2019est tout aussi simple \u00e0 cr\u00e9er dans Grist que les horodatages. Cr\u00e9ation de Colonnes de Nom d\u2019Utilisateur # Les colonnes de nom d\u2019utilisateur sont cr\u00e9\u00e9es en utilisant les m\u00eames \u00e9tapes que les horodatages, sauf pour un d\u00e9tail \u2014 la formule est user.Name . Ajoutons une colonne \u00e0 la table T\u00e2ches pour suivre qui a cr\u00e9\u00e9 une t\u00e2che. Dans la table T\u00e2ches , cr\u00e9ez une colonne intitul\u00e9e \u2018Cr\u00e9\u00e9 Par\u2019 et dans les types de colonne, s\u00e9lectionnez Texte et modifiez le format si vous le souhaitez. Convertissez la colonne de formule en une colonne de donn\u00e9es et entrez la formule user.Name . S\u00e9lectionnez Appliquer aux nouveaux enregistrements pour que la formule ne se d\u00e9clenche que lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Il existe d\u2019autres possibilit\u00e9s en plus de user.Name telles que user.Email ou un user.UserID unique. Les informations utilisateur disponibles sont les m\u00eames que celles des conditions de r\u00e8gle d\u2019acc\u00e8s . Note. Il est toujours possible pour un utilisateur de modifier manuellement les cellules avec des formules d\u2019horodatage ou de nom d\u2019utilisateur. Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire. Et voil\u00e0 ! Vous avez cr\u00e9\u00e9 des colonnes qui capturent les informations d\u2019utilisateur et d\u2019horodatage bas\u00e9es sur des d\u00e9clencheurs sp\u00e9cifiques, comme lorsque un enregistrement est mis \u00e0 jour ou cr\u00e9\u00e9. Bravo ! Approfondir : Combiner les horodatages et les noms d\u2019utilisateur en utilisant des formules # En g\u00e9n\u00e9ral, il est pr\u00e9f\u00e9rable de garder les informations d\u2019horodatage et de nom d\u2019utilisateur dans des colonnes s\u00e9par\u00e9es afin de pouvoir trier et filtrer par ces colonnes. Cependant, il peut y avoir des moments o\u00f9 il serait utile de capturer les informations d\u2019horodatage et de nom d\u2019utilisateur dans la m\u00eame colonne. Ajoutons une telle colonne \u00e0 la table Demandes . Dans la table Demandes , cr\u00e9ez une colonne intitul\u00e9e \u2018Cr\u00e9\u00e9 Le\u2019 et convertissez-la en une colonne de donn\u00e9es. Dans les types de colonne, s\u00e9lectionnez Texte. Entrez la formule \"{:%b %d, %Y} par {}\".format(NOW(), user.Name) . La partie entre guillemets est une cha\u00eene de format. Chaque ensemble d\u2019accolades {} dans celle-ci est remplac\u00e9 par la valeur suivante entre parenth\u00e8ses apr\u00e8s .format . Notez que le format de la date est d\u00e9fini dans les accolades correspondantes {} . Le format est d\u00e9fini avec un deux-points : suivi des codes Python sp\u00e9cifiques %b , %d , %Y . Voici un tableau r\u00e9sumant toutes les options de format de date disponibles en Python . S\u00e9lectionnez Appliquer aux nouveaux enregistrements pour que la formule ne se d\u00e9clenche que lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Besoin de plus d\u2019aide ? Visitez le mod\u00e8le final ou contactez-nous \u00e0 support@getgrist.com .","title":"Time and user stamps"},{"location":"examples/2021-07-auto-stamps/#guide-des-horodatages-automatiques-et-des-utilisateurs","text":"Il est parfois utile de savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour ou cr\u00e9\u00e9 pour la derni\u00e8re fois, et par qui. Grist rend simple la cr\u00e9ation de colonnes qui horodatent un enregistrement ou ajoutent le nom d\u2019un utilisateur lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. Cela permet de trier les enregistrements par anciennet\u00e9, de d\u00e9terminer depuis combien de temps un enregistrement existe, ou de suivre rapidement la derni\u00e8re modification jusqu\u2019\u00e0 son auteur. Ceci est particuli\u00e8rement utile lorsque l\u2019on travaille en \u00e9quipe. Supposons que vous ayez un document de suivi des opportunit\u00e9s de vente. Il peut \u00eatre utile de savoir la derni\u00e8re fois qu\u2019un commercial a agi sur une opportunit\u00e9 particuli\u00e8re, et de d\u00e9terminer combien de temps cette opportunit\u00e9 est en attente. Nous avons cr\u00e9\u00e9 un tutoriel bas\u00e9 sur notre Suivi des Demandes de Subvention mod\u00e8le. Pour suivre ce guide, commencez par cette version incompl\u00e8te du mod\u00e8le qui manque de colonnes d\u2019horodatage et de nom d\u2019utilisateur. Nous les recr\u00e9erons ensemble dans ce tutoriel. Cr\u00e9ez une copie et modifiez le mod\u00e8le en suivant ce guide. Ouvrir le Mod\u00e8le de Tutoriel","title":"Guide des Horodatages Automatiques et des Utilisateurs"},{"location":"examples/2021-07-auto-stamps/#apercu-du-modele-suivi-des-demandes-de-subvention","text":"Dans ce mod\u00e8le, une ONG ax\u00e9e sur les projets de conservation des oc\u00e9ans suit ses demandes de subvention soumis \u00e0 des fondations ax\u00e9es sur la mer. Voici une r\u00e9partition de la structure du document. Le Tableau de Bord des Demandes montre toutes les demandes, les d\u00e9tails des demandes, les d\u00e9tails des fondations, et les t\u00e2ches associ\u00e9es dans une vue utile. T\u00e2ches par Personnel liste le personnel de l\u2019ONG, les demandes qu\u2019ils supervisent, et les t\u00e2ches assign\u00e9es \u00e0 chaque membre de l\u2019\u00e9quipe. Nos Programmes liste les programmes que l\u2019ONG cherche \u00e0 financer. Vue d'ensemble de notre Financement fournit une vue d\u2019ensemble du financement avec deux graphiques : (i) r\u00e9partition des fonds dans le pipeline de collecte de fonds, et (ii) r\u00e9partition du financement total attribu\u00e9 \u00e0 des programmes sp\u00e9cifiques de l\u2019ONG. Fondations avec lesquelles nous travaillons liste les fondations auxquelles l\u2019ONG a demand\u00e9 des financements. Cette page liste \u00e9galement les demandes et les t\u00e2ches associ\u00e9es.","title":"Aper\u00e7u du Mod\u00e8le : Suivi des Demandes de Subvention"},{"location":"examples/2021-07-auto-stamps/#creation-de-colonnes-dhorodatage","text":"Les colonnes peuvent horodater un enregistrement lorsqu\u2019il est cr\u00e9\u00e9 ou mis \u00e0 jour en utilisant la formule NOW() . Ajoutons une colonne au table T\u00e2ches pour suivre la derni\u00e8re mise \u00e0 jour d\u2019une t\u00e2che. Cela peut \u00eatre accompli en trois \u00e9tapes. Dans la table T\u00e2ches , cr\u00e9ez une colonne intitul\u00e9e \u2018Derni\u00e8re Mise \u00e0 Jour\u2019 et dans les types de colonne, s\u00e9lectionnez DateHeure pour choisir votre format de date et heure souhait\u00e9. Convertissez la colonne en une colonne de donn\u00e9es en cliquant sur le menu d\u00e9roulant ACTIONS dans le panneau de cr\u00e9ation. Cela emp\u00eache la formule de se d\u00e9clencher \u00e0 chaque chargement du document. Une fois convertie en colonne de donn\u00e9es, entrez la formule NOW() . Vous verrez deux options de case \u00e0 cocher sous la formule. Appliquer aux nouveaux enregistrements d\u00e9clenche la formule uniquement lorsqu\u2019un enregistrement est cr\u00e9\u00e9. Appliquer aux modifications d'enregistrement d\u00e9clenche la formule lorsqu\u2019un enregistrement est mis \u00e0 jour. S\u00e9lectionnez Appliquer aux modifications d'enregistrement pour ouvrir un sous-menu o\u00f9 vous pouvez s\u00e9lectionner quels champs, lorsqu\u2019ils sont mis \u00e0 jour, d\u00e9clencheront la formule. Dans ce cas, nous s\u00e9lectionnerons Tout Champ , ce qui signifie que la mise \u00e0 jour de n\u2019importe quel champ dans cet enregistrement d\u00e9clenchera la mise \u00e0 jour de la formule d\u2019horodatage. Super ! Vous suivez maintenant la derni\u00e8re mise \u00e0 jour d\u2019une t\u00e2che. Ensuite, vous voudrez peut-\u00eatre savoir qui a cr\u00e9\u00e9 une t\u00e2che car cette personne peut avoir le plus d\u2019informations sur les objectifs et les param\u00e8tres de la t\u00e2che. C\u2019est tout aussi simple \u00e0 cr\u00e9er dans Grist que les horodatages.","title":"Cr\u00e9ation de Colonnes d’Horodatage"},{"location":"examples/2021-07-auto-stamps/#creation-de-colonnes-de-nom-dutilisateur","text":"Les colonnes de nom d\u2019utilisateur sont cr\u00e9\u00e9es en utilisant les m\u00eames \u00e9tapes que les horodatages, sauf pour un d\u00e9tail \u2014 la formule est user.Name . Ajoutons une colonne \u00e0 la table T\u00e2ches pour suivre qui a cr\u00e9\u00e9 une t\u00e2che. Dans la table T\u00e2ches , cr\u00e9ez une colonne intitul\u00e9e \u2018Cr\u00e9\u00e9 Par\u2019 et dans les types de colonne, s\u00e9lectionnez Texte et modifiez le format si vous le souhaitez. Convertissez la colonne de formule en une colonne de donn\u00e9es et entrez la formule user.Name . S\u00e9lectionnez Appliquer aux nouveaux enregistrements pour que la formule ne se d\u00e9clenche que lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Il existe d\u2019autres possibilit\u00e9s en plus de user.Name telles que user.Email ou un user.UserID unique. Les informations utilisateur disponibles sont les m\u00eames que celles des conditions de r\u00e8gle d\u2019acc\u00e8s . Note. Il est toujours possible pour un utilisateur de modifier manuellement les cellules avec des formules d\u2019horodatage ou de nom d\u2019utilisateur. Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire. Et voil\u00e0 ! Vous avez cr\u00e9\u00e9 des colonnes qui capturent les informations d\u2019utilisateur et d\u2019horodatage bas\u00e9es sur des d\u00e9clencheurs sp\u00e9cifiques, comme lorsque un enregistrement est mis \u00e0 jour ou cr\u00e9\u00e9. Bravo !","title":"Cr\u00e9ation de Colonnes de Nom d’Utilisateur"},{"location":"examples/2021-07-auto-stamps/#approfondir-combiner-les-horodatages-et-les-noms-dutilisateur-en-utilisant-des-formules","text":"En g\u00e9n\u00e9ral, il est pr\u00e9f\u00e9rable de garder les informations d\u2019horodatage et de nom d\u2019utilisateur dans des colonnes s\u00e9par\u00e9es afin de pouvoir trier et filtrer par ces colonnes. Cependant, il peut y avoir des moments o\u00f9 il serait utile de capturer les informations d\u2019horodatage et de nom d\u2019utilisateur dans la m\u00eame colonne. Ajoutons une telle colonne \u00e0 la table Demandes . Dans la table Demandes , cr\u00e9ez une colonne intitul\u00e9e \u2018Cr\u00e9\u00e9 Le\u2019 et convertissez-la en une colonne de donn\u00e9es. Dans les types de colonne, s\u00e9lectionnez Texte. Entrez la formule \"{:%b %d, %Y} par {}\".format(NOW(), user.Name) . La partie entre guillemets est une cha\u00eene de format. Chaque ensemble d\u2019accolades {} dans celle-ci est remplac\u00e9 par la valeur suivante entre parenth\u00e8ses apr\u00e8s .format . Notez que le format de la date est d\u00e9fini dans les accolades correspondantes {} . Le format est d\u00e9fini avec un deux-points : suivi des codes Python sp\u00e9cifiques %b , %d , %Y . Voici un tableau r\u00e9sumant toutes les options de format de date disponibles en Python . S\u00e9lectionnez Appliquer aux nouveaux enregistrements pour que la formule ne se d\u00e9clenche que lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Besoin de plus d\u2019aide ? Visitez le mod\u00e8le final ou contactez-nous \u00e0 support@getgrist.com .","title":"Approfondir : Combiner les horodatages et les noms d’utilisateur en utilisant des formules"},{"location":"examples/2023-01-acl-memo/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . R\u00e8gles d\u2019acc\u00e8s pour restreindre les enregistrements en double # Supposons que nous ayons une table listant les a\u00e9roports, et que nous voulions interdire l\u2019entr\u00e9e d\u2019un nouvel enregistrement avec le m\u00eame code d\u2019a\u00e9roport qu\u2019un existant. Dans la table, nous pouvons ajouter une colonne nomm\u00e9e Count qui compte combien d\u2019enregistrements ont le m\u00eame code : Pour comprendre cette formule, visitez notre aide-m\u00e9moire des formules pour trouver des doublons. Maintenant, nous pouvons ajouter une r\u00e8gle d\u2019acc\u00e8s pour interdire toute mise \u00e0 jour ou cr\u00e9ation d\u2019enregistrement qui entra\u00eenerait un Count sup\u00e9rieur \u00e0 un. Nous pouvons \u00e9galement inclure une note pour expliquer le probl\u00e8me : newRec Cette variable est disponible pour la cr\u00e9ation et la mise \u00e0 jour des enregistrements/lignes, et contient l\u2019\u00e9tat d\u2019une ligne apr\u00e8s une modification propos\u00e9e, vous permettant de permettre ou de refuser s\u00e9lectivement certaines modifications. Voir v\u00e9rification des nouvelles valeurs pour plus de d\u00e9tails. Maintenant, si nous essayons d\u2019ajouter une nouvelle ligne avec un code existant, nous obtenons une erreur utile : Voir Conditions des r\u00e8gles d\u2019acc\u00e8s pour plus de d\u00e9tails sur l\u2019\u00e9criture des conditions des r\u00e8gles d\u2019acc\u00e8s, et Formules pour en savoir plus sur l\u2019utilisation des formules dans les colonnes.","title":"Restrict duplicate records"},{"location":"examples/2023-01-acl-memo/#regles-dacces-pour-restreindre-les-enregistrements-en-double","text":"Supposons que nous ayons une table listant les a\u00e9roports, et que nous voulions interdire l\u2019entr\u00e9e d\u2019un nouvel enregistrement avec le m\u00eame code d\u2019a\u00e9roport qu\u2019un existant. Dans la table, nous pouvons ajouter une colonne nomm\u00e9e Count qui compte combien d\u2019enregistrements ont le m\u00eame code : Pour comprendre cette formule, visitez notre aide-m\u00e9moire des formules pour trouver des doublons. Maintenant, nous pouvons ajouter une r\u00e8gle d\u2019acc\u00e8s pour interdire toute mise \u00e0 jour ou cr\u00e9ation d\u2019enregistrement qui entra\u00eenerait un Count sup\u00e9rieur \u00e0 un. Nous pouvons \u00e9galement inclure une note pour expliquer le probl\u00e8me : newRec Cette variable est disponible pour la cr\u00e9ation et la mise \u00e0 jour des enregistrements/lignes, et contient l\u2019\u00e9tat d\u2019une ligne apr\u00e8s une modification propos\u00e9e, vous permettant de permettre ou de refuser s\u00e9lectivement certaines modifications. Voir v\u00e9rification des nouvelles valeurs pour plus de d\u00e9tails. Maintenant, si nous essayons d\u2019ajouter une nouvelle ligne avec un code existant, nous obtenons une erreur utile : Voir Conditions des r\u00e8gles d\u2019acc\u00e8s pour plus de d\u00e9tails sur l\u2019\u00e9criture des conditions des r\u00e8gles d\u2019acc\u00e8s, et Formules pour en savoir plus sur l\u2019utilisation des formules dans les colonnes.","title":"R\u00e8gles d’acc\u00e8s pour restreindre les enregistrements en double"},{"location":"examples/2023-07-proposals-contracts/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Cr\u00e9ation de Propositions # Si vous conservez des d\u00e9tails commerciaux et des contrats dans Grist, il peut \u00eatre pratique de g\u00e9n\u00e9rer des propositions et des contrats directement l\u00e0, \u00e0 c\u00f4t\u00e9 de ces enregistrements. Vous pouvez utiliser le Widget Markdown Personnalis\u00e9 pour cr\u00e9er un \u2018formulaire\u2019 personnalis\u00e9 pour les Propositions, Contrats, ou de nombreux autres types de documents. Ce tutoriel vous montre comment configurer un document comme celui-ci : Vous pouvez trouver un mod\u00e8le termin\u00e9 ici : \ud83d\udcdd Mod\u00e8le de Propositions & Contrats . Si vous souhaitez ajouter une proposition \u00e0 un document existant, comprendre ce tutoriel devrait vous y aider. Configuration d\u2019une table de Projet # Tout d\u2019abord, cr\u00e9ez une table pour enregistrer les d\u00e9tails du projet en cr\u00e9ant un document vide et en renommant Table1 en Projets : Nous cr\u00e9erons notre mod\u00e8le de Proposition \u00e0 c\u00f4t\u00e9 de notre table Projets . Nous pouvons ins\u00e9rer des ID de colonnes comme des espaces r\u00e9serv\u00e9s dans notre mod\u00e8le de Proposition qui seront ensuite remplac\u00e9s par la valeur de la cellule pour le projet s\u00e9lectionn\u00e9. Par exemple, dans la capture d\u2019\u00e9cran ci-dessous, la valeur de la colonne Nom du Projet remplacera la variable {Nom_Projet} dans le mod\u00e8le de proposition \u00e0 droite. Voir les colonnes disponibles lors de la cr\u00e9ation de notre proposition facilitera le remplissage de ces variables. Cr\u00e9ation de mod\u00e8les # Ajoutons une nouvelle table, Mod\u00e8les , \u00e0 la page pour stocker nos donn\u00e9es de mod\u00e8le. Ajoutez deux colonnes : Nom et Formatage du Mod\u00e8le . Maintenant, ajoutons un widget personnalis\u00e9 \u00e0 c\u00f4t\u00e9 de la table pour visualiser notre Formatage du Mod\u00e8le . Cliquez sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Personnalis\u00e9\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Mod\u00e8les . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Mod\u00e8les \u00e0 nouveau. Configurez le widget personnalis\u00e9 en s\u00e9lectionnant \u2018Markdown\u2019 dans le menu d\u00e9roulant \u2018Personnalis\u00e9\u2019. Puisque nous allons \u00e9diter le mod\u00e8le directement dans le widget personnalis\u00e9, vous devez autoriser \u2018Acc\u00e8s complet au document\u2019 sous Niveau d\u2019Acc\u00e8s pour que le widget puisse mettre \u00e0 jour la table Mod\u00e8les . Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne Formatage du Mod\u00e8le . C\u2019est la colonne qui sera mise \u00e0 jour lorsque nous ferons des modifications dans le widget personnalis\u00e9. Cr\u00e9ez un mod\u00e8le dans la table Mod\u00e8les en entrant une valeur dans la colonne Nom . Ensuite, commencez \u00e0 \u00e9diter le formatage du mod\u00e8le dans le widget personnalis\u00e9. Le widget utilise le formatage Markdown pour formater le texte. Pour obtenir de l\u2019aide sur Markdown, cliquez sur le ? en haut du widget pour consulter le Guide Markdown . Lorsque vous cliquez sur l\u2019ic\u00f4ne \u2018enregistrer\u2019, le formatage du widget remplira la colonne Formatage du Mod\u00e8le . Nous utiliserons exclusivement le widget personnalis\u00e9 pour \u00e9diter le formatage du mod\u00e8le afin que cette colonne puisse \u00eatre masqu\u00e9e de la vue de la table. Pour masquer la colonne, faites un clic droit sur l\u2019en-t\u00eate de la colonne puis \u2018Masquer la colonne\u2019. Dans votre mod\u00e8le, vous aurez des d\u00e9tails et du texte qui restent les m\u00eames pour tous les projets tels que le formatage, les en-t\u00eates de section et les informations de votre propre entreprise. C\u2019est l\u2019information que vous taperez directement dans le mod\u00e8le. Vous aurez \u00e9galement des informations qui changent, comme Nom du Projet ou Nom du Client . Nous pouvons utiliser des variables contenant des ID de colonnes comme espaces r\u00e9serv\u00e9s pour ces donn\u00e9es dynamiques. Nom du Projet , Nom du Client et Adresse du Client changeront tous en fonction du Projet s\u00e9lectionn\u00e9. Donc, c\u2019est l\u2019information que nous devrions stocker dans notre table Projets . Ajoutez les colonnes Nom du Projet , Nom du Client et Adresse du Client \u00e0 la table Projets . Nous pouvons utiliser les ID de colonnes pour chacune de ces colonnes comme espaces r\u00e9serv\u00e9s dans notre mod\u00e8le avec le format {ID_COLONNE} . L\u2019ID d\u2019une colonne peut \u00eatre trouv\u00e9 sous l\u2019onglet \u2018Table\u2019 du Panneau du Cr\u00e9ateur, directement sous l\u2019\u00c9tiquette de la Colonne. Terminez de construire votre mod\u00e8le pour r\u00e9pondre \u00e0 vos besoins. Assurez-vous d\u2019ajouter une colonne \u00e0 votre table Projets pour toutes les informations variables. Enfin, nous devons ajouter une colonne de formule qui cr\u00e9era nos propositions uniques. Cette colonne de formule combinera le formatage du mod\u00e8le que nous venons de cr\u00e9er avec nos donn\u00e9es sp\u00e9cifiques au projet. Ajoutez une nouvelle colonne \u00e0 la table Projets avec la formule suivante : # Trouve toutes les donn\u00e9es associ\u00e9es \u00e0 cet enregistrement class Find_Data(dict): def __missing__(self, key): return getattr(rec, key) # Trouve le mod\u00e8le \"Proposition\" dans la table Mod\u00e8les template = Templates.lookupOne(Name=\"Proposition\").Template_Formatting # Formate le mod\u00e8le avec des champs de cette table ainsi que des champs de la table r\u00e9f\u00e9renc\u00e9e template.format_map(Find_Data()) Configuration d\u2019un tableau de bord de proposition # Ensuite, nous voudrons remplir notre mod\u00e8le de proposition avec des donn\u00e9es de projet r\u00e9elles ! Commencez \u00e0 cr\u00e9er un Tableau de Bord de Proposition en ajoutant une nouvelle page \u00e0 votre document. Cliquez sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter Page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Table\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Vous remarquerez que cette information dans une vue de table est un peu encombr\u00e9e. Un widget Fiche aidera \u00e0 simplifier notre vue. Ajoutez un nouveau widget \u00e0 la page en cliquant sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Fiche\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Projets et ajoutez \u00e0 la page. Votre tableau de bord devrait ressembler \u00e0 la capture d\u2019\u00e9cran ci-dessous. Maintenant que nous avons tous les d\u00e9tails de notre Projet dans une vue Fiche, nous pouvons les masquer de notre vue de table. Sous l\u2019onglet \u2018Table\u2019 du Panneau du Cr\u00e9ateur, s\u00e9lectionnez toutes les colonnes sauf Nom du Projet et Nom du Client puis cliquez sur le bouton vert \u2018Masquer Colonnes\u2019. Garder la plupart des d\u00e9tails du projet dans le widget Fiche, plut\u00f4t que dans le widget Table, simplifie notre tableau de bord. Vous pouvez facilement voir tous les projets dans le widget Table, et lorsque vous souhaitez voir les d\u00e9tails d\u2019un projet sp\u00e9cifique, s\u00e9lectionnez le projet et le widget Fiche se mettra \u00e0 jour pour vous montrer les d\u00e9tails du projet. Enfin, nous voudrons ajouter une vue de notre proposition sp\u00e9cifique au projet. Ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page en cliquant sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Personnalis\u00e9\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Projets et ajoutez \u00e0 la page. Configurez le widget personnalis\u00e9 en s\u00e9lectionnant \u2018Markdown\u2019 dans le menu d\u00e9roulant \u2018Personnalis\u00e9\u2019. Vous devez autoriser \u2018Acc\u00e8s complet au document\u2019. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne Proposition . C\u2019est la colonne de formule qui combine notre formatage de mod\u00e8le avec nos donn\u00e9es sp\u00e9cifiques au projet. Personnalisez votre mise en page en r\u00e9organisant et en redimensionnant les widgets. Ajoutez des d\u00e9tails de projet pour un nouveau projet et voyez comment votre proposition se met \u00e0 jour pour afficher les nouvelles donn\u00e9es ajout\u00e9es. Saisie des informations du client # Maintenant, faisons deux changements utiles \u00e0 la configuration du Projet : Mettez les informations du client dans une table s\u00e9par\u00e9e, afin que nous n\u2019ayons pas \u00e0 ressaisir leur adresse chaque fois que nous cr\u00e9ons une proposition pour eux (et nous pouvons importer les adresses en masse). Mettez \u00e0 jour la formule dans la colonne Proposition de la table Projets pour rechercher des informations dans une autre table. Tout d\u2019abord, cr\u00e9ez une nouvelle table appel\u00e9e Clients pour les informations sp\u00e9cifiques au client comme Nom et Adresse . Certaines de ces donn\u00e9es sont incluses dans notre ensemble de donn\u00e9es Projets. Pour \u00e9viter de dupliquer les donn\u00e9es, nous devons mettre \u00e0 jour nos colonnes Nom du Client et Adresse du Client pour qu\u2019elles proviennent de notre table Clients . Sur notre page Tableau de Bord des Propositions , s\u00e9lectionnez le champ Nom du Client puis mettez \u00e0 jour le type de colonne en R\u00e9f\u00e9rence . Confirmez que \u2018Donn\u00e9es de la Table\u2019 est r\u00e9gl\u00e9 sur Clients et \u2018Afficher la Colonne\u2019 est Nom . Ensuite, nous devons mettre \u00e0 jour le champ Adresse du Client pour extraire l\u2019adresse du client list\u00e9 dans la colonne Nom du Client . Mettez \u00e0 jour la colonne Adresse du Client pour utiliser la formule suivante : $Customer_Name.Address Cette formule utilise notre colonne de r\u00e9f\u00e9rence, Nom du Client , ainsi que la notation par point , pour extraire la valeur de la colonne Adresse de la table r\u00e9f\u00e9renc\u00e9e. Lorsque vous regardez une proposition pour un projet existant, vous remarquerez que le Nom du Client ne se remplit plus. Cela est d\u00fb \u00e0 la fa\u00e7on dont les colonnes de r\u00e9f\u00e9rence stockent les donn\u00e9es. Bien que sous \u2018Afficher la Colonne\u2019, nous ayons choisi de voir la valeur de la colonne Nom de la table r\u00e9f\u00e9renc\u00e9e, les colonnes de r\u00e9f\u00e9rence stockent en r\u00e9alit\u00e9 l\u2019ID d\u2019un enregistrement. C\u2019est ce que nous voyons maintenant dans la proposition. Nous pouvons modifier notre formule dans la colonne Proposition pour rechercher des donn\u00e9es dans d\u2019autres tables. Dans la table Projets , mettez \u00e0 jour la formule dans la colonne Propositions avec ce qui suit : # Trouve toutes les donn\u00e9es associ\u00e9es \u00e0 cet enregistrement class Find_Data(dict): def __missing__(self, key): return getattr(rec, key) # Trouve le mod\u00e8le \"Proposition\" dans la table Mod\u00e8les template = Templates.lookupOne(Name=\"Proposition\").Template_Formatting # Formate le mod\u00e8le avec des champs de cette table ainsi que des champs de la table r\u00e9f\u00e9renc\u00e9e template.format_map(Find_Data( Customer_Name = $Customer_Name.Name, )) Dans la derni\u00e8re partie de la formule, nous pouvons sp\u00e9cifier des variables qui tirent des donn\u00e9es d\u2019autres tables. Customer_Name = $Customer_Name.Name est pour notre colonne de r\u00e9f\u00e9rence, Nom du Client . Il utilise la notation par point pour sp\u00e9cifier quelles donn\u00e9es extraire de la table r\u00e9f\u00e9renc\u00e9e. Note : Adresse du Client La colonne Adresse du Client peut \u00eatre compl\u00e8tement supprim\u00e9e de la table Projets . Ces donn\u00e9es sont d\u00e9j\u00e0 stock\u00e9es dans la table Clients et notre colonne Nom du Client est une colonne de r\u00e9f\u00e9rence pointant vers cette table. Nous pouvons utiliser cette colonne de r\u00e9f\u00e9rence pour extraire toute autre information de la table Clients \u00e0 inclure dans notre proposition. Si vous choisissez de supprimer Adresse du Client de la table Projets , mettez \u00e0 jour la derni\u00e8re section de la formule comme suit : template.format_map(Find_Data( Customer_Name = $Customer_Name.Name, Customer_Address = $Customer_Name.Address.replace('\\n', '
    '), )) Cela indique \u00e0 la formule quoi utiliser \u00e0 la place de la variable {Customer_Address} . Impression et Enregistrement # Une fois votre proposition pr\u00eate, vous pouvez l\u2019imprimer ou l\u2019enregistrer en PDF. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points en haut \u00e0 droite du widget puis s\u00e9lectionnez \u2018Imprimer le widget\u2019. \u00c0 partir de l\u00e0, vous pouvez soit s\u00e9lectionner une imprimante, soit choisir \u2018Enregistrer en PDF\u2019 dans le menu d\u00e9roulant \u2018Destination\u2019. Configuration de plusieurs formulaires # Vous pouvez ajouter plus de mod\u00e8les de formulaire en suivant les m\u00eames \u00e9tapes que nous venons de compl\u00e9ter. Ajoutez un nouveau mod\u00e8le \u00e0 la table Mod\u00e8les puis construisez le mod\u00e8le en utilisant des variables contenant des ID de colonnes pour toutes les donn\u00e9es sp\u00e9cifiques au projet. Si vous avez des sections identiques \u00e0 un autre formulaire, copiez-les pour vous \u00e9viter la peine de les retaper ! Cr\u00e9ez un tableau de bord o\u00f9 vous pouvez s\u00e9lectionner un projet et entrer des d\u00e9tails pour ce formulaire puis pr\u00e9visualiser le formulaire dans un widget personnalis\u00e9. N\u2019oubliez pas, vous devrez ajouter une colonne de formule qui combine le nouveau mod\u00e8le de formulaire avec les d\u00e9tails du projet s\u00e9lectionn\u00e9 ! Cette colonne de formule est ce que vous s\u00e9lectionnerez sous le menu d\u00e9roulant \u2018Contenu\u2019 lors de la configuration du Widget Markdown Personnalis\u00e9 .","title":"Proposals & contracts"},{"location":"examples/2023-07-proposals-contracts/#creation-de-propositions","text":"Si vous conservez des d\u00e9tails commerciaux et des contrats dans Grist, il peut \u00eatre pratique de g\u00e9n\u00e9rer des propositions et des contrats directement l\u00e0, \u00e0 c\u00f4t\u00e9 de ces enregistrements. Vous pouvez utiliser le Widget Markdown Personnalis\u00e9 pour cr\u00e9er un \u2018formulaire\u2019 personnalis\u00e9 pour les Propositions, Contrats, ou de nombreux autres types de documents. Ce tutoriel vous montre comment configurer un document comme celui-ci : Vous pouvez trouver un mod\u00e8le termin\u00e9 ici : \ud83d\udcdd Mod\u00e8le de Propositions & Contrats . Si vous souhaitez ajouter une proposition \u00e0 un document existant, comprendre ce tutoriel devrait vous y aider.","title":"Cr\u00e9ation de Propositions"},{"location":"examples/2023-07-proposals-contracts/#configuration-dune-table-de-projet","text":"Tout d\u2019abord, cr\u00e9ez une table pour enregistrer les d\u00e9tails du projet en cr\u00e9ant un document vide et en renommant Table1 en Projets : Nous cr\u00e9erons notre mod\u00e8le de Proposition \u00e0 c\u00f4t\u00e9 de notre table Projets . Nous pouvons ins\u00e9rer des ID de colonnes comme des espaces r\u00e9serv\u00e9s dans notre mod\u00e8le de Proposition qui seront ensuite remplac\u00e9s par la valeur de la cellule pour le projet s\u00e9lectionn\u00e9. Par exemple, dans la capture d\u2019\u00e9cran ci-dessous, la valeur de la colonne Nom du Projet remplacera la variable {Nom_Projet} dans le mod\u00e8le de proposition \u00e0 droite. Voir les colonnes disponibles lors de la cr\u00e9ation de notre proposition facilitera le remplissage de ces variables.","title":"Configuration d’une table de Projet"},{"location":"examples/2023-07-proposals-contracts/#creation-de-modeles","text":"Ajoutons une nouvelle table, Mod\u00e8les , \u00e0 la page pour stocker nos donn\u00e9es de mod\u00e8le. Ajoutez deux colonnes : Nom et Formatage du Mod\u00e8le . Maintenant, ajoutons un widget personnalis\u00e9 \u00e0 c\u00f4t\u00e9 de la table pour visualiser notre Formatage du Mod\u00e8le . Cliquez sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Personnalis\u00e9\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Mod\u00e8les . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Mod\u00e8les \u00e0 nouveau. Configurez le widget personnalis\u00e9 en s\u00e9lectionnant \u2018Markdown\u2019 dans le menu d\u00e9roulant \u2018Personnalis\u00e9\u2019. Puisque nous allons \u00e9diter le mod\u00e8le directement dans le widget personnalis\u00e9, vous devez autoriser \u2018Acc\u00e8s complet au document\u2019 sous Niveau d\u2019Acc\u00e8s pour que le widget puisse mettre \u00e0 jour la table Mod\u00e8les . Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne Formatage du Mod\u00e8le . C\u2019est la colonne qui sera mise \u00e0 jour lorsque nous ferons des modifications dans le widget personnalis\u00e9. Cr\u00e9ez un mod\u00e8le dans la table Mod\u00e8les en entrant une valeur dans la colonne Nom . Ensuite, commencez \u00e0 \u00e9diter le formatage du mod\u00e8le dans le widget personnalis\u00e9. Le widget utilise le formatage Markdown pour formater le texte. Pour obtenir de l\u2019aide sur Markdown, cliquez sur le ? en haut du widget pour consulter le Guide Markdown . Lorsque vous cliquez sur l\u2019ic\u00f4ne \u2018enregistrer\u2019, le formatage du widget remplira la colonne Formatage du Mod\u00e8le . Nous utiliserons exclusivement le widget personnalis\u00e9 pour \u00e9diter le formatage du mod\u00e8le afin que cette colonne puisse \u00eatre masqu\u00e9e de la vue de la table. Pour masquer la colonne, faites un clic droit sur l\u2019en-t\u00eate de la colonne puis \u2018Masquer la colonne\u2019. Dans votre mod\u00e8le, vous aurez des d\u00e9tails et du texte qui restent les m\u00eames pour tous les projets tels que le formatage, les en-t\u00eates de section et les informations de votre propre entreprise. C\u2019est l\u2019information que vous taperez directement dans le mod\u00e8le. Vous aurez \u00e9galement des informations qui changent, comme Nom du Projet ou Nom du Client . Nous pouvons utiliser des variables contenant des ID de colonnes comme espaces r\u00e9serv\u00e9s pour ces donn\u00e9es dynamiques. Nom du Projet , Nom du Client et Adresse du Client changeront tous en fonction du Projet s\u00e9lectionn\u00e9. Donc, c\u2019est l\u2019information que nous devrions stocker dans notre table Projets . Ajoutez les colonnes Nom du Projet , Nom du Client et Adresse du Client \u00e0 la table Projets . Nous pouvons utiliser les ID de colonnes pour chacune de ces colonnes comme espaces r\u00e9serv\u00e9s dans notre mod\u00e8le avec le format {ID_COLONNE} . L\u2019ID d\u2019une colonne peut \u00eatre trouv\u00e9 sous l\u2019onglet \u2018Table\u2019 du Panneau du Cr\u00e9ateur, directement sous l\u2019\u00c9tiquette de la Colonne. Terminez de construire votre mod\u00e8le pour r\u00e9pondre \u00e0 vos besoins. Assurez-vous d\u2019ajouter une colonne \u00e0 votre table Projets pour toutes les informations variables. Enfin, nous devons ajouter une colonne de formule qui cr\u00e9era nos propositions uniques. Cette colonne de formule combinera le formatage du mod\u00e8le que nous venons de cr\u00e9er avec nos donn\u00e9es sp\u00e9cifiques au projet. Ajoutez une nouvelle colonne \u00e0 la table Projets avec la formule suivante : # Trouve toutes les donn\u00e9es associ\u00e9es \u00e0 cet enregistrement class Find_Data(dict): def __missing__(self, key): return getattr(rec, key) # Trouve le mod\u00e8le \"Proposition\" dans la table Mod\u00e8les template = Templates.lookupOne(Name=\"Proposition\").Template_Formatting # Formate le mod\u00e8le avec des champs de cette table ainsi que des champs de la table r\u00e9f\u00e9renc\u00e9e template.format_map(Find_Data())","title":"Cr\u00e9ation de mod\u00e8les"},{"location":"examples/2023-07-proposals-contracts/#configuration-dun-tableau-de-bord-de-proposition","text":"Ensuite, nous voudrons remplir notre mod\u00e8le de proposition avec des donn\u00e9es de projet r\u00e9elles ! Commencez \u00e0 cr\u00e9er un Tableau de Bord de Proposition en ajoutant une nouvelle page \u00e0 votre document. Cliquez sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter Page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Table\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Vous remarquerez que cette information dans une vue de table est un peu encombr\u00e9e. Un widget Fiche aidera \u00e0 simplifier notre vue. Ajoutez un nouveau widget \u00e0 la page en cliquant sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Fiche\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Projets et ajoutez \u00e0 la page. Votre tableau de bord devrait ressembler \u00e0 la capture d\u2019\u00e9cran ci-dessous. Maintenant que nous avons tous les d\u00e9tails de notre Projet dans une vue Fiche, nous pouvons les masquer de notre vue de table. Sous l\u2019onglet \u2018Table\u2019 du Panneau du Cr\u00e9ateur, s\u00e9lectionnez toutes les colonnes sauf Nom du Projet et Nom du Client puis cliquez sur le bouton vert \u2018Masquer Colonnes\u2019. Garder la plupart des d\u00e9tails du projet dans le widget Fiche, plut\u00f4t que dans le widget Table, simplifie notre tableau de bord. Vous pouvez facilement voir tous les projets dans le widget Table, et lorsque vous souhaitez voir les d\u00e9tails d\u2019un projet sp\u00e9cifique, s\u00e9lectionnez le projet et le widget Fiche se mettra \u00e0 jour pour vous montrer les d\u00e9tails du projet. Enfin, nous voudrons ajouter une vue de notre proposition sp\u00e9cifique au projet. Ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page en cliquant sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Personnalis\u00e9\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Projets et ajoutez \u00e0 la page. Configurez le widget personnalis\u00e9 en s\u00e9lectionnant \u2018Markdown\u2019 dans le menu d\u00e9roulant \u2018Personnalis\u00e9\u2019. Vous devez autoriser \u2018Acc\u00e8s complet au document\u2019. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne Proposition . C\u2019est la colonne de formule qui combine notre formatage de mod\u00e8le avec nos donn\u00e9es sp\u00e9cifiques au projet. Personnalisez votre mise en page en r\u00e9organisant et en redimensionnant les widgets. Ajoutez des d\u00e9tails de projet pour un nouveau projet et voyez comment votre proposition se met \u00e0 jour pour afficher les nouvelles donn\u00e9es ajout\u00e9es.","title":"Configuration d’un tableau de bord de proposition"},{"location":"examples/2023-07-proposals-contracts/#saisie-des-informations-du-client","text":"Maintenant, faisons deux changements utiles \u00e0 la configuration du Projet : Mettez les informations du client dans une table s\u00e9par\u00e9e, afin que nous n\u2019ayons pas \u00e0 ressaisir leur adresse chaque fois que nous cr\u00e9ons une proposition pour eux (et nous pouvons importer les adresses en masse). Mettez \u00e0 jour la formule dans la colonne Proposition de la table Projets pour rechercher des informations dans une autre table. Tout d\u2019abord, cr\u00e9ez une nouvelle table appel\u00e9e Clients pour les informations sp\u00e9cifiques au client comme Nom et Adresse . Certaines de ces donn\u00e9es sont incluses dans notre ensemble de donn\u00e9es Projets. Pour \u00e9viter de dupliquer les donn\u00e9es, nous devons mettre \u00e0 jour nos colonnes Nom du Client et Adresse du Client pour qu\u2019elles proviennent de notre table Clients . Sur notre page Tableau de Bord des Propositions , s\u00e9lectionnez le champ Nom du Client puis mettez \u00e0 jour le type de colonne en R\u00e9f\u00e9rence . Confirmez que \u2018Donn\u00e9es de la Table\u2019 est r\u00e9gl\u00e9 sur Clients et \u2018Afficher la Colonne\u2019 est Nom . Ensuite, nous devons mettre \u00e0 jour le champ Adresse du Client pour extraire l\u2019adresse du client list\u00e9 dans la colonne Nom du Client . Mettez \u00e0 jour la colonne Adresse du Client pour utiliser la formule suivante : $Customer_Name.Address Cette formule utilise notre colonne de r\u00e9f\u00e9rence, Nom du Client , ainsi que la notation par point , pour extraire la valeur de la colonne Adresse de la table r\u00e9f\u00e9renc\u00e9e. Lorsque vous regardez une proposition pour un projet existant, vous remarquerez que le Nom du Client ne se remplit plus. Cela est d\u00fb \u00e0 la fa\u00e7on dont les colonnes de r\u00e9f\u00e9rence stockent les donn\u00e9es. Bien que sous \u2018Afficher la Colonne\u2019, nous ayons choisi de voir la valeur de la colonne Nom de la table r\u00e9f\u00e9renc\u00e9e, les colonnes de r\u00e9f\u00e9rence stockent en r\u00e9alit\u00e9 l\u2019ID d\u2019un enregistrement. C\u2019est ce que nous voyons maintenant dans la proposition. Nous pouvons modifier notre formule dans la colonne Proposition pour rechercher des donn\u00e9es dans d\u2019autres tables. Dans la table Projets , mettez \u00e0 jour la formule dans la colonne Propositions avec ce qui suit : # Trouve toutes les donn\u00e9es associ\u00e9es \u00e0 cet enregistrement class Find_Data(dict): def __missing__(self, key): return getattr(rec, key) # Trouve le mod\u00e8le \"Proposition\" dans la table Mod\u00e8les template = Templates.lookupOne(Name=\"Proposition\").Template_Formatting # Formate le mod\u00e8le avec des champs de cette table ainsi que des champs de la table r\u00e9f\u00e9renc\u00e9e template.format_map(Find_Data( Customer_Name = $Customer_Name.Name, )) Dans la derni\u00e8re partie de la formule, nous pouvons sp\u00e9cifier des variables qui tirent des donn\u00e9es d\u2019autres tables. Customer_Name = $Customer_Name.Name est pour notre colonne de r\u00e9f\u00e9rence, Nom du Client . Il utilise la notation par point pour sp\u00e9cifier quelles donn\u00e9es extraire de la table r\u00e9f\u00e9renc\u00e9e. Note : Adresse du Client La colonne Adresse du Client peut \u00eatre compl\u00e8tement supprim\u00e9e de la table Projets . Ces donn\u00e9es sont d\u00e9j\u00e0 stock\u00e9es dans la table Clients et notre colonne Nom du Client est une colonne de r\u00e9f\u00e9rence pointant vers cette table. Nous pouvons utiliser cette colonne de r\u00e9f\u00e9rence pour extraire toute autre information de la table Clients \u00e0 inclure dans notre proposition. Si vous choisissez de supprimer Adresse du Client de la table Projets , mettez \u00e0 jour la derni\u00e8re section de la formule comme suit : template.format_map(Find_Data( Customer_Name = $Customer_Name.Name, Customer_Address = $Customer_Name.Address.replace('\\n', '
    '), )) Cela indique \u00e0 la formule quoi utiliser \u00e0 la place de la variable {Customer_Address} .","title":"Saisie des informations du client"},{"location":"examples/2023-07-proposals-contracts/#impression-et-enregistrement","text":"Une fois votre proposition pr\u00eate, vous pouvez l\u2019imprimer ou l\u2019enregistrer en PDF. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points en haut \u00e0 droite du widget puis s\u00e9lectionnez \u2018Imprimer le widget\u2019. \u00c0 partir de l\u00e0, vous pouvez soit s\u00e9lectionner une imprimante, soit choisir \u2018Enregistrer en PDF\u2019 dans le menu d\u00e9roulant \u2018Destination\u2019.","title":"Impression et Enregistrement"},{"location":"examples/2023-07-proposals-contracts/#configuration-de-plusieurs-formulaires","text":"Vous pouvez ajouter plus de mod\u00e8les de formulaire en suivant les m\u00eames \u00e9tapes que nous venons de compl\u00e9ter. Ajoutez un nouveau mod\u00e8le \u00e0 la table Mod\u00e8les puis construisez le mod\u00e8le en utilisant des variables contenant des ID de colonnes pour toutes les donn\u00e9es sp\u00e9cifiques au projet. Si vous avez des sections identiques \u00e0 un autre formulaire, copiez-les pour vous \u00e9viter la peine de les retaper ! Cr\u00e9ez un tableau de bord o\u00f9 vous pouvez s\u00e9lectionner un projet et entrer des d\u00e9tails pour ce formulaire puis pr\u00e9visualiser le formulaire dans un widget personnalis\u00e9. N\u2019oubliez pas, vous devrez ajouter une colonne de formule qui combine le nouveau mod\u00e8le de formulaire avec les d\u00e9tails du projet s\u00e9lectionn\u00e9 ! Cette colonne de formule est ce que vous s\u00e9lectionnerez sous le menu d\u00e9roulant \u2018Contenu\u2019 lors de la configuration du Widget Markdown Personnalis\u00e9 .","title":"Configuration de plusieurs formulaires"},{"location":"install/aws-marketplace/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . AWS Marketplace # Grist sur AWS Marketplace a ce qu\u2019il vous faut pour ex\u00e9cuter une instance Grist auto-h\u00e9berg\u00e9e avec une configuration minimale, et est bas\u00e9 sur grist-omnibus . Vous trouverez ci-dessous les \u00e9tapes compl\u00e8tes de configuration, y compris l\u2019authentification via OpenID. Configuration de la premi\u00e8re ex\u00e9cution # Apr\u00e8s le d\u00e9ploiement de l\u2019instance, Grist devrait \u00eatre imm\u00e9diatement disponible via le protocole HTTP sur un domaine autog\u00e9n\u00e9r\u00e9 tel que ec2-3-94-254-105.compute-1.amazonaws.com (\u00e9tiquet\u00e9 Public IPv4 DNS par AWS). Identifiants par d\u00e9faut : email : admin@example.getgrist.com mot de passe : [instance-id]* * L\u2019ID de l\u2019instance peut \u00eatre trouv\u00e9 sur la page EC2 dans la console AWS : Comment se connecter \u00e0 l\u2019instance Grist # Pendant le d\u00e9ploiement, il vous a \u00e9t\u00e9 demand\u00e9 de cr\u00e9er ou d\u2019utiliser des paires de cl\u00e9s. Vous pouvez utiliser cette paire pour vous connecter via SSH depuis votre terminal/bash. L\u2019utilisateur par d\u00e9faut pour l\u2019instance Grist EC2 s\u2019appelle \u201cubuntu\u201d, et vous pouvez vous connecter \u00e0 ubuntu@[ec2-instance-public-ip] . Remarque : Vous devez utiliser le fichier *.pem que vous avez re\u00e7u lors de la g\u00e9n\u00e9ration des paires de cl\u00e9s sur AWS. Les d\u00e9tails sur la connexion via SSH se trouvent aux endroits suivants : Windows : https://learn.microsoft.com/en-us/windows/terminal/tutorials/ssh Linux : https://www.ssh.com/academy/ssh/command macOS : https://www.servermania.com/kb/articles/ssh-mac Si vous ne souhaitez pas vous connecter via SSH, AWS offre la possibilit\u00e9 de se connecter depuis la console AWS en utilisant le bouton \u201cConnect\u201d : Configuration de domaine personnalis\u00e9 et SSL pour un acc\u00e8s HTTPS # Les domaines personnalis\u00e9s sont n\u00e9cessaires pour un acc\u00e8s s\u00e9curis\u00e9 \u00e0 Grist. Si vous avez d\u00e9j\u00e0 un certificat SSL, vous pouvez utiliser le v\u00f4tre (comme d\u00e9crit dans le README de grist-omnibus ). Sinon, Grist peut g\u00e9n\u00e9rer un certificat de Let\u2019s Encrypt. Pour cela, un domaine valide et un email doivent \u00eatre configur\u00e9s : Pointez le domaine vers l\u2019adresse IP de l\u2019instance Grist EC2. Si vous n\u2019utilisez pas le service Elastic IP , l\u2019instance peut avoir une adresse IPv4 publique diff\u00e9rente \u00e0 chaque d\u00e9marrage. Connectez-vous \u00e0 l\u2019instance Grist EC2. D\u00e9finissez le param\u00e8tre URL dans le fichier grist/gristParameters . Vous avez besoin des privil\u00e8ges administrateur pour effectuer cette action, vous pouvez donc ouvrir un \u00e9diteur en ex\u00e9cutant sudo nano grist/gristParameters . Ex\u00e9cutez le script restartGrist avec sudo ~/grist/restartGrist . Une fois les \u00e9tapes ci-dessus termin\u00e9es, vous devriez pouvoir acc\u00e9der \u00e0 Grist sur votre domaine personnalis\u00e9. Configuration de l\u2019authentification # Nous supportons Google ou Microsoft en tant que fournisseurs OpenID. Pour configurer d\u2019autres fournisseurs d\u2019authentification, veuillez vous r\u00e9f\u00e9rer \u00e0 la documentation dex . Pour configurer l\u2019authentification Grist avec Google ou Microsoft, vous devez avoir une application enregistr\u00e9e aupr\u00e8s du fournisseur correspondant : Microsoft : https://learn.microsoft.com/en-us/power-pages/security/authentication/openid-settings Google : https://support.google.com/cloud/answer/6158849?hl=en Une fois que vous avez votre ID client et votre secret, vous devez les transmettre au fichier gristParameters \u00e0 l\u2019int\u00e9rieur de l\u2019instance Grist EC2 : Connectez-vous \u00e0 l\u2019instance Grist EC2. Ouvrez ~/grist/gristParameters . Mettez \u00e0 jour les sections CLIENT_ID et CLIENT_SECRET pour le(s) fournisseur(s) concern\u00e9(s). Si vous n\u2019utilisez qu\u2019un seul fournisseur, laissez la deuxi\u00e8me section comment\u00e9e. Mettez \u00e0 jour ADMIN_EMAIL dans le m\u00eame fichier. Il doit correspondre \u00e0 l\u2019email que vous utiliserez pour vous connecter via votre fournisseur d\u2019authentification. Par exemple : ADMIN_EMAIL=frank@votre-organisation.com Si vous souhaitez changer le nom de votre \u00e9quipe, mettez \u00e0 jour TEAM_NAME dans le m\u00eame fichier. Ex\u00e9cutez restartGrist avec le flag clean en utilisant sudo ~/grist/restartGrist clean pour effacer les anciennes donn\u00e9es de connexion. Important : Cela supprimera tous les documents Grist ! Une fois la configuration ci-dessus effectu\u00e9e, vous devriez pouvoir vous connecter avec vos identifiants Google/Microsoft. Ex\u00e9cution de Grist dans un VPC s\u00e9par\u00e9 # grist-omnibus est con\u00e7u pour fonctionner sur chaque VPC par d\u00e9faut du compte. Pour le faire fonctionner sur un VPC personnalis\u00e9, vous devrez configurer correctement tous les \u00e9l\u00e9ments du VPC. Pour plus d\u2019informations sur cette configuration, lisez ici . Pour ex\u00e9cuter Grist sur un VPC, les \u00e9l\u00e9ments suivants doivent \u00eatre correctement configur\u00e9s : L\u2019attribution d\u2019un nom DNS public \u00e0 l\u2019instance Grist EC2 est autoris\u00e9e. Le VPC peut \u00eatre accessible depuis Internet (permettant \u00e0 la passerelle Internet et aux tables de routage de g\u00e9rer le trafic). Une connexion de groupe de s\u00e9curit\u00e9 depuis les ports 22 (SSH pour la configuration), 80 (connexion HTTP) et 433 (connexion HTTPS) est autoris\u00e9e. Mise \u00e0 jour de grist-omnibus # La version packag\u00e9e de grist-omnibus se mettra \u00e0 jour automatiquement avant chaque lancement. Pour mettre \u00e0 jour grist-omnibus manuellement, red\u00e9marrez l\u2019instance Grist EC2 ou connectez-vous via SSH et appelez sudo ~/grist/restartGrist . Il n\u2019y a actuellement aucun plan pour supporter l\u2019environnement Grist AWS Marketplace en dehors de grist-omnibus . Autres informations importantes # L\u2019instance Grist EC2 doit avoir l\u2019option \u201cPersistent store\u201d coch\u00e9e. Grist stocke toutes les donn\u00e9es dans le r\u00e9pertoire ~/grist-persist . Supprimer ce dossier entra\u00eenera la perte de toutes les donn\u00e9es de tous les documents. Ne supprimez pas ~/grist-persist/acme.json , car il contient une cl\u00e9 priv\u00e9e de Let\u2019s Encrypt. Le supprimer trop souvent peut entra\u00eener le refus de Let\u2019s Encrypt de d\u00e9livrer de nouveaux certificats pour votre domaine.","title":"AWS Marketplace"},{"location":"install/aws-marketplace/#aws-marketplace","text":"Grist sur AWS Marketplace a ce qu\u2019il vous faut pour ex\u00e9cuter une instance Grist auto-h\u00e9berg\u00e9e avec une configuration minimale, et est bas\u00e9 sur grist-omnibus . Vous trouverez ci-dessous les \u00e9tapes compl\u00e8tes de configuration, y compris l\u2019authentification via OpenID.","title":"AWS Marketplace"},{"location":"install/aws-marketplace/#configuration-de-la-premiere-execution","text":"Apr\u00e8s le d\u00e9ploiement de l\u2019instance, Grist devrait \u00eatre imm\u00e9diatement disponible via le protocole HTTP sur un domaine autog\u00e9n\u00e9r\u00e9 tel que ec2-3-94-254-105.compute-1.amazonaws.com (\u00e9tiquet\u00e9 Public IPv4 DNS par AWS). Identifiants par d\u00e9faut : email : admin@example.getgrist.com mot de passe : [instance-id]* * L\u2019ID de l\u2019instance peut \u00eatre trouv\u00e9 sur la page EC2 dans la console AWS :","title":"Configuration de la premi\u00e8re ex\u00e9cution"},{"location":"install/aws-marketplace/#comment-se-connecter-a-linstance-grist","text":"Pendant le d\u00e9ploiement, il vous a \u00e9t\u00e9 demand\u00e9 de cr\u00e9er ou d\u2019utiliser des paires de cl\u00e9s. Vous pouvez utiliser cette paire pour vous connecter via SSH depuis votre terminal/bash. L\u2019utilisateur par d\u00e9faut pour l\u2019instance Grist EC2 s\u2019appelle \u201cubuntu\u201d, et vous pouvez vous connecter \u00e0 ubuntu@[ec2-instance-public-ip] . Remarque : Vous devez utiliser le fichier *.pem que vous avez re\u00e7u lors de la g\u00e9n\u00e9ration des paires de cl\u00e9s sur AWS. Les d\u00e9tails sur la connexion via SSH se trouvent aux endroits suivants : Windows : https://learn.microsoft.com/en-us/windows/terminal/tutorials/ssh Linux : https://www.ssh.com/academy/ssh/command macOS : https://www.servermania.com/kb/articles/ssh-mac Si vous ne souhaitez pas vous connecter via SSH, AWS offre la possibilit\u00e9 de se connecter depuis la console AWS en utilisant le bouton \u201cConnect\u201d :","title":"Comment se connecter \u00e0 l’instance Grist"},{"location":"install/aws-marketplace/#configuration-de-domaine-personnalise-et-ssl-pour-un-acces-https","text":"Les domaines personnalis\u00e9s sont n\u00e9cessaires pour un acc\u00e8s s\u00e9curis\u00e9 \u00e0 Grist. Si vous avez d\u00e9j\u00e0 un certificat SSL, vous pouvez utiliser le v\u00f4tre (comme d\u00e9crit dans le README de grist-omnibus ). Sinon, Grist peut g\u00e9n\u00e9rer un certificat de Let\u2019s Encrypt. Pour cela, un domaine valide et un email doivent \u00eatre configur\u00e9s : Pointez le domaine vers l\u2019adresse IP de l\u2019instance Grist EC2. Si vous n\u2019utilisez pas le service Elastic IP , l\u2019instance peut avoir une adresse IPv4 publique diff\u00e9rente \u00e0 chaque d\u00e9marrage. Connectez-vous \u00e0 l\u2019instance Grist EC2. D\u00e9finissez le param\u00e8tre URL dans le fichier grist/gristParameters . Vous avez besoin des privil\u00e8ges administrateur pour effectuer cette action, vous pouvez donc ouvrir un \u00e9diteur en ex\u00e9cutant sudo nano grist/gristParameters . Ex\u00e9cutez le script restartGrist avec sudo ~/grist/restartGrist . Une fois les \u00e9tapes ci-dessus termin\u00e9es, vous devriez pouvoir acc\u00e9der \u00e0 Grist sur votre domaine personnalis\u00e9.","title":"Configuration de domaine personnalis\u00e9 et SSL pour un acc\u00e8s HTTPS"},{"location":"install/aws-marketplace/#configuration-de-lauthentification","text":"Nous supportons Google ou Microsoft en tant que fournisseurs OpenID. Pour configurer d\u2019autres fournisseurs d\u2019authentification, veuillez vous r\u00e9f\u00e9rer \u00e0 la documentation dex . Pour configurer l\u2019authentification Grist avec Google ou Microsoft, vous devez avoir une application enregistr\u00e9e aupr\u00e8s du fournisseur correspondant : Microsoft : https://learn.microsoft.com/en-us/power-pages/security/authentication/openid-settings Google : https://support.google.com/cloud/answer/6158849?hl=en Une fois que vous avez votre ID client et votre secret, vous devez les transmettre au fichier gristParameters \u00e0 l\u2019int\u00e9rieur de l\u2019instance Grist EC2 : Connectez-vous \u00e0 l\u2019instance Grist EC2. Ouvrez ~/grist/gristParameters . Mettez \u00e0 jour les sections CLIENT_ID et CLIENT_SECRET pour le(s) fournisseur(s) concern\u00e9(s). Si vous n\u2019utilisez qu\u2019un seul fournisseur, laissez la deuxi\u00e8me section comment\u00e9e. Mettez \u00e0 jour ADMIN_EMAIL dans le m\u00eame fichier. Il doit correspondre \u00e0 l\u2019email que vous utiliserez pour vous connecter via votre fournisseur d\u2019authentification. Par exemple : ADMIN_EMAIL=frank@votre-organisation.com Si vous souhaitez changer le nom de votre \u00e9quipe, mettez \u00e0 jour TEAM_NAME dans le m\u00eame fichier. Ex\u00e9cutez restartGrist avec le flag clean en utilisant sudo ~/grist/restartGrist clean pour effacer les anciennes donn\u00e9es de connexion. Important : Cela supprimera tous les documents Grist ! Une fois la configuration ci-dessus effectu\u00e9e, vous devriez pouvoir vous connecter avec vos identifiants Google/Microsoft.","title":"Configuration de l’authentification"},{"location":"install/aws-marketplace/#execution-de-grist-dans-un-vpc-separe","text":"grist-omnibus est con\u00e7u pour fonctionner sur chaque VPC par d\u00e9faut du compte. Pour le faire fonctionner sur un VPC personnalis\u00e9, vous devrez configurer correctement tous les \u00e9l\u00e9ments du VPC. Pour plus d\u2019informations sur cette configuration, lisez ici . Pour ex\u00e9cuter Grist sur un VPC, les \u00e9l\u00e9ments suivants doivent \u00eatre correctement configur\u00e9s : L\u2019attribution d\u2019un nom DNS public \u00e0 l\u2019instance Grist EC2 est autoris\u00e9e. Le VPC peut \u00eatre accessible depuis Internet (permettant \u00e0 la passerelle Internet et aux tables de routage de g\u00e9rer le trafic). Une connexion de groupe de s\u00e9curit\u00e9 depuis les ports 22 (SSH pour la configuration), 80 (connexion HTTP) et 433 (connexion HTTPS) est autoris\u00e9e.","title":"Ex\u00e9cution de Grist dans un VPC s\u00e9par\u00e9"},{"location":"install/aws-marketplace/#mise-a-jour-de-grist-omnibus","text":"La version packag\u00e9e de grist-omnibus se mettra \u00e0 jour automatiquement avant chaque lancement. Pour mettre \u00e0 jour grist-omnibus manuellement, red\u00e9marrez l\u2019instance Grist EC2 ou connectez-vous via SSH et appelez sudo ~/grist/restartGrist . Il n\u2019y a actuellement aucun plan pour supporter l\u2019environnement Grist AWS Marketplace en dehors de grist-omnibus .","title":"Mise \u00e0 jour de grist-omnibus"},{"location":"install/aws-marketplace/#autres-informations-importantes","text":"L\u2019instance Grist EC2 doit avoir l\u2019option \u201cPersistent store\u201d coch\u00e9e. Grist stocke toutes les donn\u00e9es dans le r\u00e9pertoire ~/grist-persist . Supprimer ce dossier entra\u00eenera la perte de toutes les donn\u00e9es de tous les documents. Ne supprimez pas ~/grist-persist/acme.json , car il contient une cl\u00e9 priv\u00e9e de Let\u2019s Encrypt. Le supprimer trop souvent peut entra\u00eener le refus de Let\u2019s Encrypt de d\u00e9livrer de nouveaux certificats pour votre domaine.","title":"Autres informations importantes"},{"location":"install/cloud-storage/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Stockage Cloud # Cette fonctionnalit\u00e9 permet la synchronisation automatique des documents Grist et des versions de documents vers des magasins compatibles S3 tels que MinIO (ou AWS S3 lui-m\u00eame). Grist Enterprise prend en charge nativement les comptes de stockage Azure et AWS S3 en utilisant le client officiel d\u2019AWS. Il est conseill\u00e9 d\u2019avoir Redis activ\u00e9 lors de l\u2019utilisation du stockage cloud, car c\u2019est la configuration la mieux test\u00e9e. Activer la cr\u00e9ation de snapshots entra\u00eene un grand changement dans la fa\u00e7on dont les documents sont stock\u00e9s, et il est pr\u00e9f\u00e9rable de le faire avant de cr\u00e9er des documents. Sauvegardez votre travail avant de modifier cette configuration. Magasins compatibles S3 via le client MinIO # Activez cette option en d\u00e9finissant les variables d\u2019environnement suivantes : D\u00e9finissez GRIST_DOCS_MINIO_ACCESS_KEY et GRIST_DOCS_MINIO_SECRET_KEY . D\u00e9finissez GRIST_DOCS_MINIO_BUCKET sur le nom d\u2019un bucket versionn\u00e9 que vous avez cr\u00e9\u00e9. Il est important que le bucket ait la versioning activ\u00e9e. D\u00e9finissez GRIST_DOCS_MINIO_ENDPOINT sur le nom d\u2019h\u00f4te appropri\u00e9 - sans protocole, sans port. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_USE_SSL sur 1 pour utiliser le protocole https (par d\u00e9faut) ou 0 pour http . (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_PORT sur le port \u00e0 utiliser, si le port par d\u00e9faut pour le protocole (80/443) n\u2019est pas correct. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_PREFIX sur le pr\u00e9fixe de vos documents, par d\u00e9faut \u201cdocs/\u201d. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_BUCKET_REGION sur la r\u00e9gion de votre bucket, par d\u00e9faut \u201cus-east-1\u201d. Si vous utilisez AWS S3, le point de terminaison \u00e0 utiliser est s3.amazonaws.com , et il n\u2019est pas n\u00e9cessaire de d\u00e9finir un num\u00e9ro de port ou un indicateur SSL. Les cl\u00e9s d\u2019acc\u00e8s et secr\u00e8tes sont vos AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY . Assurez-vous de cr\u00e9er un bucket versionn\u00e9 \u00e0 l\u2019avance. Azure # Pour Azure : Cr\u00e9ez un compte de stockage dans le portail Azure. Pour le service blob du compte de stockage, assurez-vous que la versioning est activ\u00e9e. Obtenez une cha\u00eene de connexion \u00e0 partir de la section Cl\u00e9s d\u2019acc\u00e8s du compte de stockage. Elle peut ressembler \u00e0 DefaultEndpointsProtocol=https;AccountName=... . Placez la cha\u00eene de connexion dans une variable d\u2019environnement appel\u00e9e AZURE_STORAGE_CONNECTION_STRING . D\u00e9finissez le nom d\u2019un conteneur de stockage Azure dans une variable d\u2019environnement appel\u00e9e GRIST_AZURE_CONTAINER . Un exemple de nom de conteneur est my-grist-docs . D\u00e9finissez un pr\u00e9fixe tel que v1/ dans une variable d\u2019environnement appel\u00e9e GRIST_AZURE_PREFIX . S3 avec le client AWS natif # Pour S3 : D\u00e9finissez le nom du bucket S3 dans une variable d\u2019environnement appel\u00e9e GRIST_DOCS_S3_BUCKET . Un exemple de nom de bucket est my-grist-docs . D\u00e9finissez un pr\u00e9fixe tel que v1/ dans une variable d\u2019environnement appel\u00e9e GRIST_DOCS_S3_PREFIX . Organisez l\u2019acc\u00e8s en utilisant les nombreuses options d\u2019AWS ; sinon, vous pouvez d\u00e9finir les variables AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY . Utilisation une fois configur\u00e9 # Une fois la configuration du stockage externe en place, d\u00e9marrez Grist normalement pour Grist autog\u00e9r\u00e9. Au d\u00e9marrage, il devrait y avoir une ligne comme : info: == grist.externalStorage.[s3|azure|minio].active: true Tous les documents seront lus et enregistr\u00e9s dans le bucket S3 ou le conteneur Azure correspondant. La configuration est la plus simple sur une nouvelle installation de Grist sans aucun document Grist pr\u00e9existant. Une fois en fonctionnement, il est conseill\u00e9 de configurer la \u201cgestion du cycle de vie\u201d du compte de stockage pour d\u00e9finir les limites souhait\u00e9es sur la dur\u00e9e de conservation des versions. Grist n\u2019a aucune exigence \u00e0 ce sujet, c\u2019est strictement selon vos pr\u00e9f\u00e9rences.","title":"Cloud storage"},{"location":"install/cloud-storage/#stockage-cloud","text":"Cette fonctionnalit\u00e9 permet la synchronisation automatique des documents Grist et des versions de documents vers des magasins compatibles S3 tels que MinIO (ou AWS S3 lui-m\u00eame). Grist Enterprise prend en charge nativement les comptes de stockage Azure et AWS S3 en utilisant le client officiel d\u2019AWS. Il est conseill\u00e9 d\u2019avoir Redis activ\u00e9 lors de l\u2019utilisation du stockage cloud, car c\u2019est la configuration la mieux test\u00e9e. Activer la cr\u00e9ation de snapshots entra\u00eene un grand changement dans la fa\u00e7on dont les documents sont stock\u00e9s, et il est pr\u00e9f\u00e9rable de le faire avant de cr\u00e9er des documents. Sauvegardez votre travail avant de modifier cette configuration.","title":"Stockage Cloud"},{"location":"install/cloud-storage/#magasins-compatibles-s3-via-le-client-minio","text":"Activez cette option en d\u00e9finissant les variables d\u2019environnement suivantes : D\u00e9finissez GRIST_DOCS_MINIO_ACCESS_KEY et GRIST_DOCS_MINIO_SECRET_KEY . D\u00e9finissez GRIST_DOCS_MINIO_BUCKET sur le nom d\u2019un bucket versionn\u00e9 que vous avez cr\u00e9\u00e9. Il est important que le bucket ait la versioning activ\u00e9e. D\u00e9finissez GRIST_DOCS_MINIO_ENDPOINT sur le nom d\u2019h\u00f4te appropri\u00e9 - sans protocole, sans port. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_USE_SSL sur 1 pour utiliser le protocole https (par d\u00e9faut) ou 0 pour http . (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_PORT sur le port \u00e0 utiliser, si le port par d\u00e9faut pour le protocole (80/443) n\u2019est pas correct. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_PREFIX sur le pr\u00e9fixe de vos documents, par d\u00e9faut \u201cdocs/\u201d. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_BUCKET_REGION sur la r\u00e9gion de votre bucket, par d\u00e9faut \u201cus-east-1\u201d. Si vous utilisez AWS S3, le point de terminaison \u00e0 utiliser est s3.amazonaws.com , et il n\u2019est pas n\u00e9cessaire de d\u00e9finir un num\u00e9ro de port ou un indicateur SSL. Les cl\u00e9s d\u2019acc\u00e8s et secr\u00e8tes sont vos AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY . Assurez-vous de cr\u00e9er un bucket versionn\u00e9 \u00e0 l\u2019avance.","title":"Magasins compatibles S3 via le client MinIO"},{"location":"install/cloud-storage/#azure","text":"Pour Azure : Cr\u00e9ez un compte de stockage dans le portail Azure. Pour le service blob du compte de stockage, assurez-vous que la versioning est activ\u00e9e. Obtenez une cha\u00eene de connexion \u00e0 partir de la section Cl\u00e9s d\u2019acc\u00e8s du compte de stockage. Elle peut ressembler \u00e0 DefaultEndpointsProtocol=https;AccountName=... . Placez la cha\u00eene de connexion dans une variable d\u2019environnement appel\u00e9e AZURE_STORAGE_CONNECTION_STRING . D\u00e9finissez le nom d\u2019un conteneur de stockage Azure dans une variable d\u2019environnement appel\u00e9e GRIST_AZURE_CONTAINER . Un exemple de nom de conteneur est my-grist-docs . D\u00e9finissez un pr\u00e9fixe tel que v1/ dans une variable d\u2019environnement appel\u00e9e GRIST_AZURE_PREFIX .","title":"Azure"},{"location":"install/cloud-storage/#s3-avec-le-client-aws-natif","text":"Pour S3 : D\u00e9finissez le nom du bucket S3 dans une variable d\u2019environnement appel\u00e9e GRIST_DOCS_S3_BUCKET . Un exemple de nom de bucket est my-grist-docs . D\u00e9finissez un pr\u00e9fixe tel que v1/ dans une variable d\u2019environnement appel\u00e9e GRIST_DOCS_S3_PREFIX . Organisez l\u2019acc\u00e8s en utilisant les nombreuses options d\u2019AWS ; sinon, vous pouvez d\u00e9finir les variables AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY .","title":"S3 avec le client AWS natif"},{"location":"install/cloud-storage/#utilisation-une-fois-configure","text":"Une fois la configuration du stockage externe en place, d\u00e9marrez Grist normalement pour Grist autog\u00e9r\u00e9. Au d\u00e9marrage, il devrait y avoir une ligne comme : info: == grist.externalStorage.[s3|azure|minio].active: true Tous les documents seront lus et enregistr\u00e9s dans le bucket S3 ou le conteneur Azure correspondant. La configuration est la plus simple sur une nouvelle installation de Grist sans aucun document Grist pr\u00e9existant. Une fois en fonctionnement, il est conseill\u00e9 de configurer la \u201cgestion du cycle de vie\u201d du compte de stockage pour d\u00e9finir les limites souhait\u00e9es sur la dur\u00e9e de conservation des versions. Grist n\u2019a aucune exigence \u00e0 ce sujet, c\u2019est strictement selon vos pr\u00e9f\u00e9rences.","title":"Utilisation une fois configur\u00e9"},{"location":"install/example-docker-nginx/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Exemple d\u2019utilisation de Docker et NGINX # Cet exemple a \u00e9t\u00e9 initialement r\u00e9dig\u00e9 par Akito . # Ceci est un exemple complet de configuration Docker pour Grist. Les fichiers docker-compose.yml suivants sont n\u00e9cessaires. Vous devrez ajuster les variables d\u2019environnement selon vos besoins. Exigences # Vous devez avoir la distribution Docker la plus r\u00e9cente, y compris l\u2019extension docker compose install\u00e9e. Pour pr\u00e9parer l\u2019environnement h\u00f4te, cr\u00e9ez un r\u00e9pertoire vide et, \u00e0 l\u2019int\u00e9rieur, ex\u00e9cutez : sudo -u \"$(id -un 1000):$(id -un 1000)\" mkdir -p ./config/nginx/site-confs ./data ./database/data Proxy inverse NGINX avec HTTPS automatique # Pour que le HTTPS automatique fonctionne, vous devez d\u2019abord configurer des entr\u00e9es DNS appropri\u00e9es pour le serveur sur lequel vous ex\u00e9cutez ce proxy inverse. Ce proxy inverse est d\u00e9coupl\u00e9 de Grist, dans un docker-compose.yml s\u00e9par\u00e9, vous pouvez donc fournir commod\u00e9ment des backends suppl\u00e9mentaires vers lesquels il peut router le trafic - par exemple, Authelia pour l\u2019authentification. Cette configuration utilise SWAG, une image Docker qui regroupe le proxy inverse NGINX avec des services utiles, y compris la g\u00e9n\u00e9ration et le renouvellement de certificats TLS. Voici le fichier docker-compose.yml g\u00e9rant l\u2019instance NGINX. version: \"3.9\" services: letsencrypt: image: lscr.io/linuxserver/swag # NGINX avec HTTPS automatique container_name: nginx-letsencrypt-master network_mode: \"host\" environment: - PUID=1000 # Changement optionnel - PGID=1000 # Changement optionnel - TZ=Europe/London # Changez ici ! - URL=mydomain.eu # Changez ici, dans ./config/nginx/site-confs/grist.conf et dans les fichiers .env ! - SUBDOMAINS=grist,webhook.grist # Changez ici, dans ./config/nginx/site-confs/grist.conf et dans les fichiers .env ! - VALIDATION=http - EMAIL=admin@mydomain.eu # Changez ici ! - ONLY_SUBDOMAINS=true - STAGING=false # Activez si vous testez ! volumes: - ./config:/config restart: unless-stopped Configuration NGINX # La configuration suivante doit \u00eatre plac\u00e9e dans ./config/nginx/site-confs/grist.conf , pour que l\u2019instance NGINX route correctement vers Grist. server { listen 443 ssl http2; listen [::]:443 ssl http2; # Ajustez selon vos besoins ! server_name grist.mydomain.eu webhook.grist.mydomain.eu; # activez les confs de proxy inverse en sous-dossier include /config/nginx/proxy-confs/*.subfolder.conf; # activez pour l'authentification LDAP (n\u00e9cessite ldap-location.conf dans le bloc location) #include /config/nginx/ldap-server.conf; # activez pour Authelia (n\u00e9cessite authelia-location.conf dans le bloc location) #include /config/nginx/authelia-server.conf; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; } } Grist # Voici le docker-compose.yml pour le backend Grist. Il contient le d\u00e9ploiement de l\u2019application Grist, qui est accompagn\u00e9e d\u2019une base de donn\u00e9es PostgreSQL. # https://github.com/gristlabs/grist-core#using-grist version: \"3.9\" services: grist: image: gristlabs/grist:1.0.8 # Changez ici ! --> https://hub.docker.com/r/gristlabs/grist/tags container_name: grist user: \"1000\" # Changement optionnel env_file: - ./grist.env volumes: - ./data:/persist ports: - 127.0.0.1:3000:8080 depends_on: - database database: image: postgres:15-alpine container_name: grist_db user: \"1000\" # Changement optionnel env_file: - ./grist_db.env volumes: - ./database/data:/var/lib/postgresql/data Environnement # Les fichiers .env suivants doivent \u00eatre situ\u00e9s dans le m\u00eame dossier que le docker-compose.yml de Grist. grist.env # # https://github.com/gristlabs/grist-core#environment-variables PORT=8080 APP_HOME_URL=https://grist.mydomain.eu GRIST_ALLOWED_HOSTS=webhook.grist.mydomain.eu # Remplacez par les domaines cibles du webhook GRIST_DOMAIN=grist.mydomain.eu GRIST_SINGLE_ORG=myorg GRIST_HIDE_UI_ELEMENTS=billing GRIST_LIST_PUBLIC_SITES=false GRIST_MAX_UPLOAD_ATTACHMENT_MB=10 GRIST_MAX_UPLOAD_IMPORT_MB=300 GRIST_ORG_IN_PATH=false GRIST_PAGE_TITLE_SUFFIX=_blank GRIST_FORCE_LOGIN=true GRIST_SUPPORT_ANON=false GRIST_THROTTLE_CPU=true GRIST_SANDBOX_FLAVOR=gvisor PYTHON_VERSION=3 PYTHON_VERSION_ON_CREATION=3 # Base de donn\u00e9es TYPEORM_DATABASE=grist TYPEORM_USERNAME=grist TYPEORM_HOST=grist_db TYPEORM_LOGGING=false TYPEORM_PASSWORD=mysupersecretpassword CHANGEZ ICI!!!! TYPEORM_PORT=5432 TYPEORM_TYPE=postgres grist_db.env # # https://hub.docker.com/_/postgres POSTGRES_DB=grist POSTGRES_USER=grist POSTGRES_PASSWORD=mysupersecretpassword CHANGEZ ICI!!!!","title":"Example docker nginx"},{"location":"install/example-docker-nginx/#exemple-dutilisation-de-docker-et-nginx","text":"","title":"Exemple d’utilisation de Docker et NGINX"},{"location":"install/example-docker-nginx/#cet-exemple-a-ete-initialement-redige-par-akito","text":"Ceci est un exemple complet de configuration Docker pour Grist. Les fichiers docker-compose.yml suivants sont n\u00e9cessaires. Vous devrez ajuster les variables d\u2019environnement selon vos besoins.","title":"Cet exemple a \u00e9t\u00e9 initialement r\u00e9dig\u00e9 par Akito."},{"location":"install/example-docker-nginx/#exigences","text":"Vous devez avoir la distribution Docker la plus r\u00e9cente, y compris l\u2019extension docker compose install\u00e9e. Pour pr\u00e9parer l\u2019environnement h\u00f4te, cr\u00e9ez un r\u00e9pertoire vide et, \u00e0 l\u2019int\u00e9rieur, ex\u00e9cutez : sudo -u \"$(id -un 1000):$(id -un 1000)\" mkdir -p ./config/nginx/site-confs ./data ./database/data","title":"Exigences"},{"location":"install/example-docker-nginx/#proxy-inverse-nginx-avec-https-automatique","text":"Pour que le HTTPS automatique fonctionne, vous devez d\u2019abord configurer des entr\u00e9es DNS appropri\u00e9es pour le serveur sur lequel vous ex\u00e9cutez ce proxy inverse. Ce proxy inverse est d\u00e9coupl\u00e9 de Grist, dans un docker-compose.yml s\u00e9par\u00e9, vous pouvez donc fournir commod\u00e9ment des backends suppl\u00e9mentaires vers lesquels il peut router le trafic - par exemple, Authelia pour l\u2019authentification. Cette configuration utilise SWAG, une image Docker qui regroupe le proxy inverse NGINX avec des services utiles, y compris la g\u00e9n\u00e9ration et le renouvellement de certificats TLS. Voici le fichier docker-compose.yml g\u00e9rant l\u2019instance NGINX. version: \"3.9\" services: letsencrypt: image: lscr.io/linuxserver/swag # NGINX avec HTTPS automatique container_name: nginx-letsencrypt-master network_mode: \"host\" environment: - PUID=1000 # Changement optionnel - PGID=1000 # Changement optionnel - TZ=Europe/London # Changez ici ! - URL=mydomain.eu # Changez ici, dans ./config/nginx/site-confs/grist.conf et dans les fichiers .env ! - SUBDOMAINS=grist,webhook.grist # Changez ici, dans ./config/nginx/site-confs/grist.conf et dans les fichiers .env ! - VALIDATION=http - EMAIL=admin@mydomain.eu # Changez ici ! - ONLY_SUBDOMAINS=true - STAGING=false # Activez si vous testez ! volumes: - ./config:/config restart: unless-stopped","title":"Proxy inverse NGINX avec HTTPS automatique"},{"location":"install/example-docker-nginx/#configuration-nginx","text":"La configuration suivante doit \u00eatre plac\u00e9e dans ./config/nginx/site-confs/grist.conf , pour que l\u2019instance NGINX route correctement vers Grist. server { listen 443 ssl http2; listen [::]:443 ssl http2; # Ajustez selon vos besoins ! server_name grist.mydomain.eu webhook.grist.mydomain.eu; # activez les confs de proxy inverse en sous-dossier include /config/nginx/proxy-confs/*.subfolder.conf; # activez pour l'authentification LDAP (n\u00e9cessite ldap-location.conf dans le bloc location) #include /config/nginx/ldap-server.conf; # activez pour Authelia (n\u00e9cessite authelia-location.conf dans le bloc location) #include /config/nginx/authelia-server.conf; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; } }","title":"Configuration NGINX"},{"location":"install/example-docker-nginx/#grist","text":"Voici le docker-compose.yml pour le backend Grist. Il contient le d\u00e9ploiement de l\u2019application Grist, qui est accompagn\u00e9e d\u2019une base de donn\u00e9es PostgreSQL. # https://github.com/gristlabs/grist-core#using-grist version: \"3.9\" services: grist: image: gristlabs/grist:1.0.8 # Changez ici ! --> https://hub.docker.com/r/gristlabs/grist/tags container_name: grist user: \"1000\" # Changement optionnel env_file: - ./grist.env volumes: - ./data:/persist ports: - 127.0.0.1:3000:8080 depends_on: - database database: image: postgres:15-alpine container_name: grist_db user: \"1000\" # Changement optionnel env_file: - ./grist_db.env volumes: - ./database/data:/var/lib/postgresql/data","title":"Grist"},{"location":"install/example-docker-nginx/#environnement","text":"Les fichiers .env suivants doivent \u00eatre situ\u00e9s dans le m\u00eame dossier que le docker-compose.yml de Grist.","title":"Environnement"},{"location":"install/example-docker-nginx/#gristenv","text":"# https://github.com/gristlabs/grist-core#environment-variables PORT=8080 APP_HOME_URL=https://grist.mydomain.eu GRIST_ALLOWED_HOSTS=webhook.grist.mydomain.eu # Remplacez par les domaines cibles du webhook GRIST_DOMAIN=grist.mydomain.eu GRIST_SINGLE_ORG=myorg GRIST_HIDE_UI_ELEMENTS=billing GRIST_LIST_PUBLIC_SITES=false GRIST_MAX_UPLOAD_ATTACHMENT_MB=10 GRIST_MAX_UPLOAD_IMPORT_MB=300 GRIST_ORG_IN_PATH=false GRIST_PAGE_TITLE_SUFFIX=_blank GRIST_FORCE_LOGIN=true GRIST_SUPPORT_ANON=false GRIST_THROTTLE_CPU=true GRIST_SANDBOX_FLAVOR=gvisor PYTHON_VERSION=3 PYTHON_VERSION_ON_CREATION=3 # Base de donn\u00e9es TYPEORM_DATABASE=grist TYPEORM_USERNAME=grist TYPEORM_HOST=grist_db TYPEORM_LOGGING=false TYPEORM_PASSWORD=mysupersecretpassword CHANGEZ ICI!!!! TYPEORM_PORT=5432 TYPEORM_TYPE=postgres","title":"grist.env"},{"location":"install/example-docker-nginx/#grist_dbenv","text":"# https://hub.docker.com/_/postgres POSTGRES_DB=grist POSTGRES_USER=grist POSTGRES_PASSWORD=mysupersecretpassword CHANGEZ ICI!!!!","title":"grist_db.env"},{"location":"install/forwarded-headers/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . En-t\u00eates Transf\u00e9r\u00e9s # Vous pouvez avoir un middleware qui effectue l\u2019authentification et transmet ensuite l\u2019identit\u00e9 aux applications web dans un en-t\u00eate. Si c\u2019est le cas, Grist peut \u00eatre configur\u00e9 pour respecter cet en-t\u00eate. Avertissement La logique de redirection pour l\u2019authentification utilisant des en-t\u00eates transf\u00e9r\u00e9s suppose actuellement une configuration d\u2019un seul espace d\u2019\u00e9quipe et peut mal se comporter pour des configurations multi-sites. Pour que cela fonctionne, voici ce que vous devez faire : D\u00e9finissez GRIST_FORWARD_AUTH_HEADER sur un en-t\u00eate qui contiendra les emails des utilisateurs autoris\u00e9s, par exemple x-forwarded-user . Cela doit correspondre \u00e0 ce que votre middleware d\u00e9finira. Assurez-vous que le chemin /auth/login est g\u00e9r\u00e9 par votre middleware avant d\u2019atteindre Grist. D\u00e9finissez GRIST_FORWARD_AUTH_LOGOUT_PATH sur un chemin qui d\u00e9clenchera une d\u00e9connexion pour votre middleware (par exemple, /_oauth/logout ). Assurez-vous que le chemin de d\u00e9connexion est g\u00e9r\u00e9 par votre middleware ! Si vous souhaitez autoriser l\u2019acc\u00e8s anonyme dans certains cas, assurez-vous que tous les autres chemins de Grist sont libres de votre middleware. Grist d\u00e9clenchera le middleware (en redirigeant vers /auth/login ) si n\u00e9cessaire. Il est conseill\u00e9 de supprimer GRIST_FORWARD_AUTH_HEADER des requ\u00eates externes sur tous les chemins qui ne sont pas g\u00e9r\u00e9s par votre middleware. Votre middleware peut vous permettre de sp\u00e9cifier o\u00f9 rediriger l\u2019utilisateur apr\u00e8s la d\u00e9connexion. Cela devrait \u00eatre /signed-out sur le site Grist. Exemple : traefik-forward-auth # traefik-forward-auth est \u201cUn service d\u2019authentification minimale qui fournit une connexion OAuth/SSO et une authentification pour le proxy inverse/\u00e9quilibreur de charge traefik.\u201d Le GRIST_FORWARD_AUTH_HEADER doit \u00eatre X-Forwarded-User , et cela doit \u00eatre d\u00e9fini dans les param\u00e8tres authResponseHeaders pour traefik. Le GRIST_FORWARD_AUTH_LOGOUT_PATH doit \u00eatre /_oauth/logout , sauf si vous avez modifi\u00e9 le param\u00e8tre url-path par d\u00e9faut pour traefik-forward-auth. LOGOUT_REDIRECT pour traefik-forward-auth doit \u00eatre https:///signed-out . Il existe des exemples pratiques sur Un mod\u00e8le pour l\u2019auto-h\u00e9bergement de Grist avec traefik et docker compose et Grist Omnibus . D\u00e9pannage # Pour beaucoup, cette m\u00e9thode d\u2019authentification fonctionne tr\u00e8s bien. Un utilisateur avec plusieurs applications web servies par le m\u00eame middleware a eu des difficult\u00e9s \u00e0 coordonner les d\u00e9connexions. Cela pourrait \u00eatre r\u00e9solu en appliquant le middleware \u00e0 tous les chemins de Grist et en d\u00e9finissant GRIST_IGNORE_SESSION=true afin que Grist n\u2019ait aucune notion distincte de qui est connect\u00e9. Mais alors, partager certains documents avec tout le monde publiquement (sans se connecter) est devenu un probl\u00e8me. Notez qu\u2019avec GRIST_IGNORE_SESSION=true , Grist fera confiance \u00e0 GRIST_FORWARD_AUTH_HEADER sur toutes les requ\u00eates, il est donc imp\u00e9ratif que vous ayez un middleware qui remplace ou supprime cet en-t\u00eate pour toutes les requ\u00eates externes avant de les transf\u00e9rer \u00e0 Grist. Si au contraire vous voulez \u00eatre s\u00fbr que l\u2019utilisateur doit \u00eatre connect\u00e9 avant d\u2019utiliser Grist de quelque mani\u00e8re que ce soit, vous pouvez d\u00e9finir GRIST_FORCE_LOGIN=true .","title":"Forwarded headers"},{"location":"install/forwarded-headers/#en-tetes-transferes","text":"Vous pouvez avoir un middleware qui effectue l\u2019authentification et transmet ensuite l\u2019identit\u00e9 aux applications web dans un en-t\u00eate. Si c\u2019est le cas, Grist peut \u00eatre configur\u00e9 pour respecter cet en-t\u00eate. Avertissement La logique de redirection pour l\u2019authentification utilisant des en-t\u00eates transf\u00e9r\u00e9s suppose actuellement une configuration d\u2019un seul espace d\u2019\u00e9quipe et peut mal se comporter pour des configurations multi-sites. Pour que cela fonctionne, voici ce que vous devez faire : D\u00e9finissez GRIST_FORWARD_AUTH_HEADER sur un en-t\u00eate qui contiendra les emails des utilisateurs autoris\u00e9s, par exemple x-forwarded-user . Cela doit correspondre \u00e0 ce que votre middleware d\u00e9finira. Assurez-vous que le chemin /auth/login est g\u00e9r\u00e9 par votre middleware avant d\u2019atteindre Grist. D\u00e9finissez GRIST_FORWARD_AUTH_LOGOUT_PATH sur un chemin qui d\u00e9clenchera une d\u00e9connexion pour votre middleware (par exemple, /_oauth/logout ). Assurez-vous que le chemin de d\u00e9connexion est g\u00e9r\u00e9 par votre middleware ! Si vous souhaitez autoriser l\u2019acc\u00e8s anonyme dans certains cas, assurez-vous que tous les autres chemins de Grist sont libres de votre middleware. Grist d\u00e9clenchera le middleware (en redirigeant vers /auth/login ) si n\u00e9cessaire. Il est conseill\u00e9 de supprimer GRIST_FORWARD_AUTH_HEADER des requ\u00eates externes sur tous les chemins qui ne sont pas g\u00e9r\u00e9s par votre middleware. Votre middleware peut vous permettre de sp\u00e9cifier o\u00f9 rediriger l\u2019utilisateur apr\u00e8s la d\u00e9connexion. Cela devrait \u00eatre /signed-out sur le site Grist.","title":"En-t\u00eates Transf\u00e9r\u00e9s"},{"location":"install/forwarded-headers/#exemple-traefik-forward-auth","text":"traefik-forward-auth est \u201cUn service d\u2019authentification minimale qui fournit une connexion OAuth/SSO et une authentification pour le proxy inverse/\u00e9quilibreur de charge traefik.\u201d Le GRIST_FORWARD_AUTH_HEADER doit \u00eatre X-Forwarded-User , et cela doit \u00eatre d\u00e9fini dans les param\u00e8tres authResponseHeaders pour traefik. Le GRIST_FORWARD_AUTH_LOGOUT_PATH doit \u00eatre /_oauth/logout , sauf si vous avez modifi\u00e9 le param\u00e8tre url-path par d\u00e9faut pour traefik-forward-auth. LOGOUT_REDIRECT pour traefik-forward-auth doit \u00eatre https:///signed-out . Il existe des exemples pratiques sur Un mod\u00e8le pour l\u2019auto-h\u00e9bergement de Grist avec traefik et docker compose et Grist Omnibus .","title":"Exemple : traefik-forward-auth"},{"location":"install/forwarded-headers/#depannage","text":"Pour beaucoup, cette m\u00e9thode d\u2019authentification fonctionne tr\u00e8s bien. Un utilisateur avec plusieurs applications web servies par le m\u00eame middleware a eu des difficult\u00e9s \u00e0 coordonner les d\u00e9connexions. Cela pourrait \u00eatre r\u00e9solu en appliquant le middleware \u00e0 tous les chemins de Grist et en d\u00e9finissant GRIST_IGNORE_SESSION=true afin que Grist n\u2019ait aucune notion distincte de qui est connect\u00e9. Mais alors, partager certains documents avec tout le monde publiquement (sans se connecter) est devenu un probl\u00e8me. Notez qu\u2019avec GRIST_IGNORE_SESSION=true , Grist fera confiance \u00e0 GRIST_FORWARD_AUTH_HEADER sur toutes les requ\u00eates, il est donc imp\u00e9ratif que vous ayez un middleware qui remplace ou supprime cet en-t\u00eate pour toutes les requ\u00eates externes avant de les transf\u00e9rer \u00e0 Grist. Si au contraire vous voulez \u00eatre s\u00fbr que l\u2019utilisateur doit \u00eatre connect\u00e9 avant d\u2019utiliser Grist de quelque mani\u00e8re que ce soit, vous pouvez d\u00e9finir GRIST_FORCE_LOGIN=true .","title":"D\u00e9pannage"},{"location":"install/grist-connect/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . GristConnect # Discourse est un logiciel de forum populaire con\u00e7u pour \u00eatre int\u00e9gr\u00e9 \u00e0 de nombreux sites (y compris le n\u00f4tre ). Il est ennuyeux si les utilisateurs ont besoin d\u2019un identifiant pour un forum s\u00e9par\u00e9 de leur identifiant sur le reste d\u2019un site. Le protocole cr\u00e9\u00e9 par Discourse pour r\u00e9soudre ce probl\u00e8me est bien fait et s\u2019appelle DiscourseConnect . Nous avons d\u00e9cid\u00e9 de faire en sorte que Grist prenne en charge le m\u00eame protocole, de sorte que tout logiciel disposant de plugins permettant \u00e0 Discourse d\u2019utiliser ses identifiants (comme WordPress) puisse \u00e9galement permettre \u00e0 Grist d\u2019utiliser ses identifiants. Ce n\u2019est pas une norme officielle, nous avons donc appel\u00e9 notre impl\u00e9mentation \u201cGristConnect\u201d plut\u00f4t que \u201cDiscourseConnect\u201d. La configuration de GristConnect n\u00e9cessite quelques r\u00e9glages pour Grist, ainsi qu\u2019un plugin ou un codage personnalis\u00e9 pour votre site ou SSO. Les param\u00e8tres Grist sont les suivants : GRIST_CONNECT_URL : d\u00e9finir cette variable d\u2019environnement activera GristConnect. Il doit s\u2019agir d\u2019une adresse URL d\u2019un site externe vers lequel les utilisateurs seront redirig\u00e9s lors d\u2019une demande de connexion/inscription. GRIST_CONNECT_SECRET : (obligatoire) une cl\u00e9 secr\u00e8te, utilis\u00e9e pour signer (hacher) les param\u00e8tres de requ\u00eate dans les URL utilis\u00e9es pendant le flux de connexion. GRIST_CONNECT_LOGOUT_URL : (optionnel) une adresse URL vers laquelle les utilisateurs seront redirig\u00e9s apr\u00e8s s\u2019\u00eatre d\u00e9connect\u00e9s. Par d\u00e9faut - la page de d\u00e9connexion existante de Grist. GRIST_CONNECT_ENDPOINT : (optionnel) un point de terminaison de rappel expos\u00e9 par Grist o\u00f9 les utilisateurs doivent \u00eatre redirig\u00e9s apr\u00e8s une tentative de connexion r\u00e9ussie sur le site du fournisseur d\u2019identit\u00e9 externe (valeur par d\u00e9faut : /connect/login ). Pour votre site ou SSO, vous pouvez constater que le logiciel que vous utilisez prend en charge DiscourseConnect, auquel cas vous pouvez l\u2019activer et le coordonner avec les param\u00e8tres Grist. Sinon, voici les d\u00e9tails exacts de ce qui doit se passer : Lorsque les utilisateurs essaient de se connecter \u00e0 Grist, ils sont redirig\u00e9s vers une GRIST_CONNECT_URL avec des param\u00e8tres de requ\u00eate sign\u00e9s, par exemple, https://auth-provider.example.com?sso=PAYLOADBASE64&sig=cAlculateDHash La charge utile est une cha\u00eene de requ\u00eate encod\u00e9e en Base64 contenant : nonce - un jeton unique g\u00e9n\u00e9r\u00e9 par Grist return_url - une URL pour rediriger l\u2019utilisateur apr\u00e8s une connexion r\u00e9ussie - cela sera toujours d\u00e9fini sur l\u2019URL compl\u00e8te de Grist pour GRIST_CONNECT_ENDPOINT . L\u2019utilisateur doit se connecter en utilisant l\u2019\u00e9cran de connexion de GRIST_CONNECT_URL . Un fournisseur externe doit cr\u00e9er une nouvelle charge utile encod\u00e9e en URL avec les param\u00e8tres suivants : nonce - (obligatoire) un jeton envoy\u00e9 par Grist external_id - (obligatoire) toute cha\u00eene unique \u00e0 l\u2019utilisateur et qui ne changera jamais email - (obligatoire) un email utilisateur valide name - (obligatoire) un nom d\u2019utilisateur avatar_url - (optionnel) une URL vers la photo de profil de l\u2019utilisateur. Notez que Grist acceptera \u00e9galement le param\u00e8tre picture pour le m\u00eame objectif. Cette charge utile doit \u00eatre encod\u00e9e en base64 et correctement \u00e9chapp\u00e9e pour \u00eatre une cha\u00eene de requ\u00eate valide. Un fournisseur doit calculer un hachage HMAC_SHA256 de la charge utile. Un utilisateur doit rediriger vers le point de terminaison GRIST_CONNECT_ENDPOINT avec des param\u00e8tres de cha\u00eene de requ\u00eate sign\u00e9s, par exemple, https://grist.customhost.com/connect/login?sso=ENCODEDPAYLOD&sig=HASH Grist cr\u00e9era un nouvel utilisateur ou mettra \u00e0 jour un utilisateur existant. Les utilisateurs seront identifi\u00e9s par le param\u00e8tre external_id . L\u2019utilisateur sera connect\u00e9 \u00e0 Grist.","title":"GristConnect"},{"location":"install/grist-connect/#gristconnect","text":"Discourse est un logiciel de forum populaire con\u00e7u pour \u00eatre int\u00e9gr\u00e9 \u00e0 de nombreux sites (y compris le n\u00f4tre ). Il est ennuyeux si les utilisateurs ont besoin d\u2019un identifiant pour un forum s\u00e9par\u00e9 de leur identifiant sur le reste d\u2019un site. Le protocole cr\u00e9\u00e9 par Discourse pour r\u00e9soudre ce probl\u00e8me est bien fait et s\u2019appelle DiscourseConnect . Nous avons d\u00e9cid\u00e9 de faire en sorte que Grist prenne en charge le m\u00eame protocole, de sorte que tout logiciel disposant de plugins permettant \u00e0 Discourse d\u2019utiliser ses identifiants (comme WordPress) puisse \u00e9galement permettre \u00e0 Grist d\u2019utiliser ses identifiants. Ce n\u2019est pas une norme officielle, nous avons donc appel\u00e9 notre impl\u00e9mentation \u201cGristConnect\u201d plut\u00f4t que \u201cDiscourseConnect\u201d. La configuration de GristConnect n\u00e9cessite quelques r\u00e9glages pour Grist, ainsi qu\u2019un plugin ou un codage personnalis\u00e9 pour votre site ou SSO. Les param\u00e8tres Grist sont les suivants : GRIST_CONNECT_URL : d\u00e9finir cette variable d\u2019environnement activera GristConnect. Il doit s\u2019agir d\u2019une adresse URL d\u2019un site externe vers lequel les utilisateurs seront redirig\u00e9s lors d\u2019une demande de connexion/inscription. GRIST_CONNECT_SECRET : (obligatoire) une cl\u00e9 secr\u00e8te, utilis\u00e9e pour signer (hacher) les param\u00e8tres de requ\u00eate dans les URL utilis\u00e9es pendant le flux de connexion. GRIST_CONNECT_LOGOUT_URL : (optionnel) une adresse URL vers laquelle les utilisateurs seront redirig\u00e9s apr\u00e8s s\u2019\u00eatre d\u00e9connect\u00e9s. Par d\u00e9faut - la page de d\u00e9connexion existante de Grist. GRIST_CONNECT_ENDPOINT : (optionnel) un point de terminaison de rappel expos\u00e9 par Grist o\u00f9 les utilisateurs doivent \u00eatre redirig\u00e9s apr\u00e8s une tentative de connexion r\u00e9ussie sur le site du fournisseur d\u2019identit\u00e9 externe (valeur par d\u00e9faut : /connect/login ). Pour votre site ou SSO, vous pouvez constater que le logiciel que vous utilisez prend en charge DiscourseConnect, auquel cas vous pouvez l\u2019activer et le coordonner avec les param\u00e8tres Grist. Sinon, voici les d\u00e9tails exacts de ce qui doit se passer : Lorsque les utilisateurs essaient de se connecter \u00e0 Grist, ils sont redirig\u00e9s vers une GRIST_CONNECT_URL avec des param\u00e8tres de requ\u00eate sign\u00e9s, par exemple, https://auth-provider.example.com?sso=PAYLOADBASE64&sig=cAlculateDHash La charge utile est une cha\u00eene de requ\u00eate encod\u00e9e en Base64 contenant : nonce - un jeton unique g\u00e9n\u00e9r\u00e9 par Grist return_url - une URL pour rediriger l\u2019utilisateur apr\u00e8s une connexion r\u00e9ussie - cela sera toujours d\u00e9fini sur l\u2019URL compl\u00e8te de Grist pour GRIST_CONNECT_ENDPOINT . L\u2019utilisateur doit se connecter en utilisant l\u2019\u00e9cran de connexion de GRIST_CONNECT_URL . Un fournisseur externe doit cr\u00e9er une nouvelle charge utile encod\u00e9e en URL avec les param\u00e8tres suivants : nonce - (obligatoire) un jeton envoy\u00e9 par Grist external_id - (obligatoire) toute cha\u00eene unique \u00e0 l\u2019utilisateur et qui ne changera jamais email - (obligatoire) un email utilisateur valide name - (obligatoire) un nom d\u2019utilisateur avatar_url - (optionnel) une URL vers la photo de profil de l\u2019utilisateur. Notez que Grist acceptera \u00e9galement le param\u00e8tre picture pour le m\u00eame objectif. Cette charge utile doit \u00eatre encod\u00e9e en base64 et correctement \u00e9chapp\u00e9e pour \u00eatre une cha\u00eene de requ\u00eate valide. Un fournisseur doit calculer un hachage HMAC_SHA256 de la charge utile. Un utilisateur doit rediriger vers le point de terminaison GRIST_CONNECT_ENDPOINT avec des param\u00e8tres de cha\u00eene de requ\u00eate sign\u00e9s, par exemple, https://grist.customhost.com/connect/login?sso=ENCODEDPAYLOD&sig=HASH Grist cr\u00e9era un nouvel utilisateur ou mettra \u00e0 jour un utilisateur existant. Les utilisateurs seront identifi\u00e9s par le param\u00e8tre external_id . L\u2019utilisateur sera connect\u00e9 \u00e0 Grist.","title":"GristConnect"},{"location":"install/oidc/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . OpenID Connect # Configuration pour OIDC, utile pour les connexions single-sign-on des organisations. Un bon aper\u00e7u informatif de l\u2019OIDC est disponible sur https://developer.okta.com/blog/2019/10/21/illustrated-guide-to-oauth-and-oidc Remarque : SP est le \u201cFournisseur de Services\u201d, dans notre cas, l\u2019application Grist. IdP est le \u201cFournisseur d\u2019Identit\u00e9\u201d, l\u00e0 o\u00f9 les utilisateurs se connectent, par exemple Keycloak, Authelia, \u2026 OIDC est l\u2019acronyme pour OpenID Connect Variables d\u2019environnement attendues : GRIST_OIDC_IDP_ISSUER - l\u2019URL de l\u2019\u00e9metteur pour l\u2019IdP, pass\u00e9 \u00e0 node-openid-client, voir : https://github.com/panva/node-openid-client/blob/a84d022f195f82ca1c97f8f6b2567ebcef8738c3/docs/README.md#issuerdiscoverissuer . Cette variable active le syst\u00e8me de connexion OIDC. GRIST_OIDC_IDP_CLIENT_ID - l\u2019ID client pour l\u2019application, tel qu\u2019enregistr\u00e9 aupr\u00e8s de l\u2019IdP. GRIST_OIDC_IDP_CLIENT_SECRET - le secret client pour l\u2019application, tel qu\u2019enregistr\u00e9 aupr\u00e8s de l\u2019IdP. GRIST_OIDC_IDP_SCOPES (optionnel) - les scopes \u00e0 demander \u00e0 l\u2019IdP, sous forme de liste s\u00e9par\u00e9e par des espaces. Par d\u00e9faut \"openid email profile\" . GRIST_OIDC_SP_HOST (optionnel) - il s\u2019agit simplement de l\u2019URL de base du site Grist, tel que https:// (lorsque OIDC est actif, il y aura un point de terminaison /oauth2/callback disponible ici pour impl\u00e9menter le protocole). Si omis, APP_HOME_URL sera utilis\u00e9. GRIST_OIDC_IDP_END_SESSION_ENDPOINT (optionnel) - Si d\u00e9fini, remplace le end_session_endpoint de l\u2019IdP par une URL alternative pour rediriger l\u2019utilisateur lors de la d\u00e9connexion (pour un IdP qui a un point de terminaison de d\u00e9connexion mais ne supporte pas la sp\u00e9cification OIDC RP-Initiated Logout). GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT (optionnel) - Si d\u00e9fini sur \u201ctrue\u201d, lors de la d\u00e9connexion, il n\u2019y aura aucune tentative d\u2019appeler le end_session_endpoint de l\u2019IdP (l\u2019utilisateur restera connect\u00e9 \u00e0 l\u2019IdP). Vous ne devez le d\u00e9finir sur \u201ctrue\u201d que si l\u2019IdP ne fournit pas un tel point de terminaison (par exemple si vous utilisez Gitlab). GRIST_OIDC_SP_PROFILE_NAME_ATTR (optionnel) - La cl\u00e9 de la propri\u00e9t\u00e9 d\u2019utilisateur \u00e0 utiliser pour le nom de l\u2019utilisateur. Si omis, le nom sera la concat\u00e9nation de given_name + family_name s\u2019ils sont fournis ou la propri\u00e9t\u00e9 name sinon. GRIST_OIDC_SP_PROFILE_EMAIL_ATTR (optionnel) - La cl\u00e9 de la propri\u00e9t\u00e9 d\u2019utilisateur \u00e0 utiliser pour l\u2019email de l\u2019utilisateur. Par d\u00e9faut \u201cemail\u201d. GRIST_OIDC_IDP_ENABLED_PROTECTIONS (optionnel) - Une liste s\u00e9par\u00e9e par des virgules des protections \u00e0 activer. Les valeurs prises en charge sont PKCE , STATE , NONCE . Par d\u00e9faut PKCE,STATE , qui sont les param\u00e8tres recommand\u00e9s. Il est fortement recommand\u00e9 d\u2019activer STATE , et au moins l\u2019un de PKCE ou NONCE , selon ce que votre fournisseur OIDC requiert/supporte. GRIST_OIDC_IDP_ACR_VALUES (optionnel) - Une liste s\u00e9par\u00e9e par des espaces des valeurs ACR \u00e0 demander \u00e0 l\u2019IdP. GRIST_OIDC_IDP_EXTRA_CLIENT_METADATA (optionnel) - Un objet JSON avec des m\u00e9tadonn\u00e9es client suppl\u00e9mentaires \u00e0 passer \u00e0 openid-client. Sachez que la d\u00e9finition de cet objet peut remplacer toutes les autres valeurs pass\u00e9es au client openid. Plus d\u2019infos : https://github.com/panva/node-openid-client/tree/main/docs#new-clientmetadata-jwks-options Exemple : Gitlab # Voir comment cr\u00e9er une application OAuth2 dans Gitlab dans cette documentation . Lors de la cr\u00e9ation de l\u2019application, d\u00e9finissez l\u2019URI de redirection sur https:///oauth2/callback (ou http://localhost:8484/oauth2/callback si test\u00e9 localement, changez 8484 pour le port que vous \u00e9coutez) et s\u00e9lectionnez les scopes que vous sp\u00e9cifierez dans GRIST_OIDC_IDP_SCOPES . Une fois l\u2019application configur\u00e9e, d\u00e9marrez Grist avec ces param\u00e8tres : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https://gitlab.com/.well-known/openid-configuration GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID client g\u00e9n\u00e9r\u00e9 par Gitlab pour l'application GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Gitlab pour l'application GRIST_OIDC_IDP_CLIENT_SECRET=... # Gitlab ne propose pas `end_session_endpoint` GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT=true Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" . Exemple : Auth0 # Cr\u00e9ez une application dans Auth0 comme expliqu\u00e9 dans cette documentation (vous pouvez s\u00e9lectionner le type d\u2019application nomm\u00e9 Regular Web Applications ). Une fois l\u2019application cr\u00e9\u00e9e, assurez-vous d\u2019ajouter au moins la configuration suivante pour l\u2019application : URL de rappel autoris\u00e9es : https:///oauth2/callback URL de d\u00e9connexion autoris\u00e9es : http:///* (vous pouvez \u00e9galement remplacer le caract\u00e8re g\u00e9n\u00e9rique par le chemin complet pour \u00eatre plus strict) Ensuite, vous devriez pouvoir d\u00e9marrer Grist avec les param\u00e8tres suivants : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https:// GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID client g\u00e9n\u00e9r\u00e9 par Auth0 pour l'application GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Auth0 pour l'application GRIST_OIDC_IDP_CLIENT_SECRET=... Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" . Exemple : Keycloak # Tout d\u2019abord, configurez Keycloak comme expliqu\u00e9 dans l\u2019un de ces guides \u201cGetting started\u201d : https://www.keycloak.org/guides#getting-started . Une fois Keycloak configur\u00e9 avec un domaine et un utilisateur, cr\u00e9ez un nouveau client avec la configuration suivante : Type de client : OpenID Connect Flux d\u2019authentification : Flux standard URL racine : https:// URI de redirection valides : /oauth2/callback URI de redirection post-d\u00e9connexion valides : /* (vous pouvez \u00e9galement remplacer le caract\u00e8re g\u00e9n\u00e9rique par le chemin complet pour \u00eatre plus strict) Soumettez vos param\u00e8tres et allez \u00e0 l\u2019onglet Credentials pour r\u00e9cup\u00e9rer le secret client. Ensuite, vous pouvez d\u00e9marrer Grist avec la configuration suivante : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https:///realms/ GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID que vous avez choisi pour le client Keycloak GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Keycloak r\u00e9cup\u00e9r\u00e9 pr\u00e9c\u00e9demment GRIST_OIDC_IDP_CLIENT_SECRET=... Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" .","title":"OIDC"},{"location":"install/oidc/#openid-connect","text":"Configuration pour OIDC, utile pour les connexions single-sign-on des organisations. Un bon aper\u00e7u informatif de l\u2019OIDC est disponible sur https://developer.okta.com/blog/2019/10/21/illustrated-guide-to-oauth-and-oidc Remarque : SP est le \u201cFournisseur de Services\u201d, dans notre cas, l\u2019application Grist. IdP est le \u201cFournisseur d\u2019Identit\u00e9\u201d, l\u00e0 o\u00f9 les utilisateurs se connectent, par exemple Keycloak, Authelia, \u2026 OIDC est l\u2019acronyme pour OpenID Connect Variables d\u2019environnement attendues : GRIST_OIDC_IDP_ISSUER - l\u2019URL de l\u2019\u00e9metteur pour l\u2019IdP, pass\u00e9 \u00e0 node-openid-client, voir : https://github.com/panva/node-openid-client/blob/a84d022f195f82ca1c97f8f6b2567ebcef8738c3/docs/README.md#issuerdiscoverissuer . Cette variable active le syst\u00e8me de connexion OIDC. GRIST_OIDC_IDP_CLIENT_ID - l\u2019ID client pour l\u2019application, tel qu\u2019enregistr\u00e9 aupr\u00e8s de l\u2019IdP. GRIST_OIDC_IDP_CLIENT_SECRET - le secret client pour l\u2019application, tel qu\u2019enregistr\u00e9 aupr\u00e8s de l\u2019IdP. GRIST_OIDC_IDP_SCOPES (optionnel) - les scopes \u00e0 demander \u00e0 l\u2019IdP, sous forme de liste s\u00e9par\u00e9e par des espaces. Par d\u00e9faut \"openid email profile\" . GRIST_OIDC_SP_HOST (optionnel) - il s\u2019agit simplement de l\u2019URL de base du site Grist, tel que https:// (lorsque OIDC est actif, il y aura un point de terminaison /oauth2/callback disponible ici pour impl\u00e9menter le protocole). Si omis, APP_HOME_URL sera utilis\u00e9. GRIST_OIDC_IDP_END_SESSION_ENDPOINT (optionnel) - Si d\u00e9fini, remplace le end_session_endpoint de l\u2019IdP par une URL alternative pour rediriger l\u2019utilisateur lors de la d\u00e9connexion (pour un IdP qui a un point de terminaison de d\u00e9connexion mais ne supporte pas la sp\u00e9cification OIDC RP-Initiated Logout). GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT (optionnel) - Si d\u00e9fini sur \u201ctrue\u201d, lors de la d\u00e9connexion, il n\u2019y aura aucune tentative d\u2019appeler le end_session_endpoint de l\u2019IdP (l\u2019utilisateur restera connect\u00e9 \u00e0 l\u2019IdP). Vous ne devez le d\u00e9finir sur \u201ctrue\u201d que si l\u2019IdP ne fournit pas un tel point de terminaison (par exemple si vous utilisez Gitlab). GRIST_OIDC_SP_PROFILE_NAME_ATTR (optionnel) - La cl\u00e9 de la propri\u00e9t\u00e9 d\u2019utilisateur \u00e0 utiliser pour le nom de l\u2019utilisateur. Si omis, le nom sera la concat\u00e9nation de given_name + family_name s\u2019ils sont fournis ou la propri\u00e9t\u00e9 name sinon. GRIST_OIDC_SP_PROFILE_EMAIL_ATTR (optionnel) - La cl\u00e9 de la propri\u00e9t\u00e9 d\u2019utilisateur \u00e0 utiliser pour l\u2019email de l\u2019utilisateur. Par d\u00e9faut \u201cemail\u201d. GRIST_OIDC_IDP_ENABLED_PROTECTIONS (optionnel) - Une liste s\u00e9par\u00e9e par des virgules des protections \u00e0 activer. Les valeurs prises en charge sont PKCE , STATE , NONCE . Par d\u00e9faut PKCE,STATE , qui sont les param\u00e8tres recommand\u00e9s. Il est fortement recommand\u00e9 d\u2019activer STATE , et au moins l\u2019un de PKCE ou NONCE , selon ce que votre fournisseur OIDC requiert/supporte. GRIST_OIDC_IDP_ACR_VALUES (optionnel) - Une liste s\u00e9par\u00e9e par des espaces des valeurs ACR \u00e0 demander \u00e0 l\u2019IdP. GRIST_OIDC_IDP_EXTRA_CLIENT_METADATA (optionnel) - Un objet JSON avec des m\u00e9tadonn\u00e9es client suppl\u00e9mentaires \u00e0 passer \u00e0 openid-client. Sachez que la d\u00e9finition de cet objet peut remplacer toutes les autres valeurs pass\u00e9es au client openid. Plus d\u2019infos : https://github.com/panva/node-openid-client/tree/main/docs#new-clientmetadata-jwks-options","title":"OpenID Connect"},{"location":"install/oidc/#exemple-gitlab","text":"Voir comment cr\u00e9er une application OAuth2 dans Gitlab dans cette documentation . Lors de la cr\u00e9ation de l\u2019application, d\u00e9finissez l\u2019URI de redirection sur https:///oauth2/callback (ou http://localhost:8484/oauth2/callback si test\u00e9 localement, changez 8484 pour le port que vous \u00e9coutez) et s\u00e9lectionnez les scopes que vous sp\u00e9cifierez dans GRIST_OIDC_IDP_SCOPES . Une fois l\u2019application configur\u00e9e, d\u00e9marrez Grist avec ces param\u00e8tres : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https://gitlab.com/.well-known/openid-configuration GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID client g\u00e9n\u00e9r\u00e9 par Gitlab pour l'application GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Gitlab pour l'application GRIST_OIDC_IDP_CLIENT_SECRET=... # Gitlab ne propose pas `end_session_endpoint` GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT=true Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" .","title":"Exemple : Gitlab"},{"location":"install/oidc/#exemple-auth0","text":"Cr\u00e9ez une application dans Auth0 comme expliqu\u00e9 dans cette documentation (vous pouvez s\u00e9lectionner le type d\u2019application nomm\u00e9 Regular Web Applications ). Une fois l\u2019application cr\u00e9\u00e9e, assurez-vous d\u2019ajouter au moins la configuration suivante pour l\u2019application : URL de rappel autoris\u00e9es : https:///oauth2/callback URL de d\u00e9connexion autoris\u00e9es : http:///* (vous pouvez \u00e9galement remplacer le caract\u00e8re g\u00e9n\u00e9rique par le chemin complet pour \u00eatre plus strict) Ensuite, vous devriez pouvoir d\u00e9marrer Grist avec les param\u00e8tres suivants : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https:// GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID client g\u00e9n\u00e9r\u00e9 par Auth0 pour l'application GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Auth0 pour l'application GRIST_OIDC_IDP_CLIENT_SECRET=... Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" .","title":"Exemple : Auth0"},{"location":"install/oidc/#exemple-keycloak","text":"Tout d\u2019abord, configurez Keycloak comme expliqu\u00e9 dans l\u2019un de ces guides \u201cGetting started\u201d : https://www.keycloak.org/guides#getting-started . Une fois Keycloak configur\u00e9 avec un domaine et un utilisateur, cr\u00e9ez un nouveau client avec la configuration suivante : Type de client : OpenID Connect Flux d\u2019authentification : Flux standard URL racine : https:// URI de redirection valides : /oauth2/callback URI de redirection post-d\u00e9connexion valides : /* (vous pouvez \u00e9galement remplacer le caract\u00e8re g\u00e9n\u00e9rique par le chemin complet pour \u00eatre plus strict) Soumettez vos param\u00e8tres et allez \u00e0 l\u2019onglet Credentials pour r\u00e9cup\u00e9rer le secret client. Ensuite, vous pouvez d\u00e9marrer Grist avec la configuration suivante : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https:///realms/ GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID que vous avez choisi pour le client Keycloak GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Keycloak r\u00e9cup\u00e9r\u00e9 pr\u00e9c\u00e9demment GRIST_OIDC_IDP_CLIENT_SECRET=... Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" .","title":"Exemple : Keycloak"},{"location":"install/saml/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . SAML # Configuration pour SAML, utile pour les connexions d\u2019entreprise \u00e0 authentification unique (SSO). Un bon aper\u00e7u informatif de SAML est disponible sur https://www.okta.com/integrate/documentation/saml/ Note : SP est \u201cService Provider\u201d (Fournisseur de Service), dans notre cas, l\u2019application Grist. IdP est \u201cIdentity Provider\u201d (Fournisseur d\u2019Identit\u00e9), un endroit o\u00f9 les utilisateurs se connectent, par exemple Okta ou Google Apps. Nous aurons besoin d\u2019un ou plusieurs certificats de l\u2019IdP, au format PEM. Il s\u2019agit d\u2019une cl\u00e9 publique que Grist utilisera pour v\u00e9rifier que les messages de l\u2019IdP sont l\u00e9gitimes. Nous aurons besoin d\u2019une paire de cl\u00e9s priv\u00e9e et publique pour que Grist puisse communiquer avec l\u2019IdP. L\u2019IdP devra conna\u00eetre la cl\u00e9 publique de Grist pour v\u00e9rifier que les messages de Grist sont l\u00e9gitimes. Variables d\u2019environnement attendues : GRIST_SAML_SP_HOST - c\u2019est simplement l\u2019URL de base du site Grist, comme https:// (lorsque SAML est actif, il y aura une endpoint /saml/assert disponible ici pour impl\u00e9menter le protocole). GRIST_SAML_SP_KEY - chemin vers un fichier contenant notre cl\u00e9 priv\u00e9e, au format PEM. C\u2019est la cl\u00e9 priv\u00e9e de la paire de cl\u00e9s cr\u00e9\u00e9e pour que Grist l\u2019utilise avec l\u2019IdP. GRIST_SAML_SP_CERT - chemin vers un fichier contenant notre cl\u00e9 publique, au format PEM. C\u2019est la cl\u00e9 publique de la paire de cl\u00e9s cr\u00e9\u00e9e pour que Grist l\u2019utilise avec l\u2019IdP. Ce n\u2019est pas la cl\u00e9 publique/certificat de l\u2019IdP. GRIST_SAML_IDP_LOGIN - URL de connexion pour rediriger l\u2019utilisateur pour la connexion. GRIST_SAML_IDP_LOGOUT - URL de d\u00e9connexion pour rediriger l\u2019utilisateur pour la d\u00e9connexion. GRIST_SAML_IDP_SKIP_SLO - si d\u00e9fini et non vide, ne pas tenter le flux \u201cSingle Logout\u201d SAML, mais simplement rediriger vers GRIST_SAML_IDP_LOGOUT apr\u00e8s avoir effac\u00e9 la session. La possibilit\u00e9 de ce flux d\u00e9pendra de l\u2019IdP. GRIST_SAML_IDP_CERTS - liste de chemins s\u00e9par\u00e9s par des virgules pour les certificats de l\u2019IdP, au format PEM. Ce n\u2019est pas la cl\u00e9 priv\u00e9e ou publique cr\u00e9\u00e9e pour Grist. GRIST_SAML_IDP_UNENCRYPTED - si d\u00e9fini et non vide, autoriser les assertions non chiffr\u00e9es, en s\u2019appuyant sur https pour la confidentialit\u00e9. Exemple : Auth0 # Par exemple, lors de l\u2019ex\u00e9cution en local et en http, les param\u00e8tres qui fonctionnent avec l\u2019 IdP SAML Auth0 sont : GRIST_SAML_IDP_SKIP_SLO non d\u00e9fini GRIST_SAML_SP_HOST = http://localhost:8484 GRIST_SAML_IDP_UNENCRYPTED = 1 GRIST_SAML_IDP_LOGIN = https://...auth0.com/samlp/xxxx GRIST_SAML_IDP_LOGOUT = https://...auth0.com/samlp/xxxx (ce sont les m\u00eames pour Auth0) GRIST_SAML_IDP_CERTS = .../auth0.pem (t\u00e9l\u00e9charg\u00e9 selon les instructions d\u2019Auth0) GRIST_SAML_SP_KEY = .../saml.pem (cr\u00e9\u00e9) GRIST_SAML_SP_CERT = .../saml.crt (cr\u00e9\u00e9) Lorsqu\u2019il est utilis\u00e9 avec docker, assurez-vous que les fichiers de cl\u00e9 et de certificat sont accessibles dans un volume partag\u00e9. La paire cl\u00e9/certificat a \u00e9t\u00e9 cr\u00e9\u00e9e en suivant les instructions ici : Auth0 : utiliser un certificat personnalis\u00e9 pour signer les requ\u00eates Auth0 en tant que fournisseur d\u2019identit\u00e9 SAML Dans vos param\u00e8tres Auth0, assurez-vous \u00e9galement que : L\u2019URL de rappel de l\u2019application est d\u00e9finie sur https:///saml/assert . Exemple : Authentik # Dans Authentik , ajoutez un fournisseur appel\u00e9 Grist avec : URL ACS : https:///saml/assert D\u00e9finir la liaison du fournisseur de services sur Post S\u00e9lectionnez ou ajoutez un certificat de signature. Vous devrez le t\u00e9l\u00e9charger pour l\u2019utiliser comme GRIST_SAML_IDP_CERTS dans la configuration de Grist. Ajoutez un certificat de v\u00e9rification. Ce sera la partie publique d\u2019une paire de cl\u00e9s que vous cr\u00e9ez pour GRIST_SAML_SP_KEY / GRIST_SAML_SP_CERT dans la configuration de Grist. Ensuite, toujours dans Authentik, ajoutez une application \u00e9galement appel\u00e9e Grist (je ne suis pas tr\u00e8s imaginatif) qui : Utilise le fournisseur Grist . A Launch URL d\u00e9fini sur https:// . Les param\u00e8tres de Grist suivent le m\u00eame sch\u00e9ma que pour Auth0. Les URL de connexion et de d\u00e9connexion avec Authentik au moment de la r\u00e9daction ressemblent \u00e0 : GRIST_SAML_IDP_LOGIN = https://...authentik.../application/saml/grist/sso/binding/redirect/ GRIST_SAML_IDP_LOGOUT = https://...authentik.../if/session-end/grist/ Exemple : Google # Dans Google Admin , sous la section \u201cApps\u201d, dans \u201cWeb and Mobile Apps\u201d, ajoutez une nouvelle application SAML personnalis\u00e9e. D\u00e9finissez le nom de l\u2019application, la description et l\u2019ic\u00f4ne \u00e0 votre convenance, puis cliquez sur Suivant. Prenez note du contenu du champ SSO URL , et t\u00e9l\u00e9chargez le certificat fourni. Configurez l\u2019application dans Google Admin comme suit : URL ACS : https:///saml/assert ID d\u2019entit\u00e9 : https:///saml/metadata.xml Cochez la case R\u00e9ponse sign\u00e9e. Laissez Start URL vide, et les param\u00e8tres Name ID par d\u00e9faut. Cliquez sur Suivant, et \u00e9ventuellement, sous Attributs, ajoutez deux mappages pour la population automatique des noms : Attribut de l\u2019annuaire Google First Name d\u00e9fini sur l\u2019attribut de l\u2019application FirstName Attribut de l\u2019annuaire Google Last Name d\u00e9fini sur l\u2019attribut de l\u2019application LastName Puis cliquez sur Terminer, et configurez les param\u00e8tres de Grist : GRIST_SAML_IDP_SKIP_SLO = true GRIST_SAML_SP_HOST = https:// GRIST_SAML_IDP_UNENCRYPTED = true GRIST_SAML_IDP_LOGIN = https://accounts.google.com/o/saml2/idp?idpid=xxxx (fourni par Google comme SSO URL ) GRIST_SAML_IDP_LOGOUT = https:// (puisque Google ne prend pas en charge Single Logout, renvoyez simplement l\u2019utilisateur \u00e0 la page d\u2019accueil) GRIST_SAML_IDP_CERTS = .../google.pem (fourni par Google plus t\u00f4t) GRIST_SAML_SP_KEY = .../saml.pem GRIST_SAML_SP_CERT = .../saml.crt Pour cr\u00e9er la paire de cl\u00e9s utilis\u00e9e dans GRIST_SAML_SP_KEY et GRIST_SAML_SP_CERT , suivez les m\u00eames instructions que pour Auth0 et Authentik. Note : Google ne v\u00e9rifie pas les messages SAML entrants, ils ne permettent donc pas de t\u00e9l\u00e9charger une cl\u00e9 publique \u00e0 cette fin. D\u00e9pannage # Nous nous attendons \u00e0 ce que l\u2019IdP nous fournisse name_id, un identifiant unique pour l\u2019utilisateur. Nous utilisons \u00e9galement des attributs optionnels pour le nom de l\u2019utilisateur, pour lesquels nous acceptons n\u2019importe lequel de : FirstName LastName http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname Vous devrez peut-\u00eatre ajuster les param\u00e8tres par d\u00e9faut de votre IdP pour correspondre aux attentes de Grist.","title":"SAML"},{"location":"install/saml/#saml","text":"Configuration pour SAML, utile pour les connexions d\u2019entreprise \u00e0 authentification unique (SSO). Un bon aper\u00e7u informatif de SAML est disponible sur https://www.okta.com/integrate/documentation/saml/ Note : SP est \u201cService Provider\u201d (Fournisseur de Service), dans notre cas, l\u2019application Grist. IdP est \u201cIdentity Provider\u201d (Fournisseur d\u2019Identit\u00e9), un endroit o\u00f9 les utilisateurs se connectent, par exemple Okta ou Google Apps. Nous aurons besoin d\u2019un ou plusieurs certificats de l\u2019IdP, au format PEM. Il s\u2019agit d\u2019une cl\u00e9 publique que Grist utilisera pour v\u00e9rifier que les messages de l\u2019IdP sont l\u00e9gitimes. Nous aurons besoin d\u2019une paire de cl\u00e9s priv\u00e9e et publique pour que Grist puisse communiquer avec l\u2019IdP. L\u2019IdP devra conna\u00eetre la cl\u00e9 publique de Grist pour v\u00e9rifier que les messages de Grist sont l\u00e9gitimes. Variables d\u2019environnement attendues : GRIST_SAML_SP_HOST - c\u2019est simplement l\u2019URL de base du site Grist, comme https:// (lorsque SAML est actif, il y aura une endpoint /saml/assert disponible ici pour impl\u00e9menter le protocole). GRIST_SAML_SP_KEY - chemin vers un fichier contenant notre cl\u00e9 priv\u00e9e, au format PEM. C\u2019est la cl\u00e9 priv\u00e9e de la paire de cl\u00e9s cr\u00e9\u00e9e pour que Grist l\u2019utilise avec l\u2019IdP. GRIST_SAML_SP_CERT - chemin vers un fichier contenant notre cl\u00e9 publique, au format PEM. C\u2019est la cl\u00e9 publique de la paire de cl\u00e9s cr\u00e9\u00e9e pour que Grist l\u2019utilise avec l\u2019IdP. Ce n\u2019est pas la cl\u00e9 publique/certificat de l\u2019IdP. GRIST_SAML_IDP_LOGIN - URL de connexion pour rediriger l\u2019utilisateur pour la connexion. GRIST_SAML_IDP_LOGOUT - URL de d\u00e9connexion pour rediriger l\u2019utilisateur pour la d\u00e9connexion. GRIST_SAML_IDP_SKIP_SLO - si d\u00e9fini et non vide, ne pas tenter le flux \u201cSingle Logout\u201d SAML, mais simplement rediriger vers GRIST_SAML_IDP_LOGOUT apr\u00e8s avoir effac\u00e9 la session. La possibilit\u00e9 de ce flux d\u00e9pendra de l\u2019IdP. GRIST_SAML_IDP_CERTS - liste de chemins s\u00e9par\u00e9s par des virgules pour les certificats de l\u2019IdP, au format PEM. Ce n\u2019est pas la cl\u00e9 priv\u00e9e ou publique cr\u00e9\u00e9e pour Grist. GRIST_SAML_IDP_UNENCRYPTED - si d\u00e9fini et non vide, autoriser les assertions non chiffr\u00e9es, en s\u2019appuyant sur https pour la confidentialit\u00e9.","title":"SAML"},{"location":"install/saml/#exemple-auth0","text":"Par exemple, lors de l\u2019ex\u00e9cution en local et en http, les param\u00e8tres qui fonctionnent avec l\u2019 IdP SAML Auth0 sont : GRIST_SAML_IDP_SKIP_SLO non d\u00e9fini GRIST_SAML_SP_HOST = http://localhost:8484 GRIST_SAML_IDP_UNENCRYPTED = 1 GRIST_SAML_IDP_LOGIN = https://...auth0.com/samlp/xxxx GRIST_SAML_IDP_LOGOUT = https://...auth0.com/samlp/xxxx (ce sont les m\u00eames pour Auth0) GRIST_SAML_IDP_CERTS = .../auth0.pem (t\u00e9l\u00e9charg\u00e9 selon les instructions d\u2019Auth0) GRIST_SAML_SP_KEY = .../saml.pem (cr\u00e9\u00e9) GRIST_SAML_SP_CERT = .../saml.crt (cr\u00e9\u00e9) Lorsqu\u2019il est utilis\u00e9 avec docker, assurez-vous que les fichiers de cl\u00e9 et de certificat sont accessibles dans un volume partag\u00e9. La paire cl\u00e9/certificat a \u00e9t\u00e9 cr\u00e9\u00e9e en suivant les instructions ici : Auth0 : utiliser un certificat personnalis\u00e9 pour signer les requ\u00eates Auth0 en tant que fournisseur d\u2019identit\u00e9 SAML Dans vos param\u00e8tres Auth0, assurez-vous \u00e9galement que : L\u2019URL de rappel de l\u2019application est d\u00e9finie sur https:///saml/assert .","title":"Exemple : Auth0"},{"location":"install/saml/#exemple-authentik","text":"Dans Authentik , ajoutez un fournisseur appel\u00e9 Grist avec : URL ACS : https:///saml/assert D\u00e9finir la liaison du fournisseur de services sur Post S\u00e9lectionnez ou ajoutez un certificat de signature. Vous devrez le t\u00e9l\u00e9charger pour l\u2019utiliser comme GRIST_SAML_IDP_CERTS dans la configuration de Grist. Ajoutez un certificat de v\u00e9rification. Ce sera la partie publique d\u2019une paire de cl\u00e9s que vous cr\u00e9ez pour GRIST_SAML_SP_KEY / GRIST_SAML_SP_CERT dans la configuration de Grist. Ensuite, toujours dans Authentik, ajoutez une application \u00e9galement appel\u00e9e Grist (je ne suis pas tr\u00e8s imaginatif) qui : Utilise le fournisseur Grist . A Launch URL d\u00e9fini sur https:// . Les param\u00e8tres de Grist suivent le m\u00eame sch\u00e9ma que pour Auth0. Les URL de connexion et de d\u00e9connexion avec Authentik au moment de la r\u00e9daction ressemblent \u00e0 : GRIST_SAML_IDP_LOGIN = https://...authentik.../application/saml/grist/sso/binding/redirect/ GRIST_SAML_IDP_LOGOUT = https://...authentik.../if/session-end/grist/","title":"Exemple : Authentik"},{"location":"install/saml/#exemple-google","text":"Dans Google Admin , sous la section \u201cApps\u201d, dans \u201cWeb and Mobile Apps\u201d, ajoutez une nouvelle application SAML personnalis\u00e9e. D\u00e9finissez le nom de l\u2019application, la description et l\u2019ic\u00f4ne \u00e0 votre convenance, puis cliquez sur Suivant. Prenez note du contenu du champ SSO URL , et t\u00e9l\u00e9chargez le certificat fourni. Configurez l\u2019application dans Google Admin comme suit : URL ACS : https:///saml/assert ID d\u2019entit\u00e9 : https:///saml/metadata.xml Cochez la case R\u00e9ponse sign\u00e9e. Laissez Start URL vide, et les param\u00e8tres Name ID par d\u00e9faut. Cliquez sur Suivant, et \u00e9ventuellement, sous Attributs, ajoutez deux mappages pour la population automatique des noms : Attribut de l\u2019annuaire Google First Name d\u00e9fini sur l\u2019attribut de l\u2019application FirstName Attribut de l\u2019annuaire Google Last Name d\u00e9fini sur l\u2019attribut de l\u2019application LastName Puis cliquez sur Terminer, et configurez les param\u00e8tres de Grist : GRIST_SAML_IDP_SKIP_SLO = true GRIST_SAML_SP_HOST = https:// GRIST_SAML_IDP_UNENCRYPTED = true GRIST_SAML_IDP_LOGIN = https://accounts.google.com/o/saml2/idp?idpid=xxxx (fourni par Google comme SSO URL ) GRIST_SAML_IDP_LOGOUT = https:// (puisque Google ne prend pas en charge Single Logout, renvoyez simplement l\u2019utilisateur \u00e0 la page d\u2019accueil) GRIST_SAML_IDP_CERTS = .../google.pem (fourni par Google plus t\u00f4t) GRIST_SAML_SP_KEY = .../saml.pem GRIST_SAML_SP_CERT = .../saml.crt Pour cr\u00e9er la paire de cl\u00e9s utilis\u00e9e dans GRIST_SAML_SP_KEY et GRIST_SAML_SP_CERT , suivez les m\u00eames instructions que pour Auth0 et Authentik. Note : Google ne v\u00e9rifie pas les messages SAML entrants, ils ne permettent donc pas de t\u00e9l\u00e9charger une cl\u00e9 publique \u00e0 cette fin.","title":"Exemple : Google"},{"location":"install/saml/#depannage","text":"Nous nous attendons \u00e0 ce que l\u2019IdP nous fournisse name_id, un identifiant unique pour l\u2019utilisateur. Nous utilisons \u00e9galement des attributs optionnels pour le nom de l\u2019utilisateur, pour lesquels nous acceptons n\u2019importe lequel de : FirstName LastName http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname Vous devrez peut-\u00eatre ajuster les param\u00e8tres par d\u00e9faut de votre IdP pour correspondre aux attentes de Grist.","title":"D\u00e9pannage"},{"location":"newsletters/2020-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2020 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mai 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Copier comme Mod\u00e8le. Vous souhaitez utiliser votre document soigneusement \u00e9labor\u00e9 avec toutes nouvelles donn\u00e9es ? Cliquez sur le menu \u201cPartager\u201d en haut ( ), et s\u00e9lectionnez \u201cCopier comme Mod\u00e8le\u201d 1 . La copie aura toute la structure, les formules et les mises en page, mais aucune des donn\u00e9es. Lien vers une cellule sp\u00e9cifique. S\u00e9lectionnez une cellule et appuyez sur \u2318 \u21e7 A (Mac) ou Ctrl + Shift + A (Windows). Partagez le lien copi\u00e9 pour que votre destinataire ouvre votre document \u00e0 la m\u00eame cellule s\u00e9lectionn\u00e9e. Plus d\u2019infos ici . Quoi de Neuf # Grist est constamment am\u00e9lior\u00e9. Voici quelques-unes des modifications r\u00e9centes : Les nouveaux documents Grist ont des URLs mieux pr\u00e9sent\u00e9es , incluant le titre du document. Maintenant, lorsque vous voyez un lien Grist, il est facile de se rappeler \u00e0 quel document il correspond. Les colonnes de r\u00e9f\u00e9rence offrent d\u00e9sormais une auto-compl\u00e9tion plus utile . Pour d\u00e9finir une valeur de r\u00e9f\u00e9rence, commencez \u00e0 taper, et voyez les suggestions de la table li\u00e9e class\u00e9es par meilleure correspondance. Les graphiques ont une nouvelle option \u201c\u00c9chelle Logarithmique de l\u2019Axe Y\u201d, pour afficher les donn\u00e9es sur une \u00e9chelle logarithmique , ce qui est important dans de nombreuses applications de science des donn\u00e9es. Super-utilisateur ? Si vous avez envie de bidouiller, il existe d\u00e9sormais un moyen exp\u00e9rimental d\u2019ajouter vos propres composants \u00e0 Grist. Voir Widget de page personnalis\u00e9 pour plus d\u2019infos. Grist @ New York Tech Meetup # Nous avons pr\u00e9sent\u00e9 une belle d\u00e9monstration au NY Tech Meetup en f\u00e9vrier dernier. Nous avons enfin une vid\u00e9o de notre d\u00e9mo et de la session de questions-r\u00e9ponses \u00e0 partager avec vous : https://www.youtube.com/watch?v=a2RlRGRnr9Q Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os introductives : S\u00e9rie de Vid\u00e9os Grist Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus profond\u00e9ment comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur Donner un Avis lien pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com . Apr\u00e8s la mise \u00e0 jour de juillet 2020, s\u00e9lectionnez \u201cDupliquer le Document\u201d, et cochez la case \u201cComme Mod\u00e8le\u201d dans la bo\u00eete de dialogue qui s\u2019ouvre. Voir Copier des Documents . \u21a9","title":"2020/05"},{"location":"newsletters/2020-05/#bulletin-de-mai-2020","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mai 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mai 2020"},{"location":"newsletters/2020-05/#conseils-rapides","text":"Copier comme Mod\u00e8le. Vous souhaitez utiliser votre document soigneusement \u00e9labor\u00e9 avec toutes nouvelles donn\u00e9es ? Cliquez sur le menu \u201cPartager\u201d en haut ( ), et s\u00e9lectionnez \u201cCopier comme Mod\u00e8le\u201d 1 . La copie aura toute la structure, les formules et les mises en page, mais aucune des donn\u00e9es. Lien vers une cellule sp\u00e9cifique. S\u00e9lectionnez une cellule et appuyez sur \u2318 \u21e7 A (Mac) ou Ctrl + Shift + A (Windows). Partagez le lien copi\u00e9 pour que votre destinataire ouvre votre document \u00e0 la m\u00eame cellule s\u00e9lectionn\u00e9e. Plus d\u2019infos ici .","title":"Conseils Rapides"},{"location":"newsletters/2020-05/#quoi-de-neuf","text":"Grist est constamment am\u00e9lior\u00e9. Voici quelques-unes des modifications r\u00e9centes : Les nouveaux documents Grist ont des URLs mieux pr\u00e9sent\u00e9es , incluant le titre du document. Maintenant, lorsque vous voyez un lien Grist, il est facile de se rappeler \u00e0 quel document il correspond. Les colonnes de r\u00e9f\u00e9rence offrent d\u00e9sormais une auto-compl\u00e9tion plus utile . Pour d\u00e9finir une valeur de r\u00e9f\u00e9rence, commencez \u00e0 taper, et voyez les suggestions de la table li\u00e9e class\u00e9es par meilleure correspondance. Les graphiques ont une nouvelle option \u201c\u00c9chelle Logarithmique de l\u2019Axe Y\u201d, pour afficher les donn\u00e9es sur une \u00e9chelle logarithmique , ce qui est important dans de nombreuses applications de science des donn\u00e9es. Super-utilisateur ? Si vous avez envie de bidouiller, il existe d\u00e9sormais un moyen exp\u00e9rimental d\u2019ajouter vos propres composants \u00e0 Grist. Voir Widget de page personnalis\u00e9 pour plus d\u2019infos.","title":"Quoi de Neuf"},{"location":"newsletters/2020-05/#grist-new-york-tech-meetup","text":"Nous avons pr\u00e9sent\u00e9 une belle d\u00e9monstration au NY Tech Meetup en f\u00e9vrier dernier. Nous avons enfin une vid\u00e9o de notre d\u00e9mo et de la session de questions-r\u00e9ponses \u00e0 partager avec vous : https://www.youtube.com/watch?v=a2RlRGRnr9Q","title":"Grist @ New York Tech Meetup"},{"location":"newsletters/2020-05/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os introductives : S\u00e9rie de Vid\u00e9os Grist Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus profond\u00e9ment comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur Donner un Avis lien pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com . Apr\u00e8s la mise \u00e0 jour de juillet 2020, s\u00e9lectionnez \u201cDupliquer le Document\u201d, et cochez la case \u201cComme Mod\u00e8le\u201d dans la bo\u00eete de dialogue qui s\u2019ouvre. Voir Copier des Documents . \u21a9","title":"Apprendre Grist"},{"location":"newsletters/2020-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2020 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juin 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Obtenez le Trimestre Calendaire. Si vous avez une colonne de type Date, vous pouvez en extraire des parties avec des fonctions similaires \u00e0 Excel pour ann\u00e9e , mois , et plus . Mais comment obtenir le trimestre ? Cette formule produira des valeurs comme \u201c2020 T2\u201d : \"%s T%s\" % ($MyDate.year, CEILING($MyDate.month, 3) / 3) Cr\u00e9er des Hyperliens. Pour cr\u00e9er une colonne de liens dans Grist, d\u00e9finissez le type de colonne sur Texte, et cliquez sur le bouton \u201cHyperLien\u201d sous FORMAT DE CELLULE : Maintenant, une valeur comme Grist Labs https://getgrist.com affichera un lien vers https://getgrist.com avec \u201cGrist Labs\u201d comme texte. Voir ci-dessous pour un exemple de Club de Lecture qui utilise des formules de mani\u00e8re extensive pour g\u00e9n\u00e9rer des liens utiles. Quoi de Neuf # Travaillez en toute s\u00e9curit\u00e9 sur des modifications complexes. \u00c0 mesure que votre document ou tableur prend de l\u2019importance, la facilit\u00e9 de faire des modifications peut \u00eatre \u00e9clips\u00e9e par la peur de casser quelque chose. Grist a maintenant un outil pour vous aider. Cliquez sur \u201cDupliquer le Document\u201d 1 dans le menu Partager : Vous obtiendrez une copie non enregistr\u00e9e de votre document. Vous pouvez y exp\u00e9rimenter sans craindre d\u2019affecter l\u2019original. Faites des modifications grandes ou petites, une ou plusieurs. Une fois satisfait, ouvrez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cEnregistrer la Copie\u201d et cliquez sur \u201cRemplacer l\u2019Original\u201d : Grist vous avertira si le remplacement risque d\u2019\u00e9craser des modifications r\u00e9centes dans l\u2019original. Examinez et restaurez des sauvegardes. Grist enregistre automatiquement des sauvegardes de vos documents au fur et \u00e0 mesure que vous travaillez dessus. Vous pouvez maintenant les visualiser facilement. Cliquez sur \u201cHistorique du Document\u201d dans le panneau de gauche, puis cliquez sur l\u2019onglet \u201cInstantan\u00e9s\u201d dans le panneau de droite : Vous pouvez ouvrir n\u2019importe lequel des instantan\u00e9s list\u00e9s. Vous pouvez revenir \u00e0 une ancienne version en utilisant l\u2019option \u201cRemplacer l\u2019Original\u201d 2 , ou enregistrer une ancienne version comme un nouveau document. Nouveaux Exemples # Voici quelques exemples de ce que vous pouvez faire avec Grist : Analysez les D\u00e9penses de Carte de Cr\u00e9dit : Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit. Les membres de la carte American Express peuvent utiliser le mod\u00e8le pr\u00eat \u00e0 l\u2019emploi dans l\u2019exemple. Listes de Livres avec Appairage Biblioth\u00e8que et Magasin : La gestion des liens et les formules de Grist peuvent vous aider avec votre club de lecture, en ajoutant des liens automatiques vers des biblioth\u00e8ques, des magasins, des sites de critiques et d\u2019autres r\u00e9f\u00e9rences. Les m\u00eames id\u00e9es pourraient fonctionner avec des meubles Ikea, des commandes alimentaires, tout ce que vous aimez. D\u00e9monstration d\u2019Aper\u00e7u de Grist # Int\u00e9ress\u00e9 par un aper\u00e7u des fonctionnalit\u00e9s de Grist sur un exemple r\u00e9aliste ? D\u00e9couvrez notre nouvelle vid\u00e9o de d\u00e9monstration : https://www.youtube.com/watch?v=XYZ_ZGSxU00 . Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment les diff\u00e9rentes fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner un Avis lien en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com . Apr\u00e8s la mise \u00e0 jour de juillet 2020, utilisez l\u2019option \u201cTravailler sur une Copie\u201d pour cette fonctionnalit\u00e9. Voir Copier des Documents . \u21a9 Ce menu a \u00e9t\u00e9 mis \u00e0 jour en juillet 2020, voir Sauvegardes Automatiques . \u21a9","title":"2020/06"},{"location":"newsletters/2020-06/#bulletin-de-juin-2020","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juin 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juin 2020"},{"location":"newsletters/2020-06/#conseils-rapides","text":"Obtenez le Trimestre Calendaire. Si vous avez une colonne de type Date, vous pouvez en extraire des parties avec des fonctions similaires \u00e0 Excel pour ann\u00e9e , mois , et plus . Mais comment obtenir le trimestre ? Cette formule produira des valeurs comme \u201c2020 T2\u201d : \"%s T%s\" % ($MyDate.year, CEILING($MyDate.month, 3) / 3) Cr\u00e9er des Hyperliens. Pour cr\u00e9er une colonne de liens dans Grist, d\u00e9finissez le type de colonne sur Texte, et cliquez sur le bouton \u201cHyperLien\u201d sous FORMAT DE CELLULE : Maintenant, une valeur comme Grist Labs https://getgrist.com affichera un lien vers https://getgrist.com avec \u201cGrist Labs\u201d comme texte. Voir ci-dessous pour un exemple de Club de Lecture qui utilise des formules de mani\u00e8re extensive pour g\u00e9n\u00e9rer des liens utiles.","title":"Conseils Rapides"},{"location":"newsletters/2020-06/#quoi-de-neuf","text":"Travaillez en toute s\u00e9curit\u00e9 sur des modifications complexes. \u00c0 mesure que votre document ou tableur prend de l\u2019importance, la facilit\u00e9 de faire des modifications peut \u00eatre \u00e9clips\u00e9e par la peur de casser quelque chose. Grist a maintenant un outil pour vous aider. Cliquez sur \u201cDupliquer le Document\u201d 1 dans le menu Partager : Vous obtiendrez une copie non enregistr\u00e9e de votre document. Vous pouvez y exp\u00e9rimenter sans craindre d\u2019affecter l\u2019original. Faites des modifications grandes ou petites, une ou plusieurs. Une fois satisfait, ouvrez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cEnregistrer la Copie\u201d et cliquez sur \u201cRemplacer l\u2019Original\u201d : Grist vous avertira si le remplacement risque d\u2019\u00e9craser des modifications r\u00e9centes dans l\u2019original. Examinez et restaurez des sauvegardes. Grist enregistre automatiquement des sauvegardes de vos documents au fur et \u00e0 mesure que vous travaillez dessus. Vous pouvez maintenant les visualiser facilement. Cliquez sur \u201cHistorique du Document\u201d dans le panneau de gauche, puis cliquez sur l\u2019onglet \u201cInstantan\u00e9s\u201d dans le panneau de droite : Vous pouvez ouvrir n\u2019importe lequel des instantan\u00e9s list\u00e9s. Vous pouvez revenir \u00e0 une ancienne version en utilisant l\u2019option \u201cRemplacer l\u2019Original\u201d 2 , ou enregistrer une ancienne version comme un nouveau document.","title":"Quoi de Neuf"},{"location":"newsletters/2020-06/#nouveaux-exemples","text":"Voici quelques exemples de ce que vous pouvez faire avec Grist : Analysez les D\u00e9penses de Carte de Cr\u00e9dit : Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit. Les membres de la carte American Express peuvent utiliser le mod\u00e8le pr\u00eat \u00e0 l\u2019emploi dans l\u2019exemple. Listes de Livres avec Appairage Biblioth\u00e8que et Magasin : La gestion des liens et les formules de Grist peuvent vous aider avec votre club de lecture, en ajoutant des liens automatiques vers des biblioth\u00e8ques, des magasins, des sites de critiques et d\u2019autres r\u00e9f\u00e9rences. Les m\u00eames id\u00e9es pourraient fonctionner avec des meubles Ikea, des commandes alimentaires, tout ce que vous aimez.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-06/#demonstration-dapercu-de-grist","text":"Int\u00e9ress\u00e9 par un aper\u00e7u des fonctionnalit\u00e9s de Grist sur un exemple r\u00e9aliste ? D\u00e9couvrez notre nouvelle vid\u00e9o de d\u00e9monstration : https://www.youtube.com/watch?v=XYZ_ZGSxU00 .","title":"D\u00e9monstration d’Aper\u00e7u de Grist"},{"location":"newsletters/2020-06/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment les diff\u00e9rentes fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner un Avis lien en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com . Apr\u00e8s la mise \u00e0 jour de juillet 2020, utilisez l\u2019option \u201cTravailler sur une Copie\u201d pour cette fonctionnalit\u00e9. Voir Copier des Documents . \u21a9 Ce menu a \u00e9t\u00e9 mis \u00e0 jour en juillet 2020, voir Sauvegardes Automatiques . \u21a9","title":"Apprendre Grist"},{"location":"newsletters/2020-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2020 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juillet 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Revoir la Logique du Document. Le lien \u201cVue Code\u201d dans le panneau de gauche affiche un module Python qui d\u00e9crit le mod\u00e8le de donn\u00e9es complet de votre document : toutes les tables, toutes les colonnes avec leurs types, et toutes les formules. C\u2019est un excellent aper\u00e7u de la logique qui alimente les calculs d\u2019un document. Liens pour Composer des Emails. Si vous avez une colonne comme \u201cEmail\u201d, essayez d\u2019ajouter une colonne de formule avec la formule \"mailto:\" + $Email , d\u00e9finissez son type sur Texte , et le FORMAT DE CELLULE sur HyperLink . Vous pouvez maintenant cliquer sur un lien pour composer un email \u00e0 cette adresse. Voir Nouveaux Exemples ci-dessous pour bien plus de choses que vous pouvez faire avec cela. Quoi de Neuf # Plus d\u2019 options de format de nombre . Formatage en un clic pour les montants en dollars, les pourcentages, afficher les nombres n\u00e9gatifs entre parenth\u00e8ses, et plus encore : R\u00e9tention des sauvegardes plus longue. Grist effectue des sauvegardes automatiques r\u00e9guli\u00e8res de vos documents pendant que vous travaillez dessus. Il les conserve maintenant plus longtemps, m\u00eame sur le plan gratuit. R\u00e9cup\u00e9rer ou purger des documents supprim\u00e9s. Les documents supprim\u00e9s sont d\u00e9plac\u00e9s dans la Corbeille. Il est maintenant facile de les r\u00e9cup\u00e9rer. Les documents dans la Corbeille sont supprim\u00e9s d\u00e9finitivement apr\u00e8s 30 jours, ou vous pouvez les supprimer d\u00e9finitivement vous-m\u00eame pour les purger de nos syst\u00e8mes plus t\u00f4t. Utilisez votre propre domaine. Si vous utilisez Grist pour partager des donn\u00e9es avec vos propres clients et que vous souhaitez qu\u2019elles soient servies depuis votre propre domaine, cette option est maintenant disponible en tant qu\u2019ajout au Plan \u00c9quipe . Int\u00e9gration Zapier. L\u2019 int\u00e9gration de Grist sur Zapier est maintenant disponible en version b\u00eata. Allez-y et connectez Grist \u00e0 d\u2019autres applications. Nouveaux Exemples # Voici un exemple de ce que vous pouvez faire avec Grist : Pr\u00e9parer des Emails en utilisant des Formules : Transformez des cellules en liens qui ouvrent un programme de messagerie pour composer un nouveau message, et pr\u00e9remplir ses destinataires, son sujet, et plus encore. Vous pouvez essentiellement cr\u00e9er des mod\u00e8les d\u2019email en utilisant les formules Grist. Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner un Feedback lien pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/07"},{"location":"newsletters/2020-07/#bulletin-de-juillet-2020","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juillet 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juillet 2020"},{"location":"newsletters/2020-07/#conseils-rapides","text":"Revoir la Logique du Document. Le lien \u201cVue Code\u201d dans le panneau de gauche affiche un module Python qui d\u00e9crit le mod\u00e8le de donn\u00e9es complet de votre document : toutes les tables, toutes les colonnes avec leurs types, et toutes les formules. C\u2019est un excellent aper\u00e7u de la logique qui alimente les calculs d\u2019un document. Liens pour Composer des Emails. Si vous avez une colonne comme \u201cEmail\u201d, essayez d\u2019ajouter une colonne de formule avec la formule \"mailto:\" + $Email , d\u00e9finissez son type sur Texte , et le FORMAT DE CELLULE sur HyperLink . Vous pouvez maintenant cliquer sur un lien pour composer un email \u00e0 cette adresse. Voir Nouveaux Exemples ci-dessous pour bien plus de choses que vous pouvez faire avec cela.","title":"Conseils Rapides"},{"location":"newsletters/2020-07/#quoi-de-neuf","text":"Plus d\u2019 options de format de nombre . Formatage en un clic pour les montants en dollars, les pourcentages, afficher les nombres n\u00e9gatifs entre parenth\u00e8ses, et plus encore : R\u00e9tention des sauvegardes plus longue. Grist effectue des sauvegardes automatiques r\u00e9guli\u00e8res de vos documents pendant que vous travaillez dessus. Il les conserve maintenant plus longtemps, m\u00eame sur le plan gratuit. R\u00e9cup\u00e9rer ou purger des documents supprim\u00e9s. Les documents supprim\u00e9s sont d\u00e9plac\u00e9s dans la Corbeille. Il est maintenant facile de les r\u00e9cup\u00e9rer. Les documents dans la Corbeille sont supprim\u00e9s d\u00e9finitivement apr\u00e8s 30 jours, ou vous pouvez les supprimer d\u00e9finitivement vous-m\u00eame pour les purger de nos syst\u00e8mes plus t\u00f4t. Utilisez votre propre domaine. Si vous utilisez Grist pour partager des donn\u00e9es avec vos propres clients et que vous souhaitez qu\u2019elles soient servies depuis votre propre domaine, cette option est maintenant disponible en tant qu\u2019ajout au Plan \u00c9quipe . Int\u00e9gration Zapier. L\u2019 int\u00e9gration de Grist sur Zapier est maintenant disponible en version b\u00eata. Allez-y et connectez Grist \u00e0 d\u2019autres applications.","title":"Quoi de Neuf"},{"location":"newsletters/2020-07/#nouveaux-exemples","text":"Voici un exemple de ce que vous pouvez faire avec Grist : Pr\u00e9parer des Emails en utilisant des Formules : Transformez des cellules en liens qui ouvrent un programme de messagerie pour composer un nouveau message, et pr\u00e9remplir ses destinataires, son sujet, et plus encore. Vous pouvez essentiellement cr\u00e9er des mod\u00e8les d\u2019email en utilisant les formules Grist.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-07/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner un Feedback lien pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-08/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019ao\u00fbt 2020 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Ao\u00fbt 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Conseils Rapides # D\u00e9calages de Date. Il est facile de se tromper en calculant des dates. DATEADD est un moyen simple et fiable d\u2019ajouter des ann\u00e9es, des mois, des semaines et des jours \u00e0 une date. Par exemple, pour calculer trois mois \u00e0 partir d\u2019une date sp\u00e9cifique, faites DATEADD($date, months=3) . Pour une semaine et un jour avant cela, faites DATEADD($date, months=3, weeks=-1, day=-1) . Simple! Noms de Colonnes. Parfois, il y a une tension entre choisir un nom de colonne comme une \u00e9tiquette descriptive pour expliquer de quoi il s\u2019agit, et choisir quelque chose de court et accrocheur qui soit confortable dans les formules. Vous pouvez avoir les deux! Il suffit d\u2019ouvrir les options de colonne et de d\u00e9cocher \u201c Utiliser le nom comme ID? \u201d. Ensuite, vous pouvez d\u00e9finir le nom utilis\u00e9 comme \u00e9tiquette et le nom utilis\u00e9 dans les formules s\u00e9par\u00e9ment. Et comme toujours avec Grist, si vous changez d\u2019avis plus tard, vous pouvez changer ou relier les noms et toutes vos formules se mettront \u00e0 jour automatiquement. Quoi de Neuf # Trier vos documents par date de modification. Vous pouvez maintenant choisir d\u2019ordonner vos documents de sorte que les plus r\u00e9cemment modifi\u00e9s apparaissent en premier, en utilisant la nouvelle option Par Nom / Par Date de Modification en haut \u00e0 droite des listes de documents. Lister les documents sous forme d\u2019ic\u00f4nes. Vous pouvez maintenant \u00e9galement contr\u00f4ler si les documents s\u2019affichent sous forme de grille d\u2019ic\u00f4nes ou de liste de noms, en utilisant les nouvelles ic\u00f4nes de grille et de pile en haut \u00e0 droite des listes de documents. Widgets personnalis\u00e9s r\u00e9actifs. Nous avons simplifi\u00e9 la cr\u00e9ation de Widgets Personnalis\u00e9s pour les d\u00e9veloppeurs web, offrant de nouvelles vues r\u00e9actives de vos donn\u00e9es qui se mettent \u00e0 jour automatiquement. Un d\u00e9veloppeur n\u2019a qu\u2019\u00e0 appeler grist.onRecord(s) pour s\u2019abonner \u00e0 un enregistrement ou un ensemble d\u2019enregistrements li\u00e9s au widget; apr\u00e8s cela, la pr\u00e9sentation est une question de pr\u00e9paration des ressources HTML/CSS/JS (aucune connaissance sp\u00e9cifique de Grist n\u2019est n\u00e9cessaire). L\u2019utilisateur du widget contr\u00f4le la s\u00e9lection des donn\u00e9es en utilisant le Lien de Widgets r\u00e9gulier. Nous invitons les d\u00e9veloppeurs web \u00e0 essayer de cr\u00e9er de nouveaux widgets ou visualisations, et nous serions ravis d\u2019entendre parler des r\u00e9sultats (envoyez-nous un mail \u00e0 support@getgrist.com ). Nouveaux Exemples # Voici un exemple de ce que vous pouvez faire avec Grist : Pr\u00e9paration des Factures : Pr\u00e9visualisez des factures imprimables c\u00f4te \u00e0 c\u00f4te avec vos donn\u00e9es clients et commandes. Entrez rapidement des \u00e9l\u00e9ments facturables en utilisant des formules, et voyez la facture se mettre \u00e0 jour imm\u00e9diatement comme toute autre partie d\u2019une feuille de calcul. C\u2019est aussi un exemple du type de nouvelle visualisation qui peut \u00eatre construite avec des Widgets Personnalis\u00e9s . Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions? Cliquez sur le lien Donner votre avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/08"},{"location":"newsletters/2020-08/#bulletin-daout-2020","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Ao\u00fbt 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin d’ao\u00fbt 2020"},{"location":"newsletters/2020-08/#conseils-rapides","text":"D\u00e9calages de Date. Il est facile de se tromper en calculant des dates. DATEADD est un moyen simple et fiable d\u2019ajouter des ann\u00e9es, des mois, des semaines et des jours \u00e0 une date. Par exemple, pour calculer trois mois \u00e0 partir d\u2019une date sp\u00e9cifique, faites DATEADD($date, months=3) . Pour une semaine et un jour avant cela, faites DATEADD($date, months=3, weeks=-1, day=-1) . Simple! Noms de Colonnes. Parfois, il y a une tension entre choisir un nom de colonne comme une \u00e9tiquette descriptive pour expliquer de quoi il s\u2019agit, et choisir quelque chose de court et accrocheur qui soit confortable dans les formules. Vous pouvez avoir les deux! Il suffit d\u2019ouvrir les options de colonne et de d\u00e9cocher \u201c Utiliser le nom comme ID? \u201d. Ensuite, vous pouvez d\u00e9finir le nom utilis\u00e9 comme \u00e9tiquette et le nom utilis\u00e9 dans les formules s\u00e9par\u00e9ment. Et comme toujours avec Grist, si vous changez d\u2019avis plus tard, vous pouvez changer ou relier les noms et toutes vos formules se mettront \u00e0 jour automatiquement.","title":"Conseils Rapides"},{"location":"newsletters/2020-08/#quoi-de-neuf","text":"Trier vos documents par date de modification. Vous pouvez maintenant choisir d\u2019ordonner vos documents de sorte que les plus r\u00e9cemment modifi\u00e9s apparaissent en premier, en utilisant la nouvelle option Par Nom / Par Date de Modification en haut \u00e0 droite des listes de documents. Lister les documents sous forme d\u2019ic\u00f4nes. Vous pouvez maintenant \u00e9galement contr\u00f4ler si les documents s\u2019affichent sous forme de grille d\u2019ic\u00f4nes ou de liste de noms, en utilisant les nouvelles ic\u00f4nes de grille et de pile en haut \u00e0 droite des listes de documents. Widgets personnalis\u00e9s r\u00e9actifs. Nous avons simplifi\u00e9 la cr\u00e9ation de Widgets Personnalis\u00e9s pour les d\u00e9veloppeurs web, offrant de nouvelles vues r\u00e9actives de vos donn\u00e9es qui se mettent \u00e0 jour automatiquement. Un d\u00e9veloppeur n\u2019a qu\u2019\u00e0 appeler grist.onRecord(s) pour s\u2019abonner \u00e0 un enregistrement ou un ensemble d\u2019enregistrements li\u00e9s au widget; apr\u00e8s cela, la pr\u00e9sentation est une question de pr\u00e9paration des ressources HTML/CSS/JS (aucune connaissance sp\u00e9cifique de Grist n\u2019est n\u00e9cessaire). L\u2019utilisateur du widget contr\u00f4le la s\u00e9lection des donn\u00e9es en utilisant le Lien de Widgets r\u00e9gulier. Nous invitons les d\u00e9veloppeurs web \u00e0 essayer de cr\u00e9er de nouveaux widgets ou visualisations, et nous serions ravis d\u2019entendre parler des r\u00e9sultats (envoyez-nous un mail \u00e0 support@getgrist.com ).","title":"Quoi de Neuf"},{"location":"newsletters/2020-08/#nouveaux-exemples","text":"Voici un exemple de ce que vous pouvez faire avec Grist : Pr\u00e9paration des Factures : Pr\u00e9visualisez des factures imprimables c\u00f4te \u00e0 c\u00f4te avec vos donn\u00e9es clients et commandes. Entrez rapidement des \u00e9l\u00e9ments facturables en utilisant des formules, et voyez la facture se mettre \u00e0 jour imm\u00e9diatement comme toute autre partie d\u2019une feuille de calcul. C\u2019est aussi un exemple du type de nouvelle visualisation qui peut \u00eatre construite avec des Widgets Personnalis\u00e9s .","title":"Nouveaux Exemples"},{"location":"newsletters/2020-08/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions? Cliquez sur le lien Donner votre avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-09/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Septembre 2020 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Septembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Raccourcis Clavier. Grist prend en charge de nombreux raccourcis clavier, y compris plusieurs provenant d\u2019Excel et de Google Sheets. Ils sont list\u00e9s ici , et \u00e9galement disponibles dans Grist en appuyant sur F1 ou \u2318 / (Mac) ou Ctrl + / (Windows). Colonnes R\u00e9f\u00e9renc\u00e9es. Avec le curseur n\u2019importe o\u00f9 dans une colonne de type R\u00e9f\u00e9rence (utilis\u00e9e pour stocker un pointeur vers un autre enregistrement), le panneau Options de Colonne \u00e0 droite a une section appel\u00e9e \u201cAjouter des Colonnes R\u00e9f\u00e9renc\u00e9es\u201d. Cela permet d\u2019ajouter rapidement n\u2019importe quel champ de l\u2019enregistrement li\u00e9. Si vous appuyez sur Entr\u00e9e sur la colonne ajout\u00e9e, vous remarquerez qu\u2019il s\u2019agit simplement d\u2019une colonne de formule, telle que $Contact.Email . Quoi de Neuf # Partage Public. Vous pouvez d\u00e9sormais partager vos documents publiquement. Dans le menu \u201cPartager\u201d ( ) en haut, s\u00e9lectionnez \u201cG\u00e9rer les Utilisateurs\u201d. Ensuite, basculez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cAcc\u00e8s Public\u201d sur \u201cActiv\u00e9\u201d: Une fois que vous confirmez le changement, toute personne ayant le lien vers votre document pourra le consulter. Ils n\u2019ont m\u00eame pas besoin d\u2019avoir un compte Grist. Le bouton \u201cCopier le Lien\u201d est pratique pour copier le lien dans le presse-papiers pour le coller dans un email, un tweet, ou ailleurs. Vous pouvez \u00e9galement permettre \u00e0 toute personne ayant le lien vers votre document de le modifier : il suffit de changer le r\u00f4le dans la ligne Acc\u00e8s Public en \u00c9diteur. Notez que cela permet \u00e0 n\u2019importe qui avec le lien de modifier absolument tout dans votre document, y compris de supprimer toutes les donn\u00e9es. Les instantan\u00e9s dans l\u2019 Historique du Document devraient aider en cas de probl\u00e8me. Suggestions de Formules Am\u00e9lior\u00e9es. Lors de la saisie de formules, Grist est d\u00e9sormais plus utile en sugg\u00e9rant des fonctions courantes, en incluant leurs param\u00e8tres, et un lien vers la documentation. Nouveaux Exemples # Voici un exemple de ce que vous pouvez faire avec Grist : Suivi de la Paie : Ce mod\u00e8le est pratique pour les petites entreprises, en particulier celles avec des employ\u00e9s \u00e0 temps partiel. Grist peut vous aider \u00e0 suivre les heures de travail, les taux et les r\u00f4les des employ\u00e9s, et \u00e0 r\u00e9duire les erreurs avec des r\u00e9sum\u00e9s de paie \u00e0 jour et des historiques d\u00e9taill\u00e9s des taux et des heures. Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Questions ou suggestions ? Cliquez sur le lien Donner votre Avis en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/09"},{"location":"newsletters/2020-09/#bulletin-de-septembre-2020","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Septembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Septembre 2020"},{"location":"newsletters/2020-09/#conseils-rapides","text":"Raccourcis Clavier. Grist prend en charge de nombreux raccourcis clavier, y compris plusieurs provenant d\u2019Excel et de Google Sheets. Ils sont list\u00e9s ici , et \u00e9galement disponibles dans Grist en appuyant sur F1 ou \u2318 / (Mac) ou Ctrl + / (Windows). Colonnes R\u00e9f\u00e9renc\u00e9es. Avec le curseur n\u2019importe o\u00f9 dans une colonne de type R\u00e9f\u00e9rence (utilis\u00e9e pour stocker un pointeur vers un autre enregistrement), le panneau Options de Colonne \u00e0 droite a une section appel\u00e9e \u201cAjouter des Colonnes R\u00e9f\u00e9renc\u00e9es\u201d. Cela permet d\u2019ajouter rapidement n\u2019importe quel champ de l\u2019enregistrement li\u00e9. Si vous appuyez sur Entr\u00e9e sur la colonne ajout\u00e9e, vous remarquerez qu\u2019il s\u2019agit simplement d\u2019une colonne de formule, telle que $Contact.Email .","title":"Conseils Rapides"},{"location":"newsletters/2020-09/#quoi-de-neuf","text":"Partage Public. Vous pouvez d\u00e9sormais partager vos documents publiquement. Dans le menu \u201cPartager\u201d ( ) en haut, s\u00e9lectionnez \u201cG\u00e9rer les Utilisateurs\u201d. Ensuite, basculez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cAcc\u00e8s Public\u201d sur \u201cActiv\u00e9\u201d: Une fois que vous confirmez le changement, toute personne ayant le lien vers votre document pourra le consulter. Ils n\u2019ont m\u00eame pas besoin d\u2019avoir un compte Grist. Le bouton \u201cCopier le Lien\u201d est pratique pour copier le lien dans le presse-papiers pour le coller dans un email, un tweet, ou ailleurs. Vous pouvez \u00e9galement permettre \u00e0 toute personne ayant le lien vers votre document de le modifier : il suffit de changer le r\u00f4le dans la ligne Acc\u00e8s Public en \u00c9diteur. Notez que cela permet \u00e0 n\u2019importe qui avec le lien de modifier absolument tout dans votre document, y compris de supprimer toutes les donn\u00e9es. Les instantan\u00e9s dans l\u2019 Historique du Document devraient aider en cas de probl\u00e8me. Suggestions de Formules Am\u00e9lior\u00e9es. Lors de la saisie de formules, Grist est d\u00e9sormais plus utile en sugg\u00e9rant des fonctions courantes, en incluant leurs param\u00e8tres, et un lien vers la documentation.","title":"Quoi de Neuf"},{"location":"newsletters/2020-09/#nouveaux-exemples","text":"Voici un exemple de ce que vous pouvez faire avec Grist : Suivi de la Paie : Ce mod\u00e8le est pratique pour les petites entreprises, en particulier celles avec des employ\u00e9s \u00e0 temps partiel. Grist peut vous aider \u00e0 suivre les heures de travail, les taux et les r\u00f4les des employ\u00e9s, et \u00e0 r\u00e9duire les erreurs avec des r\u00e9sum\u00e9s de paie \u00e0 jour et des historiques d\u00e9taill\u00e9s des taux et des heures.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-09/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Questions ou suggestions ? Cliquez sur le lien Donner votre Avis en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-10/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Octobre 2020 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Octobre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Remplir un Intervalle. Pour remplir un intervalle de cellules avec la m\u00eame valeur, entrez la valeur dans la cellule du haut, puis s\u00e9lectionnez l\u2019intervalle en dessous en commen\u00e7ant par cette cellule (ce que vous pouvez faire en faisant glisser la souris, ou en Shift -cliquant sur la cellule du bas), puis appuyez sur Ctrl + D (Windows) ou \u2318 D (Mac). Souvenez-vous de \u201cD\u201d pour remplir D essous. Les raccourcis habituels Copier-Coller fonctionnent aussi \u2013 Ctrl + C Ctrl + V (Windows) ou \u2318 C \u2318 V (Mac). Coller une valeur dans un intervalle plus grand remplira l\u2019intervalle avec plusieurs copies de la valeur. Expressions Conditionnelles. Si vous avez une formule comme $Birthday.year , vous constaterez que lorsque la colonne Birthday est vide, la formule affiche une erreur. Il est facile de l\u2019\u00e9viter en utilisant les expressions conditionnelles de Python : $Birthday.year if $Birthday else None La m\u00eame id\u00e9e peut aider dans d\u2019autres situations, par exemple pour \u00e9viter une ZeroDivisionError : $Total / $Count if $Count else 0 Quoi de Neuf # Impression. Vous pouvez maintenant facilement imprimer n\u2019importe quelle vue sur votre \u00e9cran, qu\u2019il s\u2019agisse d\u2019une table de donn\u00e9es, d\u2019une fiche, ou d\u2019une vue personnalis\u00e9e. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points en haut de la vue, et s\u00e9lectionnez \u201cImprimer la Vue\u201d : L\u2019impression fonctionne \u00e9galement pour des vues \u00e0 usage sp\u00e9cial telles que Factures ou \u00c9tiquettes d\u2019Envoi (voir ci-dessous). B\u00eata Open Source # Nous sommes ravis d\u2019annoncer que nous rendons Grist open-source ! La version open-source doit \u00eatre consid\u00e9r\u00e9e comme en B\u00eata pour le moment, mais les d\u00e9veloppeurs enthousiastes sont les bienvenus pour la d\u00e9couvrir : https://github.com/gristlabs/grist-core . Le service s\u00e9curis\u00e9 g\u00e9r\u00e9 que vous connaissez et aimez reste inchang\u00e9, et sera d\u2019autant plus fort gr\u00e2ce \u00e0 l\u2019engagement avec la communaut\u00e9 open-source. Placer notre code dans le domaine public apporte \u00e9galement une confiance accrue dans la qualit\u00e9 du code et dans la disponibilit\u00e9 \u00e0 long terme de Grist. En savoir plus sur Pourquoi Open Source . Nouveaux Exemples # Imprimer des \u00c9tiquettes d\u2019Envoi . Cette vue personnalis\u00e9e prend en charge les tailles d\u2019\u00e9tiquettes populaires et facilite la cr\u00e9ation d\u2019\u00e9tiquettes imprimables et leur disponibilit\u00e9 en un clic. C\u2019est un autre exemple de l\u2019extensibilit\u00e9 de Grist. Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner votre Avis lien en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/10"},{"location":"newsletters/2020-10/#bulletin-doctobre-2020","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Octobre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’Octobre 2020"},{"location":"newsletters/2020-10/#conseils-rapides","text":"Remplir un Intervalle. Pour remplir un intervalle de cellules avec la m\u00eame valeur, entrez la valeur dans la cellule du haut, puis s\u00e9lectionnez l\u2019intervalle en dessous en commen\u00e7ant par cette cellule (ce que vous pouvez faire en faisant glisser la souris, ou en Shift -cliquant sur la cellule du bas), puis appuyez sur Ctrl + D (Windows) ou \u2318 D (Mac). Souvenez-vous de \u201cD\u201d pour remplir D essous. Les raccourcis habituels Copier-Coller fonctionnent aussi \u2013 Ctrl + C Ctrl + V (Windows) ou \u2318 C \u2318 V (Mac). Coller une valeur dans un intervalle plus grand remplira l\u2019intervalle avec plusieurs copies de la valeur. Expressions Conditionnelles. Si vous avez une formule comme $Birthday.year , vous constaterez que lorsque la colonne Birthday est vide, la formule affiche une erreur. Il est facile de l\u2019\u00e9viter en utilisant les expressions conditionnelles de Python : $Birthday.year if $Birthday else None La m\u00eame id\u00e9e peut aider dans d\u2019autres situations, par exemple pour \u00e9viter une ZeroDivisionError : $Total / $Count if $Count else 0","title":"Conseils Rapides"},{"location":"newsletters/2020-10/#quoi-de-neuf","text":"Impression. Vous pouvez maintenant facilement imprimer n\u2019importe quelle vue sur votre \u00e9cran, qu\u2019il s\u2019agisse d\u2019une table de donn\u00e9es, d\u2019une fiche, ou d\u2019une vue personnalis\u00e9e. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points en haut de la vue, et s\u00e9lectionnez \u201cImprimer la Vue\u201d : L\u2019impression fonctionne \u00e9galement pour des vues \u00e0 usage sp\u00e9cial telles que Factures ou \u00c9tiquettes d\u2019Envoi (voir ci-dessous).","title":"Quoi de Neuf"},{"location":"newsletters/2020-10/#beta-open-source","text":"Nous sommes ravis d\u2019annoncer que nous rendons Grist open-source ! La version open-source doit \u00eatre consid\u00e9r\u00e9e comme en B\u00eata pour le moment, mais les d\u00e9veloppeurs enthousiastes sont les bienvenus pour la d\u00e9couvrir : https://github.com/gristlabs/grist-core . Le service s\u00e9curis\u00e9 g\u00e9r\u00e9 que vous connaissez et aimez reste inchang\u00e9, et sera d\u2019autant plus fort gr\u00e2ce \u00e0 l\u2019engagement avec la communaut\u00e9 open-source. Placer notre code dans le domaine public apporte \u00e9galement une confiance accrue dans la qualit\u00e9 du code et dans la disponibilit\u00e9 \u00e0 long terme de Grist. En savoir plus sur Pourquoi Open Source .","title":"B\u00eata Open Source"},{"location":"newsletters/2020-10/#nouveaux-exemples","text":"Imprimer des \u00c9tiquettes d\u2019Envoi . Cette vue personnalis\u00e9e prend en charge les tailles d\u2019\u00e9tiquettes populaires et facilite la cr\u00e9ation d\u2019\u00e9tiquettes imprimables et leur disponibilit\u00e9 en un clic. C\u2019est un autre exemple de l\u2019extensibilit\u00e9 de Grist.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-10/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner votre Avis lien en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-11/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Novembre 2020 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Novembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Annonce Open Source # Nous sommes heureux d\u2019annoncer la version b\u00eata de la version open source de Grist ! En tant que feuille de calcul moderne et puissante, Grist s\u2019int\u00e8gre bien dans l\u2019\u00e9cosyst\u00e8me open source et est aussi conviviale pour les d\u00e9veloppeurs hackers que pour les utilisateurs hackers. Rejoignez la discussion sur HackerNews . Lisez l\u2019annonce . Cela int\u00e9ressera les utilisateurs techniquement avertis qui souhaitent \u00e9tendre Grist, ou ceux ayant des exigences inhabituelles. Pendant ce temps, le service que vous connaissez et aimez reste l\u2019option la mieux support\u00e9e et la plus rentable, et b\u00e9n\u00e9ficiera de la confiance accrue dans le code source de Grist. Conseils Rapides # Ajouter un Enregistrement. Certains des raccourcis les plus simples sont les plus utiles. Pour ajouter un enregistrement, appuyez sur Ctrl + = (Windows) ou \u2318 = (Mac). Appuyez sur Shift en m\u00eame temps pour ins\u00e9rer l\u2019enregistrement au-dessus du curseur plut\u00f4t qu\u2019en dessous. Cr\u00e9er un Identifiant Unique. Disons que vous souhaitez r\u00e9f\u00e9rencer des enregistrements dans une table, mais que vous n\u2019avez pas de colonne qui identifie chaque enregistrement de mani\u00e8re unique. Peut-\u00eatre avez-vous des personnes avec First_Name et Last_Name , ou des sessions avec Program_Name et Date . Pour utiliser ces tables comme cible d\u2019une colonne de R\u00e9f\u00e9rence, vous aurez besoin d\u2019un identifiant unique. Vous pouvez en cr\u00e9er un en utilisant une formule qui assemble les champs identifiant un enregistrement de mani\u00e8re unique. Par exemple, cr\u00e9ez une colonne Full_Name avec la formule $Last_Name + \", \" + $First_Name ou une colonne Session_Name avec la formule \"[%s] %s\" % ($Date, $Program_Name) Cette derni\u00e8re est une syntaxe Python pour formater des cha\u00eenes : chaque occurrence de %s dans la cha\u00eene entre guillemets est remplac\u00e9e par une valeur de la liste entre parenth\u00e8ses. Quoi de Neuf # Am\u00e9lioration des Pi\u00e8ces Jointes. La pr\u00e9visualisation des pi\u00e8ces jointes a \u00e9t\u00e9 grandement am\u00e9lior\u00e9e et prend en charge l\u2019affichage des fichiers PDF, vid\u00e9o et audio. Double-cliquez simplement sur une cellule avec des pi\u00e8ces jointes pour pr\u00e9visualiser son contenu : Voir les Diff\u00e9rences. Vous pouvez maintenant voir les diff\u00e9rences entre une copie d\u2019un document que vous faites en utilisant \u201cTravailler sur une copie\u201d et l\u2019original, ainsi que ce qui a chang\u00e9 depuis une sauvegarde dans l\u2019historique du document. Trouvez l\u2019\u00e9l\u00e9ment de menu \u201cComparer\u201d dans le menu Partager : Cette fonctionnalit\u00e9 est exp\u00e9rimentale pour le moment, mais est d\u00e9j\u00e0 assez utile : Cela prend en charge le flux de travail de tester des modifications , qui devrait \u00eatre familier aux utilisateurs de syst\u00e8mes de contr\u00f4le de version tels que Git. L\u2019un de ses avantages est de permettre aux utilisateurs en lecture seule de proposer des modifications, m\u00eame s\u2019ils ne peuvent pas modifier le document directement. Nouveaux Exemples # Chasse au Tr\u00e9sor : Encore mieux que d\u2019utiliser Grist pour le travail, c\u2019est d\u2019utiliser Grist pour le plaisir ! D\u00e9couvrez ce mod\u00e8le qui vous aide \u00e0 planifier une chasse au tr\u00e9sor sans perdre le fil. Conspirez avec des parents ou des amis en ligne pour cr\u00e9er une piste d\u2019indices, puis regardez et riez pendant que le reste de votre foyer se d\u00e9bat pour la suivre. Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour acqu\u00e9rir une compr\u00e9hension plus approfondie de la mani\u00e8re dont diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/11"},{"location":"newsletters/2020-11/#bulletin-de-novembre-2020","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Novembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Novembre 2020"},{"location":"newsletters/2020-11/#annonce-open-source","text":"Nous sommes heureux d\u2019annoncer la version b\u00eata de la version open source de Grist ! En tant que feuille de calcul moderne et puissante, Grist s\u2019int\u00e8gre bien dans l\u2019\u00e9cosyst\u00e8me open source et est aussi conviviale pour les d\u00e9veloppeurs hackers que pour les utilisateurs hackers. Rejoignez la discussion sur HackerNews . Lisez l\u2019annonce . Cela int\u00e9ressera les utilisateurs techniquement avertis qui souhaitent \u00e9tendre Grist, ou ceux ayant des exigences inhabituelles. Pendant ce temps, le service que vous connaissez et aimez reste l\u2019option la mieux support\u00e9e et la plus rentable, et b\u00e9n\u00e9ficiera de la confiance accrue dans le code source de Grist.","title":"Annonce Open Source"},{"location":"newsletters/2020-11/#conseils-rapides","text":"Ajouter un Enregistrement. Certains des raccourcis les plus simples sont les plus utiles. Pour ajouter un enregistrement, appuyez sur Ctrl + = (Windows) ou \u2318 = (Mac). Appuyez sur Shift en m\u00eame temps pour ins\u00e9rer l\u2019enregistrement au-dessus du curseur plut\u00f4t qu\u2019en dessous. Cr\u00e9er un Identifiant Unique. Disons que vous souhaitez r\u00e9f\u00e9rencer des enregistrements dans une table, mais que vous n\u2019avez pas de colonne qui identifie chaque enregistrement de mani\u00e8re unique. Peut-\u00eatre avez-vous des personnes avec First_Name et Last_Name , ou des sessions avec Program_Name et Date . Pour utiliser ces tables comme cible d\u2019une colonne de R\u00e9f\u00e9rence, vous aurez besoin d\u2019un identifiant unique. Vous pouvez en cr\u00e9er un en utilisant une formule qui assemble les champs identifiant un enregistrement de mani\u00e8re unique. Par exemple, cr\u00e9ez une colonne Full_Name avec la formule $Last_Name + \", \" + $First_Name ou une colonne Session_Name avec la formule \"[%s] %s\" % ($Date, $Program_Name) Cette derni\u00e8re est une syntaxe Python pour formater des cha\u00eenes : chaque occurrence de %s dans la cha\u00eene entre guillemets est remplac\u00e9e par une valeur de la liste entre parenth\u00e8ses.","title":"Conseils Rapides"},{"location":"newsletters/2020-11/#quoi-de-neuf","text":"Am\u00e9lioration des Pi\u00e8ces Jointes. La pr\u00e9visualisation des pi\u00e8ces jointes a \u00e9t\u00e9 grandement am\u00e9lior\u00e9e et prend en charge l\u2019affichage des fichiers PDF, vid\u00e9o et audio. Double-cliquez simplement sur une cellule avec des pi\u00e8ces jointes pour pr\u00e9visualiser son contenu : Voir les Diff\u00e9rences. Vous pouvez maintenant voir les diff\u00e9rences entre une copie d\u2019un document que vous faites en utilisant \u201cTravailler sur une copie\u201d et l\u2019original, ainsi que ce qui a chang\u00e9 depuis une sauvegarde dans l\u2019historique du document. Trouvez l\u2019\u00e9l\u00e9ment de menu \u201cComparer\u201d dans le menu Partager : Cette fonctionnalit\u00e9 est exp\u00e9rimentale pour le moment, mais est d\u00e9j\u00e0 assez utile : Cela prend en charge le flux de travail de tester des modifications , qui devrait \u00eatre familier aux utilisateurs de syst\u00e8mes de contr\u00f4le de version tels que Git. L\u2019un de ses avantages est de permettre aux utilisateurs en lecture seule de proposer des modifications, m\u00eame s\u2019ils ne peuvent pas modifier le document directement.","title":"Quoi de Neuf"},{"location":"newsletters/2020-11/#nouveaux-exemples","text":"Chasse au Tr\u00e9sor : Encore mieux que d\u2019utiliser Grist pour le travail, c\u2019est d\u2019utiliser Grist pour le plaisir ! D\u00e9couvrez ce mod\u00e8le qui vous aide \u00e0 planifier une chasse au tr\u00e9sor sans perdre le fil. Conspirez avec des parents ou des amis en ligne pour cr\u00e9er une piste d\u2019indices, puis regardez et riez pendant que le reste de votre foyer se d\u00e9bat pour la suivre.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-11/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour acqu\u00e9rir une compr\u00e9hension plus approfondie de la mani\u00e8re dont diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-12/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de D\u00e9cembre 2020 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill D\u00e9cembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Quoi de Neuf # Vous voulez v\u00e9rifier comment votre document a r\u00e9cemment chang\u00e9 ? Il suffit d\u2019appuyer sur le bouton Historique du Document en bas \u00e0 gauche de votre document, de choisir un instantan\u00e9 \u00e0 droite, de cliquer sur le symbole \u00e0 trois points ( ) \u00e0 c\u00f4t\u00e9, et de s\u00e9lectionner l\u2019une des nouvelles options Comparer \u00e0 Pr\u00e9c\u00e9dent ou Comparer \u00e0 Actuel . \u00c0 Venir # Grist vous a apport\u00e9 beaucoup de nouvelles fonctionnalit\u00e9s en 2020, et il semble que 2021 sera une autre ann\u00e9e exceptionnelle. Une grande fonctionnalit\u00e9 que nous attendons avec impatience est le contr\u00f4le d\u2019acc\u00e8s granulaire, o\u00f9 vous pourrez d\u00e9terminer qui peut voir (ou \u00e9diter) quelles parties de votre document au niveau de la table, de la colonne et de la ligne. Plusieurs d\u2019entre vous l\u2019ont demand\u00e9 de diff\u00e9rentes mani\u00e8res, et nous sommes heureux d\u2019avoir une solution en main qui couvrira de nombreux cas d\u2019utilisation. Si vous \u00eates int\u00e9ress\u00e9 par un acc\u00e8s anticip\u00e9, faites-le nous savoir ! Nouveaux Exemples # Afficher une Carte . Ce widget personnalis\u00e9 affiche une liste de lieux sous forme de carte g\u00e9ographique. Donc, si vous faites une liste des endroits o\u00f9 vous voulez aller une fois que les voyages seront \u00e0 nouveau possibles, vous pouvez les disposer et commencer \u00e0 faire des plans\u2026 Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus profond\u00e9ment comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/12"},{"location":"newsletters/2020-12/#bulletin-de-decembre-2020","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill D\u00e9cembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin de D\u00e9cembre 2020"},{"location":"newsletters/2020-12/#quoi-de-neuf","text":"Vous voulez v\u00e9rifier comment votre document a r\u00e9cemment chang\u00e9 ? Il suffit d\u2019appuyer sur le bouton Historique du Document en bas \u00e0 gauche de votre document, de choisir un instantan\u00e9 \u00e0 droite, de cliquer sur le symbole \u00e0 trois points ( ) \u00e0 c\u00f4t\u00e9, et de s\u00e9lectionner l\u2019une des nouvelles options Comparer \u00e0 Pr\u00e9c\u00e9dent ou Comparer \u00e0 Actuel .","title":"Quoi de Neuf"},{"location":"newsletters/2020-12/#a-venir","text":"Grist vous a apport\u00e9 beaucoup de nouvelles fonctionnalit\u00e9s en 2020, et il semble que 2021 sera une autre ann\u00e9e exceptionnelle. Une grande fonctionnalit\u00e9 que nous attendons avec impatience est le contr\u00f4le d\u2019acc\u00e8s granulaire, o\u00f9 vous pourrez d\u00e9terminer qui peut voir (ou \u00e9diter) quelles parties de votre document au niveau de la table, de la colonne et de la ligne. Plusieurs d\u2019entre vous l\u2019ont demand\u00e9 de diff\u00e9rentes mani\u00e8res, et nous sommes heureux d\u2019avoir une solution en main qui couvrira de nombreux cas d\u2019utilisation. Si vous \u00eates int\u00e9ress\u00e9 par un acc\u00e8s anticip\u00e9, faites-le nous savoir !","title":"\u00c0 Venir"},{"location":"newsletters/2020-12/#nouveaux-exemples","text":"Afficher une Carte . Ce widget personnalis\u00e9 affiche une liste de lieux sous forme de carte g\u00e9ographique. Donc, si vous faites une liste des endroits o\u00f9 vous voulez aller une fois que les voyages seront \u00e0 nouveau possibles, vous pouvez les disposer et commencer \u00e0 faire des plans\u2026","title":"Nouveaux Exemples"},{"location":"newsletters/2020-12/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus profond\u00e9ment comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2021-01/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Janvier 2021 # /* restaurer certains d\u00e9fauts mal surcharg\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; margin-bottom: -32px; display: inline-block; width: 80px; height: 128px; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } .center { text-align: center; } Grist pour le Moulin Janvier 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Entrer des Formules. Pour entrer une formule dans Grist, appuyez simplement sur le signe \u00e9gal ( = ) sur le clavier. Pour modifier une formule existante, appuyez sur Entr\u00e9e . Contrairement \u00e0 une feuille de calcul typique, une formule Grist s\u2019applique \u00e0 toute la colonne, et vous pouvez modifier cette formule unique via n\u2019importe laquelle des cellules de la colonne. En savoir plus sur les formules . Utiliser le S\u00e9lecteur de Date. Si vous convertissez une colonne en type Date, vous pourrez entrer des dates en utilisant l\u2019interface de s\u00e9lection de date. Pour convertir une colonne, ouvrez le panneau \u201cColonne\u201d \u00e0 droite, et s\u00e9lectionnez \u201cDate\u201d sous Type de Colonne : Il existe \u00e9galement des options pour formater les dates ! Voir ici pour plus d\u2019informations . Nouvel Exemple # Dans notre article Gestion des T\u00e2ches , nous partageons un document similaire \u00e0 celui que nous utilisons en interne chez Grist Labs pour g\u00e9rer notre travail. Ce document simple fonctionne mieux pour nous que n\u2019importe quel logiciel personnalis\u00e9, gr\u00e2ce \u00e0 la combinaison de la liaison de donn\u00e9es, des menus d\u00e9roulants pour attribuer des t\u00e2ches, du copier-coller facile lorsque n\u00e9cessaire, et de la collaboration en direct. Et il fonctionne tout aussi bien dans un environnement de travail enti\u00e8rement \u00e0 distance, lorsque toutes nos r\u00e9unions se font par vid\u00e9o. Trouver un Consultant, Devenir un Consultant # Obtenez de l\u2019aide pour la construction. De nombreuses entreprises ont des donn\u00e9es complexes. N\u2019h\u00e9sitez pas \u00e0 nous contacter pour obtenir de l\u2019aide pour la construction de votre base de donn\u00e9es. Une bonne fa\u00e7on est de nous envoyer un email \u00e0 support@getgrist.com avec une description de ce que vous souhaitez pour votre base de donn\u00e9es (peut-\u00eatre m\u00eame esquisser quelques \u00e9crans sur papier et envoyer des photos). Ensuite, planifiez un appel . Souvent, cela suffit pour d\u00e9marrer et continuer par vous-m\u00eame. Pour des projets plus importants, ou des int\u00e9grations personnalis\u00e9es, nous pouvons recommander un consultant avec qui travailler. Aidez les autres ! \u00cates-vous un freelance ? Aimez-vous construire dans Grist et organiser des donn\u00e9es ? Nous serions ravis de vous soutenir et de vous ajouter \u00e0 notre liste de consultants Grist ind\u00e9pendants. Veuillez remplir ce formulaire d\u2019int\u00e9r\u00eat : s\u2019inscrire pour devenir consultant Grist . Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis en bas \u00e0 gauche de l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2021/01"},{"location":"newsletters/2021-01/#bulletin-de-janvier-2021","text":"/* restaurer certains d\u00e9fauts mal surcharg\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; margin-bottom: -32px; display: inline-block; width: 80px; height: 128px; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } .center { text-align: center; } Grist pour le Moulin Janvier 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Janvier 2021"},{"location":"newsletters/2021-01/#conseils-rapides","text":"Entrer des Formules. Pour entrer une formule dans Grist, appuyez simplement sur le signe \u00e9gal ( = ) sur le clavier. Pour modifier une formule existante, appuyez sur Entr\u00e9e . Contrairement \u00e0 une feuille de calcul typique, une formule Grist s\u2019applique \u00e0 toute la colonne, et vous pouvez modifier cette formule unique via n\u2019importe laquelle des cellules de la colonne. En savoir plus sur les formules . Utiliser le S\u00e9lecteur de Date. Si vous convertissez une colonne en type Date, vous pourrez entrer des dates en utilisant l\u2019interface de s\u00e9lection de date. Pour convertir une colonne, ouvrez le panneau \u201cColonne\u201d \u00e0 droite, et s\u00e9lectionnez \u201cDate\u201d sous Type de Colonne : Il existe \u00e9galement des options pour formater les dates ! Voir ici pour plus d\u2019informations .","title":"Conseils Rapides"},{"location":"newsletters/2021-01/#nouvel-exemple","text":"Dans notre article Gestion des T\u00e2ches , nous partageons un document similaire \u00e0 celui que nous utilisons en interne chez Grist Labs pour g\u00e9rer notre travail. Ce document simple fonctionne mieux pour nous que n\u2019importe quel logiciel personnalis\u00e9, gr\u00e2ce \u00e0 la combinaison de la liaison de donn\u00e9es, des menus d\u00e9roulants pour attribuer des t\u00e2ches, du copier-coller facile lorsque n\u00e9cessaire, et de la collaboration en direct. Et il fonctionne tout aussi bien dans un environnement de travail enti\u00e8rement \u00e0 distance, lorsque toutes nos r\u00e9unions se font par vid\u00e9o.","title":"Nouvel Exemple"},{"location":"newsletters/2021-01/#trouver-un-consultant-devenir-un-consultant","text":"Obtenez de l\u2019aide pour la construction. De nombreuses entreprises ont des donn\u00e9es complexes. N\u2019h\u00e9sitez pas \u00e0 nous contacter pour obtenir de l\u2019aide pour la construction de votre base de donn\u00e9es. Une bonne fa\u00e7on est de nous envoyer un email \u00e0 support@getgrist.com avec une description de ce que vous souhaitez pour votre base de donn\u00e9es (peut-\u00eatre m\u00eame esquisser quelques \u00e9crans sur papier et envoyer des photos). Ensuite, planifiez un appel . Souvent, cela suffit pour d\u00e9marrer et continuer par vous-m\u00eame. Pour des projets plus importants, ou des int\u00e9grations personnalis\u00e9es, nous pouvons recommander un consultant avec qui travailler. Aidez les autres ! \u00cates-vous un freelance ? Aimez-vous construire dans Grist et organiser des donn\u00e9es ? Nous serions ravis de vous soutenir et de vous ajouter \u00e0 notre liste de consultants Grist ind\u00e9pendants. Veuillez remplir ce formulaire d\u2019int\u00e9r\u00eat : s\u2019inscrire pour devenir consultant Grist .","title":"Trouver un Consultant, Devenir un Consultant"},{"location":"newsletters/2021-01/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis en bas \u00e0 gauche de l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2021-02/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de F\u00e9vrier 2021 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } .center { text-align: center; } Grist for the Mill F\u00e9vrier 2021 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Conseils Rapides # Totaux. Pour calculer les totaux d\u2019une colonne, les utilisateurs de tableurs ajoutent souvent une formule \u00e0 la derni\u00e8re ligne de leur table. Dans Grist, chaque ligne est un enregistrement de base de donn\u00e9es, y compris la derni\u00e8re ligne. Mais les totaux sont certainement disponibles ! Au lieu d\u2019ajouter une ligne pour les totaux, ajoutez une table de r\u00e9sum\u00e9 d\u2019une ligne. Cliquez sur le bouton \u201cAjouter Nouveau\u201d, et s\u00e9lectionnez \u201cAjouter Vue \u00e0 la Page\u201d. Dans la bo\u00eete de dialogue qui s\u2019ouvre, cliquez sur l\u2019ic\u00f4ne de sommation ( ) \u00e0 c\u00f4t\u00e9 de la table pour laquelle vous souhaitez obtenir des totaux : Cliquez sur \u201cAjouter \u00e0 la Page\u201d, et vous verrez un r\u00e9sum\u00e9 d\u2019une ligne de votre table. Utilisez la poign\u00e9e de d\u00e9placement juste \u00e0 gauche du titre pour le d\u00e9placer sous votre table (l\u00e0 o\u00f9 vous attendez normalement les totaux). Grist cr\u00e9e automatiquement des sommes de toutes les colonnes num\u00e9riques. Vous pouvez supprimer celles dont vous n\u2019avez pas besoin, en ajouter de nouvelles, ou modifier celles pour lesquelles vous avez besoin de quelque chose d\u2019autre qu\u2019une somme (peut-\u00eatre AVERAGE , MAX , ou un calcul Python enti\u00e8rement personnalis\u00e9). Lisez Tables de r\u00e9sum\u00e9 pour en savoir plus sur les tables de r\u00e9sum\u00e9 et leurs nombreuses utilisations. Partage en Temps R\u00e9el. M\u00eame avec le plan gratuit, vous pouvez partager un document et collaborer dessus. Tout changement que vous ou un autre \u00e9diteur effectuez appara\u00eetra imm\u00e9diatement sur l\u2019\u00e9cran de l\u2019autre personne. Pour partager un document, cliquez sur l\u2019ic\u00f4ne de partage ( ), et s\u00e9lectionnez \u201cG\u00e9rer les Utilisateurs\u201d. Dans la bo\u00eete de dialogue qui s\u2019ouvre, tapez l\u2019adresse e-mail de la personne \u00e0 inviter. Changez son r\u00f4le de Lecteur \u00e0 \u00c9diteur si vous souhaitez lui donner la permission de modifier. Ensuite, cliquez sur Confirmer. Votre collaborateur a maintenant acc\u00e8s \u00e0 votre document, et Grist lui enverra un e-mail avec un lien vers celui-ci. En savoir plus sur Partage . Quoi de Neuf # Le support mobile de Grist a beaucoup progress\u00e9 r\u00e9cemment, et nous sommes heureux de dire que vous pouvez maintenant utiliser Grist de mani\u00e8re assez confortable dans les navigateurs mobiles tels que Chrome, Safari et Firefox. Sur les petits \u00e9crans, vous pouvez trouver la liste des pages \u00e0 partir du bouton dans la barre inf\u00e9rieure : Pour les pages avec plusieurs vues, seule la vue active est d\u00e9velopp\u00e9e. Les autres vues sont r\u00e9duites jusqu\u2019\u00e0 ce que vous les touchiez pour les d\u00e9velopper : Pour modifier une cellule, il suffit de la toucher deux fois. Le support mobile est encore en cours de d\u00e9veloppement. Pour revenir \u00e0 la version de bureau sur un appareil mobile, ouvrez le menu de votre compte et s\u00e9lectionnez l\u2019option \u201cBasculer en Mode Mobile\u201d : Veuillez signaler tout probl\u00e8me et partager vos suggestions d\u2019am\u00e9liorations ! Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour approfondir votre compr\u00e9hension de la mani\u00e8re dont diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un e-mail \u00e0 support@getgrist.com .","title":"2021/02"},{"location":"newsletters/2021-02/#bulletin-de-fevrier-2021","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } .center { text-align: center; } Grist for the Mill F\u00e9vrier 2021 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin de F\u00e9vrier 2021"},{"location":"newsletters/2021-02/#conseils-rapides","text":"Totaux. Pour calculer les totaux d\u2019une colonne, les utilisateurs de tableurs ajoutent souvent une formule \u00e0 la derni\u00e8re ligne de leur table. Dans Grist, chaque ligne est un enregistrement de base de donn\u00e9es, y compris la derni\u00e8re ligne. Mais les totaux sont certainement disponibles ! Au lieu d\u2019ajouter une ligne pour les totaux, ajoutez une table de r\u00e9sum\u00e9 d\u2019une ligne. Cliquez sur le bouton \u201cAjouter Nouveau\u201d, et s\u00e9lectionnez \u201cAjouter Vue \u00e0 la Page\u201d. Dans la bo\u00eete de dialogue qui s\u2019ouvre, cliquez sur l\u2019ic\u00f4ne de sommation ( ) \u00e0 c\u00f4t\u00e9 de la table pour laquelle vous souhaitez obtenir des totaux : Cliquez sur \u201cAjouter \u00e0 la Page\u201d, et vous verrez un r\u00e9sum\u00e9 d\u2019une ligne de votre table. Utilisez la poign\u00e9e de d\u00e9placement juste \u00e0 gauche du titre pour le d\u00e9placer sous votre table (l\u00e0 o\u00f9 vous attendez normalement les totaux). Grist cr\u00e9e automatiquement des sommes de toutes les colonnes num\u00e9riques. Vous pouvez supprimer celles dont vous n\u2019avez pas besoin, en ajouter de nouvelles, ou modifier celles pour lesquelles vous avez besoin de quelque chose d\u2019autre qu\u2019une somme (peut-\u00eatre AVERAGE , MAX , ou un calcul Python enti\u00e8rement personnalis\u00e9). Lisez Tables de r\u00e9sum\u00e9 pour en savoir plus sur les tables de r\u00e9sum\u00e9 et leurs nombreuses utilisations. Partage en Temps R\u00e9el. M\u00eame avec le plan gratuit, vous pouvez partager un document et collaborer dessus. Tout changement que vous ou un autre \u00e9diteur effectuez appara\u00eetra imm\u00e9diatement sur l\u2019\u00e9cran de l\u2019autre personne. Pour partager un document, cliquez sur l\u2019ic\u00f4ne de partage ( ), et s\u00e9lectionnez \u201cG\u00e9rer les Utilisateurs\u201d. Dans la bo\u00eete de dialogue qui s\u2019ouvre, tapez l\u2019adresse e-mail de la personne \u00e0 inviter. Changez son r\u00f4le de Lecteur \u00e0 \u00c9diteur si vous souhaitez lui donner la permission de modifier. Ensuite, cliquez sur Confirmer. Votre collaborateur a maintenant acc\u00e8s \u00e0 votre document, et Grist lui enverra un e-mail avec un lien vers celui-ci. En savoir plus sur Partage .","title":"Conseils Rapides"},{"location":"newsletters/2021-02/#quoi-de-neuf","text":"Le support mobile de Grist a beaucoup progress\u00e9 r\u00e9cemment, et nous sommes heureux de dire que vous pouvez maintenant utiliser Grist de mani\u00e8re assez confortable dans les navigateurs mobiles tels que Chrome, Safari et Firefox. Sur les petits \u00e9crans, vous pouvez trouver la liste des pages \u00e0 partir du bouton dans la barre inf\u00e9rieure : Pour les pages avec plusieurs vues, seule la vue active est d\u00e9velopp\u00e9e. Les autres vues sont r\u00e9duites jusqu\u2019\u00e0 ce que vous les touchiez pour les d\u00e9velopper : Pour modifier une cellule, il suffit de la toucher deux fois. Le support mobile est encore en cours de d\u00e9veloppement. Pour revenir \u00e0 la version de bureau sur un appareil mobile, ouvrez le menu de votre compte et s\u00e9lectionnez l\u2019option \u201cBasculer en Mode Mobile\u201d : Veuillez signaler tout probl\u00e8me et partager vos suggestions d\u2019am\u00e9liorations !","title":"Quoi de Neuf"},{"location":"newsletters/2021-02/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour approfondir votre compr\u00e9hension de la mani\u00e8re dont diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un e-mail \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2021-03/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mars 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mars 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Permissions avanc\u00e9es # Grist propose d\u00e9sormais des \u201cpermissions avanc\u00e9es\u201d pour un contr\u00f4le pr\u00e9cis de qui peut voir (ou modifier) quelles parties de votre document au niveau de la table, de la colonne et de la ligne. En d\u00e9cembre, nous avons invit\u00e9 ceux qui \u00e9taient int\u00e9ress\u00e9s par un acc\u00e8s anticip\u00e9 \u00e0 essayer cette fonctionnalit\u00e9. Nous avons apport\u00e9 de nombreuses am\u00e9liorations et sommes maintenant ravis d\u2019ouvrir cette fonctionnalit\u00e9 au public. Choses \u00e0 savoir sur les permissions avanc\u00e9es : Jusqu\u2019\u00e0 pr\u00e9sent, tous ceux avec qui vous partagiez un document voyaient le m\u00eame contenu. D\u00e9sormais, leurs vues peuvent \u00eatre filtr\u00e9es. Par exemple, une table ou une colonne peut \u00eatre visible uniquement pour certains utilisateurs. Ou certains utilisateurs peuvent ne voir que les lignes qui r\u00e9pondent \u00e0 une condition. Jusqu\u2019\u00e0 pr\u00e9sent, tous les \u00e9diteurs et propri\u00e9taires d\u2019un document pouvaient modifier n\u2019importe quel aspect de son contenu. D\u00e9sormais, les propri\u00e9taires de documents peuvent contr\u00f4ler ce que des \u00e9diteurs sp\u00e9cifiques peuvent modifier. Par exemple, une table ou une colonne peut \u00eatre verrouill\u00e9e pour certains \u00e9diteurs. Ou certains \u00e9diteurs peuvent uniquement mettre \u00e0 jour, ajouter ou supprimer des lignes qui r\u00e9pondent \u00e0 une condition. Si vous en avez besoin, les \u00e9diteurs peuvent \u00eatre organis\u00e9s en groupes ou \u00e9quipes en utilisant une table au sein du document lui-m\u00eame, et des permissions peuvent \u00eatre accord\u00e9es syst\u00e9matiquement. Vous pouvez cr\u00e9er des liens sp\u00e9ciaux pour donner un acc\u00e8s ad-hoc \u00e0 des parties du document, y compris des documents partag\u00e9s avec le public. Les permissions avanc\u00e9es sont marqu\u00e9es comme une fonctionnalit\u00e9 Beta, ce qui signifie que leur conception est susceptible d\u2019\u00e9voluer, et parfois cela n\u00e9cessitera des mises \u00e0 jour des documents qui les utilisent. Nous ne ferons pas de tels changements \u00e0 la l\u00e9g\u00e8re. Les permissions avanc\u00e9es de Grist vous donnent un grand pouvoir. Avec ce pouvoir vient une grande responsabilit\u00e9. Prenez le temps de lire notre documentation , explorer les exemples , et tester les r\u00e8gles que vous cr\u00e9ez . N\u2019h\u00e9sitez pas \u00e0 nous consulter \u00e9galement \u00e0 support@getgrist.com . Nous serons ravis de vous aider. Nouvel Exemple # Les permissions avanc\u00e9es vous permettent de contr\u00f4ler comment un document partag\u00e9 est utilis\u00e9, et de maintenir une s\u00e9paration des r\u00f4les et des responsabilit\u00e9s. Dans notre exemple Liste de Prospects , nous supposons qu\u2019un entrepreneur utilise Grist comme un suivi ad-hoc des prospects pour les ventes et les conseillers potentiels, et montrons comment ils peuvent utiliser les permissions avanc\u00e9es pour fa\u00e7onner la collaboration. Conseils Rapides # Couleur de Cellule . Vous pouvez ajouter une touche de couleur \u00e0 une colonne en utilisant l\u2019option Couleur de Cellule pour les Colonnes (dans les tables) ou les Champs (dans les fiches). La couleur s\u2019appliquera de mani\u00e8re coh\u00e9rente dans toutes les vues o\u00f9 les cellules de cette colonne apparaissent. Requ\u00eates SQL . Les documents Grist sont \u00e9galement t\u00e9l\u00e9chargeables en tant que bases de donn\u00e9es SQL, au format SQLite. Si vous t\u00e9l\u00e9chargez votre document (via le bouton ), vous pouvez le consulter en utilisant l\u2019outil standard sqlite3 (disponible sur le site SQLite ) ou depuis presque n\u2019importe quel langage ou outil de base de donn\u00e9es. Vos tables et colonnes dans Grist appara\u00eetront exactement comme des tables et colonnes SQLite. Voici une requ\u00eate contre le document d\u2019exemple Liste de Prospects : Vous n\u2019aurez peut-\u00eatre pas besoin de faire cela souvent, mais quand vous en aurez besoin, c\u2019est tr\u00e8s pratique. Nous avons r\u00e9cemment am\u00e9lior\u00e9 l\u2019ad\u00e9quation entre les types de colonnes SQLite et les types de colonnes Grist, donc si un importateur de base de donn\u00e9es ne parvient pas \u00e0 reconna\u00eetre une colonne, essayez de recr\u00e9er la colonne ou de la convertir en un type plus pr\u00e9cis (par exemple, Integer, Text, Numeric, Date, DateTime, etc.). Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un retour pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2021/03"},{"location":"newsletters/2021-03/#bulletin-de-mars-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mars 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mars 2021"},{"location":"newsletters/2021-03/#permissions-avancees","text":"Grist propose d\u00e9sormais des \u201cpermissions avanc\u00e9es\u201d pour un contr\u00f4le pr\u00e9cis de qui peut voir (ou modifier) quelles parties de votre document au niveau de la table, de la colonne et de la ligne. En d\u00e9cembre, nous avons invit\u00e9 ceux qui \u00e9taient int\u00e9ress\u00e9s par un acc\u00e8s anticip\u00e9 \u00e0 essayer cette fonctionnalit\u00e9. Nous avons apport\u00e9 de nombreuses am\u00e9liorations et sommes maintenant ravis d\u2019ouvrir cette fonctionnalit\u00e9 au public. Choses \u00e0 savoir sur les permissions avanc\u00e9es : Jusqu\u2019\u00e0 pr\u00e9sent, tous ceux avec qui vous partagiez un document voyaient le m\u00eame contenu. D\u00e9sormais, leurs vues peuvent \u00eatre filtr\u00e9es. Par exemple, une table ou une colonne peut \u00eatre visible uniquement pour certains utilisateurs. Ou certains utilisateurs peuvent ne voir que les lignes qui r\u00e9pondent \u00e0 une condition. Jusqu\u2019\u00e0 pr\u00e9sent, tous les \u00e9diteurs et propri\u00e9taires d\u2019un document pouvaient modifier n\u2019importe quel aspect de son contenu. D\u00e9sormais, les propri\u00e9taires de documents peuvent contr\u00f4ler ce que des \u00e9diteurs sp\u00e9cifiques peuvent modifier. Par exemple, une table ou une colonne peut \u00eatre verrouill\u00e9e pour certains \u00e9diteurs. Ou certains \u00e9diteurs peuvent uniquement mettre \u00e0 jour, ajouter ou supprimer des lignes qui r\u00e9pondent \u00e0 une condition. Si vous en avez besoin, les \u00e9diteurs peuvent \u00eatre organis\u00e9s en groupes ou \u00e9quipes en utilisant une table au sein du document lui-m\u00eame, et des permissions peuvent \u00eatre accord\u00e9es syst\u00e9matiquement. Vous pouvez cr\u00e9er des liens sp\u00e9ciaux pour donner un acc\u00e8s ad-hoc \u00e0 des parties du document, y compris des documents partag\u00e9s avec le public. Les permissions avanc\u00e9es sont marqu\u00e9es comme une fonctionnalit\u00e9 Beta, ce qui signifie que leur conception est susceptible d\u2019\u00e9voluer, et parfois cela n\u00e9cessitera des mises \u00e0 jour des documents qui les utilisent. Nous ne ferons pas de tels changements \u00e0 la l\u00e9g\u00e8re. Les permissions avanc\u00e9es de Grist vous donnent un grand pouvoir. Avec ce pouvoir vient une grande responsabilit\u00e9. Prenez le temps de lire notre documentation , explorer les exemples , et tester les r\u00e8gles que vous cr\u00e9ez . N\u2019h\u00e9sitez pas \u00e0 nous consulter \u00e9galement \u00e0 support@getgrist.com . Nous serons ravis de vous aider.","title":"Permissions avanc\u00e9es"},{"location":"newsletters/2021-03/#nouvel-exemple","text":"Les permissions avanc\u00e9es vous permettent de contr\u00f4ler comment un document partag\u00e9 est utilis\u00e9, et de maintenir une s\u00e9paration des r\u00f4les et des responsabilit\u00e9s. Dans notre exemple Liste de Prospects , nous supposons qu\u2019un entrepreneur utilise Grist comme un suivi ad-hoc des prospects pour les ventes et les conseillers potentiels, et montrons comment ils peuvent utiliser les permissions avanc\u00e9es pour fa\u00e7onner la collaboration.","title":"Nouvel Exemple"},{"location":"newsletters/2021-03/#conseils-rapides","text":"Couleur de Cellule . Vous pouvez ajouter une touche de couleur \u00e0 une colonne en utilisant l\u2019option Couleur de Cellule pour les Colonnes (dans les tables) ou les Champs (dans les fiches). La couleur s\u2019appliquera de mani\u00e8re coh\u00e9rente dans toutes les vues o\u00f9 les cellules de cette colonne apparaissent. Requ\u00eates SQL . Les documents Grist sont \u00e9galement t\u00e9l\u00e9chargeables en tant que bases de donn\u00e9es SQL, au format SQLite. Si vous t\u00e9l\u00e9chargez votre document (via le bouton ), vous pouvez le consulter en utilisant l\u2019outil standard sqlite3 (disponible sur le site SQLite ) ou depuis presque n\u2019importe quel langage ou outil de base de donn\u00e9es. Vos tables et colonnes dans Grist appara\u00eetront exactement comme des tables et colonnes SQLite. Voici une requ\u00eate contre le document d\u2019exemple Liste de Prospects : Vous n\u2019aurez peut-\u00eatre pas besoin de faire cela souvent, mais quand vous en aurez besoin, c\u2019est tr\u00e8s pratique. Nous avons r\u00e9cemment am\u00e9lior\u00e9 l\u2019ad\u00e9quation entre les types de colonnes SQLite et les types de colonnes Grist, donc si un importateur de base de donn\u00e9es ne parvient pas \u00e0 reconna\u00eetre une colonne, essayez de recr\u00e9er la colonne ou de la convertir en un type plus pr\u00e9cis (par exemple, Integer, Text, Numeric, Date, DateTime, etc.).","title":"Conseils Rapides"},{"location":"newsletters/2021-03/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un retour pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2021-04/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Avril 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Avril 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Comprendre le Partage de Liens # Le mois dernier, nous avons lanc\u00e9 des contr\u00f4les d\u2019acc\u00e8s granulaires qui permettent de limiter qui peut voir ou modifier quelles parties d\u2019un document, jusqu\u2019\u00e0 des colonnes et des lignes individuelles. Ce m\u00eame niveau de contr\u00f4le peut \u00eatre d\u00e9fini pour les documents partag\u00e9s via des liens avec des tiers qui n\u2019ont pas de compte Grist ou qui ne font pas partie de votre organisation. Par exemple, vous pouvez vouloir partager l\u2019historique des achats avec un client, permettre au personnel de voir uniquement leurs horaires de travail, ou montrer \u00e0 un client l\u2019\u00e9tat de son projet. Dans Grist, les \u201ccl\u00e9s de lien\u201d sont des param\u00e8tres URL qui, combin\u00e9s avec les r\u00e8gles de contr\u00f4le d\u2019acc\u00e8s, d\u00e9termineront quelles donn\u00e9es un destinataire de lien est autoris\u00e9 \u00e0 voir. Cr\u00e9er des Cl\u00e9s de Lien Uniques en 4 \u00c9tapes # La meilleure fa\u00e7on d\u2019apprendre est de pratiquer. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et \u00e9diter pour approfondir votre compr\u00e9hension du partage de liens. Dans notre exemple, vous \u00eates un tuteur priv\u00e9 qui utilise Grist pour suivre les heures, les paiements et les donn\u00e9es des clients. Vous souhaitez partager l\u2019historique des sessions et des paiements avec les parents via un lien qui ne montre que les donn\u00e9es de leur famille. Suivez notre guide en 4 \u00e9tapes pour apprendre \u00e0 partager des donn\u00e9es limit\u00e9es via des liens . Le tuteur priv\u00e9 peut voir toutes les donn\u00e9es, mais un parent ne peut voir que les donn\u00e9es de sa famille. Apprendre Comment Quoi de Neuf # Vous pouvez maintenant cr\u00e9er des boutons de filtre dans une barre au-dessus de toute vue dans Grist. La barre de filtre peut \u00eatre activ\u00e9e ou d\u00e9sactiv\u00e9e, et \u00e9dit\u00e9e pour n\u2019inclure que les boutons pour les colonnes que vous filtrez couramment. La barre peut \u00e9galement \u00eatre enregistr\u00e9e afin que tous ceux qui ont acc\u00e8s au document puissent plus facilement filtrer les donn\u00e9es. Conseils Rapides # Geler les identifiants uniques . Lorsque vous utilisez la fonction UUID() de Grist, vous pouvez vouloir geler les valeurs attribu\u00e9es \u00e0 chaque enregistrement. Si vous ne le faites pas, l\u2019identifiant unique sera g\u00e9n\u00e9r\u00e9 \u00e0 nouveau lorsque vous rouvrirez le document. Pour geler les identifiants uniques, convertissez la colonne en colonne de donn\u00e9es, et d\u00e9finissez la formule par d\u00e9faut pour les nouveaux enregistrements sur UUID() afin que les nouvelles lignes se voient \u00e9galement attribuer un identifiant unique. Cr\u00e9er des liens dans les cellules . Pour cr\u00e9er une colonne de liens dans Grist, d\u00e9finissez le type de colonne sur Texte, et cliquez sur le bouton \u201cHyperLink\u201d sous Format de Cellule. Cl\u00e9s de Lien et Acc\u00e8s Public. Si vous g\u00e9n\u00e9rez des liens uniques vers des vues limit\u00e9es de donn\u00e9es, assurez-vous d\u2019avoir activ\u00e9 l\u2019Acc\u00e8s Public sous \u201cG\u00e9rer les Utilisateurs\u201d pour permettre le partage de liens. Les spectateurs qui acc\u00e8dent \u00e0 votre document via des liens seront toujours limit\u00e9s conform\u00e9ment \u00e0 vos permissions avanc\u00e9es. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/04"},{"location":"newsletters/2021-04/#bulletin-davril-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Avril 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’Avril 2021"},{"location":"newsletters/2021-04/#comprendre-le-partage-de-liens","text":"Le mois dernier, nous avons lanc\u00e9 des contr\u00f4les d\u2019acc\u00e8s granulaires qui permettent de limiter qui peut voir ou modifier quelles parties d\u2019un document, jusqu\u2019\u00e0 des colonnes et des lignes individuelles. Ce m\u00eame niveau de contr\u00f4le peut \u00eatre d\u00e9fini pour les documents partag\u00e9s via des liens avec des tiers qui n\u2019ont pas de compte Grist ou qui ne font pas partie de votre organisation. Par exemple, vous pouvez vouloir partager l\u2019historique des achats avec un client, permettre au personnel de voir uniquement leurs horaires de travail, ou montrer \u00e0 un client l\u2019\u00e9tat de son projet. Dans Grist, les \u201ccl\u00e9s de lien\u201d sont des param\u00e8tres URL qui, combin\u00e9s avec les r\u00e8gles de contr\u00f4le d\u2019acc\u00e8s, d\u00e9termineront quelles donn\u00e9es un destinataire de lien est autoris\u00e9 \u00e0 voir.","title":"Comprendre le Partage de Liens"},{"location":"newsletters/2021-04/#creer-des-cles-de-lien-uniques-en-4-etapes","text":"La meilleure fa\u00e7on d\u2019apprendre est de pratiquer. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et \u00e9diter pour approfondir votre compr\u00e9hension du partage de liens. Dans notre exemple, vous \u00eates un tuteur priv\u00e9 qui utilise Grist pour suivre les heures, les paiements et les donn\u00e9es des clients. Vous souhaitez partager l\u2019historique des sessions et des paiements avec les parents via un lien qui ne montre que les donn\u00e9es de leur famille. Suivez notre guide en 4 \u00e9tapes pour apprendre \u00e0 partager des donn\u00e9es limit\u00e9es via des liens . Le tuteur priv\u00e9 peut voir toutes les donn\u00e9es, mais un parent ne peut voir que les donn\u00e9es de sa famille. Apprendre Comment","title":"Cr\u00e9er des Cl\u00e9s de Lien Uniques en 4 \u00c9tapes"},{"location":"newsletters/2021-04/#quoi-de-neuf","text":"Vous pouvez maintenant cr\u00e9er des boutons de filtre dans une barre au-dessus de toute vue dans Grist. La barre de filtre peut \u00eatre activ\u00e9e ou d\u00e9sactiv\u00e9e, et \u00e9dit\u00e9e pour n\u2019inclure que les boutons pour les colonnes que vous filtrez couramment. La barre peut \u00e9galement \u00eatre enregistr\u00e9e afin que tous ceux qui ont acc\u00e8s au document puissent plus facilement filtrer les donn\u00e9es.","title":"Quoi de Neuf"},{"location":"newsletters/2021-04/#conseils-rapides","text":"Geler les identifiants uniques . Lorsque vous utilisez la fonction UUID() de Grist, vous pouvez vouloir geler les valeurs attribu\u00e9es \u00e0 chaque enregistrement. Si vous ne le faites pas, l\u2019identifiant unique sera g\u00e9n\u00e9r\u00e9 \u00e0 nouveau lorsque vous rouvrirez le document. Pour geler les identifiants uniques, convertissez la colonne en colonne de donn\u00e9es, et d\u00e9finissez la formule par d\u00e9faut pour les nouveaux enregistrements sur UUID() afin que les nouvelles lignes se voient \u00e9galement attribuer un identifiant unique. Cr\u00e9er des liens dans les cellules . Pour cr\u00e9er une colonne de liens dans Grist, d\u00e9finissez le type de colonne sur Texte, et cliquez sur le bouton \u201cHyperLink\u201d sous Format de Cellule. Cl\u00e9s de Lien et Acc\u00e8s Public. Si vous g\u00e9n\u00e9rez des liens uniques vers des vues limit\u00e9es de donn\u00e9es, assurez-vous d\u2019avoir activ\u00e9 l\u2019Acc\u00e8s Public sous \u201cG\u00e9rer les Utilisateurs\u201d pour permettre le partage de liens. Les spectateurs qui acc\u00e8dent \u00e0 votre document via des liens seront toujours limit\u00e9s conform\u00e9ment \u00e0 vos permissions avanc\u00e9es. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"Conseils Rapides"},{"location":"newsletters/2021-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mai 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Organiser les Donn\u00e9es avec des Colonnes de R\u00e9f\u00e9rence # Les colonnes de r\u00e9f\u00e9rence sont au c\u0153ur de ce que Grist fait de mieux : faciliter la mise en place d\u2019une base de donn\u00e9es relationnelle et cr\u00e9er des mises en page tr\u00e8s productives. Si vous n\u2019\u00eates pas familier avec les bases de donn\u00e9es, comprendre les colonnes de r\u00e9f\u00e9rence peut sembler un peu compliqu\u00e9. C\u2019est pourquoi nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et \u00e9diter pour approfondir votre compr\u00e9hension des colonnes de r\u00e9f\u00e9rence. Dans notre exemple, vous \u00eates un candidat \u00e0 un emploi qui utilise Grist pour suivre l\u2019\u00e9tat de vos candidatures dans plusieurs entreprises. Vous souhaitez un tableau de bord simple qui vous permette de voir facilement l\u2019\u00e9tat de vos candidatures en un coup d\u2019\u0153il, et d\u2019ajouter de nouveaux emplois, entretiens et autres jalons. Suivez notre guide en 3 \u00e9tapes pour apprendre \u00e0 utiliser les colonnes de r\u00e9f\u00e9rence . Quoi de Neuf # Listes de Choix # Vous pouvez d\u00e9sormais s\u00e9lectionner plusieurs options dans une colonne Liste de Choix. Dans la capture d\u2019\u00e9cran ci-dessous, plusieurs expositions canines sont s\u00e9lectionn\u00e9es \u00e0 partir d\u2019une liste de choix, au lieu d\u2019une seule. Am\u00e9liorations de la Recherche # Lors de la recherche dans Grist, la recherche reste d\u00e9sormais sur la m\u00eame page par d\u00e9faut. Si vous souhaitez rechercher sur toutes les pages, il suffit de cocher la case. Hyperliens dans le M\u00eame Document # Auparavant, tous les hyperliens s\u2019ouvraient dans un nouvel onglet. D\u00e9sormais, les hyperliens qui pointent vers une autre partie du m\u00eame document s\u2019ouvriront dans le m\u00eame onglet. Cela facilite le saut vers les parties pertinentes des documents volumineux. Conseils Rapides # Ajouter un nouvel enregistrement \u00e0 partir de la liste d\u00e9roulante de la colonne de r\u00e9f\u00e9rence. Vous pouvez ajouter une nouvelle valeur \u00e0 la liste d\u00e9roulante dans une colonne de r\u00e9f\u00e9rence sans passer \u00e0 la table sous-jacente. Il suffit de taper la valeur que vous souhaitez ajouter et de s\u00e9lectionner la valeur + dans la liste d\u00e9roulante. Grist ajoutera automatiquement un nouvel enregistrement contenant cette valeur \u00e0 la table sous-jacente et ins\u00e9rera la r\u00e9f\u00e9rence appropri\u00e9e. Modifier la Mise en Page de la Vue Fiche. Lorsque vous convertissez une table en vue fiche, vous pouvez vouloir d\u00e9placer les champs pour un format plus intuitif. Cliquez sur le menu ... au-dessus de la vue que vous souhaitez modifier, puis s\u00e9lectionnez MODIFIER LA MISE EN PAGE. Cliquez et faites glisser les champs pour les repositionner, puis cliquez sur ENREGISTRER LA MISE EN PAGE. Th\u00e8mes de la Vue Liste de Fiches. La vue liste de fiches aligne les fiches verticalement. Grist propose trois th\u00e8mes int\u00e9gr\u00e9s parmi lesquels choisir, selon vos besoins et la mani\u00e8re dont vous souhaitez visualiser les donn\u00e9es. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/05"},{"location":"newsletters/2021-05/#bulletin-de-mai-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mai 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mai 2021"},{"location":"newsletters/2021-05/#organiser-les-donnees-avec-des-colonnes-de-reference","text":"Les colonnes de r\u00e9f\u00e9rence sont au c\u0153ur de ce que Grist fait de mieux : faciliter la mise en place d\u2019une base de donn\u00e9es relationnelle et cr\u00e9er des mises en page tr\u00e8s productives. Si vous n\u2019\u00eates pas familier avec les bases de donn\u00e9es, comprendre les colonnes de r\u00e9f\u00e9rence peut sembler un peu compliqu\u00e9. C\u2019est pourquoi nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et \u00e9diter pour approfondir votre compr\u00e9hension des colonnes de r\u00e9f\u00e9rence. Dans notre exemple, vous \u00eates un candidat \u00e0 un emploi qui utilise Grist pour suivre l\u2019\u00e9tat de vos candidatures dans plusieurs entreprises. Vous souhaitez un tableau de bord simple qui vous permette de voir facilement l\u2019\u00e9tat de vos candidatures en un coup d\u2019\u0153il, et d\u2019ajouter de nouveaux emplois, entretiens et autres jalons. Suivez notre guide en 3 \u00e9tapes pour apprendre \u00e0 utiliser les colonnes de r\u00e9f\u00e9rence .","title":"Organiser les Donn\u00e9es avec des Colonnes de R\u00e9f\u00e9rence"},{"location":"newsletters/2021-05/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-05/#listes-de-choix","text":"Vous pouvez d\u00e9sormais s\u00e9lectionner plusieurs options dans une colonne Liste de Choix. Dans la capture d\u2019\u00e9cran ci-dessous, plusieurs expositions canines sont s\u00e9lectionn\u00e9es \u00e0 partir d\u2019une liste de choix, au lieu d\u2019une seule.","title":"Listes de Choix"},{"location":"newsletters/2021-05/#ameliorations-de-la-recherche","text":"Lors de la recherche dans Grist, la recherche reste d\u00e9sormais sur la m\u00eame page par d\u00e9faut. Si vous souhaitez rechercher sur toutes les pages, il suffit de cocher la case.","title":"Am\u00e9liorations de la Recherche"},{"location":"newsletters/2021-05/#hyperliens-dans-le-meme-document","text":"Auparavant, tous les hyperliens s\u2019ouvraient dans un nouvel onglet. D\u00e9sormais, les hyperliens qui pointent vers une autre partie du m\u00eame document s\u2019ouvriront dans le m\u00eame onglet. Cela facilite le saut vers les parties pertinentes des documents volumineux.","title":"Hyperliens dans le M\u00eame Document"},{"location":"newsletters/2021-05/#conseils-rapides","text":"Ajouter un nouvel enregistrement \u00e0 partir de la liste d\u00e9roulante de la colonne de r\u00e9f\u00e9rence. Vous pouvez ajouter une nouvelle valeur \u00e0 la liste d\u00e9roulante dans une colonne de r\u00e9f\u00e9rence sans passer \u00e0 la table sous-jacente. Il suffit de taper la valeur que vous souhaitez ajouter et de s\u00e9lectionner la valeur + dans la liste d\u00e9roulante. Grist ajoutera automatiquement un nouvel enregistrement contenant cette valeur \u00e0 la table sous-jacente et ins\u00e9rera la r\u00e9f\u00e9rence appropri\u00e9e. Modifier la Mise en Page de la Vue Fiche. Lorsque vous convertissez une table en vue fiche, vous pouvez vouloir d\u00e9placer les champs pour un format plus intuitif. Cliquez sur le menu ... au-dessus de la vue que vous souhaitez modifier, puis s\u00e9lectionnez MODIFIER LA MISE EN PAGE. Cliquez et faites glisser les champs pour les repositionner, puis cliquez sur ENREGISTRER LA MISE EN PAGE. Th\u00e8mes de la Vue Liste de Fiches. La vue liste de fiches aligne les fiches verticalement. Grist propose trois th\u00e8mes int\u00e9gr\u00e9s parmi lesquels choisir, selon vos besoins et la mani\u00e8re dont vous souhaitez visualiser les donn\u00e9es. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"Conseils Rapides"},{"location":"newsletters/2021-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2021 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juin 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Geler des Colonnes # Vous pouvez d\u00e9sormais geler des colonnes dans Grist ! Ma\u00eetrisez ces feuilles de calcul larges et visualisez vos donn\u00e9es \u00e0 votre mani\u00e8re. \u00c9diteur en Lecture Seule # Les membres de l\u2019\u00e9quipe avec un acc\u00e8s en lecture seule peuvent d\u00e9sormais ouvrir un \u00e9diteur de cellule pour lire plus facilement de longs textes, acc\u00e9der aux pi\u00e8ces jointes ou jeter un coup d\u2019\u0153il aux formules. Ils seront toujours emp\u00each\u00e9s de modifier la cellule, comme indiqu\u00e9 par l\u2019ic\u00f4ne de verrou gris. \u00c9diteur de cellule en lecture seule verrouill\u00e9 pour les modifications v. \u00e9diteur de cellule non restreint Conseils Rapides # Dupliquer le Document v Travailler sur une Copie. Lors de la modification de la structure d\u2019un document, il est bon de Travailler sur une copie . Cela ne sauvegarde pas automatiquement un duplicata de votre document. Cela cr\u00e9e une copie de travail non sauvegard\u00e9e o\u00f9 vous pouvez effectuer des modifications, puis choisir de remplacer le document actuel, copier vos nouvelles modifications dans un nouveau document ou abandonner vos modifications. Dupliquer le Document cr\u00e9e un nouveau document dupliqu\u00e9, et vous pouvez choisir de copier ou non les donn\u00e9es ou de conserver uniquement la structure du document. Exporter des Sauvegardes. Grist prend p\u00e9riodiquement des instantan\u00e9s de vos documents. Vous pouvez sauvegarder n\u2019importe quelle version de votre document (instantan\u00e9s actuels ou historiques) pour sauvegarder vos donn\u00e9es. Pour sauvegarder des instantan\u00e9s historiques, cliquez sur Historique du Document puis Instantan\u00e9s . S\u00e9lectionnez le menu de n\u2019importe quel instantan\u00e9 puis cliquez sur Ouvrir l'Instantan\u00e9 . Cliquez sur l\u2019ic\u00f4ne de partage pour ouvrir un menu \u00e0 partir duquel vous pouvez t\u00e9l\u00e9charger l\u2019int\u00e9gralit\u00e9 du document en tant que fichier Grist . Combiner des champs de texte avec des formules. Il peut arriver que vous ayez du texte dans plusieurs colonnes que vous souhaitez afficher dans une seule colonne. Par exemple, une table peut avoir des colonnes de pr\u00e9nom et de nom de famille. Vous pouvez facilement cr\u00e9er une colonne de nom complet avec la formule \"{}, {}\".format($Last_Name, $First_Name) . La partie entre guillemets est une cha\u00eene de format : chaque ensemble d\u2019accolades ( {} ) dans celle-ci est remplac\u00e9 par la valeur suivante des parenth\u00e8ses apr\u00e8s format . Dans ce cas, le nom complet serait affich\u00e9 comme Benson, Carla . Approfondir # Analyser les Donn\u00e9es avec des Tables R\u00e9sum\u00e9es et des Formules # Les tables r\u00e9sum\u00e9es et les formules sont des outils essentiels pour obtenir des informations exploitables \u00e0 partir de vos donn\u00e9es. Elles permettent de regrouper les enregistrements en cat\u00e9gories sp\u00e9cifiques, puis de calculer des sommes en utilisant ces groupes d\u2019enregistrements. Grist facilite la cr\u00e9ation de tables r\u00e9sum\u00e9es et le travail avec le champ $group dans les formules r\u00e9sum\u00e9es. Nous avons cr\u00e9\u00e9 un tutoriel vid\u00e9o qui vous aide \u00e0 ma\u00eetriser deux concepts cl\u00e9s : les tables r\u00e9sum\u00e9es et les formules r\u00e9sum\u00e9es. Le tutoriel vous guide dans la cr\u00e9ation de deux pages r\u00e9sum\u00e9es dans un mod\u00e8le avanc\u00e9 de suivi des feuilles de temps. APPRENDRE : Tables R\u00e9sum\u00e9es Nouveau Mod\u00e8le # Suivi Avanc\u00e9 des Feuilles de Temps # Le suivi des feuilles de temps facilite le suivi des feuilles de temps des contractuels sur plusieurs mois et d\u00e9partements. Il dispose d\u2019un tableau de bord o\u00f9 les contractuels peuvent soumettre leurs heures directement dans Grist et voir uniquement leurs donn\u00e9es historiques de feuilles de temps. Le service de paie de l\u2019entreprise peut voir les feuilles de temps de tout le monde, dans tous les comptes, sur tous les mois, et avoir acc\u00e8s \u00e0 des pages r\u00e9sum\u00e9es fournissant des donn\u00e9es utiles sur les d\u00e9penses. Ils peuvent \u00e9galement d\u00e9finir des permissions pour autoriser ou interdire les modifications des feuilles de temps certains mois. Le tutoriel des tables r\u00e9sum\u00e9es commence par une version inachev\u00e9e du mod\u00e8le et vous guide dans la cr\u00e9ation de deux nouvelles pages. Si vous souhaitez utiliser le mod\u00e8le complet, allez \u00e0 la solution du tutoriel. Notez qu\u2019il y a des permissions avanc\u00e9es en place pour le mod\u00e8le complet qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. Voir le Mod\u00e8le Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/06"},{"location":"newsletters/2021-06/#bulletin-de-juin-2021","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juin 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juin 2021"},{"location":"newsletters/2021-06/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-06/#geler-des-colonnes","text":"Vous pouvez d\u00e9sormais geler des colonnes dans Grist ! Ma\u00eetrisez ces feuilles de calcul larges et visualisez vos donn\u00e9es \u00e0 votre mani\u00e8re.","title":"Geler des Colonnes"},{"location":"newsletters/2021-06/#editeur-en-lecture-seule","text":"Les membres de l\u2019\u00e9quipe avec un acc\u00e8s en lecture seule peuvent d\u00e9sormais ouvrir un \u00e9diteur de cellule pour lire plus facilement de longs textes, acc\u00e9der aux pi\u00e8ces jointes ou jeter un coup d\u2019\u0153il aux formules. Ils seront toujours emp\u00each\u00e9s de modifier la cellule, comme indiqu\u00e9 par l\u2019ic\u00f4ne de verrou gris. \u00c9diteur de cellule en lecture seule verrouill\u00e9 pour les modifications v. \u00e9diteur de cellule non restreint","title":"\u00c9diteur en Lecture Seule"},{"location":"newsletters/2021-06/#conseils-rapides","text":"Dupliquer le Document v Travailler sur une Copie. Lors de la modification de la structure d\u2019un document, il est bon de Travailler sur une copie . Cela ne sauvegarde pas automatiquement un duplicata de votre document. Cela cr\u00e9e une copie de travail non sauvegard\u00e9e o\u00f9 vous pouvez effectuer des modifications, puis choisir de remplacer le document actuel, copier vos nouvelles modifications dans un nouveau document ou abandonner vos modifications. Dupliquer le Document cr\u00e9e un nouveau document dupliqu\u00e9, et vous pouvez choisir de copier ou non les donn\u00e9es ou de conserver uniquement la structure du document. Exporter des Sauvegardes. Grist prend p\u00e9riodiquement des instantan\u00e9s de vos documents. Vous pouvez sauvegarder n\u2019importe quelle version de votre document (instantan\u00e9s actuels ou historiques) pour sauvegarder vos donn\u00e9es. Pour sauvegarder des instantan\u00e9s historiques, cliquez sur Historique du Document puis Instantan\u00e9s . S\u00e9lectionnez le menu de n\u2019importe quel instantan\u00e9 puis cliquez sur Ouvrir l'Instantan\u00e9 . Cliquez sur l\u2019ic\u00f4ne de partage pour ouvrir un menu \u00e0 partir duquel vous pouvez t\u00e9l\u00e9charger l\u2019int\u00e9gralit\u00e9 du document en tant que fichier Grist . Combiner des champs de texte avec des formules. Il peut arriver que vous ayez du texte dans plusieurs colonnes que vous souhaitez afficher dans une seule colonne. Par exemple, une table peut avoir des colonnes de pr\u00e9nom et de nom de famille. Vous pouvez facilement cr\u00e9er une colonne de nom complet avec la formule \"{}, {}\".format($Last_Name, $First_Name) . La partie entre guillemets est une cha\u00eene de format : chaque ensemble d\u2019accolades ( {} ) dans celle-ci est remplac\u00e9 par la valeur suivante des parenth\u00e8ses apr\u00e8s format . Dans ce cas, le nom complet serait affich\u00e9 comme Benson, Carla .","title":"Conseils Rapides"},{"location":"newsletters/2021-06/#approfondir","text":"","title":"Approfondir"},{"location":"newsletters/2021-06/#analyser-les-donnees-avec-des-tables-resumees-et-des-formules","text":"Les tables r\u00e9sum\u00e9es et les formules sont des outils essentiels pour obtenir des informations exploitables \u00e0 partir de vos donn\u00e9es. Elles permettent de regrouper les enregistrements en cat\u00e9gories sp\u00e9cifiques, puis de calculer des sommes en utilisant ces groupes d\u2019enregistrements. Grist facilite la cr\u00e9ation de tables r\u00e9sum\u00e9es et le travail avec le champ $group dans les formules r\u00e9sum\u00e9es. Nous avons cr\u00e9\u00e9 un tutoriel vid\u00e9o qui vous aide \u00e0 ma\u00eetriser deux concepts cl\u00e9s : les tables r\u00e9sum\u00e9es et les formules r\u00e9sum\u00e9es. Le tutoriel vous guide dans la cr\u00e9ation de deux pages r\u00e9sum\u00e9es dans un mod\u00e8le avanc\u00e9 de suivi des feuilles de temps. APPRENDRE : Tables R\u00e9sum\u00e9es","title":"Analyser les Donn\u00e9es avec des Tables R\u00e9sum\u00e9es et des Formules"},{"location":"newsletters/2021-06/#nouveau-modele","text":"","title":"Nouveau Mod\u00e8le"},{"location":"newsletters/2021-06/#suivi-avance-des-feuilles-de-temps","text":"Le suivi des feuilles de temps facilite le suivi des feuilles de temps des contractuels sur plusieurs mois et d\u00e9partements. Il dispose d\u2019un tableau de bord o\u00f9 les contractuels peuvent soumettre leurs heures directement dans Grist et voir uniquement leurs donn\u00e9es historiques de feuilles de temps. Le service de paie de l\u2019entreprise peut voir les feuilles de temps de tout le monde, dans tous les comptes, sur tous les mois, et avoir acc\u00e8s \u00e0 des pages r\u00e9sum\u00e9es fournissant des donn\u00e9es utiles sur les d\u00e9penses. Ils peuvent \u00e9galement d\u00e9finir des permissions pour autoriser ou interdire les modifications des feuilles de temps certains mois. Le tutoriel des tables r\u00e9sum\u00e9es commence par une version inachev\u00e9e du mod\u00e8le et vous guide dans la cr\u00e9ation de deux nouvelles pages. Si vous souhaitez utiliser le mod\u00e8le complet, allez \u00e0 la solution du tutoriel. Notez qu\u2019il y a des permissions avanc\u00e9es en place pour le mod\u00e8le complet qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. Voir le Mod\u00e8le Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"Suivi Avanc\u00e9 des Feuilles de Temps"},{"location":"newsletters/2021-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Juillet 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Couleurs ! # Faites ressortir votre document Grist avec des couleurs ! Les options dans les colonnes Choix et Liste de choix peuvent d\u00e9sormais \u00eatre cod\u00e9es par couleur. En plus de rendre vos documents plus attrayants et amusants, les choix de couleurs facilitent la lecture et la compr\u00e9hension rapide des informations. En savoir plus. Int\u00e9gration avec Google Sheets # Vous pouvez d\u00e9sormais importer ou exporter facilement vos donn\u00e9es vers et depuis Grist et Google Drive. En savoir plus. Horodatages Automatiques et Stamps Utilisateur # Vous voulez savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour et par qui ? Il est maintenant possible de cr\u00e9er des colonnes qui estampillent le nom d\u2019un utilisateur ou l\u2019heure \u00e0 un enregistrement lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. En savoir plus sur les horodatages et les stamps d\u2019auteur . Nous avons \u00e9galement cr\u00e9\u00e9 un tutoriel vid\u00e9o \u00e9tape par \u00e9tape qui vous guide pour cr\u00e9er des colonnes d\u2019horodatage et de stamp utilisateur. Nouvelles Ressources # Pr\u00e9sentation du Forum Communautaire Grist # Nous avons lanc\u00e9 un Forum Communautaire Grist o\u00f9 vous pouvez rapidement rechercher des solutions, partager des id\u00e9es de projets, fournir des commentaires, sugg\u00e9rer des fonctionnalit\u00e9s et rester inform\u00e9 des derni\u00e8res fonctionnalit\u00e9s et annonces de Grist. Visiter le Forum Visitez notre Feuille de Route Produit # Vous voulez savoir sur quoi nous travaillons ? Notre feuille de route produit est d\u00e9sormais publique ! Si vous avez un compte Github, nous vous encourageons \u00e0 laisser des commentaires sur les \u00e9l\u00e9ments de la feuille de route. Nous aimons avoir de vos nouvelles. Visiter la Feuille de Route Conseils Rapides # Meilleures pratiques pour les colonnes de r\u00e9f\u00e9rence. Lors de la cr\u00e9ation d\u2019une colonne de r\u00e9f\u00e9rence, il est recommand\u00e9 de choisir une colonne d\u2019affichage qui est un identifiant unique pour l\u2019enregistrement. Par exemple, pour les enregistrements de personnes, cela pourrait \u00eatre le nom complet ou l\u2019email. Pour afficher d\u2019autres donn\u00e9es, telles que le d\u00e9partement ou l\u2019anniversaire, utilisez la formule $[Reference Column Id].[Referenced Record\u2019s Field] , (par exemple $Person.Department ). Vous pouvez consulter le fonctionnement de cette formule dans notre guide des colonnes de r\u00e9f\u00e9rence . \u00c9tiqueter les hyperliens avec du texte. Dans les colonnes d\u2019hyperliens, vous pouvez \u00e9tiqueter un lien avec du texte en ajoutant une \u00e9tiquette avant l\u2019url : [\u00e9tiquette du lien] url . Les crochets ne sont pas n\u00e9cessaires. Utiliser la recherche pour trouver une fiche. Si vous avez une vue fiche sur une page et que vous souhaitez rapidement trouver la bonne fiche, vous pouvez utiliser la barre de recherche sur la page pour rapidement afficher la fiche pertinente. Approfondir # Cr\u00e9er Facilement des Horodatages Automatiques et Stamps Utilisateur # Il est parfois utile de savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour ou cr\u00e9\u00e9 pour la derni\u00e8re fois, et par qui. Grist rend simple la cr\u00e9ation de colonnes qui estampillent l\u2019heure ou le nom d\u2019un utilisateur \u00e0 un enregistrement lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. Nous avons cr\u00e9\u00e9 un tutoriel vid\u00e9o qui vous guide pour cr\u00e9er des colonnes d\u2019horodatage et de stamp utilisateur en 3 \u00e9tapes faciles. APPRENDRE : Horodatages/Stamps Utilisateur Nouveau Mod\u00e8le # Suivi des Demandes de Subventions et des Financements # Ce mod\u00e8le aide les ONG \u00e0 suivre les demandes de subventions qui ont \u00e9t\u00e9 soumises aux fondations pour obtenir des financements. Le mod\u00e8le inclut \u00e9galement une vue d\u2019ensemble des financements qui montre les financements en cours et les financements attribu\u00e9s, r\u00e9partis par programme de l\u2019ONG. Ouvrir le Suivi des Subventions Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/07"},{"location":"newsletters/2021-07/#bulletin-de-juillet-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Juillet 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juillet 2021"},{"location":"newsletters/2021-07/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-07/#couleurs","text":"Faites ressortir votre document Grist avec des couleurs ! Les options dans les colonnes Choix et Liste de choix peuvent d\u00e9sormais \u00eatre cod\u00e9es par couleur. En plus de rendre vos documents plus attrayants et amusants, les choix de couleurs facilitent la lecture et la compr\u00e9hension rapide des informations. En savoir plus.","title":"Couleurs !"},{"location":"newsletters/2021-07/#integration-avec-google-sheets","text":"Vous pouvez d\u00e9sormais importer ou exporter facilement vos donn\u00e9es vers et depuis Grist et Google Drive. En savoir plus.","title":"Int\u00e9gration avec Google Sheets"},{"location":"newsletters/2021-07/#horodatages-automatiques-et-stamps-utilisateur","text":"Vous voulez savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour et par qui ? Il est maintenant possible de cr\u00e9er des colonnes qui estampillent le nom d\u2019un utilisateur ou l\u2019heure \u00e0 un enregistrement lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. En savoir plus sur les horodatages et les stamps d\u2019auteur . Nous avons \u00e9galement cr\u00e9\u00e9 un tutoriel vid\u00e9o \u00e9tape par \u00e9tape qui vous guide pour cr\u00e9er des colonnes d\u2019horodatage et de stamp utilisateur.","title":"Horodatages Automatiques et Stamps Utilisateur"},{"location":"newsletters/2021-07/#nouvelles-ressources","text":"","title":"Nouvelles Ressources"},{"location":"newsletters/2021-07/#presentation-du-forum-communautaire-grist","text":"Nous avons lanc\u00e9 un Forum Communautaire Grist o\u00f9 vous pouvez rapidement rechercher des solutions, partager des id\u00e9es de projets, fournir des commentaires, sugg\u00e9rer des fonctionnalit\u00e9s et rester inform\u00e9 des derni\u00e8res fonctionnalit\u00e9s et annonces de Grist. Visiter le Forum","title":"Pr\u00e9sentation du Forum Communautaire Grist"},{"location":"newsletters/2021-07/#visitez-notre-feuille-de-route-produit","text":"Vous voulez savoir sur quoi nous travaillons ? Notre feuille de route produit est d\u00e9sormais publique ! Si vous avez un compte Github, nous vous encourageons \u00e0 laisser des commentaires sur les \u00e9l\u00e9ments de la feuille de route. Nous aimons avoir de vos nouvelles. Visiter la Feuille de Route","title":"Visitez notre Feuille de Route Produit"},{"location":"newsletters/2021-07/#conseils-rapides","text":"Meilleures pratiques pour les colonnes de r\u00e9f\u00e9rence. Lors de la cr\u00e9ation d\u2019une colonne de r\u00e9f\u00e9rence, il est recommand\u00e9 de choisir une colonne d\u2019affichage qui est un identifiant unique pour l\u2019enregistrement. Par exemple, pour les enregistrements de personnes, cela pourrait \u00eatre le nom complet ou l\u2019email. Pour afficher d\u2019autres donn\u00e9es, telles que le d\u00e9partement ou l\u2019anniversaire, utilisez la formule $[Reference Column Id].[Referenced Record\u2019s Field] , (par exemple $Person.Department ). Vous pouvez consulter le fonctionnement de cette formule dans notre guide des colonnes de r\u00e9f\u00e9rence . \u00c9tiqueter les hyperliens avec du texte. Dans les colonnes d\u2019hyperliens, vous pouvez \u00e9tiqueter un lien avec du texte en ajoutant une \u00e9tiquette avant l\u2019url : [\u00e9tiquette du lien] url . Les crochets ne sont pas n\u00e9cessaires. Utiliser la recherche pour trouver une fiche. Si vous avez une vue fiche sur une page et que vous souhaitez rapidement trouver la bonne fiche, vous pouvez utiliser la barre de recherche sur la page pour rapidement afficher la fiche pertinente.","title":"Conseils Rapides"},{"location":"newsletters/2021-07/#approfondir","text":"","title":"Approfondir"},{"location":"newsletters/2021-07/#creer-facilement-des-horodatages-automatiques-et-stamps-utilisateur","text":"Il est parfois utile de savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour ou cr\u00e9\u00e9 pour la derni\u00e8re fois, et par qui. Grist rend simple la cr\u00e9ation de colonnes qui estampillent l\u2019heure ou le nom d\u2019un utilisateur \u00e0 un enregistrement lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. Nous avons cr\u00e9\u00e9 un tutoriel vid\u00e9o qui vous guide pour cr\u00e9er des colonnes d\u2019horodatage et de stamp utilisateur en 3 \u00e9tapes faciles. APPRENDRE : Horodatages/Stamps Utilisateur","title":"Cr\u00e9er Facilement des Horodatages Automatiques et Stamps Utilisateur"},{"location":"newsletters/2021-07/#nouveau-modele","text":"","title":"Nouveau Mod\u00e8le"},{"location":"newsletters/2021-07/#suivi-des-demandes-de-subventions-et-des-financements","text":"Ce mod\u00e8le aide les ONG \u00e0 suivre les demandes de subventions qui ont \u00e9t\u00e9 soumises aux fondations pour obtenir des financements. Le mod\u00e8le inclut \u00e9galement une vue d\u2019ensemble des financements qui montre les financements en cours et les financements attribu\u00e9s, r\u00e9partis par programme de l\u2019ONG. Ouvrir le Suivi des Subventions Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"Suivi des Demandes de Subventions et des Financements"},{"location":"newsletters/2021-08/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019ao\u00fbt 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Ao\u00fbt 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Listes de r\u00e9f\u00e9rences # Il est d\u00e9sormais possible de relier un enregistrement dans une table \u00e0 plusieurs enregistrements dans une autre table. Choisissez le type de colonne Liste de r\u00e9f\u00e9rences pour \u00e9tablir une relation un \u00e0 plusieurs dans votre document. En savoir plus. Int\u00e9gration de Grist # Vous avez des donn\u00e9es \u00e0 partager sur votre site web ? Vous pouvez d\u00e9sormais int\u00e9grer des pages Grist en tant que donn\u00e9es en lecture seule qui se mettent \u00e0 jour en direct. Apprenez comment. Int\u00e9gration Pabbly # Vous pouvez d\u00e9sormais importer des donn\u00e9es dans Grist avec Pabbly ! En savoir plus sur le site de Pabbly. API bas\u00e9e sur les lignes # L\u2019API Grist est d\u00e9sormais plus pratique avec des points de terminaison bas\u00e9s sur les lignes (\u00e9galement appel\u00e9s bas\u00e9s sur les enregistrements). En savoir plus. Modifier le sous-domaine # Vous vous \u00eates inscrit \u00e0 un plan d\u2019\u00e9quipe, mais vous avez chang\u00e9 d\u2019avis sur le nom de sous-domaine \u00e0 utiliser pour votre site ? Vous pouvez d\u00e9sormais modifier votre sous-domaine depuis votre page de facturation. Cliquez sur l\u2019ic\u00f4ne de votre profil en haut \u00e0 droite pour acc\u00e9der \u00e0 votre page de facturation. Support des formules # Besoin d\u2019aide avec les formules ? Il y a une cat\u00e9gorie d\u00e9di\u00e9e dans notre forum communautaire o\u00f9 vous pouvez trouver des formules pour des cas d\u2019utilisation courants et demander de l\u2019aide. Visitez le Forum Grande biblioth\u00e8que de mod\u00e8les # Trouver le bon mod\u00e8le pour votre projet est devenu plus facile. Cliquez sur Exemples & Mod\u00e8les (dans le panneau de gauche de votre espace personnel ou espace d\u2019\u00e9quipe) pour trouver une biblioth\u00e8que plus large de mod\u00e8les \u00e0 choisir. VOIR TOUS LES MOD\u00c8LES Conseils rapides # Comptes multiples. Vous pouvez vous connecter avec plusieurs emails dans Grist pour passer facilement d\u2019un compte \u00e0 l\u2019autre. Cliquez sur l\u2019ic\u00f4ne de votre profil en haut \u00e0 droite, puis s\u00e9lectionnez \u201cAjouter un compte\u201d. Trouver des doublons. Trouvez des doublons en utilisant la formule : \"DUP\" if len(Products.lookupRecords(ProductCode=$ProductCode)) > 1 else \"\" Pour plus d\u2019aide, suivez ce guide. Colorier les valeurs conditionnelles. Utilisez une formule et des entr\u00e9es de colonne de choix color\u00e9es pour signaler les enregistrements qui n\u00e9cessitent une attention particuli\u00e8re. Suivez notre guide rapide. Nouveaux mod\u00e8les # Inventaire de restaurant # Suivez l\u2019inventaire de votre restaurant et les informations sur les fournisseurs, et cr\u00e9ez des bons de commande directement dans Grist. ALLER AU MOD\u00c8LE Commandes personnalis\u00e9es de restaurant # Cr\u00e9ez des commandes personnalis\u00e9es, calculez les co\u00fbts des ingr\u00e9dients et g\u00e9n\u00e9rez une nomenclature, le tout dans un seul document. ALLER AU MOD\u00c8LE Constructeur de produits personnalis\u00e9s # Cr\u00e9ez des produits personnalis\u00e9s et des contrats de production qui additionnent les co\u00fbts des composants et ajoutent votre marge b\u00e9n\u00e9ficiaire au co\u00fbt final. ALLER AU MOD\u00c8LE Vous avez des questions, des commentaires ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/08"},{"location":"newsletters/2021-08/#bulletin-daout-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Ao\u00fbt 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’ao\u00fbt 2021"},{"location":"newsletters/2021-08/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2021-08/#listes-de-references","text":"Il est d\u00e9sormais possible de relier un enregistrement dans une table \u00e0 plusieurs enregistrements dans une autre table. Choisissez le type de colonne Liste de r\u00e9f\u00e9rences pour \u00e9tablir une relation un \u00e0 plusieurs dans votre document. En savoir plus.","title":"Listes de r\u00e9f\u00e9rences"},{"location":"newsletters/2021-08/#integration-de-grist","text":"Vous avez des donn\u00e9es \u00e0 partager sur votre site web ? Vous pouvez d\u00e9sormais int\u00e9grer des pages Grist en tant que donn\u00e9es en lecture seule qui se mettent \u00e0 jour en direct. Apprenez comment.","title":"Int\u00e9gration de Grist"},{"location":"newsletters/2021-08/#integration-pabbly","text":"Vous pouvez d\u00e9sormais importer des donn\u00e9es dans Grist avec Pabbly ! En savoir plus sur le site de Pabbly.","title":"Int\u00e9gration Pabbly"},{"location":"newsletters/2021-08/#api-basee-sur-les-lignes","text":"L\u2019API Grist est d\u00e9sormais plus pratique avec des points de terminaison bas\u00e9s sur les lignes (\u00e9galement appel\u00e9s bas\u00e9s sur les enregistrements). En savoir plus.","title":"API bas\u00e9e sur les lignes"},{"location":"newsletters/2021-08/#modifier-le-sous-domaine","text":"Vous vous \u00eates inscrit \u00e0 un plan d\u2019\u00e9quipe, mais vous avez chang\u00e9 d\u2019avis sur le nom de sous-domaine \u00e0 utiliser pour votre site ? Vous pouvez d\u00e9sormais modifier votre sous-domaine depuis votre page de facturation. Cliquez sur l\u2019ic\u00f4ne de votre profil en haut \u00e0 droite pour acc\u00e9der \u00e0 votre page de facturation.","title":"Modifier le sous-domaine"},{"location":"newsletters/2021-08/#support-des-formules","text":"Besoin d\u2019aide avec les formules ? Il y a une cat\u00e9gorie d\u00e9di\u00e9e dans notre forum communautaire o\u00f9 vous pouvez trouver des formules pour des cas d\u2019utilisation courants et demander de l\u2019aide. Visitez le Forum","title":"Support des formules"},{"location":"newsletters/2021-08/#grande-bibliotheque-de-modeles","text":"Trouver le bon mod\u00e8le pour votre projet est devenu plus facile. Cliquez sur Exemples & Mod\u00e8les (dans le panneau de gauche de votre espace personnel ou espace d\u2019\u00e9quipe) pour trouver une biblioth\u00e8que plus large de mod\u00e8les \u00e0 choisir. VOIR TOUS LES MOD\u00c8LES","title":"Grande biblioth\u00e8que de mod\u00e8les"},{"location":"newsletters/2021-08/#conseils-rapides","text":"Comptes multiples. Vous pouvez vous connecter avec plusieurs emails dans Grist pour passer facilement d\u2019un compte \u00e0 l\u2019autre. Cliquez sur l\u2019ic\u00f4ne de votre profil en haut \u00e0 droite, puis s\u00e9lectionnez \u201cAjouter un compte\u201d. Trouver des doublons. Trouvez des doublons en utilisant la formule : \"DUP\" if len(Products.lookupRecords(ProductCode=$ProductCode)) > 1 else \"\" Pour plus d\u2019aide, suivez ce guide. Colorier les valeurs conditionnelles. Utilisez une formule et des entr\u00e9es de colonne de choix color\u00e9es pour signaler les enregistrements qui n\u00e9cessitent une attention particuli\u00e8re. Suivez notre guide rapide.","title":"Conseils rapides"},{"location":"newsletters/2021-08/#nouveaux-modeles","text":"","title":"Nouveaux mod\u00e8les"},{"location":"newsletters/2021-08/#inventaire-de-restaurant","text":"Suivez l\u2019inventaire de votre restaurant et les informations sur les fournisseurs, et cr\u00e9ez des bons de commande directement dans Grist. ALLER AU MOD\u00c8LE","title":"Inventaire de restaurant"},{"location":"newsletters/2021-08/#commandes-personnalisees-de-restaurant","text":"Cr\u00e9ez des commandes personnalis\u00e9es, calculez les co\u00fbts des ingr\u00e9dients et g\u00e9n\u00e9rez une nomenclature, le tout dans un seul document. ALLER AU MOD\u00c8LE","title":"Commandes personnalis\u00e9es de restaurant"},{"location":"newsletters/2021-08/#constructeur-de-produits-personnalises","text":"Cr\u00e9ez des produits personnalis\u00e9s et des contrats de production qui additionnent les co\u00fbts des composants et ajoutent votre marge b\u00e9n\u00e9ficiaire au co\u00fbt final. ALLER AU MOD\u00c8LE Vous avez des questions, des commentaires ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Constructeur de produits personnalis\u00e9s"},{"location":"newsletters/2021-09/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Septembre 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Septembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Importations Incr\u00e9mentales Am\u00e9lior\u00e9es # Vous pouvez maintenant s\u00e9lectionner une cl\u00e9 de fusion lors de l\u2019importation de plus de donn\u00e9es dans une table existante. Integrately et KonnectzIT # En plus de Zapier et Pabbly Actions, vous pouvez d\u00e9sormais cr\u00e9er des int\u00e9grations avec Integrately et KonnectzIT. \ud83d\ude80 En savoir plus sur le site web d\u2019Integrately et le site web de KonnectzIT . Devises Internationales # Lors du formatage des colonnes num\u00e9riques et enti\u00e8res, vous pouvez d\u00e9sormais choisir parmi une liste de devises mondiales. Vous pouvez d\u00e9finir la devise par d\u00e9faut dans les param\u00e8tres du document. En savoir plus sur les param\u00e8tres du document. Apprendre Grist # Construire avec Grist Webinar # Rejoignez les experts de Grist lors d\u2019un webinaire en direct pour apprendre les astuces qui vous aideront \u00e0 devenir un cr\u00e9ateur Grist expert. \ud83d\udcaa Le webinaire sera en direct le lundi 18 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis (New York). S\u2019INSCRIRE AU WEBINAIRE \u00cates-vous\u2026curieux de Python? # Il existe de nombreuses ressources en ligne pour apprendre Python. L\u2019un des d\u00e9veloppeurs de Grist, Alex Hall, a un projet parall\u00e8le pour apprendre Python appel\u00e9 futurecoder. Nous le recommandons! ALLER \u00c0 FUTURECODER Points Forts de la Communaut\u00e9 # Extraction des mois et trimestres \u00e0 partir des dates. Si vous avez une colonne de dates, vous pouvez r\u00e9sumer ces dates par mois ou par trimestre. Int\u00e9gration de Google Maps en lecture seule. Apprenez \u00e0 int\u00e9grer une carte Google dans un document Grist. Cr\u00e9ation de champs obligatoires. Il est possible de v\u00e9rifier si les champs obligatoires ont \u00e9t\u00e9 remplis, ou non. Aidez-nous \u00e0 faire conna\u00eetre Grist? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci! \ud83d\ude4f G2 Capterra TrustRadius Nouveaux Mod\u00e8les # Gestion de Location # Suivez les locataires, les baux, les revenus et les d\u00e9penses li\u00e9s aux propri\u00e9t\u00e9s locatives en un seul endroit. ALLER AU MOD\u00c8LE Financement d\u2019Entreprise # Planifiez et r\u00e9sumez facilement la structure de financement d\u2019une entreprise. ALLER AU MOD\u00c8LE Grand Livre G\u00e9n\u00e9ral # Construisez un grand livre g\u00e9n\u00e9ral des revenus et des d\u00e9penses li\u00e9s \u00e0 plusieurs entreprises, et r\u00e9sumez les donn\u00e9es dans des tableaux de bord utiles. ALLER AU MOD\u00c8LE Classement de Ligue Sportive # Suivez les matchs d\u2019une ligue sportive et g\u00e9n\u00e9rez automatiquement le classement de la saison. ALLER AU MOD\u00c8LE Suivi de Combat D&D # Ma\u00eetres de donjon, utilisez Grist pour planifier facilement les rencontres, calculer les chiffres cl\u00e9s et suivre les combats. (Lanceur de d\u00e9s inclus.) ALLER AU MOD\u00c8LE Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/09"},{"location":"newsletters/2021-09/#bulletin-de-septembre-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Septembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Septembre 2021"},{"location":"newsletters/2021-09/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-09/#importations-incrementales-ameliorees","text":"Vous pouvez maintenant s\u00e9lectionner une cl\u00e9 de fusion lors de l\u2019importation de plus de donn\u00e9es dans une table existante.","title":"Importations Incr\u00e9mentales Am\u00e9lior\u00e9es"},{"location":"newsletters/2021-09/#integrately-et-konnectzit","text":"En plus de Zapier et Pabbly Actions, vous pouvez d\u00e9sormais cr\u00e9er des int\u00e9grations avec Integrately et KonnectzIT. \ud83d\ude80 En savoir plus sur le site web d\u2019Integrately et le site web de KonnectzIT .","title":"Integrately et KonnectzIT"},{"location":"newsletters/2021-09/#devises-internationales","text":"Lors du formatage des colonnes num\u00e9riques et enti\u00e8res, vous pouvez d\u00e9sormais choisir parmi une liste de devises mondiales. Vous pouvez d\u00e9finir la devise par d\u00e9faut dans les param\u00e8tres du document. En savoir plus sur les param\u00e8tres du document.","title":"Devises Internationales"},{"location":"newsletters/2021-09/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2021-09/#construire-avec-grist-webinar","text":"Rejoignez les experts de Grist lors d\u2019un webinaire en direct pour apprendre les astuces qui vous aideront \u00e0 devenir un cr\u00e9ateur Grist expert. \ud83d\udcaa Le webinaire sera en direct le lundi 18 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis (New York). S\u2019INSCRIRE AU WEBINAIRE","title":"Construire avec Grist Webinar"},{"location":"newsletters/2021-09/#etes-vouscurieux-de-python","text":"Il existe de nombreuses ressources en ligne pour apprendre Python. L\u2019un des d\u00e9veloppeurs de Grist, Alex Hall, a un projet parall\u00e8le pour apprendre Python appel\u00e9 futurecoder. Nous le recommandons! ALLER \u00c0 FUTURECODER","title":"\u00cates-vous…curieux de Python?"},{"location":"newsletters/2021-09/#points-forts-de-la-communaute","text":"Extraction des mois et trimestres \u00e0 partir des dates. Si vous avez une colonne de dates, vous pouvez r\u00e9sumer ces dates par mois ou par trimestre. Int\u00e9gration de Google Maps en lecture seule. Apprenez \u00e0 int\u00e9grer une carte Google dans un document Grist. Cr\u00e9ation de champs obligatoires. Il est possible de v\u00e9rifier si les champs obligatoires ont \u00e9t\u00e9 remplis, ou non.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2021-09/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci! \ud83d\ude4f G2 Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist?"},{"location":"newsletters/2021-09/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2021-09/#gestion-de-location","text":"Suivez les locataires, les baux, les revenus et les d\u00e9penses li\u00e9s aux propri\u00e9t\u00e9s locatives en un seul endroit. ALLER AU MOD\u00c8LE","title":"Gestion de Location"},{"location":"newsletters/2021-09/#financement-dentreprise","text":"Planifiez et r\u00e9sumez facilement la structure de financement d\u2019une entreprise. ALLER AU MOD\u00c8LE","title":"Financement d’Entreprise"},{"location":"newsletters/2021-09/#grand-livre-general","text":"Construisez un grand livre g\u00e9n\u00e9ral des revenus et des d\u00e9penses li\u00e9s \u00e0 plusieurs entreprises, et r\u00e9sumez les donn\u00e9es dans des tableaux de bord utiles. ALLER AU MOD\u00c8LE","title":"Grand Livre G\u00e9n\u00e9ral"},{"location":"newsletters/2021-09/#classement-de-ligue-sportive","text":"Suivez les matchs d\u2019une ligue sportive et g\u00e9n\u00e9rez automatiquement le classement de la saison. ALLER AU MOD\u00c8LE","title":"Classement de Ligue Sportive"},{"location":"newsletters/2021-09/#suivi-de-combat-dd","text":"Ma\u00eetres de donjon, utilisez Grist pour planifier facilement les rencontres, calculer les chiffres cl\u00e9s et suivre les combats. (Lanceur de d\u00e9s inclus.) ALLER AU MOD\u00c8LE Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Suivi de Combat D&D"},{"location":"newsletters/2021-10/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Octobre 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Octobre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # \u00c9dition des Choix # Vous pouvez d\u00e9sormais modifier les valeurs de choix existantes et appliquer ces modifications \u00e0 vos donn\u00e9es automatiquement ! Liens Inline # Les champs de texte convertissent d\u00e9sormais automatiquement les URL en hyperliens, y compris dans les cellules contenant \u00e0 la fois du texte brut et des URL. Aper\u00e7u des Modifications dans les Importations Incr\u00e9mentielles # Lors de l\u2019importation de donn\u00e9es suppl\u00e9mentaires dans une table existante et de l\u2019utilisation d\u2019une cl\u00e9 de fusion pour correspondre aux enregistrements en double, vous pouvez d\u00e9sormais pr\u00e9visualiser les modifications apport\u00e9es \u00e0 vos donn\u00e9es avant de valider l\u2019importation. En savoir plus . Apprendre Grist # Webinar Construire avec Grist # Inscrivez-vous au Webinar de Novembre Rejoignez les experts de Grist lors d\u2019un webinar en direct pour apprendre les meilleures pratiques de Grist. La moiti\u00e9 du webinar est d\u00e9di\u00e9e \u00e0 une session de questions-r\u00e9ponses en direct o\u00f9 vous pouvez obtenir des r\u00e9ponses \u00e0 vos questions. \ud83d\udca1 Le webinar aura lieu le jeudi 18 novembre \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis (New York). S\u2019INSCRIRE AU WEBINAR Regardez l\u2019Enregistrement du Webinar d\u2019Octobre Le 18 octobre, nous avons tenu notre premier webinar Construire avec Grist, ax\u00e9 sur les meilleures pratiques pour tirer le meilleur parti de Grist. Le PDG de Grist, Dmitry Sagalovskiy, a partag\u00e9 des conseils sur l\u2019adaptation des donn\u00e9es d\u2019une feuille de calcul \u00e0 une base de donn\u00e9es en utilisant le principe DRY, et sur la cr\u00e9ation de tableaux de bord en utilisant des vues li\u00e9es. D\u2019autres sujets abord\u00e9s incluent la recherche de la valeur la plus r\u00e9cente d\u2019une liste d\u2019enregistrements historiques, le filtrage par plusieurs champs, la compr\u00e9hension de la fonction de recherche et des r\u00e9f\u00e9rences de recherche, et plus encore. REGARDER L\u2019ENREGISTREMENT Vid\u00e9o sur les Permissions Avanc\u00e9es # Limiter l\u2019acc\u00e8s pour les membres de l\u2019\u00e9quipe Les permissions avanc\u00e9es sont une fonctionnalit\u00e9 b\u00eata de Grist qui permet de limiter l\u2019acc\u00e8s \u00e0 certaines parties de vos donn\u00e9es en fonction de r\u00e8gles personnalis\u00e9es. Les r\u00e8gles peuvent \u00eatre tr\u00e8s granulaires et accorder des permissions de visualisation ou d\u2019\u00e9dition bas\u00e9es sur un certain nombre de variables. L\u2019utilisation la plus courante des permissions avanc\u00e9es est pour les \u00e9quipes qui souhaitent limiter les enregistrements que les membres de l\u2019\u00e9quipe peuvent voir. Par exemple, il est souvent souhaitable que les repr\u00e9sentants commerciaux ne voient que les enregistrements li\u00e9s \u00e0 leurs propres ventes, tandis que leur manager peut voir tous les enregistrements. Nous expliquons comment configurer ces r\u00e8gles dans une vid\u00e9o de 5 minutes. REGARDER LA VID\u00c9O Points Forts de la Communaut\u00e9 # Calculateur d\u2019Heures Suppl\u00e9mentaires. Calculez et suivez automatiquement les taux d\u2019heures suppl\u00e9mentaires hebdomadaires. Calcul des termes. Supposons que vous vendiez des adh\u00e9sions qui durent 12 mois et que vous souhaitiez calculer automatiquement les dates d\u2019expiration des adh\u00e9sions. Apprenez comment calculer les dates futures. Nouveaux Mod\u00e8les # \u00c9quipe de Vente Bas\u00e9e sur les Comptes # Suivez les comptes, contacts et affaires de votre \u00e9quipe de vente. Les permissions avanc\u00e9es limitent l\u2019acc\u00e8s des repr\u00e9sentants commerciaux \u00e0 la visualisation et \u00e0 l\u2019\u00e9dition uniquement de leurs affaires, contacts et comptes. ALLER AU MOD\u00c8LE Suivi du Temps & Facturation # Enregistrez rapidement le temps pass\u00e9 sur les projets, r\u00e9sumez-le et cr\u00e9ez des factures. ALLER AU MOD\u00c8LE Base de Donn\u00e9es des T\u00e9moins Experts # Cr\u00e9ez une base de donn\u00e9es simple des t\u00e9moins experts qui peuvent \u00eatre appel\u00e9s \u00e0 t\u00e9moigner \u00e0 la barre. ALLER AU MOD\u00c8LE Tableau de Capitalisation # Suivez les actionnaires, les actions \u00e9mises et les options, ainsi que les pourcentages de propri\u00e9t\u00e9. ALLER AU MOD\u00c8LE Garderie pour Chiens # G\u00e9rez votre entreprise de garderie en un seul endroit. ALLER AU MOD\u00c8LE Chiffre de C\u00e9sar # L\u2019empereur romain Jules C\u00e9sar utilisait le Chiffre de C\u00e9sar pour crypter les messages. \u00c9crivez un message pour le crypter avec cette m\u00e9thode ancienne. ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/10"},{"location":"newsletters/2021-10/#bulletin-doctobre-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Octobre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’Octobre 2021"},{"location":"newsletters/2021-10/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-10/#edition-des-choix","text":"Vous pouvez d\u00e9sormais modifier les valeurs de choix existantes et appliquer ces modifications \u00e0 vos donn\u00e9es automatiquement !","title":"\u00c9dition des Choix"},{"location":"newsletters/2021-10/#liens-inline","text":"Les champs de texte convertissent d\u00e9sormais automatiquement les URL en hyperliens, y compris dans les cellules contenant \u00e0 la fois du texte brut et des URL.","title":"Liens Inline"},{"location":"newsletters/2021-10/#apercu-des-modifications-dans-les-importations-incrementielles","text":"Lors de l\u2019importation de donn\u00e9es suppl\u00e9mentaires dans une table existante et de l\u2019utilisation d\u2019une cl\u00e9 de fusion pour correspondre aux enregistrements en double, vous pouvez d\u00e9sormais pr\u00e9visualiser les modifications apport\u00e9es \u00e0 vos donn\u00e9es avant de valider l\u2019importation. En savoir plus .","title":"Aper\u00e7u des Modifications dans les Importations Incr\u00e9mentielles"},{"location":"newsletters/2021-10/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2021-10/#webinar-construire-avec-grist","text":"Inscrivez-vous au Webinar de Novembre Rejoignez les experts de Grist lors d\u2019un webinar en direct pour apprendre les meilleures pratiques de Grist. La moiti\u00e9 du webinar est d\u00e9di\u00e9e \u00e0 une session de questions-r\u00e9ponses en direct o\u00f9 vous pouvez obtenir des r\u00e9ponses \u00e0 vos questions. \ud83d\udca1 Le webinar aura lieu le jeudi 18 novembre \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis (New York). S\u2019INSCRIRE AU WEBINAR Regardez l\u2019Enregistrement du Webinar d\u2019Octobre Le 18 octobre, nous avons tenu notre premier webinar Construire avec Grist, ax\u00e9 sur les meilleures pratiques pour tirer le meilleur parti de Grist. Le PDG de Grist, Dmitry Sagalovskiy, a partag\u00e9 des conseils sur l\u2019adaptation des donn\u00e9es d\u2019une feuille de calcul \u00e0 une base de donn\u00e9es en utilisant le principe DRY, et sur la cr\u00e9ation de tableaux de bord en utilisant des vues li\u00e9es. D\u2019autres sujets abord\u00e9s incluent la recherche de la valeur la plus r\u00e9cente d\u2019une liste d\u2019enregistrements historiques, le filtrage par plusieurs champs, la compr\u00e9hension de la fonction de recherche et des r\u00e9f\u00e9rences de recherche, et plus encore. REGARDER L\u2019ENREGISTREMENT","title":"Webinar Construire avec Grist"},{"location":"newsletters/2021-10/#video-sur-les-permissions-avancees","text":"Limiter l\u2019acc\u00e8s pour les membres de l\u2019\u00e9quipe Les permissions avanc\u00e9es sont une fonctionnalit\u00e9 b\u00eata de Grist qui permet de limiter l\u2019acc\u00e8s \u00e0 certaines parties de vos donn\u00e9es en fonction de r\u00e8gles personnalis\u00e9es. Les r\u00e8gles peuvent \u00eatre tr\u00e8s granulaires et accorder des permissions de visualisation ou d\u2019\u00e9dition bas\u00e9es sur un certain nombre de variables. L\u2019utilisation la plus courante des permissions avanc\u00e9es est pour les \u00e9quipes qui souhaitent limiter les enregistrements que les membres de l\u2019\u00e9quipe peuvent voir. Par exemple, il est souvent souhaitable que les repr\u00e9sentants commerciaux ne voient que les enregistrements li\u00e9s \u00e0 leurs propres ventes, tandis que leur manager peut voir tous les enregistrements. Nous expliquons comment configurer ces r\u00e8gles dans une vid\u00e9o de 5 minutes. REGARDER LA VID\u00c9O","title":"Vid\u00e9o sur les Permissions Avanc\u00e9es"},{"location":"newsletters/2021-10/#points-forts-de-la-communaute","text":"Calculateur d\u2019Heures Suppl\u00e9mentaires. Calculez et suivez automatiquement les taux d\u2019heures suppl\u00e9mentaires hebdomadaires. Calcul des termes. Supposons que vous vendiez des adh\u00e9sions qui durent 12 mois et que vous souhaitiez calculer automatiquement les dates d\u2019expiration des adh\u00e9sions. Apprenez comment calculer les dates futures.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2021-10/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2021-10/#equipe-de-vente-basee-sur-les-comptes","text":"Suivez les comptes, contacts et affaires de votre \u00e9quipe de vente. Les permissions avanc\u00e9es limitent l\u2019acc\u00e8s des repr\u00e9sentants commerciaux \u00e0 la visualisation et \u00e0 l\u2019\u00e9dition uniquement de leurs affaires, contacts et comptes. ALLER AU MOD\u00c8LE","title":"\u00c9quipe de Vente Bas\u00e9e sur les Comptes"},{"location":"newsletters/2021-10/#suivi-du-temps-facturation","text":"Enregistrez rapidement le temps pass\u00e9 sur les projets, r\u00e9sumez-le et cr\u00e9ez des factures. ALLER AU MOD\u00c8LE","title":"Suivi du Temps & Facturation"},{"location":"newsletters/2021-10/#base-de-donnees-des-temoins-experts","text":"Cr\u00e9ez une base de donn\u00e9es simple des t\u00e9moins experts qui peuvent \u00eatre appel\u00e9s \u00e0 t\u00e9moigner \u00e0 la barre. ALLER AU MOD\u00c8LE","title":"Base de Donn\u00e9es des T\u00e9moins Experts"},{"location":"newsletters/2021-10/#tableau-de-capitalisation","text":"Suivez les actionnaires, les actions \u00e9mises et les options, ainsi que les pourcentages de propri\u00e9t\u00e9. ALLER AU MOD\u00c8LE","title":"Tableau de Capitalisation"},{"location":"newsletters/2021-10/#garderie-pour-chiens","text":"G\u00e9rez votre entreprise de garderie en un seul endroit. ALLER AU MOD\u00c8LE","title":"Garderie pour Chiens"},{"location":"newsletters/2021-10/#chiffre-de-cesar","text":"L\u2019empereur romain Jules C\u00e9sar utilisait le Chiffre de C\u00e9sar pour crypter les messages. \u00c9crivez un message pour le crypter avec cette m\u00e9thode ancienne. ALLER AU MOD\u00c8LE","title":"Chiffre de C\u00e9sar"},{"location":"newsletters/2021-10/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2021-11/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Novembre 2021 # /* r\u00e9tablir certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist pour le Moulin Novembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Mappage des Colonnes d\u2019Importation # Lors de l\u2019importation de donn\u00e9es suppl\u00e9mentaires dans une table existante dans Grist, vous pouvez maintenant mapper les colonnes de votre fichier aux colonnes de la table Grist. En savoir plus. Filtrer sur des Colonnes Cach\u00e9es # Il est maintenant possible de filtrer les tables en fonction des donn\u00e9es dans les colonnes cach\u00e9es. \ud83d\udc7b Plus d\u2019Options de Tri # Il existe maintenant plus d\u2019options de tri disponibles, y compris le tri naturel. En savoir plus sur les options de tri suppl\u00e9mentaires. Notez que les colonnes Choice ont une option de tri unique bas\u00e9e sur la position des choix dans la configuration des choix. Graphique en Anneau # Grist prend d\u00e9sormais en charge les graphiques en anneau ! Python 3.9 # Python 3.9 est le nouveau d\u00e9faut pour les nouveaux documents. Par rapport au d\u00e9faut pr\u00e9c\u00e9dent (2.7), il dispose de certains packages utiles tels que les fonctions de statistiques math\u00e9matiques. En savoir plus sur les versions de Python prises en charge. Produit du Jour n\u00b01 sur Product Hunt ! # Grist a atteint le statut de Produit du Jour sur Product Hunt ! \ud83c\udf89\ud83d\ude80\ud83d\udc31\u200d\ud83d\ude80 Merci de montrer votre soutien ! De nombreux cr\u00e9ateurs de Grist ont pris le temps de laisser des avis aimables et des mots d\u2019encouragement. Merci ! \ud83d\ude4f Apprendre Grist # Webinar Construire avec Grist # Rejoignez les experts de Grist lors d\u2019un webinar en direct pour apprendre les meilleures pratiques de Grist. Mercredi 15 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis (New York). INSCRIVEZ-VOUS AU WEBINAR DE D\u00c9CEMBRE Lors du webinar de novembre, Anais Concepcion, VP Produit de Grist, a discut\u00e9 de la diff\u00e9rence entre les formules typiques et les formules d\u2019initialisation, et quand utiliser lesquelles. Elle a \u00e9galement partag\u00e9 certaines de ses formules pr\u00e9f\u00e9r\u00e9es et a approfondi l\u2019utilisation des colonnes de r\u00e9f\u00e9rence dans les formules de recherche. REGARDER L\u2019ENREGISTREMENT DE NOVEMBRE Vid\u00e9o : Trouver des Valeurs Duplicates avec une Formule # Les formules sont un excellent moyen de trouver et de signaler les valeurs dupliqu\u00e9es dans une colonne. Cette vid\u00e9o d\u00e9compose une formule qui trouve les doublons pour approfondir votre compr\u00e9hension des formules et de Grist. REGARDER LA VID\u00c9O Points Forts de la Communaut\u00e9 # Diviser une cha\u00eene de texte en une liste. Si vous importez une longue cha\u00eene de texte, telle que des mots-cl\u00e9s s\u00e9par\u00e9s par des virgules, il serait utile de diviser cette cha\u00eene en une liste de valeurs pouvant \u00eatre filtr\u00e9es et regroup\u00e9es dans une colonne de liste de choix. Apprenez comment. Identifier les valeurs qui ne sont pas dans une autre table. Dans la vid\u00e9o ci-dessus, la formule trouve des doublons (ou des valeurs uniques) dans la m\u00eame colonne. Apprenez comment comparer les valeurs entre les tables. Nouveaux Mod\u00e8les # Recrutement # Suivez collaborativement les candidats \u00e0 un emploi et joignez les CV et les notes d\u2019entretien. ALLER AU MOD\u00c8LE Performance du Portefeuille # Suivez la valeur et la performance de votre portefeuille, y compris les P&L ferm\u00e9s et ouverts. ALLER AU MOD\u00c8LE Intervenants d\u2019\u00c9v\u00e9nements # Suivez les intervenants r\u00e9serv\u00e9s pour les \u00e9v\u00e9nements et marquez les \u00e9v\u00e9nements qui ne sont pas encore enti\u00e8rement r\u00e9serv\u00e9s. ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/11"},{"location":"newsletters/2021-11/#bulletin-de-novembre-2021","text":"/* r\u00e9tablir certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist pour le Moulin Novembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Novembre 2021"},{"location":"newsletters/2021-11/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-11/#mappage-des-colonnes-dimportation","text":"Lors de l\u2019importation de donn\u00e9es suppl\u00e9mentaires dans une table existante dans Grist, vous pouvez maintenant mapper les colonnes de votre fichier aux colonnes de la table Grist. En savoir plus.","title":"Mappage des Colonnes d’Importation"},{"location":"newsletters/2021-11/#filtrer-sur-des-colonnes-cachees","text":"Il est maintenant possible de filtrer les tables en fonction des donn\u00e9es dans les colonnes cach\u00e9es. \ud83d\udc7b","title":"Filtrer sur des Colonnes Cach\u00e9es"},{"location":"newsletters/2021-11/#plus-doptions-de-tri","text":"Il existe maintenant plus d\u2019options de tri disponibles, y compris le tri naturel. En savoir plus sur les options de tri suppl\u00e9mentaires. Notez que les colonnes Choice ont une option de tri unique bas\u00e9e sur la position des choix dans la configuration des choix.","title":"Plus d’Options de Tri"},{"location":"newsletters/2021-11/#graphique-en-anneau","text":"Grist prend d\u00e9sormais en charge les graphiques en anneau !","title":"Graphique en Anneau"},{"location":"newsletters/2021-11/#python-39","text":"Python 3.9 est le nouveau d\u00e9faut pour les nouveaux documents. Par rapport au d\u00e9faut pr\u00e9c\u00e9dent (2.7), il dispose de certains packages utiles tels que les fonctions de statistiques math\u00e9matiques. En savoir plus sur les versions de Python prises en charge.","title":"Python 3.9"},{"location":"newsletters/2021-11/#produit-du-jour-n1-sur-product-hunt","text":"Grist a atteint le statut de Produit du Jour sur Product Hunt ! \ud83c\udf89\ud83d\ude80\ud83d\udc31\u200d\ud83d\ude80 Merci de montrer votre soutien ! De nombreux cr\u00e9ateurs de Grist ont pris le temps de laisser des avis aimables et des mots d\u2019encouragement. Merci ! \ud83d\ude4f","title":"Produit du Jour n\u00b01 sur Product Hunt !"},{"location":"newsletters/2021-11/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2021-11/#webinar-construire-avec-grist","text":"Rejoignez les experts de Grist lors d\u2019un webinar en direct pour apprendre les meilleures pratiques de Grist. Mercredi 15 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis (New York). INSCRIVEZ-VOUS AU WEBINAR DE D\u00c9CEMBRE Lors du webinar de novembre, Anais Concepcion, VP Produit de Grist, a discut\u00e9 de la diff\u00e9rence entre les formules typiques et les formules d\u2019initialisation, et quand utiliser lesquelles. Elle a \u00e9galement partag\u00e9 certaines de ses formules pr\u00e9f\u00e9r\u00e9es et a approfondi l\u2019utilisation des colonnes de r\u00e9f\u00e9rence dans les formules de recherche. REGARDER L\u2019ENREGISTREMENT DE NOVEMBRE","title":"Webinar Construire avec Grist"},{"location":"newsletters/2021-11/#video-trouver-des-valeurs-duplicates-avec-une-formule","text":"Les formules sont un excellent moyen de trouver et de signaler les valeurs dupliqu\u00e9es dans une colonne. Cette vid\u00e9o d\u00e9compose une formule qui trouve les doublons pour approfondir votre compr\u00e9hension des formules et de Grist. REGARDER LA VID\u00c9O","title":"Vid\u00e9o : Trouver des Valeurs Duplicates avec une Formule"},{"location":"newsletters/2021-11/#points-forts-de-la-communaute","text":"Diviser une cha\u00eene de texte en une liste. Si vous importez une longue cha\u00eene de texte, telle que des mots-cl\u00e9s s\u00e9par\u00e9s par des virgules, il serait utile de diviser cette cha\u00eene en une liste de valeurs pouvant \u00eatre filtr\u00e9es et regroup\u00e9es dans une colonne de liste de choix. Apprenez comment. Identifier les valeurs qui ne sont pas dans une autre table. Dans la vid\u00e9o ci-dessus, la formule trouve des doublons (ou des valeurs uniques) dans la m\u00eame colonne. Apprenez comment comparer les valeurs entre les tables.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2021-11/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2021-11/#recrutement","text":"Suivez collaborativement les candidats \u00e0 un emploi et joignez les CV et les notes d\u2019entretien. ALLER AU MOD\u00c8LE","title":"Recrutement"},{"location":"newsletters/2021-11/#performance-du-portefeuille","text":"Suivez la valeur et la performance de votre portefeuille, y compris les P&L ferm\u00e9s et ouverts. ALLER AU MOD\u00c8LE","title":"Performance du Portefeuille"},{"location":"newsletters/2021-11/#intervenants-devenements","text":"Suivez les intervenants r\u00e9serv\u00e9s pour les \u00e9v\u00e9nements et marquez les \u00e9v\u00e9nements qui ne sont pas encore enti\u00e8rement r\u00e9serv\u00e9s. ALLER AU MOD\u00c8LE","title":"Intervenants d’\u00c9v\u00e9nements"},{"location":"newsletters/2021-11/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2021-12/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de d\u00e9cembre 2021 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist for the Mill D\u00e9cembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # D\u00e9clencheur instantan\u00e9 Zapier # Les int\u00e9grations de Grist avec Zapier sont devenues plus rapides ! Recherchez les d\u00e9clencheurs instantan\u00e9s Zapier lors de la cr\u00e9ation de vos zaps. En savoir plus sur les d\u00e9clencheurs. Apprendre Grist # Webinaire : Cr\u00e9er des mises en page hautement productives # Apprenez \u00e0 passer des tables \u00e0 des mises en page de type application. Nous partagerons des conseils sur la conception de workflows efficaces et la visualisation des donn\u00e9es. Mercredi 19 janvier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER Notre webinaire de d\u00e9cembre a abord\u00e9 comment importer et r\u00e9sumer des donn\u00e9es dans Grist. Dmitry montre comment cr\u00e9er une structure Grist qui extrait des informations de vos donn\u00e9es avec des tables de synth\u00e8se, puis importer des donn\u00e9es suppl\u00e9mentaires dans la structure existante. REGARDER L\u2019ENREGISTREMENT DE D\u00c9CEMBRE Vid\u00e9o : V\u00e9rification des champs obligatoires # Parfois, certains champs sont obligatoires, comme la colonne email d\u2019une table de contacts. Apprenez \u00e0 utiliser une formule pour v\u00e9rifier si les champs obligatoires sont remplis, et \u00e0 modifier d\u2019autres formules pour n\u2019\u00e9valuer que les enregistrements qui r\u00e9pondent aux exigences. REGARDER LA VID\u00c9O Points forts de la communaut\u00e9 # Cr\u00e9er des sous-cat\u00e9gories d\u00e9pendantes. Les sous-cat\u00e9gories d\u00e9pendantes peuvent \u00eatre utiles pour organiser les donn\u00e9es, par exemple l\u00e9gumes > oignon. Apprenez \u00e0 d\u00e9finir des sous-cat\u00e9gories d\u00e9pendantes. Comment r\u00e9soudre les erreurs dues aux cellules vides. Les formules s\u2019appliquent \u00e0 toutes les lignes d\u2019une colonne. Ainsi, lorsqu\u2019une ligne est vide, vous obtiendrez une erreur. C\u2019est correct mais inesth\u00e9tique. Voici comment y rem\u00e9dier. Tenir un journal des \u00e9v\u00e9nements. Parfois, il est utile de tenir un journal horodat\u00e9 des \u00e9v\u00e9nements, comme les changements de statut des enregistrements. Apprenez \u00e0 en cr\u00e9er un, avec une explication vid\u00e9o int\u00e9gr\u00e9e dans le document Grist. Nouveaux mod\u00e8les # Suivi des habitudes # Pr\u00e9parez-vous \u00e0 r\u00e9ussir vos r\u00e9solutions du Nouvel An ! Adoptez de meilleures habitudes avec ce simple suivi hebdomadaire des habitudes et des progr\u00e8s. ALLER AU MOD\u00c8LE Suivi des liens internes pour le SEO # Optimisez votre SEO avec un suivi des liens internes et un outil d\u2019audit simple pour trouver les pages orphelines et les pages les plus li\u00e9es. ALLER AU MOD\u00c8LE G\u00e9n\u00e9rateur de liens UTM # Cr\u00e9ez facilement et suivez les param\u00e8tres UTM de votre campagne marketing. ALLER AU MOD\u00c8LE G\u00e9n\u00e9rateur de m\u00e8mes # Cr\u00e9ez des m\u00e8mes directement dans Grist ! ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/12"},{"location":"newsletters/2021-12/#bulletin-de-decembre-2021","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist for the Mill D\u00e9cembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de d\u00e9cembre 2021"},{"location":"newsletters/2021-12/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2021-12/#declencheur-instantane-zapier","text":"Les int\u00e9grations de Grist avec Zapier sont devenues plus rapides ! Recherchez les d\u00e9clencheurs instantan\u00e9s Zapier lors de la cr\u00e9ation de vos zaps. En savoir plus sur les d\u00e9clencheurs.","title":"D\u00e9clencheur instantan\u00e9 Zapier"},{"location":"newsletters/2021-12/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2021-12/#webinaire-creer-des-mises-en-page-hautement-productives","text":"Apprenez \u00e0 passer des tables \u00e0 des mises en page de type application. Nous partagerons des conseils sur la conception de workflows efficaces et la visualisation des donn\u00e9es. Mercredi 19 janvier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER Notre webinaire de d\u00e9cembre a abord\u00e9 comment importer et r\u00e9sumer des donn\u00e9es dans Grist. Dmitry montre comment cr\u00e9er une structure Grist qui extrait des informations de vos donn\u00e9es avec des tables de synth\u00e8se, puis importer des donn\u00e9es suppl\u00e9mentaires dans la structure existante. REGARDER L\u2019ENREGISTREMENT DE D\u00c9CEMBRE","title":"Webinaire : Cr\u00e9er des mises en page hautement productives"},{"location":"newsletters/2021-12/#video-verification-des-champs-obligatoires","text":"Parfois, certains champs sont obligatoires, comme la colonne email d\u2019une table de contacts. Apprenez \u00e0 utiliser une formule pour v\u00e9rifier si les champs obligatoires sont remplis, et \u00e0 modifier d\u2019autres formules pour n\u2019\u00e9valuer que les enregistrements qui r\u00e9pondent aux exigences. REGARDER LA VID\u00c9O","title":"Vid\u00e9o : V\u00e9rification des champs obligatoires"},{"location":"newsletters/2021-12/#points-forts-de-la-communaute","text":"Cr\u00e9er des sous-cat\u00e9gories d\u00e9pendantes. Les sous-cat\u00e9gories d\u00e9pendantes peuvent \u00eatre utiles pour organiser les donn\u00e9es, par exemple l\u00e9gumes > oignon. Apprenez \u00e0 d\u00e9finir des sous-cat\u00e9gories d\u00e9pendantes. Comment r\u00e9soudre les erreurs dues aux cellules vides. Les formules s\u2019appliquent \u00e0 toutes les lignes d\u2019une colonne. Ainsi, lorsqu\u2019une ligne est vide, vous obtiendrez une erreur. C\u2019est correct mais inesth\u00e9tique. Voici comment y rem\u00e9dier. Tenir un journal des \u00e9v\u00e9nements. Parfois, il est utile de tenir un journal horodat\u00e9 des \u00e9v\u00e9nements, comme les changements de statut des enregistrements. Apprenez \u00e0 en cr\u00e9er un, avec une explication vid\u00e9o int\u00e9gr\u00e9e dans le document Grist.","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2021-12/#nouveaux-modeles","text":"","title":"Nouveaux mod\u00e8les"},{"location":"newsletters/2021-12/#suivi-des-habitudes","text":"Pr\u00e9parez-vous \u00e0 r\u00e9ussir vos r\u00e9solutions du Nouvel An ! Adoptez de meilleures habitudes avec ce simple suivi hebdomadaire des habitudes et des progr\u00e8s. ALLER AU MOD\u00c8LE","title":"Suivi des habitudes"},{"location":"newsletters/2021-12/#suivi-des-liens-internes-pour-le-seo","text":"Optimisez votre SEO avec un suivi des liens internes et un outil d\u2019audit simple pour trouver les pages orphelines et les pages les plus li\u00e9es. ALLER AU MOD\u00c8LE","title":"Suivi des liens internes pour le SEO"},{"location":"newsletters/2021-12/#generateur-de-liens-utm","text":"Cr\u00e9ez facilement et suivez les param\u00e8tres UTM de votre campagne marketing. ALLER AU MOD\u00c8LE","title":"G\u00e9n\u00e9rateur de liens UTM"},{"location":"newsletters/2021-12/#generateur-de-memes","text":"Cr\u00e9ez des m\u00e8mes directement dans Grist ! ALLER AU MOD\u00c8LE","title":"G\u00e9n\u00e9rateur de m\u00e8mes"},{"location":"newsletters/2021-12/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-01/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Janvier 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist pour le Moulin Janvier 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Lancer et Supprimer les Visites de Document # Plusieurs mod\u00e8les ont des visites de document qui expliquent le flux de travail du mod\u00e8le. Pour relancer la visite, cliquez sur \u201cVisite de ce Document\u201d en bas du panneau de gauche. Pour supprimer la visite du document de votre copie d\u2019un mod\u00e8le, cliquez sur la petite ic\u00f4ne de poubelle \u00e0 c\u00f4t\u00e9 de \u201cVisite de ce Document.\u201d Apprendre Grist # Webinaire : Types de Colonnes et Contr\u00f4le de Version # Travaillez comme un expert Grist ! Approfondissez votre compr\u00e9hension des types de colonnes, des sauvegardes et des copies de travail des documents. Mercredi 16 f\u00e9vrier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER Lors du webinaire de janvier, Natalie a expliqu\u00e9 comment cr\u00e9er des mises en page productives dans Grist. Elle a couvert les liens de m\u00eame enregistrement et de r\u00e9f\u00e9rence, les vues fiche, le tri et le filtrage, les tableaux r\u00e9capitulatifs et les graphiques simples. REGARDER L\u2019ENREGISTREMENT DE JANVIER Points Forts de la Communaut\u00e9 # Afficher l\u2019historique Gmail pour un contact particulier. Si vous stockez des contacts dans Grist et utilisez Gmail pour leur envoyer des e-mails, il existe un moyen simple de cr\u00e9er une formule qui ouvre Gmail \u00e0 une liste de conversations avec ce contact. Basculer un interrupteur avec une condition. Apprenez \u00e0 utiliser une formule conditionnelle dans une colonne de bascule pour que l\u2019interrupteur s\u2019active ou se d\u00e9sactive en fonction de la valeur des donn\u00e9es dans d\u2019autres colonnes. Mettre un texte plus long dans une fiche. Parfois, un texte long rend une ligne trop haute et peu esth\u00e9tique. Il peut \u00eatre pr\u00e9f\u00e9rable de montrer le texte long dans sa propre fiche et d\u2019utiliser le lien de m\u00eame enregistrement pour s\u00e9lectionner la fiche. Apprenez comment. Nouveaux Mod\u00e8les # Gestionnaire d\u2019Inventaire # G\u00e9rez votre inventaire et suivez les commandes entrantes et sortantes. ALLER AU MOD\u00c8LE Suivi des Influenceurs # Suivez les interactions et les progr\u00e8s de vos campagnes de marketing d\u2019influence. ALLER AU MOD\u00c8LE Planificateur d\u2019Exercices # Cr\u00e9ez des plans d\u2019entra\u00eenement dans Grist et consultez-les rapidement \u00e0 la salle de sport pendant que vous soulevez des poids. \ud83d\udcaa ALLER AU MOD\u00c8LE Suivi des Offres de Logiciels # Si vous \u00eates toujours excit\u00e9 de tester les derniers produits SaaS, alors vous avez probablement achet\u00e9 de nombreuses offres \u00e0 vie et annuelles. Suivez vos offres et surveillez les expirations \u00e0 venir avec ce mod\u00e8le. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/01"},{"location":"newsletters/2022-01/#bulletin-de-janvier-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist pour le Moulin Janvier 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Janvier 2022"},{"location":"newsletters/2022-01/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-01/#lancer-et-supprimer-les-visites-de-document","text":"Plusieurs mod\u00e8les ont des visites de document qui expliquent le flux de travail du mod\u00e8le. Pour relancer la visite, cliquez sur \u201cVisite de ce Document\u201d en bas du panneau de gauche. Pour supprimer la visite du document de votre copie d\u2019un mod\u00e8le, cliquez sur la petite ic\u00f4ne de poubelle \u00e0 c\u00f4t\u00e9 de \u201cVisite de ce Document.\u201d","title":"Lancer et Supprimer les Visites de Document"},{"location":"newsletters/2022-01/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-01/#webinaire-types-de-colonnes-et-controle-de-version","text":"Travaillez comme un expert Grist ! Approfondissez votre compr\u00e9hension des types de colonnes, des sauvegardes et des copies de travail des documents. Mercredi 16 f\u00e9vrier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER Lors du webinaire de janvier, Natalie a expliqu\u00e9 comment cr\u00e9er des mises en page productives dans Grist. Elle a couvert les liens de m\u00eame enregistrement et de r\u00e9f\u00e9rence, les vues fiche, le tri et le filtrage, les tableaux r\u00e9capitulatifs et les graphiques simples. REGARDER L\u2019ENREGISTREMENT DE JANVIER","title":"Webinaire : Types de Colonnes et Contr\u00f4le de Version"},{"location":"newsletters/2022-01/#points-forts-de-la-communaute","text":"Afficher l\u2019historique Gmail pour un contact particulier. Si vous stockez des contacts dans Grist et utilisez Gmail pour leur envoyer des e-mails, il existe un moyen simple de cr\u00e9er une formule qui ouvre Gmail \u00e0 une liste de conversations avec ce contact. Basculer un interrupteur avec une condition. Apprenez \u00e0 utiliser une formule conditionnelle dans une colonne de bascule pour que l\u2019interrupteur s\u2019active ou se d\u00e9sactive en fonction de la valeur des donn\u00e9es dans d\u2019autres colonnes. Mettre un texte plus long dans une fiche. Parfois, un texte long rend une ligne trop haute et peu esth\u00e9tique. Il peut \u00eatre pr\u00e9f\u00e9rable de montrer le texte long dans sa propre fiche et d\u2019utiliser le lien de m\u00eame enregistrement pour s\u00e9lectionner la fiche. Apprenez comment.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-01/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-01/#gestionnaire-dinventaire","text":"G\u00e9rez votre inventaire et suivez les commandes entrantes et sortantes. ALLER AU MOD\u00c8LE","title":"Gestionnaire d’Inventaire"},{"location":"newsletters/2022-01/#suivi-des-influenceurs","text":"Suivez les interactions et les progr\u00e8s de vos campagnes de marketing d\u2019influence. ALLER AU MOD\u00c8LE","title":"Suivi des Influenceurs"},{"location":"newsletters/2022-01/#planificateur-dexercices","text":"Cr\u00e9ez des plans d\u2019entra\u00eenement dans Grist et consultez-les rapidement \u00e0 la salle de sport pendant que vous soulevez des poids. \ud83d\udcaa ALLER AU MOD\u00c8LE","title":"Planificateur d’Exercices"},{"location":"newsletters/2022-01/#suivi-des-offres-de-logiciels","text":"Si vous \u00eates toujours excit\u00e9 de tester les derniers produits SaaS, alors vous avez probablement achet\u00e9 de nombreuses offres \u00e0 vie et annuelles. Suivez vos offres et surveillez les expirations \u00e0 venir avec ce mod\u00e8le. ALLER AU MOD\u00c8LE","title":"Suivi des Offres de Logiciels"},{"location":"newsletters/2022-01/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-01/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-02/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de F\u00e9vrier 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist for the Mill F\u00e9vrier 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Menu de Widgets Personnalis\u00e9s # Ajouter des widgets personnalis\u00e9s est devenu plus facile ! S\u00e9lectionnez parmi un menu d\u00e9roulant de widgets pr\u00e9fabriqu\u00e9s facilement configurables dans le panneau de cr\u00e9ation. Les widgets personnalis\u00e9s incluent \u00c9diteur Markdown Bouton d\u2019action Afficher l\u2019image \u00e0 partir de l\u2019URL Carte interactive Factures Imprimer des \u00e9tiquettes Inspecteur d\u2019API \u2026et plus encore ! Permissions Avanc\u00e9es pour Utilisateurs Anonymes # Des permissions avanc\u00e9es granulaires peuvent d\u00e9sormais restreindre les documents partag\u00e9s publiquement et \u00e9ditables. Une nouvelle propri\u00e9t\u00e9 d\u2019utilisateur, user.SessionID, permet de limiter les donn\u00e9es que les visiteurs de votre document peuvent voir ou modifier. Cela ouvre de nouveaux cas d\u2019utilisation, tels que sondages simples et listes participatives mod\u00e9r\u00e9es par la communaut\u00e9 . PARTICIPEZ \u00c0 NOTRE SONDAGE Authentification \u00e0 Deux Facteurs # Grist prend d\u00e9sormais en charge l\u2019authentification \u00e0 deux facteurs pour les connexions par email + mot de passe. Allez dans vos param\u00e8tres de profil pour configurer l\u2019authentification \u00e0 deux facteurs avec des messages texte ou une application d\u2019authentification. Menu Contextuel des Cellules # Un clic droit sur n\u2019importe quelle cellule ouvre d\u00e9sormais un menu qui rend l\u2019\u00e9dition des donn\u00e9es dans Grist plus pratique. Apprendre Grist # Webinaire : Permissions Avanc\u00e9es Granulaires # Apprenez \u00e0 cr\u00e9er des permissions avanc\u00e9es qui d\u00e9terminent qui peut voir quelles colonnes, tables ou lignes de vos donn\u00e9es. Mercredi 16 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Lors du webinaire de f\u00e9vrier, Ana\u00efs a expliqu\u00e9 les types de colonnes et leur formatage, les sauvegardes automatiques et comment travailler sur des forks de votre document. REGARDER L\u2019ENREGISTREMENT DE F\u00c9VRIER Points Forts de la Communaut\u00e9 # Visites de documents. Nos mod\u00e8les ont souvent des visites de documents. Ce n\u2019est pas encore une fonctionnalit\u00e9 aboutie pour les utilisateurs, mais c\u2019est facile \u00e0 faire si vous le souhaitez. Voici comment. Comparer une valeur \u00e0 une valeur correspondante n jours auparavant. Supposons que vous deviez comparer une valeur telle que les hospitalisations aux hospitalisations d\u2019il y a 5 jours. Natalie explique une formule pour faire cela. Somme totale des enregistrements r\u00e9f\u00e9renc\u00e9s. Supposons que vous facturiez plusieurs services sur la m\u00eame facture et que dans Grist, vous ayez plusieurs enregistrements de Services pointant vers les m\u00eames enregistrements de Factures. Apprenez \u00e0 additionner le total des heures par facture. Nouveaux Mod\u00e8les # Listes Participatives # Les permissions avanc\u00e9es facilitent la mod\u00e9ration des listes participatives. Ce mod\u00e8le a des permissions avanc\u00e9es qui permettent aux contributeurs d\u2019ajouter de nouveaux enregistrements et de modifier ou mettre \u00e0 jour leurs contributions \u2014 sans se connecter. Les contributeurs peuvent voir tous les enregistrements, mais ne peuvent pas modifier ou supprimer les contributions des autres. Les mod\u00e9rateurs peuvent modifier ou supprimer n\u2019importe quelle donn\u00e9e, et ils peuvent \u00e9galement ajouter de nouveaux mod\u00e9rateurs \u00e0 la liste. Ce mod\u00e8le utilise \u00e9galement la vue carte. ALLER AU MOD\u00c8LE Sondage Simple # Avec le bon ensemble de permissions avanc\u00e9es, vous pouvez cr\u00e9er des sondages dans Grist ! Ce mod\u00e8le r\u00e9v\u00e8le comment. ALLER AU MOD\u00c8LE CRM des Ventes Num\u00e9riques # Suivez la vente de produits num\u00e9riques tels que des cours, des e-books, des programmes d\u2019adh\u00e9sion, et plus encore dans un CRM simple. ALLER AU MOD\u00c8LE Comparaison des Assurances Sant\u00e9 # Cr\u00e9ez une calculatrice facile \u00e0 utiliser pour que vos employ\u00e9s puissent comparer les plans d\u2019assurance sant\u00e9 offerts par votre organisation. ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/02"},{"location":"newsletters/2022-02/#bulletin-de-fevrier-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist for the Mill F\u00e9vrier 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de F\u00e9vrier 2022"},{"location":"newsletters/2022-02/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-02/#menu-de-widgets-personnalises","text":"Ajouter des widgets personnalis\u00e9s est devenu plus facile ! S\u00e9lectionnez parmi un menu d\u00e9roulant de widgets pr\u00e9fabriqu\u00e9s facilement configurables dans le panneau de cr\u00e9ation. Les widgets personnalis\u00e9s incluent \u00c9diteur Markdown Bouton d\u2019action Afficher l\u2019image \u00e0 partir de l\u2019URL Carte interactive Factures Imprimer des \u00e9tiquettes Inspecteur d\u2019API \u2026et plus encore !","title":"Menu de Widgets Personnalis\u00e9s"},{"location":"newsletters/2022-02/#permissions-avancees-pour-utilisateurs-anonymes","text":"Des permissions avanc\u00e9es granulaires peuvent d\u00e9sormais restreindre les documents partag\u00e9s publiquement et \u00e9ditables. Une nouvelle propri\u00e9t\u00e9 d\u2019utilisateur, user.SessionID, permet de limiter les donn\u00e9es que les visiteurs de votre document peuvent voir ou modifier. Cela ouvre de nouveaux cas d\u2019utilisation, tels que sondages simples et listes participatives mod\u00e9r\u00e9es par la communaut\u00e9 . PARTICIPEZ \u00c0 NOTRE SONDAGE","title":"Permissions Avanc\u00e9es pour Utilisateurs Anonymes"},{"location":"newsletters/2022-02/#authentification-a-deux-facteurs","text":"Grist prend d\u00e9sormais en charge l\u2019authentification \u00e0 deux facteurs pour les connexions par email + mot de passe. Allez dans vos param\u00e8tres de profil pour configurer l\u2019authentification \u00e0 deux facteurs avec des messages texte ou une application d\u2019authentification.","title":"Authentification \u00e0 Deux Facteurs"},{"location":"newsletters/2022-02/#menu-contextuel-des-cellules","text":"Un clic droit sur n\u2019importe quelle cellule ouvre d\u00e9sormais un menu qui rend l\u2019\u00e9dition des donn\u00e9es dans Grist plus pratique.","title":"Menu Contextuel des Cellules"},{"location":"newsletters/2022-02/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-02/#webinaire-permissions-avancees-granulaires","text":"Apprenez \u00e0 cr\u00e9er des permissions avanc\u00e9es qui d\u00e9terminent qui peut voir quelles colonnes, tables ou lignes de vos donn\u00e9es. Mercredi 16 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Lors du webinaire de f\u00e9vrier, Ana\u00efs a expliqu\u00e9 les types de colonnes et leur formatage, les sauvegardes automatiques et comment travailler sur des forks de votre document. REGARDER L\u2019ENREGISTREMENT DE F\u00c9VRIER","title":"Webinaire : Permissions Avanc\u00e9es Granulaires"},{"location":"newsletters/2022-02/#points-forts-de-la-communaute","text":"Visites de documents. Nos mod\u00e8les ont souvent des visites de documents. Ce n\u2019est pas encore une fonctionnalit\u00e9 aboutie pour les utilisateurs, mais c\u2019est facile \u00e0 faire si vous le souhaitez. Voici comment. Comparer une valeur \u00e0 une valeur correspondante n jours auparavant. Supposons que vous deviez comparer une valeur telle que les hospitalisations aux hospitalisations d\u2019il y a 5 jours. Natalie explique une formule pour faire cela. Somme totale des enregistrements r\u00e9f\u00e9renc\u00e9s. Supposons que vous facturiez plusieurs services sur la m\u00eame facture et que dans Grist, vous ayez plusieurs enregistrements de Services pointant vers les m\u00eames enregistrements de Factures. Apprenez \u00e0 additionner le total des heures par facture.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-02/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-02/#listes-participatives","text":"Les permissions avanc\u00e9es facilitent la mod\u00e9ration des listes participatives. Ce mod\u00e8le a des permissions avanc\u00e9es qui permettent aux contributeurs d\u2019ajouter de nouveaux enregistrements et de modifier ou mettre \u00e0 jour leurs contributions \u2014 sans se connecter. Les contributeurs peuvent voir tous les enregistrements, mais ne peuvent pas modifier ou supprimer les contributions des autres. Les mod\u00e9rateurs peuvent modifier ou supprimer n\u2019importe quelle donn\u00e9e, et ils peuvent \u00e9galement ajouter de nouveaux mod\u00e9rateurs \u00e0 la liste. Ce mod\u00e8le utilise \u00e9galement la vue carte. ALLER AU MOD\u00c8LE","title":"Listes Participatives"},{"location":"newsletters/2022-02/#sondage-simple","text":"Avec le bon ensemble de permissions avanc\u00e9es, vous pouvez cr\u00e9er des sondages dans Grist ! Ce mod\u00e8le r\u00e9v\u00e8le comment. ALLER AU MOD\u00c8LE","title":"Sondage Simple"},{"location":"newsletters/2022-02/#crm-des-ventes-numeriques","text":"Suivez la vente de produits num\u00e9riques tels que des cours, des e-books, des programmes d\u2019adh\u00e9sion, et plus encore dans un CRM simple. ALLER AU MOD\u00c8LE","title":"CRM des Ventes Num\u00e9riques"},{"location":"newsletters/2022-02/#comparaison-des-assurances-sante","text":"Cr\u00e9ez une calculatrice facile \u00e0 utiliser pour que vos employ\u00e9s puissent comparer les plans d\u2019assurance sant\u00e9 offerts par votre organisation. ALLER AU MOD\u00c8LE","title":"Comparaison des Assurances Sant\u00e9"},{"location":"newsletters/2022-02/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-02/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-03/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mars 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mars 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Mise en forme conditionnelle ! Annonce du programme Sprouts Laissez-nous vous aider \u00e0 construire dans Grist ! Prochain webinaire \u2013 widgets personnalis\u00e9s Apprenez \u00e0 ajouter des cartes, des factures et d\u2019autres surprises. 3 nouveaux mod\u00e8les \u00c9v\u00e9nements, cadeaux, et plus encore. Grist et Wordle ??? Am\u00e9liorez votre jeu Wordle : \ud83d\udfe8\ud83d\udfe9\ud83d\udfe9\ud83d\udfe9\ud83d\udfe9 Programme Sprouts # Nous lan\u00e7ons un nouveau programme pour aider les \u00e9quipes \u00e0 d\u00e9marrer rapidement avec Grist. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, nous sommes l\u00e0 pour vous aider. Voici comment cela fonctionne : \u00c9ligibilit\u00e9. Toute personne disposant d\u2019un espace d\u2019\u00e9quipe est \u00e9ligible au programme Sprouts (m\u00eame pendant l\u2019essai gratuit). Planifiez un appel de consultation gratuit de 30 minutes. Envoyez un email \u00e0 success@getgrist.com et d\u00e9crivez votre cas d\u2019utilisation. Nous vous mettrons en relation avec un expert Grist de notre \u00e9quipe et planifierons une rencontre. Lors de cet appel, nous estimerons l\u2019ampleur du travail. Pour les projets rapides. Si nous estimons que votre projet peut \u00eatre r\u00e9alis\u00e9 en moins d\u2019une heure, nous le ferons nous-m\u00eames \u2014 gratuitement ! De nombreux cas d\u2019utilisation entrent dans cette cat\u00e9gorie. Pour les projets plus importants. Pour les projets de plus d\u2019une heure, nous recommanderons un prestataire form\u00e9 et v\u00e9rifi\u00e9 par Grist, ayant un acc\u00e8s rapide \u00e0 notre \u00e9quipe. Que vous choisissiez de travailler avec notre prestataire ou avec quelqu\u2019un d\u2019autre, nous planifierons un autre appel de 30 minutes pour nous assurer que tout le monde comprend le projet. Sur cette base, le prestataire estimera le travail et proposera un prix. Visitez notre site web pour soumettre une demande ! Quoi de neuf # Mise en forme conditionnelle # La mise en forme conditionnelle est enfin l\u00e0 ! \ud83c\udf8a Dans le panneau de cr\u00e9ation dans le menu de colonne, sous STYLE DE CELLULE, vous pouvez maintenant ajouter des styles conditionnels. Entrez une formule et stylisez la couleur de fond et de texte de la cellule. Vous pouvez ajouter plusieurs r\u00e8gles conditionnelles. En savoir plus. Am\u00e9lioration de la d\u00e9tection des types de colonnes # Lorsque vous importez ou copiez et collez des donn\u00e9es, Grist est maintenant beaucoup plus performant pour analyser les donn\u00e9es et deviner les types de colonnes. Ouf ! Cela signifie moins de nettoyage de donn\u00e9es lors de l\u2019importation de nouvelles donn\u00e9es ! \ud83c\udf89 Nouvelle m\u00e9thode API pour ajouter ou mettre \u00e0 jour # Nous avons ajout\u00e9 une nouvelle m\u00e9thode pour mettre \u00e0 jour un enregistrement existant ou, s\u2019il n\u2019existe pas, en ajouter un nouveau. En savoir plus. Grist-help est maintenant public ! # Notre Centre d\u2019aide est maintenu sur GitHub. Le r\u00e9pertoire est maintenant public , afin que la communaut\u00e9 puisse aider \u00e0 am\u00e9liorer notre documentation et nos tutoriels. Apprendre Grist # Webinaire : Widgets personnalis\u00e9s # Les widgets personnalis\u00e9s sont devenus plus faciles. Apprenez \u00e0 configurer des widgets personnalis\u00e9s \u00e0 partir du menu des widgets pr\u00e9d\u00e9finis dans le panneau de cr\u00e9ation. Jeudi 14 avril \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Lors du webinaire de mars, Anais a expliqu\u00e9 comment configurer des permissions avanc\u00e9es sur des documents priv\u00e9s et publics. REGARDER L\u2019ENREGISTREMENT DE MARS Points forts de la communaut\u00e9 # Am\u00e9liorez vos statistiques Wordle avec Grist ! David Smedberg a mis Grist \u00e0 l\u2019\u00e9preuve en cr\u00e9ant un document capable de suivre ses statistiques Wordle sur plusieurs appareils et d\u2019analyser ses meilleurs mots de devinette. Il a partag\u00e9 son document sur notre forum . Son article de blog d\u00e9taill\u00e9 sur son exp\u00e9rience est \u00e0 lire absolument. \ud83e\udd29 Fantastique ! Appliquer une formule uniquement aux lignes filtr\u00e9es/visibles. Grist applique les formules \u00e0 toute la colonne. Que faire si vous ne voulez transformer que les lignes filtr\u00e9es ? Voici une solution utile. Basculer activ\u00e9/d\u00e9sactiv\u00e9 si une pi\u00e8ce jointe est pr\u00e9sente. Supposons que vous ayez une colonne de pi\u00e8ces jointes et que vous souhaitiez filtrer les lignes ayant des pi\u00e8ces jointes. Voici comment basculer un interrupteur sur \u201cactiv\u00e9\u201d s\u2019il y a une pi\u00e8ce jointe. Afficher des images \u00e0 partir d\u2019URL. Voici comment configurer un widget personnalis\u00e9 pour pr\u00e9visualiser des images \u00e0 partir d\u2019URL. Nouveaux mod\u00e8les # Sponsors et participants \u00e0 un \u00e9v\u00e9nement # Suivez les inscriptions aux \u00e9v\u00e9nements et les revenus des billets, et r\u00e9conciliez les sponsors et les participants. ALLER AU MOD\u00c8LE Giveaway public # Organisez des giveaways publics sur la base du premier arriv\u00e9, premier servi. Ce mod\u00e8le utilise des permissions avanc\u00e9es pour limiter qui peut r\u00e9clamer quels cadeaux. ALLER AU MOD\u00c8LE Gestion de projet # Suivez les t\u00e2ches par d\u00e9partement et projet, et signalez rapidement les t\u00e2ches \u00e0 risque. ALLER AU MOD\u00c8LE Aider \u00e0 faire passer le mot ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/03"},{"location":"newsletters/2022-03/#bulletin-de-mars-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mars 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Mise en forme conditionnelle ! Annonce du programme Sprouts Laissez-nous vous aider \u00e0 construire dans Grist ! Prochain webinaire \u2013 widgets personnalis\u00e9s Apprenez \u00e0 ajouter des cartes, des factures et d\u2019autres surprises. 3 nouveaux mod\u00e8les \u00c9v\u00e9nements, cadeaux, et plus encore. Grist et Wordle ??? Am\u00e9liorez votre jeu Wordle : \ud83d\udfe8\ud83d\udfe9\ud83d\udfe9\ud83d\udfe9\ud83d\udfe9","title":"Bulletin de Mars 2022"},{"location":"newsletters/2022-03/#programme-sprouts","text":"Nous lan\u00e7ons un nouveau programme pour aider les \u00e9quipes \u00e0 d\u00e9marrer rapidement avec Grist. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, nous sommes l\u00e0 pour vous aider. Voici comment cela fonctionne : \u00c9ligibilit\u00e9. Toute personne disposant d\u2019un espace d\u2019\u00e9quipe est \u00e9ligible au programme Sprouts (m\u00eame pendant l\u2019essai gratuit). Planifiez un appel de consultation gratuit de 30 minutes. Envoyez un email \u00e0 success@getgrist.com et d\u00e9crivez votre cas d\u2019utilisation. Nous vous mettrons en relation avec un expert Grist de notre \u00e9quipe et planifierons une rencontre. Lors de cet appel, nous estimerons l\u2019ampleur du travail. Pour les projets rapides. Si nous estimons que votre projet peut \u00eatre r\u00e9alis\u00e9 en moins d\u2019une heure, nous le ferons nous-m\u00eames \u2014 gratuitement ! De nombreux cas d\u2019utilisation entrent dans cette cat\u00e9gorie. Pour les projets plus importants. Pour les projets de plus d\u2019une heure, nous recommanderons un prestataire form\u00e9 et v\u00e9rifi\u00e9 par Grist, ayant un acc\u00e8s rapide \u00e0 notre \u00e9quipe. Que vous choisissiez de travailler avec notre prestataire ou avec quelqu\u2019un d\u2019autre, nous planifierons un autre appel de 30 minutes pour nous assurer que tout le monde comprend le projet. Sur cette base, le prestataire estimera le travail et proposera un prix. Visitez notre site web pour soumettre une demande !","title":"Programme Sprouts"},{"location":"newsletters/2022-03/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-03/#mise-en-forme-conditionnelle","text":"La mise en forme conditionnelle est enfin l\u00e0 ! \ud83c\udf8a Dans le panneau de cr\u00e9ation dans le menu de colonne, sous STYLE DE CELLULE, vous pouvez maintenant ajouter des styles conditionnels. Entrez une formule et stylisez la couleur de fond et de texte de la cellule. Vous pouvez ajouter plusieurs r\u00e8gles conditionnelles. En savoir plus.","title":"Mise en forme conditionnelle"},{"location":"newsletters/2022-03/#amelioration-de-la-detection-des-types-de-colonnes","text":"Lorsque vous importez ou copiez et collez des donn\u00e9es, Grist est maintenant beaucoup plus performant pour analyser les donn\u00e9es et deviner les types de colonnes. Ouf ! Cela signifie moins de nettoyage de donn\u00e9es lors de l\u2019importation de nouvelles donn\u00e9es ! \ud83c\udf89","title":"Am\u00e9lioration de la d\u00e9tection des types de colonnes"},{"location":"newsletters/2022-03/#nouvelle-methode-api-pour-ajouter-ou-mettre-a-jour","text":"Nous avons ajout\u00e9 une nouvelle m\u00e9thode pour mettre \u00e0 jour un enregistrement existant ou, s\u2019il n\u2019existe pas, en ajouter un nouveau. En savoir plus.","title":"Nouvelle m\u00e9thode API pour ajouter ou mettre \u00e0 jour"},{"location":"newsletters/2022-03/#grist-help-est-maintenant-public","text":"Notre Centre d\u2019aide est maintenu sur GitHub. Le r\u00e9pertoire est maintenant public , afin que la communaut\u00e9 puisse aider \u00e0 am\u00e9liorer notre documentation et nos tutoriels.","title":"Grist-help est maintenant public !"},{"location":"newsletters/2022-03/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-03/#webinaire-widgets-personnalises","text":"Les widgets personnalis\u00e9s sont devenus plus faciles. Apprenez \u00e0 configurer des widgets personnalis\u00e9s \u00e0 partir du menu des widgets pr\u00e9d\u00e9finis dans le panneau de cr\u00e9ation. Jeudi 14 avril \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Lors du webinaire de mars, Anais a expliqu\u00e9 comment configurer des permissions avanc\u00e9es sur des documents priv\u00e9s et publics. REGARDER L\u2019ENREGISTREMENT DE MARS","title":"Webinaire : Widgets personnalis\u00e9s"},{"location":"newsletters/2022-03/#points-forts-de-la-communaute","text":"Am\u00e9liorez vos statistiques Wordle avec Grist ! David Smedberg a mis Grist \u00e0 l\u2019\u00e9preuve en cr\u00e9ant un document capable de suivre ses statistiques Wordle sur plusieurs appareils et d\u2019analyser ses meilleurs mots de devinette. Il a partag\u00e9 son document sur notre forum . Son article de blog d\u00e9taill\u00e9 sur son exp\u00e9rience est \u00e0 lire absolument. \ud83e\udd29 Fantastique ! Appliquer une formule uniquement aux lignes filtr\u00e9es/visibles. Grist applique les formules \u00e0 toute la colonne. Que faire si vous ne voulez transformer que les lignes filtr\u00e9es ? Voici une solution utile. Basculer activ\u00e9/d\u00e9sactiv\u00e9 si une pi\u00e8ce jointe est pr\u00e9sente. Supposons que vous ayez une colonne de pi\u00e8ces jointes et que vous souhaitiez filtrer les lignes ayant des pi\u00e8ces jointes. Voici comment basculer un interrupteur sur \u201cactiv\u00e9\u201d s\u2019il y a une pi\u00e8ce jointe. Afficher des images \u00e0 partir d\u2019URL. Voici comment configurer un widget personnalis\u00e9 pour pr\u00e9visualiser des images \u00e0 partir d\u2019URL.","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2022-03/#nouveaux-modeles","text":"","title":"Nouveaux mod\u00e8les"},{"location":"newsletters/2022-03/#sponsors-et-participants-a-un-evenement","text":"Suivez les inscriptions aux \u00e9v\u00e9nements et les revenus des billets, et r\u00e9conciliez les sponsors et les participants. ALLER AU MOD\u00c8LE","title":"Sponsors et participants \u00e0 un \u00e9v\u00e9nement"},{"location":"newsletters/2022-03/#giveaway-public","text":"Organisez des giveaways publics sur la base du premier arriv\u00e9, premier servi. Ce mod\u00e8le utilise des permissions avanc\u00e9es pour limiter qui peut r\u00e9clamer quels cadeaux. ALLER AU MOD\u00c8LE","title":"Giveaway public"},{"location":"newsletters/2022-03/#gestion-de-projet","text":"Suivez les t\u00e2ches par d\u00e9partement et projet, et signalez rapidement les t\u00e2ches \u00e0 risque. ALLER AU MOD\u00c8LE","title":"Gestion de projet"},{"location":"newsletters/2022-03/#aider-a-faire-passer-le-mot","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius","title":"Aider \u00e0 faire passer le mot ?"},{"location":"newsletters/2022-03/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-04/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019information d\u2019avril 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin \u00c9diteur de texte enrichi ! Base de donn\u00e9es des parcs nationaux dans Grist ! Une ressource et une application maintenues par la communaut\u00e9, enti\u00e8rement construites dans Grist. Nouvelles options de police ! Gras, italique, soulign\u00e9, et barr\u00e9 votre texte. Prochain webinaire \u2013 retour aux bases Comment construire des flux de travail efficaces dans Grist. 2 nouveaux mod\u00e8les Suivi de temps simple et matrice de gestion du temps Covey. Quoi de neuf # \u00c9diteur de texte enrichi # Ajoutez une vue notepad \u00e0 votre document et affichez les donn\u00e9es d\u2019une colonne dans un \u00e9diteur de texte enrichi. Dans le menu des vues personnalis\u00e9es, s\u00e9lectionnez \u201cNotepad\u201d dans la liste des vues pr\u00e9d\u00e9finies. Nouveau s\u00e9lecteur de police et de couleur # Le s\u00e9lecteur de couleurs est devenu encore plus color\u00e9 ! Pimentez vos choix et colonnes avec plus d\u2019options de police et de couleur. Gras , italique , soulign\u00e9 , et barr\u00e9 sont l\u00e0 ! Ces options sont \u00e9galement disponibles avec le formatage conditionnel . Copier les param\u00e8tres de colonne # Si vous copiez des cellules dans une colonne vide, le type et les options de la colonne d\u2019origine seront \u00e9galement copi\u00e9s. Cela inclut le formatage num\u00e9rique et de date, les couleurs de cellule inconditionnelles et les configurations de choix. Notez que les r\u00e8gles conditionnelles ne seront pas copi\u00e9es. Nouvelle action Zapier - Cr\u00e9er ou mettre \u00e0 jour un enregistrement # Il y a une nouvelle action Grist dans Zapier. Lors de l\u2019importation de donn\u00e9es externes via Zapier, vous pouvez d\u00e9sormais mettre \u00e0 jour les enregistrements existants en fonction d\u2019une cl\u00e9 de fusion ou, s\u2019il n\u2019y a pas de correspondance, cr\u00e9er un nouvel enregistrement. En savoir plus sur Zapier. Cela s\u2019appuie sur le point de terminaison API r\u00e9cemment ajout\u00e9 add-or-update . Int\u00e9grateur Dropbox # Si vous stockez des fichiers dans Dropbox, int\u00e9grez vos fichiers directement dans Grist. S\u00e9lectionnez \u201cInt\u00e9grateur Dropbox\u201d dans la liste des vues personnalis\u00e9es. Apprendre Grist # Webinaire : Retour aux bases # On nous demande tout le temps comment commencer avec Grist. La meilleure fa\u00e7on de d\u00e9montrer est avec un cas d\u2019utilisation r\u00e9el. Nous prendrons un flux de travail de feuille de calcul et l\u2019am\u00e9liorerons dans Grist. Jeudi 19 mai \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI Lors du webinaire d\u2019avril, Natalie a expliqu\u00e9 comment configurer les vues personnalis\u00e9es les plus utiles. REGARDEZ L\u2019ENREGISTREMENT D\u2019AVRIL Programme Sprouts # Commencez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre fait pour vous. EN SAVOIR PLUS Points forts de la communaut\u00e9 # Utilisation des colonnes basculantes pour cr\u00e9er une exp\u00e9rience de type bouton. Josh utilise Grist sur mobile pour suivre l\u2019inventaire dans son magasin de fleurs. Il a partag\u00e9 comment il utilise les colonnes basculantes comme boutons pour rationaliser son flux de travail. R\u00e9sumer les donn\u00e9es de plusieurs tables. Affinez vos comp\u00e9tences en Python en suivant le guide de Natalie sur la fa\u00e7on de r\u00e9cup\u00e9rer des donn\u00e9es de plusieurs tables dans la m\u00eame table de r\u00e9sum\u00e9. Pour les auto-h\u00e9bergeurs, un mod\u00e8le pour Grist avec traefik et Docker compose. Ex\u00e9cuter Grist sur votre propre ordinateur est assez facile. L\u2019h\u00e9berger pour le partager avec d\u2019autres n\u00e9cessite quelques \u00e9tapes suppl\u00e9mentaires. Apprenez comment. Nouveaux mod\u00e8les # Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis # Votre ressource unique pour toutes les informations sur les parcs nationaux ! Recherchez des parcs par d\u00e9signation, \u00e9tat, activit\u00e9s, et plus encore. Laissez des avis et suivez vos voyages ! Cette base de donn\u00e9es est participative et maintenue par la communaut\u00e9. Il y a une page dans la base de donn\u00e9es pour soumettre des suggestions et des corrections. Si vous vous sentez inspir\u00e9 pour cr\u00e9er votre propre base de donn\u00e9es participative, consultez \u00e9galement l\u2019exemple plus simple de liste participative . Contactez-nous sur notre Forum Communautaire pour obtenir de l\u2019aide ou partager le r\u00e9sultat ! ALLER AU MOD\u00c8LE Suivi de temps simple # C\u2019est comme un chronom\u00e8tre dans une feuille de calcul ! Avec l\u2019avantage suppl\u00e9mentaire de cr\u00e9er un journal du temps total pass\u00e9 sur les t\u00e2ches. ALLER AU MOD\u00c8LE Matrice de gestion du temps Covey # Organisez votre liste de t\u00e2ches avec la m\u00e9thode de gestion du temps Covey. Priorisez par ce qui est urgent et important. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f \ud83c\udf1f Nouveau ! Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/04"},{"location":"newsletters/2022-04/#bulletin-dinformation-davril-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin \u00c9diteur de texte enrichi ! Base de donn\u00e9es des parcs nationaux dans Grist ! Une ressource et une application maintenues par la communaut\u00e9, enti\u00e8rement construites dans Grist. Nouvelles options de police ! Gras, italique, soulign\u00e9, et barr\u00e9 votre texte. Prochain webinaire \u2013 retour aux bases Comment construire des flux de travail efficaces dans Grist. 2 nouveaux mod\u00e8les Suivi de temps simple et matrice de gestion du temps Covey.","title":"Bulletin d’information d’avril 2022"},{"location":"newsletters/2022-04/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-04/#editeur-de-texte-enrichi","text":"Ajoutez une vue notepad \u00e0 votre document et affichez les donn\u00e9es d\u2019une colonne dans un \u00e9diteur de texte enrichi. Dans le menu des vues personnalis\u00e9es, s\u00e9lectionnez \u201cNotepad\u201d dans la liste des vues pr\u00e9d\u00e9finies.","title":"\u00c9diteur de texte enrichi"},{"location":"newsletters/2022-04/#nouveau-selecteur-de-police-et-de-couleur","text":"Le s\u00e9lecteur de couleurs est devenu encore plus color\u00e9 ! Pimentez vos choix et colonnes avec plus d\u2019options de police et de couleur. Gras , italique , soulign\u00e9 , et barr\u00e9 sont l\u00e0 ! Ces options sont \u00e9galement disponibles avec le formatage conditionnel .","title":"Nouveau s\u00e9lecteur de police et de couleur"},{"location":"newsletters/2022-04/#copier-les-parametres-de-colonne","text":"Si vous copiez des cellules dans une colonne vide, le type et les options de la colonne d\u2019origine seront \u00e9galement copi\u00e9s. Cela inclut le formatage num\u00e9rique et de date, les couleurs de cellule inconditionnelles et les configurations de choix. Notez que les r\u00e8gles conditionnelles ne seront pas copi\u00e9es.","title":"Copier les param\u00e8tres de colonne"},{"location":"newsletters/2022-04/#nouvelle-action-zapier-creer-ou-mettre-a-jour-un-enregistrement","text":"Il y a une nouvelle action Grist dans Zapier. Lors de l\u2019importation de donn\u00e9es externes via Zapier, vous pouvez d\u00e9sormais mettre \u00e0 jour les enregistrements existants en fonction d\u2019une cl\u00e9 de fusion ou, s\u2019il n\u2019y a pas de correspondance, cr\u00e9er un nouvel enregistrement. En savoir plus sur Zapier. Cela s\u2019appuie sur le point de terminaison API r\u00e9cemment ajout\u00e9 add-or-update .","title":"Nouvelle action Zapier - Cr\u00e9er ou mettre \u00e0 jour un enregistrement"},{"location":"newsletters/2022-04/#integrateur-dropbox","text":"Si vous stockez des fichiers dans Dropbox, int\u00e9grez vos fichiers directement dans Grist. S\u00e9lectionnez \u201cInt\u00e9grateur Dropbox\u201d dans la liste des vues personnalis\u00e9es.","title":"Int\u00e9grateur Dropbox"},{"location":"newsletters/2022-04/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-04/#webinaire-retour-aux-bases","text":"On nous demande tout le temps comment commencer avec Grist. La meilleure fa\u00e7on de d\u00e9montrer est avec un cas d\u2019utilisation r\u00e9el. Nous prendrons un flux de travail de feuille de calcul et l\u2019am\u00e9liorerons dans Grist. Jeudi 19 mai \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI Lors du webinaire d\u2019avril, Natalie a expliqu\u00e9 comment configurer les vues personnalis\u00e9es les plus utiles. REGARDEZ L\u2019ENREGISTREMENT D\u2019AVRIL","title":"Webinaire : Retour aux bases"},{"location":"newsletters/2022-04/#programme-sprouts","text":"Commencez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre fait pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-04/#points-forts-de-la-communaute","text":"Utilisation des colonnes basculantes pour cr\u00e9er une exp\u00e9rience de type bouton. Josh utilise Grist sur mobile pour suivre l\u2019inventaire dans son magasin de fleurs. Il a partag\u00e9 comment il utilise les colonnes basculantes comme boutons pour rationaliser son flux de travail. R\u00e9sumer les donn\u00e9es de plusieurs tables. Affinez vos comp\u00e9tences en Python en suivant le guide de Natalie sur la fa\u00e7on de r\u00e9cup\u00e9rer des donn\u00e9es de plusieurs tables dans la m\u00eame table de r\u00e9sum\u00e9. Pour les auto-h\u00e9bergeurs, un mod\u00e8le pour Grist avec traefik et Docker compose. Ex\u00e9cuter Grist sur votre propre ordinateur est assez facile. L\u2019h\u00e9berger pour le partager avec d\u2019autres n\u00e9cessite quelques \u00e9tapes suppl\u00e9mentaires. Apprenez comment.","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2022-04/#nouveaux-modeles","text":"","title":"Nouveaux mod\u00e8les"},{"location":"newsletters/2022-04/#base-de-donnees-des-parcs-nationaux-des-etats-unis","text":"Votre ressource unique pour toutes les informations sur les parcs nationaux ! Recherchez des parcs par d\u00e9signation, \u00e9tat, activit\u00e9s, et plus encore. Laissez des avis et suivez vos voyages ! Cette base de donn\u00e9es est participative et maintenue par la communaut\u00e9. Il y a une page dans la base de donn\u00e9es pour soumettre des suggestions et des corrections. Si vous vous sentez inspir\u00e9 pour cr\u00e9er votre propre base de donn\u00e9es participative, consultez \u00e9galement l\u2019exemple plus simple de liste participative . Contactez-nous sur notre Forum Communautaire pour obtenir de l\u2019aide ou partager le r\u00e9sultat ! ALLER AU MOD\u00c8LE","title":"Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis"},{"location":"newsletters/2022-04/#suivi-de-temps-simple","text":"C\u2019est comme un chronom\u00e8tre dans une feuille de calcul ! Avec l\u2019avantage suppl\u00e9mentaire de cr\u00e9er un journal du temps total pass\u00e9 sur les t\u00e2ches. ALLER AU MOD\u00c8LE","title":"Suivi de temps simple"},{"location":"newsletters/2022-04/#matrice-de-gestion-du-temps-covey","text":"Organisez votre liste de t\u00e2ches avec la m\u00e9thode de gestion du temps Covey. Priorisez par ce qui est urgent et important. ALLER AU MOD\u00c8LE","title":"Matrice de gestion du temps Covey"},{"location":"newsletters/2022-04/#aidez-nous-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f \ud83c\udf1f Nouveau ! Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-04/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2022 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Dans ce bulletin Page de Donn\u00e9es Sources ! Lier des Donn\u00e9es Connexes aux Tables de Synth\u00e8se Lors de la liaison des tables de synth\u00e8se et d\u2019autres vues, vous pouvez d\u00e9sormais lier \u00e9galement les colonnes de r\u00e9f\u00e9rence. Webinaire : Suivi des D\u00e9penses dans Grist vs Excel Comment cr\u00e9er des flux de travail efficaces dans Grist. Raccourci pour Dupliquer des Lignes Ctrl + Shift + D sur Windows, ou \u2318 \u21e7 D sur Mac. 2 Nouveaux Mod\u00e8les Pr\u00e9paration aux ouragans et gestion des employ\u00e9s temporaires. Quoi de Neuf # Donn\u00e9es Sources # Pr\u00e9sentation de la page de donn\u00e9es sources, une page sp\u00e9ciale qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document, facilitant ainsi la recherche et la navigation dans toutes vos donn\u00e9es. En savoir plus. Les Donn\u00e9es Sources \u00e9taient attendues depuis longtemps ! Dans Grist, il y a toujours eu une s\u00e9paration conceptuelle entre les vues et les donn\u00e9es sous-jacentes. En tant que cr\u00e9ateur Grist, vous vous \u00eates probablement retrouv\u00e9 dans la peau d\u2019un d\u00e9veloppeur d\u2019applications : \u00e0 un moment donn\u00e9, vous pensez aux relations dans les donn\u00e9es, et \u00e0 un autre moment, vous concevez comment pr\u00e9senter ces donn\u00e9es dans des vues productives et pratiques. Les donn\u00e9es sources rendent cette s\u00e9paration explicite. C\u2019est un endroit o\u00f9 vous pouvez toujours trouver les donn\u00e9es sous-jacentes et leur structure. Lors de la cr\u00e9ation de pages, votre liste de pages peut d\u00e9sormais \u00eatre limit\u00e9e aux vues les plus utiles, sans l\u2019encombrement des tables auxiliaires. Celles-ci restent disponibles \u00e0 tout moment dans la vue des donn\u00e9es sources. Lier des Donn\u00e9es R\u00e9f\u00e9renc\u00e9es aux Tables de Synth\u00e8se # Les tables qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes d\u2019une table de synth\u00e8se peuvent d\u00e9sormais \u00eatre li\u00e9es \u00e0 la table de synth\u00e8se elle-m\u00eame. Point de Terminaison API GET /attachments # Nouveau point de terminaison API. /attachments renverra la liste de toutes les m\u00e9tadonn\u00e9es des pi\u00e8ces jointes. En savoir plus. D\u00e9tails d\u2019Acc\u00e8s et Quitter un Document # Les non-propri\u00e9taires de documents peuvent d\u00e9sormais consulter leurs d\u00e9tails d\u2019acc\u00e8s et quitter un document s\u2019ils le souhaitent. Cliquez sur l\u2019ic\u00f4ne de partage en haut \u00e0 droite, puis sur \u00ab D\u00e9tails d\u2019acc\u00e8s \u00bb. Dans la fen\u00eatre contextuelle des d\u00e9tails d\u2019acc\u00e8s, vous pouvez cliquer sur l\u2019ic\u00f4ne de la corbeille pour quitter un document. Nouveau Raccourci Clavier # Nouveau raccourci clavier pour dupliquer les enregistrements s\u00e9lectionn\u00e9s ! Ctrl + Shift + D sur Windows, ou \u2318 \u21e7 D sur Mac. Apprendre Grist # Webinaire : Suivi des D\u00e9penses dans Grist vs Excel # Suivre les d\u00e9penses dans une feuille de calcul peut \u00eatre pratique, mais les feuilles de calcul traditionnelles n\u00e9cessitent beaucoup de maintenance \u2014 surtout avec les formules. Grist peut rendre le suivi des d\u00e9penses plus facile. Rejoignez-nous pour en savoir plus. Jeudi 16 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUIN En mai, nous sommes retourn\u00e9s aux bases. Natalie a pris un flux de travail de donn\u00e9es dans Google Sheets et l\u2019a transform\u00e9 en un tableau de bord productif dans Grist. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais que vous avez besoin d\u2019aide pour le construire, le programme Sprouts peut \u00eatre fait pour vous. EN SAVOIR PLUS Points Forts de la Communaut\u00e9 # Num\u00e9ros s\u00e9quentiels \u00e0 l\u2019aide de formules. Consultez ce fil de discussion avec quelques exemples sur comment obtenir des num\u00e9ros s\u00e9quentiels dans Grist. Concat\u00e9ner des donn\u00e9es dans des colonnes de types diff\u00e9rents. Concat\u00e9ner du texte est simple, mais que faire si vous souhaitez concat\u00e9ner diff\u00e9rents types de donn\u00e9es, tels que du texte, des colonnes de r\u00e9f\u00e9rence et des dates ? Apprenez comment. Num\u00e9ros commen\u00e7ant par z\u00e9ro. Natalie partage deux m\u00e9thodes. Nouveaux Mod\u00e8les # Pr\u00e9paration aux Ouragans # Vous vivez sur la c\u00f4te ? Ne stressez pas ! Utilisez ce mod\u00e8le pour vous assurer que vous avez tout ce dont vous avez besoin en cas d\u2019ouragan. ALLER AU MOD\u00c8LE Gestion des Employ\u00e9s Temporaires # G\u00e9rez facilement le personnel pour les \u00e9v\u00e9nements et suivez les feuilles de temps des employ\u00e9s. Ces donn\u00e9es d\u2019exemple sont ax\u00e9es sur le personnel pour les spectacles dans un th\u00e9\u00e2tre, mais le mod\u00e8le peut \u00eatre modifi\u00e9 pour la restauration, le personnel \u00e9v\u00e9nementiel, et plus encore. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/05"},{"location":"newsletters/2022-05/#bulletin-de-mai-2022","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Dans ce bulletin Page de Donn\u00e9es Sources ! Lier des Donn\u00e9es Connexes aux Tables de Synth\u00e8se Lors de la liaison des tables de synth\u00e8se et d\u2019autres vues, vous pouvez d\u00e9sormais lier \u00e9galement les colonnes de r\u00e9f\u00e9rence. Webinaire : Suivi des D\u00e9penses dans Grist vs Excel Comment cr\u00e9er des flux de travail efficaces dans Grist. Raccourci pour Dupliquer des Lignes Ctrl + Shift + D sur Windows, ou \u2318 \u21e7 D sur Mac. 2 Nouveaux Mod\u00e8les Pr\u00e9paration aux ouragans et gestion des employ\u00e9s temporaires.","title":"Bulletin de Mai 2022"},{"location":"newsletters/2022-05/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-05/#donnees-sources","text":"Pr\u00e9sentation de la page de donn\u00e9es sources, une page sp\u00e9ciale qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document, facilitant ainsi la recherche et la navigation dans toutes vos donn\u00e9es. En savoir plus. Les Donn\u00e9es Sources \u00e9taient attendues depuis longtemps ! Dans Grist, il y a toujours eu une s\u00e9paration conceptuelle entre les vues et les donn\u00e9es sous-jacentes. En tant que cr\u00e9ateur Grist, vous vous \u00eates probablement retrouv\u00e9 dans la peau d\u2019un d\u00e9veloppeur d\u2019applications : \u00e0 un moment donn\u00e9, vous pensez aux relations dans les donn\u00e9es, et \u00e0 un autre moment, vous concevez comment pr\u00e9senter ces donn\u00e9es dans des vues productives et pratiques. Les donn\u00e9es sources rendent cette s\u00e9paration explicite. C\u2019est un endroit o\u00f9 vous pouvez toujours trouver les donn\u00e9es sous-jacentes et leur structure. Lors de la cr\u00e9ation de pages, votre liste de pages peut d\u00e9sormais \u00eatre limit\u00e9e aux vues les plus utiles, sans l\u2019encombrement des tables auxiliaires. Celles-ci restent disponibles \u00e0 tout moment dans la vue des donn\u00e9es sources.","title":"Donn\u00e9es Sources"},{"location":"newsletters/2022-05/#lier-des-donnees-referencees-aux-tables-de-synthese","text":"Les tables qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes d\u2019une table de synth\u00e8se peuvent d\u00e9sormais \u00eatre li\u00e9es \u00e0 la table de synth\u00e8se elle-m\u00eame.","title":"Lier des Donn\u00e9es R\u00e9f\u00e9renc\u00e9es aux Tables de Synth\u00e8se"},{"location":"newsletters/2022-05/#point-de-terminaison-api-get-attachments","text":"Nouveau point de terminaison API. /attachments renverra la liste de toutes les m\u00e9tadonn\u00e9es des pi\u00e8ces jointes. En savoir plus.","title":"Point de Terminaison API GET /attachments"},{"location":"newsletters/2022-05/#details-dacces-et-quitter-un-document","text":"Les non-propri\u00e9taires de documents peuvent d\u00e9sormais consulter leurs d\u00e9tails d\u2019acc\u00e8s et quitter un document s\u2019ils le souhaitent. Cliquez sur l\u2019ic\u00f4ne de partage en haut \u00e0 droite, puis sur \u00ab D\u00e9tails d\u2019acc\u00e8s \u00bb. Dans la fen\u00eatre contextuelle des d\u00e9tails d\u2019acc\u00e8s, vous pouvez cliquer sur l\u2019ic\u00f4ne de la corbeille pour quitter un document.","title":"D\u00e9tails d’Acc\u00e8s et Quitter un Document"},{"location":"newsletters/2022-05/#nouveau-raccourci-clavier","text":"Nouveau raccourci clavier pour dupliquer les enregistrements s\u00e9lectionn\u00e9s ! Ctrl + Shift + D sur Windows, ou \u2318 \u21e7 D sur Mac.","title":"Nouveau Raccourci Clavier"},{"location":"newsletters/2022-05/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-05/#webinaire-suivi-des-depenses-dans-grist-vs-excel","text":"Suivre les d\u00e9penses dans une feuille de calcul peut \u00eatre pratique, mais les feuilles de calcul traditionnelles n\u00e9cessitent beaucoup de maintenance \u2014 surtout avec les formules. Grist peut rendre le suivi des d\u00e9penses plus facile. Rejoignez-nous pour en savoir plus. Jeudi 16 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUIN En mai, nous sommes retourn\u00e9s aux bases. Natalie a pris un flux de travail de donn\u00e9es dans Google Sheets et l\u2019a transform\u00e9 en un tableau de bord productif dans Grist. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL","title":"Webinaire : Suivi des D\u00e9penses dans Grist vs Excel"},{"location":"newsletters/2022-05/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais que vous avez besoin d\u2019aide pour le construire, le programme Sprouts peut \u00eatre fait pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-05/#points-forts-de-la-communaute","text":"Num\u00e9ros s\u00e9quentiels \u00e0 l\u2019aide de formules. Consultez ce fil de discussion avec quelques exemples sur comment obtenir des num\u00e9ros s\u00e9quentiels dans Grist. Concat\u00e9ner des donn\u00e9es dans des colonnes de types diff\u00e9rents. Concat\u00e9ner du texte est simple, mais que faire si vous souhaitez concat\u00e9ner diff\u00e9rents types de donn\u00e9es, tels que du texte, des colonnes de r\u00e9f\u00e9rence et des dates ? Apprenez comment. Num\u00e9ros commen\u00e7ant par z\u00e9ro. Natalie partage deux m\u00e9thodes.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-05/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-05/#preparation-aux-ouragans","text":"Vous vivez sur la c\u00f4te ? Ne stressez pas ! Utilisez ce mod\u00e8le pour vous assurer que vous avez tout ce dont vous avez besoin en cas d\u2019ouragan. ALLER AU MOD\u00c8LE","title":"Pr\u00e9paration aux Ouragans"},{"location":"newsletters/2022-05/#gestion-des-employes-temporaires","text":"G\u00e9rez facilement le personnel pour les \u00e9v\u00e9nements et suivez les feuilles de temps des employ\u00e9s. Ces donn\u00e9es d\u2019exemple sont ax\u00e9es sur le personnel pour les spectacles dans un th\u00e9\u00e2tre, mais le mod\u00e8le peut \u00eatre modifi\u00e9 pour la restauration, le personnel \u00e9v\u00e9nementiel, et plus encore. ALLER AU MOD\u00c8LE","title":"Gestion des Employ\u00e9s Temporaires"},{"location":"newsletters/2022-05/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-05/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2022 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce Bulletin Filtrage par Intervalle Bonne Fiert\u00e9 ! D\u00e9couvrez notre feuille de calcul arc-en-ciel ! \ud83c\udf08 Webinaire : Structurer les Donn\u00e9es Relationnelles Meilleurs conseils sur la structuration des donn\u00e9es dans Grist. 2 Nouveaux Mod\u00e8les Suivi des d\u00e9penses et planification des repas. PEEK(a-boo) Nouvelle fonction sp\u00e9ciale pour r\u00e9soudre les r\u00e9f\u00e9rences circulaires dans les formules d\u2019initialisation. Bonne Fiert\u00e9 ! # Nous esp\u00e9rons que vous avez pass\u00e9 un mois de la Fiert\u00e9 amusant et color\u00e9 ! Nous l\u2019avons fait. Feuille de calcul arc-en-ciel ! \ud83c\udff3\u200d\ud83c\udf08 ALLER \u00c0 LA FEUILLE DE CALCUL ARC-EN-CIEL Quoi de Neuf # Filtrage par Intervalle # Il est maintenant possible de filtrer les colonnes Num\u00e9riques et Date par un intervalle ! Gardez un \u0153il sur d\u2019autres am\u00e9liorations du filtrage dans un avenir proche. PEEK() # PEEK () \u00e9value une expression sans cr\u00e9er de d\u00e9pendances ni exiger que les valeurs r\u00e9f\u00e9renc\u00e9es soient \u00e0 jour, et utilise la valeur qu\u2019il trouve dans une cellule. Ceci est utile pour \u00e9viter les erreurs de r\u00e9f\u00e9rence circulaire, en particulier dans les formules d\u2019initialisation. En savoir plus. Voici un exemple de PEEK() en action. Notez que dans la colonne de formule d\u2019initialisation, les deux formules peuvent se r\u00e9f\u00e9rencer mutuellement sans cr\u00e9er d\u2019erreur circulaire. Apprendre Grist # Webinaire : Structurer les Donn\u00e9es dans Grist # Avant de pouvoir cr\u00e9er des mises en page productives, vous devez r\u00e9fl\u00e9chir \u00e0 la structuration de vos donn\u00e9es. En juillet, nous partagerons quelques meilleures pratiques et mettrons en \u00e9vidence les diff\u00e9rences dans la structuration des donn\u00e9es dans les feuilles de calcul par rapport \u00e0 Grist. Jeudi 21 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUILLET En juin, Anais a d\u00e9montr\u00e9 comment Grist peut simplifier les flux de travail de donn\u00e9es, tels que le suivi des d\u00e9penses, par rapport aux feuilles de calcul traditionnelles. REGARDER L\u2019ENREGISTREMENT DE JUIN Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts est peut-\u00eatre fait pour vous. EN SAVOIR PLUS Conseils Rapides # Toutes les colonnes de formule dans les tables de r\u00e9sum\u00e9 peuvent \u00eatre des s\u00e9ries dans les graphiques bas\u00e9s sur cette table de r\u00e9sum\u00e9. Par exemple, dans le mod\u00e8le de Grand Livre , les colonnes de Profit dans les tables de r\u00e9sum\u00e9 sont utilis\u00e9es dans les graphiques. Il existe des options de tri suppl\u00e9mentaires dans le menu de tri du panneau de cr\u00e9ation sous l\u2019ic\u00f4ne des trois points. Au cas o\u00f9 vous l\u2019auriez manqu\u00e9. Le lecteur vid\u00e9o Grist est un widget personnalis\u00e9 qui lit une vid\u00e9o \u00e0 partir d\u2019une URL, similaire \u00e0 la fa\u00e7on dont le visionneur d\u2019images affiche une image \u00e0 partir d\u2019une URL. Points Forts de la Communaut\u00e9 # Formules d\u2019initialisation conditionnelles. Utilisez une formule d\u2019initialisation pour remplir automatiquement des donn\u00e9es dans certains cas, mais pas dans d\u2019autres. D\u00e9finir la valeur par d\u00e9faut pour une colonne de r\u00e9f\u00e9rence. Utilisez des formules d\u2019initialisation pour d\u00e9finir des valeurs de r\u00e9f\u00e9rence par d\u00e9faut. Nouveaux Mod\u00e8les # Suivi des D\u00e9penses pour \u00c9quipes # G\u00e9rez toutes les d\u00e9penses des employ\u00e9s dans une seule feuille de calcul ! Fini de jongler avec les d\u00e9penses de dizaines d\u2019employ\u00e9s dans une liste principale. Avec les permissions avanc\u00e9es, les employ\u00e9s peuvent se connecter \u00e0 Grist, consulter et mettre \u00e0 jour uniquement leurs d\u00e9penses, et les tables de r\u00e9sum\u00e9 Grist s\u2019occupent du reste. ALLER AU MOD\u00c8LE Liste de Courses + Planificateur de Repas # Cr\u00e9ez des recettes, planifiez des menus hebdomadaires et faites une liste de courses en un seul endroit ! ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/06"},{"location":"newsletters/2022-06/#bulletin-de-juin-2022","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce Bulletin Filtrage par Intervalle Bonne Fiert\u00e9 ! D\u00e9couvrez notre feuille de calcul arc-en-ciel ! \ud83c\udf08 Webinaire : Structurer les Donn\u00e9es Relationnelles Meilleurs conseils sur la structuration des donn\u00e9es dans Grist. 2 Nouveaux Mod\u00e8les Suivi des d\u00e9penses et planification des repas. PEEK(a-boo) Nouvelle fonction sp\u00e9ciale pour r\u00e9soudre les r\u00e9f\u00e9rences circulaires dans les formules d\u2019initialisation.","title":"Bulletin de Juin 2022"},{"location":"newsletters/2022-06/#bonne-fierte","text":"Nous esp\u00e9rons que vous avez pass\u00e9 un mois de la Fiert\u00e9 amusant et color\u00e9 ! Nous l\u2019avons fait. Feuille de calcul arc-en-ciel ! \ud83c\udff3\u200d\ud83c\udf08 ALLER \u00c0 LA FEUILLE DE CALCUL ARC-EN-CIEL","title":"Bonne Fiert\u00e9 !"},{"location":"newsletters/2022-06/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-06/#filtrage-par-intervalle","text":"Il est maintenant possible de filtrer les colonnes Num\u00e9riques et Date par un intervalle ! Gardez un \u0153il sur d\u2019autres am\u00e9liorations du filtrage dans un avenir proche.","title":"Filtrage par Intervalle"},{"location":"newsletters/2022-06/#peek","text":"PEEK () \u00e9value une expression sans cr\u00e9er de d\u00e9pendances ni exiger que les valeurs r\u00e9f\u00e9renc\u00e9es soient \u00e0 jour, et utilise la valeur qu\u2019il trouve dans une cellule. Ceci est utile pour \u00e9viter les erreurs de r\u00e9f\u00e9rence circulaire, en particulier dans les formules d\u2019initialisation. En savoir plus. Voici un exemple de PEEK() en action. Notez que dans la colonne de formule d\u2019initialisation, les deux formules peuvent se r\u00e9f\u00e9rencer mutuellement sans cr\u00e9er d\u2019erreur circulaire.","title":"PEEK()"},{"location":"newsletters/2022-06/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-06/#webinaire-structurer-les-donnees-dans-grist","text":"Avant de pouvoir cr\u00e9er des mises en page productives, vous devez r\u00e9fl\u00e9chir \u00e0 la structuration de vos donn\u00e9es. En juillet, nous partagerons quelques meilleures pratiques et mettrons en \u00e9vidence les diff\u00e9rences dans la structuration des donn\u00e9es dans les feuilles de calcul par rapport \u00e0 Grist. Jeudi 21 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUILLET En juin, Anais a d\u00e9montr\u00e9 comment Grist peut simplifier les flux de travail de donn\u00e9es, tels que le suivi des d\u00e9penses, par rapport aux feuilles de calcul traditionnelles. REGARDER L\u2019ENREGISTREMENT DE JUIN","title":"Webinaire : Structurer les Donn\u00e9es dans Grist"},{"location":"newsletters/2022-06/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts est peut-\u00eatre fait pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-06/#conseils-rapides","text":"Toutes les colonnes de formule dans les tables de r\u00e9sum\u00e9 peuvent \u00eatre des s\u00e9ries dans les graphiques bas\u00e9s sur cette table de r\u00e9sum\u00e9. Par exemple, dans le mod\u00e8le de Grand Livre , les colonnes de Profit dans les tables de r\u00e9sum\u00e9 sont utilis\u00e9es dans les graphiques. Il existe des options de tri suppl\u00e9mentaires dans le menu de tri du panneau de cr\u00e9ation sous l\u2019ic\u00f4ne des trois points. Au cas o\u00f9 vous l\u2019auriez manqu\u00e9. Le lecteur vid\u00e9o Grist est un widget personnalis\u00e9 qui lit une vid\u00e9o \u00e0 partir d\u2019une URL, similaire \u00e0 la fa\u00e7on dont le visionneur d\u2019images affiche une image \u00e0 partir d\u2019une URL.","title":"Conseils Rapides"},{"location":"newsletters/2022-06/#points-forts-de-la-communaute","text":"Formules d\u2019initialisation conditionnelles. Utilisez une formule d\u2019initialisation pour remplir automatiquement des donn\u00e9es dans certains cas, mais pas dans d\u2019autres. D\u00e9finir la valeur par d\u00e9faut pour une colonne de r\u00e9f\u00e9rence. Utilisez des formules d\u2019initialisation pour d\u00e9finir des valeurs de r\u00e9f\u00e9rence par d\u00e9faut.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-06/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-06/#suivi-des-depenses-pour-equipes","text":"G\u00e9rez toutes les d\u00e9penses des employ\u00e9s dans une seule feuille de calcul ! Fini de jongler avec les d\u00e9penses de dizaines d\u2019employ\u00e9s dans une liste principale. Avec les permissions avanc\u00e9es, les employ\u00e9s peuvent se connecter \u00e0 Grist, consulter et mettre \u00e0 jour uniquement leurs d\u00e9penses, et les tables de r\u00e9sum\u00e9 Grist s\u2019occupent du reste. ALLER AU MOD\u00c8LE","title":"Suivi des D\u00e9penses pour \u00c9quipes"},{"location":"newsletters/2022-06/#liste-de-courses-planificateur-de-repas","text":"Cr\u00e9ez des recettes, planifiez des menus hebdomadaires et faites une liste de courses en un seul endroit ! ALLER AU MOD\u00c8LE","title":"Liste de Courses + Planificateur de Repas"},{"location":"newsletters/2022-06/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-06/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Juillet 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Aide-m\u00e9moire des Formules # Nouveau dans les formules Grist et Python ? Voici un aide-m\u00e9moire des formules avec les fonctions les plus couramment utilis\u00e9es et de nombreux exemples. ALLER \u00c0 L\u2019AIDE-M\u00c9MOIRE Si vous souhaitez une aide suppl\u00e9mentaire pour les formules, nous avons \u00e9galement un article approfondi ax\u00e9 sur les r\u00e9f\u00e9rences et les recherches avec plus d\u2019exemples. ALLER \u00c0 L\u2019ARTICLE Tables de R\u00e9sum\u00e9 dans les Donn\u00e9es Sources # Les tables de r\u00e9sum\u00e9 sont d\u00e9sormais r\u00e9pertori\u00e9es dans les donn\u00e9es sources, ce qui facilite la visualisation en un coup d\u2019\u0153il des tables de r\u00e9sum\u00e9 existant dans le document, et l\u2019examen de chacune d\u2019elles. Vous pouvez facilement identifier les tables de r\u00e9sum\u00e9 par l\u2019ic\u00f4ne sigma. Notez \u00e9galement les noms plus conviviaux pour les tables de r\u00e9sum\u00e9, comme Sales_summary . Quiconque a d\u00e9j\u00e0 remarqu\u00e9 GristSummary_5_Sales saura de quoi nous parlons. Apprendre Grist # Webinaire : Donn\u00e9es Relationnelles et Colonnes de R\u00e9f\u00e9rence # Le webinaire d\u2019ao\u00fbt se concentrera sur la mani\u00e8re de relier des donn\u00e9es dans Grist en utilisant des colonnes de r\u00e9f\u00e9rence, comment utiliser des donn\u00e9es li\u00e9es dans des tableaux de bord dynamiques, et comment effectuer des recherches. Jeudi 18 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAIRE D\u2019AO\u00dbT Comment structurer vos donn\u00e9es # En juillet, Anais a d\u00e9montr\u00e9 comment Grist peut simplifier les flux de travail de donn\u00e9es, tels que le suivi des d\u00e9penses, par rapport aux tableurs traditionnels. REGARDER L\u2019ENREGISTREMENT DE JUILLET Points Forts de la Communaut\u00e9 # R\u00e9sumer les donn\u00e9es avec un graphique en secteurs. Apprenez comment cr\u00e9er des graphiques en secteurs dans Grist. Trouver et mettre en \u00e9vidence les doublons avec un formatage conditionnel. Apprenez comment d\u00e9finir des styles conditionnels bas\u00e9s sur une formule qui retourne si une valeur est un doublon ou non. Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre pour vous. EN SAVOIR PLUS Nouveaux Mod\u00e8les # Tableau de Bord des Commissions de Vente # Les \u00e9quipes de vente et de comptabilit\u00e9 peuvent utiliser ce mod\u00e8le pour suivre les ventes et les commissions. Les repr\u00e9sentants commerciaux ne voient que leurs ventes individuelles et le classement g\u00e9n\u00e9ral. La direction peut tout voir. ALLER AU MOD\u00c8LE R\u00e9ponses aux Retours des Utilisateurs # Am\u00e9liorez votre produit en fonction des retours des clients ! Analysez et \u00e9valuez les r\u00e9ponses de vos enqu\u00eates utilisateurs. ALLER AU MOD\u00c8LE R\u00e9sultats du Score Net Promoteur # Gardez le doigt sur le pouls de la satisfaction de vos clients. Analysez et approfondissez les r\u00e9ponses de votre enqu\u00eate NPS. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/07"},{"location":"newsletters/2022-07/#bulletin-de-juillet-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Juillet 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin de Juillet 2022"},{"location":"newsletters/2022-07/#aide-memoire-des-formules","text":"Nouveau dans les formules Grist et Python ? Voici un aide-m\u00e9moire des formules avec les fonctions les plus couramment utilis\u00e9es et de nombreux exemples. ALLER \u00c0 L\u2019AIDE-M\u00c9MOIRE Si vous souhaitez une aide suppl\u00e9mentaire pour les formules, nous avons \u00e9galement un article approfondi ax\u00e9 sur les r\u00e9f\u00e9rences et les recherches avec plus d\u2019exemples. ALLER \u00c0 L\u2019ARTICLE","title":"Aide-m\u00e9moire des Formules"},{"location":"newsletters/2022-07/#tables-de-resume-dans-les-donnees-sources","text":"Les tables de r\u00e9sum\u00e9 sont d\u00e9sormais r\u00e9pertori\u00e9es dans les donn\u00e9es sources, ce qui facilite la visualisation en un coup d\u2019\u0153il des tables de r\u00e9sum\u00e9 existant dans le document, et l\u2019examen de chacune d\u2019elles. Vous pouvez facilement identifier les tables de r\u00e9sum\u00e9 par l\u2019ic\u00f4ne sigma. Notez \u00e9galement les noms plus conviviaux pour les tables de r\u00e9sum\u00e9, comme Sales_summary . Quiconque a d\u00e9j\u00e0 remarqu\u00e9 GristSummary_5_Sales saura de quoi nous parlons.","title":"Tables de R\u00e9sum\u00e9 dans les Donn\u00e9es Sources"},{"location":"newsletters/2022-07/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-07/#webinaire-donnees-relationnelles-et-colonnes-de-reference","text":"Le webinaire d\u2019ao\u00fbt se concentrera sur la mani\u00e8re de relier des donn\u00e9es dans Grist en utilisant des colonnes de r\u00e9f\u00e9rence, comment utiliser des donn\u00e9es li\u00e9es dans des tableaux de bord dynamiques, et comment effectuer des recherches. Jeudi 18 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAIRE D\u2019AO\u00dbT","title":"Webinaire : Donn\u00e9es Relationnelles et Colonnes de R\u00e9f\u00e9rence"},{"location":"newsletters/2022-07/#comment-structurer-vos-donnees","text":"En juillet, Anais a d\u00e9montr\u00e9 comment Grist peut simplifier les flux de travail de donn\u00e9es, tels que le suivi des d\u00e9penses, par rapport aux tableurs traditionnels. REGARDER L\u2019ENREGISTREMENT DE JUILLET","title":"Comment structurer vos donn\u00e9es"},{"location":"newsletters/2022-07/#points-forts-de-la-communaute","text":"R\u00e9sumer les donn\u00e9es avec un graphique en secteurs. Apprenez comment cr\u00e9er des graphiques en secteurs dans Grist. Trouver et mettre en \u00e9vidence les doublons avec un formatage conditionnel. Apprenez comment d\u00e9finir des styles conditionnels bas\u00e9s sur une formule qui retourne si une valeur est un doublon ou non.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-07/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-07/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-07/#tableau-de-bord-des-commissions-de-vente","text":"Les \u00e9quipes de vente et de comptabilit\u00e9 peuvent utiliser ce mod\u00e8le pour suivre les ventes et les commissions. Les repr\u00e9sentants commerciaux ne voient que leurs ventes individuelles et le classement g\u00e9n\u00e9ral. La direction peut tout voir. ALLER AU MOD\u00c8LE","title":"Tableau de Bord des Commissions de Vente"},{"location":"newsletters/2022-07/#reponses-aux-retours-des-utilisateurs","text":"Am\u00e9liorez votre produit en fonction des retours des clients ! Analysez et \u00e9valuez les r\u00e9ponses de vos enqu\u00eates utilisateurs. ALLER AU MOD\u00c8LE","title":"R\u00e9ponses aux Retours des Utilisateurs"},{"location":"newsletters/2022-07/#resultats-du-score-net-promoteur","text":"Gardez le doigt sur le pouls de la satisfaction de vos clients. Analysez et approfondissez les r\u00e9ponses de votre enqu\u00eate NPS. ALLER AU MOD\u00c8LE","title":"R\u00e9sultats du Score Net Promoteur"},{"location":"newsletters/2022-07/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-07/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-08/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019ao\u00fbt 2022 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Ao\u00fbt 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Espaces d\u2019\u00e9quipe gratuits Membres d\u2019\u00e9quipe illimit\u00e9s + documents illimit\u00e9s, pour des documents de moins de 5 000 lignes. Styles conditionnels pour les lignes ! Appliquez des styles conditionnels \u00e0 une ligne enti\u00e8re. Aide aux formules am\u00e9lior\u00e9e Suggestions d\u2019autocompl\u00e9tion et messages d\u2019erreur plus utiles. \ud83d\udcaa Coup de projecteur sur la communaut\u00e9 open source ! Points forts des contributions cool de la communaut\u00e9 OSS. \ud83d\ude4f 2 nouveaux mod\u00e8les Organisateur de r\u00e9unions & carnet personnel, cr\u00e9\u00e9s par des utilisateurs g\u00e9niaux ! \ud83c\udf89 Webinaire : Cl\u00e9s de lien Partager des donn\u00e9es partielles avec des tiers. Espaces d\u2019\u00e9quipe gratuits # Grist est plus puissant lorsqu\u2019il est utilis\u00e9 de mani\u00e8re collaborative. C\u2019est pourquoi nous offrons d\u00e9sormais des espaces d\u2019\u00e9quipe gratuits pour toute votre \u00e9quipe. Membres d\u2019\u00e9quipe illimit\u00e9s + documents illimit\u00e9s, pour des documents de moins de 5 000 lignes. Les espaces d\u2019\u00e9quipe gratuits sont \u00e9galement enti\u00e8rement fonctionnels. CR\u00c9ER UN ESPACE D\u2019\u00c9QUIPE GRATUIT Quoi de neuf # Styles conditionnels pour les lignes # Vous pouvez d\u00e9sormais appliquer des styles conditionnels \u00e0 une ligne enti\u00e8re. Dans le panneau de cr\u00e9ation, c\u2019est sous l\u2019onglet Table > Vue . Aide aux formules am\u00e9lior\u00e9e + Autocompl\u00e9tion # \u00c9crire et d\u00e9panner des formules est devenu un peu plus facile avec des suggestions d\u2019autocompl\u00e9tion et des messages d\u2019erreur plus utiles. Par exemple, dans la capture d\u2019\u00e9cran ci-dessous, l\u2019autocompl\u00e9tion aide \u00e0 \u00e9crire la formule courante mais difficile \u00e0 retenir pour les recherches invers\u00e9es , et l\u2019erreur inclut une explication conviviale et des suggestions utiles pour la corriger. Vous voulez en savoir plus sur les formules ? Il y a beaucoup d\u2019informations sur les formules dans notre Centre d\u2019aide, y compris cette fiche de triche des formules r\u00e9cemment ajout\u00e9e. Ouvrir les donn\u00e9es sources depuis la vue # Vous pouvez ouvrir la table source d\u2019une vue sans quitter la page. Dans le menu de la vue, cliquez sur \u201cAfficher les donn\u00e9es sources\u201d. C\u2019est particuli\u00e8rement pratique pour les graphiques et les vues personnalis\u00e9es. Le panneau de gauche s\u2019\u00e9tend automatiquement # Saviez-vous que vous pouvez r\u00e9duire le menu de la page \u00e0 gauche pour vous donner plus d\u2019espace ? D\u00e9sormais, le menu r\u00e9duit s\u2019\u00e9tend automatiquement au survol, vous donnant plus de place sur les petits \u00e9crans ! \ud83c\udf89 Masquer plusieurs colonnes # Vous pouvez maintenant s\u00e9lectionner plusieurs colonnes, faire un clic droit pour ouvrir le menu des colonnes, et masquer toutes les colonnes s\u00e9lectionn\u00e9es en un clic. Contributions de la communaut\u00e9 et open source \ud83d\ude4f # Grist est open source . Nous sommes reconnaissants \u00e0 la communaut\u00e9 open source pour leurs contributions. Voici deux points forts r\u00e9cents. Renommer rapidement les pages # Pour renommer un nom de page, il vous suffit maintenant de cliquer. Merci, @LouisDelbosc ! Vues personnalis\u00e9es : Ajouter une description de colonne dans le panneau de cr\u00e9ation # Pour les d\u00e9veloppeurs de vues personnalis\u00e9es : lorsque vous sp\u00e9cifiez les colonnes auxquelles votre vue doit acc\u00e9der, vous pouvez d\u00e9sormais inclure une description pour aider \u00e0 guider vos utilisateurs de vues, comme montr\u00e9 ici . Merci, @yohanboniface ! Open Source + Points forts des d\u00e9veloppeurs \ud83d\udc69\u200d\ud83d\udcbb # grist-core omnibus. Paul a publi\u00e9 un grist-core omnibus pour faciliter l\u2019auto-h\u00e9bergement. Grist en tant qu\u2019application electron. L\u2019utilisateur stan-donarise a emball\u00e9 Grist en tant qu\u2019application electron qui fonctionne sur Windows 7 ou plus tard. Comme c\u2019est cool ! \ud83d\ude09 G\u00e9n\u00e9rer des docx \u00e0 partir d\u2019un mod\u00e8le. L\u2019utilisateur stan-donarise ne s\u2019est pas arr\u00eat\u00e9 l\u00e0. Il a int\u00e9gr\u00e9 docxtemplater dans une vue personnalis\u00e9e pour g\u00e9n\u00e9rer des rapports et des documents dans Grist. Apprendre Grist # Webinaire : Partager des donn\u00e9es partielles avec des cl\u00e9s de lien # En septembre, nous expliquerons comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Apprenez \u00e0 utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles, comme une seule ligne, avec des tiers. Jeudi 22 septembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAIRE DE SEPTEMBRE Donn\u00e9es relationnelles + Colonnes de r\u00e9f\u00e9rence # En ao\u00fbt, Natalie a plong\u00e9 profond\u00e9ment dans les colonnes de r\u00e9f\u00e9rence et comment les utiliser dans les tableaux de bord et les formules. REGARDER L\u2019ENREGISTREMENT D\u2019AO\u00dbT Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre pour vous. EN SAVOIR PLUS Nouveaux Mod\u00e8les # Organisateur de r\u00e9unions d\u2019\u00e9quipe # Utilisez ce mod\u00e8le pour stocker les comptes rendus de r\u00e9union d\u2019\u00e9quipe, les \u00e9l\u00e9ments d\u2019action, la documentation de projet et plus encore. Merci \u00e0 l\u2019utilisateur Grist Eduardo qui a partag\u00e9 ce mod\u00e8le avec nous. Il a \u00e9t\u00e9 l\u00e9g\u00e8rement modifi\u00e9 pour r\u00e9pondre \u00e0 des besoins plus g\u00e9n\u00e9raux. Vous voulez savoir comment cela a \u00e9t\u00e9 construit ? Regardez Natalie le construire lors du webinaire d\u2019ao\u00fbt. ALLER AU MOD\u00c8LE Carnet personnel # Organisez vos projets, informations de contact et t\u00e2ches dans ce carnet personnel. Ce mod\u00e8le a \u00e9t\u00e9 cr\u00e9\u00e9 par l\u2019utilisateur Grist Julien. Il a \u00e9t\u00e9 traduit et l\u00e9g\u00e8rement modifi\u00e9 pour r\u00e9pondre \u00e0 des besoins plus g\u00e9n\u00e9raux. D\u00e9couvrez sa pr\u00e9sentation dans le forum communautaire ! Si vous avez un mod\u00e8le cool que vous aimeriez partager, nous serions ravis d\u2019en entendre parler dans la vitrine communautaire ! ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/08"},{"location":"newsletters/2022-08/#bulletin-daout-2022","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Ao\u00fbt 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Espaces d\u2019\u00e9quipe gratuits Membres d\u2019\u00e9quipe illimit\u00e9s + documents illimit\u00e9s, pour des documents de moins de 5 000 lignes. Styles conditionnels pour les lignes ! Appliquez des styles conditionnels \u00e0 une ligne enti\u00e8re. Aide aux formules am\u00e9lior\u00e9e Suggestions d\u2019autocompl\u00e9tion et messages d\u2019erreur plus utiles. \ud83d\udcaa Coup de projecteur sur la communaut\u00e9 open source ! Points forts des contributions cool de la communaut\u00e9 OSS. \ud83d\ude4f 2 nouveaux mod\u00e8les Organisateur de r\u00e9unions & carnet personnel, cr\u00e9\u00e9s par des utilisateurs g\u00e9niaux ! \ud83c\udf89 Webinaire : Cl\u00e9s de lien Partager des donn\u00e9es partielles avec des tiers.","title":"Bulletin d’ao\u00fbt 2022"},{"location":"newsletters/2022-08/#espaces-dequipe-gratuits","text":"Grist est plus puissant lorsqu\u2019il est utilis\u00e9 de mani\u00e8re collaborative. C\u2019est pourquoi nous offrons d\u00e9sormais des espaces d\u2019\u00e9quipe gratuits pour toute votre \u00e9quipe. Membres d\u2019\u00e9quipe illimit\u00e9s + documents illimit\u00e9s, pour des documents de moins de 5 000 lignes. Les espaces d\u2019\u00e9quipe gratuits sont \u00e9galement enti\u00e8rement fonctionnels. CR\u00c9ER UN ESPACE D\u2019\u00c9QUIPE GRATUIT","title":"Espaces d’\u00e9quipe gratuits"},{"location":"newsletters/2022-08/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-08/#styles-conditionnels-pour-les-lignes","text":"Vous pouvez d\u00e9sormais appliquer des styles conditionnels \u00e0 une ligne enti\u00e8re. Dans le panneau de cr\u00e9ation, c\u2019est sous l\u2019onglet Table > Vue .","title":"Styles conditionnels pour les lignes"},{"location":"newsletters/2022-08/#aide-aux-formules-amelioree-autocompletion","text":"\u00c9crire et d\u00e9panner des formules est devenu un peu plus facile avec des suggestions d\u2019autocompl\u00e9tion et des messages d\u2019erreur plus utiles. Par exemple, dans la capture d\u2019\u00e9cran ci-dessous, l\u2019autocompl\u00e9tion aide \u00e0 \u00e9crire la formule courante mais difficile \u00e0 retenir pour les recherches invers\u00e9es , et l\u2019erreur inclut une explication conviviale et des suggestions utiles pour la corriger. Vous voulez en savoir plus sur les formules ? Il y a beaucoup d\u2019informations sur les formules dans notre Centre d\u2019aide, y compris cette fiche de triche des formules r\u00e9cemment ajout\u00e9e.","title":"Aide aux formules am\u00e9lior\u00e9e + Autocompl\u00e9tion"},{"location":"newsletters/2022-08/#ouvrir-les-donnees-sources-depuis-la-vue","text":"Vous pouvez ouvrir la table source d\u2019une vue sans quitter la page. Dans le menu de la vue, cliquez sur \u201cAfficher les donn\u00e9es sources\u201d. C\u2019est particuli\u00e8rement pratique pour les graphiques et les vues personnalis\u00e9es.","title":"Ouvrir les donn\u00e9es sources depuis la vue"},{"location":"newsletters/2022-08/#le-panneau-de-gauche-setend-automatiquement","text":"Saviez-vous que vous pouvez r\u00e9duire le menu de la page \u00e0 gauche pour vous donner plus d\u2019espace ? D\u00e9sormais, le menu r\u00e9duit s\u2019\u00e9tend automatiquement au survol, vous donnant plus de place sur les petits \u00e9crans ! \ud83c\udf89","title":"Le panneau de gauche s’\u00e9tend automatiquement"},{"location":"newsletters/2022-08/#masquer-plusieurs-colonnes","text":"Vous pouvez maintenant s\u00e9lectionner plusieurs colonnes, faire un clic droit pour ouvrir le menu des colonnes, et masquer toutes les colonnes s\u00e9lectionn\u00e9es en un clic.","title":"Masquer plusieurs colonnes"},{"location":"newsletters/2022-08/#contributions-de-la-communaute-et-open-source","text":"Grist est open source . Nous sommes reconnaissants \u00e0 la communaut\u00e9 open source pour leurs contributions. Voici deux points forts r\u00e9cents.","title":"Contributions de la communaut\u00e9 et open source \ud83d\ude4f"},{"location":"newsletters/2022-08/#renommer-rapidement-les-pages","text":"Pour renommer un nom de page, il vous suffit maintenant de cliquer. Merci, @LouisDelbosc !","title":"Renommer rapidement les pages"},{"location":"newsletters/2022-08/#vues-personnalisees-ajouter-une-description-de-colonne-dans-le-panneau-de-creation","text":"Pour les d\u00e9veloppeurs de vues personnalis\u00e9es : lorsque vous sp\u00e9cifiez les colonnes auxquelles votre vue doit acc\u00e9der, vous pouvez d\u00e9sormais inclure une description pour aider \u00e0 guider vos utilisateurs de vues, comme montr\u00e9 ici . Merci, @yohanboniface !","title":"Vues personnalis\u00e9es : Ajouter une description de colonne dans le panneau de cr\u00e9ation"},{"location":"newsletters/2022-08/#open-source-points-forts-des-developpeurs","text":"grist-core omnibus. Paul a publi\u00e9 un grist-core omnibus pour faciliter l\u2019auto-h\u00e9bergement. Grist en tant qu\u2019application electron. L\u2019utilisateur stan-donarise a emball\u00e9 Grist en tant qu\u2019application electron qui fonctionne sur Windows 7 ou plus tard. Comme c\u2019est cool ! \ud83d\ude09 G\u00e9n\u00e9rer des docx \u00e0 partir d\u2019un mod\u00e8le. L\u2019utilisateur stan-donarise ne s\u2019est pas arr\u00eat\u00e9 l\u00e0. Il a int\u00e9gr\u00e9 docxtemplater dans une vue personnalis\u00e9e pour g\u00e9n\u00e9rer des rapports et des documents dans Grist.","title":"Open Source + Points forts des d\u00e9veloppeurs \ud83d\udc69\u200d\ud83d\udcbb"},{"location":"newsletters/2022-08/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-08/#webinaire-partager-des-donnees-partielles-avec-des-cles-de-lien","text":"En septembre, nous expliquerons comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Apprenez \u00e0 utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles, comme une seule ligne, avec des tiers. Jeudi 22 septembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAIRE DE SEPTEMBRE","title":"Webinaire : Partager des donn\u00e9es partielles avec des cl\u00e9s de lien"},{"location":"newsletters/2022-08/#donnees-relationnelles-colonnes-de-reference","text":"En ao\u00fbt, Natalie a plong\u00e9 profond\u00e9ment dans les colonnes de r\u00e9f\u00e9rence et comment les utiliser dans les tableaux de bord et les formules. REGARDER L\u2019ENREGISTREMENT D\u2019AO\u00dbT","title":"Donn\u00e9es relationnelles + Colonnes de r\u00e9f\u00e9rence"},{"location":"newsletters/2022-08/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-08/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-08/#organisateur-de-reunions-dequipe","text":"Utilisez ce mod\u00e8le pour stocker les comptes rendus de r\u00e9union d\u2019\u00e9quipe, les \u00e9l\u00e9ments d\u2019action, la documentation de projet et plus encore. Merci \u00e0 l\u2019utilisateur Grist Eduardo qui a partag\u00e9 ce mod\u00e8le avec nous. Il a \u00e9t\u00e9 l\u00e9g\u00e8rement modifi\u00e9 pour r\u00e9pondre \u00e0 des besoins plus g\u00e9n\u00e9raux. Vous voulez savoir comment cela a \u00e9t\u00e9 construit ? Regardez Natalie le construire lors du webinaire d\u2019ao\u00fbt. ALLER AU MOD\u00c8LE","title":"Organisateur de r\u00e9unions d’\u00e9quipe"},{"location":"newsletters/2022-08/#carnet-personnel","text":"Organisez vos projets, informations de contact et t\u00e2ches dans ce carnet personnel. Ce mod\u00e8le a \u00e9t\u00e9 cr\u00e9\u00e9 par l\u2019utilisateur Grist Julien. Il a \u00e9t\u00e9 traduit et l\u00e9g\u00e8rement modifi\u00e9 pour r\u00e9pondre \u00e0 des besoins plus g\u00e9n\u00e9raux. D\u00e9couvrez sa pr\u00e9sentation dans le forum communautaire ! Si vous avez un mod\u00e8le cool que vous aimeriez partager, nous serions ravis d\u2019en entendre parler dans la vitrine communautaire ! ALLER AU MOD\u00c8LE","title":"Carnet personnel"},{"location":"newsletters/2022-08/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-08/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-09/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Septembre 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Septembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Mode Sombre \ud83d\udd76 # Grist est maintenant disponible en mode sombre. \ud83d\ude0e Pour travailler en mode sombre, cliquez sur votre ic\u00f4ne utilisateur > param\u00e8tres du profil > s\u00e9lectionnez \u00ab Sombre \u00bb sous le param\u00e8tre d\u2019apparence. Contributions Open Source \ud83d\ude4f # Grist est open source . Nous sommes reconnaissants \u00e0 la communaut\u00e9 open source pour leurs contributions. Voici deux faits saillants r\u00e9cents d\u2019une \u00e9quipe qui utilise non seulement Grist, mais qui l\u2019am\u00e9liore pour tout le monde. Merci, @LouisDelbosc! Gestion Am\u00e9lior\u00e9e des Utilisateurs avec Autocompl\u00e9tion # Lors de l\u2019ajout d\u2019utilisateurs \u00e0 un document, la liste s\u2019autocompl\u00e9tera d\u00e9sormais avec les emails des membres de l\u2019\u00e9quipe. Ceci est actuellement disponible sur grist-core et sera int\u00e9gr\u00e9 dans Grist h\u00e9berg\u00e9 d\u2019ici lundi 3 octobre. Exporter une Table en XLSX # Il est maintenant possible d\u2019exporter une table en format XLSX depuis le menu de la vue. En savoir plus sur l\u2019exportation de tables vs documents. Apprendre Grist # Webinaire : Espaces d\u2019\u00c9quipe # Le mois prochain, nous lan\u00e7ons une s\u00e9rie ax\u00e9e sur Grist pour les \u00c9quipes . Cette s\u00e9rie de quatre vid\u00e9os couvrira tout ce que vous devez savoir sur les espaces d\u2019\u00e9quipe, les dossiers, la collaboration et les permissions avanc\u00e9es. En octobre, retour aux bases de l\u2019\u00e9quipe : espaces d\u2019\u00e9quipe, dossiers, partage, et plus encore. Jeudi 20 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019OCTOBRE Cl\u00e9s de Lien # Lors du webinaire de septembre, Natalie a d\u00e9montr\u00e9 comment utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles via des liens uniques. REGARDER L\u2019ENREGISTREMENT DE SEPTEMBRE Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019un expert. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre fait pour vous. EN SAVOIR PLUS Nouveau Mod\u00e8le # B\u00e9n\u00e9volat pour \u00c9v\u00e9nements # Utilisez ce mod\u00e8le pour suivre quels b\u00e9n\u00e9voles travaillent sur quels \u00e9v\u00e9nements. Les cl\u00e9s de lien avec des permissions avanc\u00e9es accordent un acc\u00e8s sp\u00e9cifique \u00e0 chaque b\u00e9n\u00e9vole, leur permettant de consulter leur emploi du temps de b\u00e9n\u00e9volat et les d\u00e9tails de l\u2019\u00e9v\u00e9nement sans se connecter \u00e0 Grist. Vous voulez savoir comment nous l\u2019avons construit ? Regardez Natalie le construire lors du webinaire de septembre. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 grandir, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/09"},{"location":"newsletters/2022-09/#bulletin-de-septembre-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Septembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Septembre 2022"},{"location":"newsletters/2022-09/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-09/#mode-sombre","text":"Grist est maintenant disponible en mode sombre. \ud83d\ude0e Pour travailler en mode sombre, cliquez sur votre ic\u00f4ne utilisateur > param\u00e8tres du profil > s\u00e9lectionnez \u00ab Sombre \u00bb sous le param\u00e8tre d\u2019apparence.","title":"Mode Sombre \ud83d\udd76"},{"location":"newsletters/2022-09/#contributions-open-source","text":"Grist est open source . Nous sommes reconnaissants \u00e0 la communaut\u00e9 open source pour leurs contributions. Voici deux faits saillants r\u00e9cents d\u2019une \u00e9quipe qui utilise non seulement Grist, mais qui l\u2019am\u00e9liore pour tout le monde. Merci, @LouisDelbosc!","title":"Contributions Open Source \ud83d\ude4f"},{"location":"newsletters/2022-09/#gestion-amelioree-des-utilisateurs-avec-autocompletion","text":"Lors de l\u2019ajout d\u2019utilisateurs \u00e0 un document, la liste s\u2019autocompl\u00e9tera d\u00e9sormais avec les emails des membres de l\u2019\u00e9quipe. Ceci est actuellement disponible sur grist-core et sera int\u00e9gr\u00e9 dans Grist h\u00e9berg\u00e9 d\u2019ici lundi 3 octobre.","title":"Gestion Am\u00e9lior\u00e9e des Utilisateurs avec Autocompl\u00e9tion"},{"location":"newsletters/2022-09/#exporter-une-table-en-xlsx","text":"Il est maintenant possible d\u2019exporter une table en format XLSX depuis le menu de la vue. En savoir plus sur l\u2019exportation de tables vs documents.","title":"Exporter une Table en XLSX"},{"location":"newsletters/2022-09/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-09/#webinaire-espaces-dequipe","text":"Le mois prochain, nous lan\u00e7ons une s\u00e9rie ax\u00e9e sur Grist pour les \u00c9quipes . Cette s\u00e9rie de quatre vid\u00e9os couvrira tout ce que vous devez savoir sur les espaces d\u2019\u00e9quipe, les dossiers, la collaboration et les permissions avanc\u00e9es. En octobre, retour aux bases de l\u2019\u00e9quipe : espaces d\u2019\u00e9quipe, dossiers, partage, et plus encore. Jeudi 20 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019OCTOBRE","title":"Webinaire : Espaces d’\u00c9quipe"},{"location":"newsletters/2022-09/#cles-de-lien","text":"Lors du webinaire de septembre, Natalie a d\u00e9montr\u00e9 comment utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles via des liens uniques. REGARDER L\u2019ENREGISTREMENT DE SEPTEMBRE","title":"Cl\u00e9s de Lien"},{"location":"newsletters/2022-09/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019un expert. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre fait pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-09/#nouveau-modele","text":"","title":"Nouveau Mod\u00e8le"},{"location":"newsletters/2022-09/#benevolat-pour-evenements","text":"Utilisez ce mod\u00e8le pour suivre quels b\u00e9n\u00e9voles travaillent sur quels \u00e9v\u00e9nements. Les cl\u00e9s de lien avec des permissions avanc\u00e9es accordent un acc\u00e8s sp\u00e9cifique \u00e0 chaque b\u00e9n\u00e9vole, leur permettant de consulter leur emploi du temps de b\u00e9n\u00e9volat et les d\u00e9tails de l\u2019\u00e9v\u00e9nement sans se connecter \u00e0 Grist. Vous voulez savoir comment nous l\u2019avons construit ? Regardez Natalie le construire lors du webinaire de septembre. ALLER AU MOD\u00c8LE","title":"B\u00e9n\u00e9volat pour \u00c9v\u00e9nements"},{"location":"newsletters/2022-09/#aidez-nous-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 grandir, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-09/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-10/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Octobre 2022 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Octobre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Quoi de Neuf # Somme Rapide # Besoin de faire rapidement la somme ou de compter des valeurs ? S\u00e9lectionnez un intervalle, et un total et un compte pratiques appara\u00eetront dans le pied de la vue. Enfin ! \ud83d\ude09 Dupliquer une Table # Vous pouvez maintenant dupliquer rapidement une table ! Allez \u00e0 la page des donn\u00e9es sources et ouvrez le menu de la table. Vous pouvez dupliquer la structure d\u2019une table avec ou sans les donn\u00e9es de la table. Nouvelles M\u00e9thodes API pour Table et Colonne # Vous pouvez maintenant ajouter, modifier et lister des tables et des colonnes dans un document. Consultez notre r\u00e9f\u00e9rence API REST pour en savoir plus. Formatage Multi-colonnes # Vous pouvez maintenant s\u00e9lectionner plusieurs colonnes adjacentes et modifier leur type de colonne et leur formatage simultan\u00e9ment, vous faisant gagner du temps. Nouveau Raccourci pour Ajouter + Supprimer des Lignes # Les raccourcis pour supprimer ou ins\u00e9rer un enregistrement ont chang\u00e9, pour \u00e9viter d\u2019interf\u00e9rer avec le zoom de la page. Touche (Mac) Touche (Windows) Description \u2318 \u21e7 Enter Ctrl + Shift + Enter Ins\u00e9rer un nouvel enregistrement, avant celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Enter Ctrl + Enter Ins\u00e9rer un nouvel enregistrement, apr\u00e8s celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Delete Ctrl + Backspace , Ctrl + Delete Supprimer le(s) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) Nouvelle Fonction PHONE_FORMAT() # Le formatage des num\u00e9ros de t\u00e9l\u00e9phone est devenu plus facile avec une nouvelle fonction utile. En savoir plus sur PHONE_FORMAT(). Apprendre Grist # Webinar : Construire des Flux de Travail d\u2019\u00c9quipe # En novembre, nous continuons notre s\u00e9rie Grist pour les \u00c9quipes . Le webinaire de novembre se concentrera sur la fa\u00e7on de construire des flux de travail productifs pour les \u00e9quipes, tout en utilisant des fonctionnalit\u00e9s qui rendent Grist facile \u00e0 utiliser par n\u2019importe qui dans votre \u00e9quipe. Mardi 22 novembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE NOVEMBRE Les Bases de l\u2019\u00c9quipe # En octobre, Natalie nous a guid\u00e9s \u00e0 travers les bases de l\u2019\u00e9quipe : espaces d\u2019\u00e9quipe, dossiers, partage, et plus encore. REGARDER L\u2019ENREGISTREMENT D\u2019OCTOBRE Programme Sprouts # Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS Nouveaux Mod\u00e8les # Planification de Roman # Chaque \u00e9crivain a son propre processus unique - mais pour la plupart, ce processus implique un certain niveau de planification. Notre mod\u00e8le de planification de roman arrive juste \u00e0 temps pour le NaNoWriMo de cette ann\u00e9e. Gardez la structure de votre roman, votre plan, vos recherches et vos notes au m\u00eame endroit ! Vous voulez plus de conseils sur l\u2019utilisation de ce mod\u00e8le ? Lisez notre blog. ALLER AU MOD\u00c8LE Organisateur de Repas Partag\u00e9 # Nous avons cr\u00e9\u00e9 ce mod\u00e8le en pensant \u00e0 Thanksgiving, mais il fonctionne pour tous les repas partag\u00e9s ! La logistique des repas partag\u00e9s peut \u00eatre difficile \u00e0 g\u00e9rer, mais ce mod\u00e8le facilite la gestion de qui apporte quoi. Tout le monde peut collaborer en notant ce qu\u2019il apporte et en s\u2019assurant que tous les essentiels sont couverts. ALLER AU MOD\u00c8LE Planificateur de Mariage # R\u00e9cemment fianc\u00e9 ? \ud83d\udc8d F\u00e9licitations ! Planifier un mariage peut \u00eatre chaotique mais pas pour vous car vous avez Grist \ud83d\ude0a Utilisez ce mod\u00e8le pour organiser les notes des fournisseurs, les listes d\u2019invit\u00e9s, les contrats et plus encore ! ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/10"},{"location":"newsletters/2022-10/#bulletin-doctobre-2022","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Octobre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin d’Octobre 2022"},{"location":"newsletters/2022-10/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-10/#somme-rapide","text":"Besoin de faire rapidement la somme ou de compter des valeurs ? S\u00e9lectionnez un intervalle, et un total et un compte pratiques appara\u00eetront dans le pied de la vue. Enfin ! \ud83d\ude09","title":"Somme Rapide"},{"location":"newsletters/2022-10/#dupliquer-une-table","text":"Vous pouvez maintenant dupliquer rapidement une table ! Allez \u00e0 la page des donn\u00e9es sources et ouvrez le menu de la table. Vous pouvez dupliquer la structure d\u2019une table avec ou sans les donn\u00e9es de la table.","title":"Dupliquer une Table"},{"location":"newsletters/2022-10/#nouvelles-methodes-api-pour-table-et-colonne","text":"Vous pouvez maintenant ajouter, modifier et lister des tables et des colonnes dans un document. Consultez notre r\u00e9f\u00e9rence API REST pour en savoir plus.","title":"Nouvelles M\u00e9thodes API pour Table et Colonne"},{"location":"newsletters/2022-10/#formatage-multi-colonnes","text":"Vous pouvez maintenant s\u00e9lectionner plusieurs colonnes adjacentes et modifier leur type de colonne et leur formatage simultan\u00e9ment, vous faisant gagner du temps.","title":"Formatage Multi-colonnes"},{"location":"newsletters/2022-10/#nouveau-raccourci-pour-ajouter-supprimer-des-lignes","text":"Les raccourcis pour supprimer ou ins\u00e9rer un enregistrement ont chang\u00e9, pour \u00e9viter d\u2019interf\u00e9rer avec le zoom de la page. Touche (Mac) Touche (Windows) Description \u2318 \u21e7 Enter Ctrl + Shift + Enter Ins\u00e9rer un nouvel enregistrement, avant celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Enter Ctrl + Enter Ins\u00e9rer un nouvel enregistrement, apr\u00e8s celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Delete Ctrl + Backspace , Ctrl + Delete Supprimer le(s) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s)","title":"Nouveau Raccourci pour Ajouter + Supprimer des Lignes"},{"location":"newsletters/2022-10/#nouvelle-fonction-phone_format","text":"Le formatage des num\u00e9ros de t\u00e9l\u00e9phone est devenu plus facile avec une nouvelle fonction utile. En savoir plus sur PHONE_FORMAT().","title":"Nouvelle Fonction PHONE_FORMAT()"},{"location":"newsletters/2022-10/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-10/#webinar-construire-des-flux-de-travail-dequipe","text":"En novembre, nous continuons notre s\u00e9rie Grist pour les \u00c9quipes . Le webinaire de novembre se concentrera sur la fa\u00e7on de construire des flux de travail productifs pour les \u00e9quipes, tout en utilisant des fonctionnalit\u00e9s qui rendent Grist facile \u00e0 utiliser par n\u2019importe qui dans votre \u00e9quipe. Mardi 22 novembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE NOVEMBRE","title":"Webinar : Construire des Flux de Travail d’\u00c9quipe"},{"location":"newsletters/2022-10/#les-bases-de-lequipe","text":"En octobre, Natalie nous a guid\u00e9s \u00e0 travers les bases de l\u2019\u00e9quipe : espaces d\u2019\u00e9quipe, dossiers, partage, et plus encore. REGARDER L\u2019ENREGISTREMENT D\u2019OCTOBRE","title":"Les Bases de l’\u00c9quipe"},{"location":"newsletters/2022-10/#programme-sprouts","text":"Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-10/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-10/#planification-de-roman","text":"Chaque \u00e9crivain a son propre processus unique - mais pour la plupart, ce processus implique un certain niveau de planification. Notre mod\u00e8le de planification de roman arrive juste \u00e0 temps pour le NaNoWriMo de cette ann\u00e9e. Gardez la structure de votre roman, votre plan, vos recherches et vos notes au m\u00eame endroit ! Vous voulez plus de conseils sur l\u2019utilisation de ce mod\u00e8le ? Lisez notre blog. ALLER AU MOD\u00c8LE","title":"Planification de Roman"},{"location":"newsletters/2022-10/#organisateur-de-repas-partage","text":"Nous avons cr\u00e9\u00e9 ce mod\u00e8le en pensant \u00e0 Thanksgiving, mais il fonctionne pour tous les repas partag\u00e9s ! La logistique des repas partag\u00e9s peut \u00eatre difficile \u00e0 g\u00e9rer, mais ce mod\u00e8le facilite la gestion de qui apporte quoi. Tout le monde peut collaborer en notant ce qu\u2019il apporte et en s\u2019assurant que tous les essentiels sont couverts. ALLER AU MOD\u00c8LE","title":"Organisateur de Repas Partag\u00e9"},{"location":"newsletters/2022-10/#planificateur-de-mariage","text":"R\u00e9cemment fianc\u00e9 ? \ud83d\udc8d F\u00e9licitations ! Planifier un mariage peut \u00eatre chaotique mais pas pour vous car vous avez Grist \ud83d\ude0a Utilisez ce mod\u00e8le pour organiser les notes des fournisseurs, les listes d\u2019invit\u00e9s, les contrats et plus encore ! ALLER AU MOD\u00c8LE","title":"Planificateur de Mariage"},{"location":"newsletters/2022-10/#aidez-nous-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-10/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-11/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Novembre 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Novembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Exp\u00e9rience Grist : \u00c9crire des Formules Python avec l\u2019IA # Nous voyons de nombreux utilisateurs avanc\u00e9s de Grist qui utilisent toutes les fonctionnalit\u00e9s sauf les formules, ce qui est dommage, mais compr\u00e9hensible. Les formules peuvent \u00eatre intimidantes. Imaginez si \u00e9crire des formules de tableur \u00e9tait aussi simple que de poser une question. Nous avons r\u00e9cemment exp\u00e9riment\u00e9 avec OpenAI pour voir dans quelle mesure l\u2019IA pouvait \u00e9crire des formules Python dans Grist. L\u2019exp\u00e9rience a donn\u00e9 des r\u00e9sultats prometteurs que nous sommes ravis de partager ! Bien que cette fonctionnalit\u00e9 de g\u00e9n\u00e9ration de formules assist\u00e9e par IA ne fasse pas encore partie de Grist, cette exp\u00e9rience prouve sa valeur future : l\u2019IA peut \u00e9liminer une lutte courante pour l\u2019utilisateur de tableur d\u2019aujourd\u2019hui \u2014 \u00e9crire correctement des formules. Lisez-en plus sur l\u2019exp\u00e9rience sur notre blog. Il y a un sondage \u00e0 la fin o\u00f9 vous pouvez voter pour cette fonctionnalit\u00e9 et vous inscrire pour recevoir des mises \u00e0 jour sur notre g\u00e9n\u00e9ration de formules par IA. LIRE PLUS Vous souhaitez aider au d\u00e9veloppement de Grist ? # Nous travaillons toujours sur de grandes nouvelles fonctionnalit\u00e9s et aimerions recevoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester des fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un e-mail \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL Quoi de neuf # Am\u00e9liorations de Tri et de Filtrage # Nous avons am\u00e9lior\u00e9 l\u2019exp\u00e9rience de tri et de filtrage des tables et autres vues, la rendant plus facile \u00e0 utiliser. Les param\u00e8tres de sauvegarde et de r\u00e9initialisation sont d\u00e9sormais plus clairs d\u2019un coup d\u2019\u0153il, et les boutons de filtre sont plus flexibles. Auparavant, pour cr\u00e9er des boutons de filtre au-dessus d\u2019une vue, vous pouviez soit transformer tous vos filtres en boutons, soit aucun. D\u00e9sormais, vous pouvez \u00e9pingler les boutons de filtre individuellement. Par exemple, cette vue a deux filtres appliqu\u00e9s aux colonnes \u201cInvitation\u201d et \u201cMerci envoy\u00e9 ?\u201d. Seul l\u2019un d\u2019entre eux, \u201cMerci envoy\u00e9 ?\u201d, est \u00e9pingl\u00e9 en tant que bouton pour plus de commodit\u00e9. \u201cInvitation\u201d n\u2019est pas \u00e9pingl\u00e9, car il s\u2019assure que cette vue ne montre que les invit\u00e9s qui ont r\u00e9pondu oui au mariage. (Si vous en avez besoin, voici le mod\u00e8le de planification de mariage complet \u2014 et f\u00e9licitations !) Apprendre Grist # Webinaire : Modifier des Mod\u00e8les # Le webinaire de d\u00e9cembre se concentrera sur la mani\u00e8re d\u2019examiner sous le capot d\u2019un mod\u00e8le de notre galerie de mod\u00e8les et de le modifier pour r\u00e9pondre \u00e0 vos besoins. Jeudi 15 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE D\u00c9CEMBRE Conseils de Cr\u00e9ateurs pour des Flux de Travail Productifs # En novembre, Natalie a partag\u00e9 des conseils pour que les cr\u00e9ateurs tirent le meilleur parti de Grist tout en construisant des flux de travail productifs pour les \u00e9quipes, tout en utilisant des fonctionnalit\u00e9s qui rendent Grist facile \u00e0 utiliser par n\u2019importe qui. REGARDEZ L\u2019ENREGISTREMENT DE NOVEMBRE Programme Sprouts # Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS Mod\u00e8les # Suivi des Dons # C\u2019est toujours la saison des dons ! Gardez une trace de vos dons de charit\u00e9 en un seul endroit. Pour plus de conseils sur l\u2019utilisation de ce mod\u00e8le, lisez notre blog. ALLER AU MOD\u00c8LE \ud83c\udf84 Budget des Cadeaux de No\u00ebl # C\u2019est la saison ! Suivez et budg\u00e9tisez facilement vos cadeaux de vacances en un seul endroit. ALLER AU MOD\u00c8LE Organisateur de Potluck # Nous partageons \u00e0 nouveau ce mod\u00e8le car il peut encore \u00eatre utile en cette saison des f\u00eates ! Ce mod\u00e8le g\u00e8re la logistique des d\u00eeners potluck. Tout le monde peut collaborer en notant ce qu\u2019il apporte et en s\u2019assurant que tous les essentiels sont couverts. Pour des conseils sur son utilisation, lisez notre blog . ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/11"},{"location":"newsletters/2022-11/#bulletin-de-novembre-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Novembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Novembre 2022"},{"location":"newsletters/2022-11/#experience-grist-ecrire-des-formules-python-avec-lia","text":"Nous voyons de nombreux utilisateurs avanc\u00e9s de Grist qui utilisent toutes les fonctionnalit\u00e9s sauf les formules, ce qui est dommage, mais compr\u00e9hensible. Les formules peuvent \u00eatre intimidantes. Imaginez si \u00e9crire des formules de tableur \u00e9tait aussi simple que de poser une question. Nous avons r\u00e9cemment exp\u00e9riment\u00e9 avec OpenAI pour voir dans quelle mesure l\u2019IA pouvait \u00e9crire des formules Python dans Grist. L\u2019exp\u00e9rience a donn\u00e9 des r\u00e9sultats prometteurs que nous sommes ravis de partager ! Bien que cette fonctionnalit\u00e9 de g\u00e9n\u00e9ration de formules assist\u00e9e par IA ne fasse pas encore partie de Grist, cette exp\u00e9rience prouve sa valeur future : l\u2019IA peut \u00e9liminer une lutte courante pour l\u2019utilisateur de tableur d\u2019aujourd\u2019hui \u2014 \u00e9crire correctement des formules. Lisez-en plus sur l\u2019exp\u00e9rience sur notre blog. Il y a un sondage \u00e0 la fin o\u00f9 vous pouvez voter pour cette fonctionnalit\u00e9 et vous inscrire pour recevoir des mises \u00e0 jour sur notre g\u00e9n\u00e9ration de formules par IA. LIRE PLUS","title":"Exp\u00e9rience Grist : \u00c9crire des Formules Python avec l’IA"},{"location":"newsletters/2022-11/#vous-souhaitez-aider-au-developpement-de-grist","text":"Nous travaillons toujours sur de grandes nouvelles fonctionnalit\u00e9s et aimerions recevoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester des fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un e-mail \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL","title":"Vous souhaitez aider au d\u00e9veloppement de Grist ?"},{"location":"newsletters/2022-11/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-11/#ameliorations-de-tri-et-de-filtrage","text":"Nous avons am\u00e9lior\u00e9 l\u2019exp\u00e9rience de tri et de filtrage des tables et autres vues, la rendant plus facile \u00e0 utiliser. Les param\u00e8tres de sauvegarde et de r\u00e9initialisation sont d\u00e9sormais plus clairs d\u2019un coup d\u2019\u0153il, et les boutons de filtre sont plus flexibles. Auparavant, pour cr\u00e9er des boutons de filtre au-dessus d\u2019une vue, vous pouviez soit transformer tous vos filtres en boutons, soit aucun. D\u00e9sormais, vous pouvez \u00e9pingler les boutons de filtre individuellement. Par exemple, cette vue a deux filtres appliqu\u00e9s aux colonnes \u201cInvitation\u201d et \u201cMerci envoy\u00e9 ?\u201d. Seul l\u2019un d\u2019entre eux, \u201cMerci envoy\u00e9 ?\u201d, est \u00e9pingl\u00e9 en tant que bouton pour plus de commodit\u00e9. \u201cInvitation\u201d n\u2019est pas \u00e9pingl\u00e9, car il s\u2019assure que cette vue ne montre que les invit\u00e9s qui ont r\u00e9pondu oui au mariage. (Si vous en avez besoin, voici le mod\u00e8le de planification de mariage complet \u2014 et f\u00e9licitations !)","title":"Am\u00e9liorations de Tri et de Filtrage"},{"location":"newsletters/2022-11/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-11/#webinaire-modifier-des-modeles","text":"Le webinaire de d\u00e9cembre se concentrera sur la mani\u00e8re d\u2019examiner sous le capot d\u2019un mod\u00e8le de notre galerie de mod\u00e8les et de le modifier pour r\u00e9pondre \u00e0 vos besoins. Jeudi 15 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE D\u00c9CEMBRE","title":"Webinaire : Modifier des Mod\u00e8les"},{"location":"newsletters/2022-11/#conseils-de-createurs-pour-des-flux-de-travail-productifs","text":"En novembre, Natalie a partag\u00e9 des conseils pour que les cr\u00e9ateurs tirent le meilleur parti de Grist tout en construisant des flux de travail productifs pour les \u00e9quipes, tout en utilisant des fonctionnalit\u00e9s qui rendent Grist facile \u00e0 utiliser par n\u2019importe qui. REGARDEZ L\u2019ENREGISTREMENT DE NOVEMBRE","title":"Conseils de Cr\u00e9ateurs pour des Flux de Travail Productifs"},{"location":"newsletters/2022-11/#programme-sprouts","text":"Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-11/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2022-11/#suivi-des-dons","text":"C\u2019est toujours la saison des dons ! Gardez une trace de vos dons de charit\u00e9 en un seul endroit. Pour plus de conseils sur l\u2019utilisation de ce mod\u00e8le, lisez notre blog. ALLER AU MOD\u00c8LE","title":"Suivi des Dons"},{"location":"newsletters/2022-11/#budget-des-cadeaux-de-noel","text":"C\u2019est la saison ! Suivez et budg\u00e9tisez facilement vos cadeaux de vacances en un seul endroit. ALLER AU MOD\u00c8LE","title":"\ud83c\udf84 Budget des Cadeaux de No\u00ebl"},{"location":"newsletters/2022-11/#organisateur-de-potluck","text":"Nous partageons \u00e0 nouveau ce mod\u00e8le car il peut encore \u00eatre utile en cette saison des f\u00eates ! Ce mod\u00e8le g\u00e8re la logistique des d\u00eeners potluck. Tout le monde peut collaborer en notant ce qu\u2019il apporte et en s\u2019assurant que tous les essentiels sont couverts. Pour des conseils sur son utilisation, lisez notre blog . ALLER AU MOD\u00c8LE","title":"Organisateur de Potluck"},{"location":"newsletters/2022-11/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-11/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-12/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de d\u00e9cembre 2022 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill D\u00e9cembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Nouveau filtre de date avec calendrier # Le filtrage des colonnes de date et de datetime est devenu plus facile. Vous pouvez maintenant s\u00e9lectionner un intervalle de dates en utilisant un s\u00e9lecteur de calendrier. Les limites de l\u2019intervalle peuvent \u00e9galement \u00eatre relatives \u2014 par exemple, du 1er jour de ce mois \u00e0 Aujourd'hui . Le filtre se mettra \u00e0 jour chaque jour. Instantan\u00e9s dans Grist Core # Auparavant, les instantan\u00e9s \u00e9taient disponibles sur Grist h\u00e9berg\u00e9 et le plan d\u2019entreprise autog\u00e9r\u00e9, et reposaient sur des services de stockage cloud commerciaux. D\u00e9sormais, la prise en charge des instantan\u00e9s est \u00e9galement disponible sur Grist Core \u2014 la version open source de Grist \u2014 et peut fonctionner avec des options de stockage autog\u00e9r\u00e9es open source telles que MinIO. \ud83c\udf89 Apprenez comment configurer les instantan\u00e9s . Suppression rapide des permissions avanc\u00e9es de table/colonne invalides # S\u2019il existe des permissions avanc\u00e9es pour une table ou une colonne qui a \u00e9t\u00e9 supprim\u00e9e, il y a maintenant un bouton pratique pour supprimer les r\u00e8gles qui s\u2019appliquent \u00e0 la colonne ou \u00e0 la table supprim\u00e9e. Vous gardez le contr\u00f4le sur les r\u00e8gles qui restent et celles qui sont supprim\u00e9es, vous n\u2019avez donc pas \u00e0 vous inqui\u00e9ter de la disparition des r\u00e8gles si vous r\u00e9organisez votre document. Dans cet exemple, la colonne Breeder_Retirement a \u00e9t\u00e9 supprim\u00e9e, donc la r\u00e8gle de colonne pour cette colonne doit \u00e9galement \u00eatre supprim\u00e9e. Interface utilisateur am\u00e9lior\u00e9e pour la r\u00e9daction de m\u00e9mos # Les permissions avanc\u00e9es ont maintenant un bouton m\u00e9mo pour ajouter des m\u00e9mos aux r\u00e8gles, rendant la r\u00e9daction et l\u2019\u00e9dition des m\u00e9mos plus pratiques. Les m\u00e9mos peuvent vraiment aider les coll\u00e8gues \u00e0 comprendre pourquoi ils ne peuvent pas faire quelque chose, car les m\u00e9mos sont affich\u00e9s dans une popup lorsqu\u2019une action est bloqu\u00e9e par une r\u00e8gle. Conseils # Pour vous aider, vous et vos co\u00e9quipiers, \u00e0 tirer le meilleur parti de Grist, des conseils apparaissent d\u00e9sormais lorsque vous explorez les fonctionnalit\u00e9s de Grist. Pour ignorer tous les conseils, cochez la case \u201cNe pas afficher les conseils\u201d. Contributions open source # Merci \u00e0 @jperon qui a cr\u00e9\u00e9 et partag\u00e9 un widget de tableau crois\u00e9 dynamique personnalis\u00e9. Trouvez-le dans notre d\u00e9p\u00f4t Github de widgets personnalis\u00e9s, grist-widget . Apprendre Grist # Webinaire : Permissions avanc\u00e9es pour les \u00e9quipes # Apprenez \u00e0 \u00e9crire des permissions avanc\u00e9es qui g\u00e8rent les autorisations des membres de l\u2019\u00e9quipe sur un document. Jeudi 19 janvier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER Modification des mod\u00e8les # En d\u00e9cembre, nous avons appris \u00e0 modifier un mod\u00e8le de notre galerie de mod\u00e8les pour mieux s\u2019adapter \u00e0 votre flux de travail. REGARDEZ L\u2019ENREGISTREMENT DE D\u00c9CEMBRE Programme Sprouts # Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS Mod\u00e8les # Gestion d\u2019\u00e9glise # L\u2019utilisateur de Grist Paul Janzen a construit un CRM pour g\u00e9rer les informations des paroissiens de son \u00e9glise. Il a partag\u00e9 le mod\u00e8le avec nous pour l\u2019inclure dans notre galerie. Merci ! \ud83d\ude4f ALLER AU MOD\u00c8LE Club de lecture # Une r\u00e9solution courante du Nouvel An est de lire plus de livres. Lancez vos habitudes de lecture avec un club de lecture ! Utilisez ce mod\u00e8le pour suivre les suggestions de livres, et trouvez des livres dans les magasins et les biblioth\u00e8ques en un clic. ALLER AU MOD\u00c8LE Vous voulez aider au d\u00e9veloppement de Grist ? # Nous travaillons toujours sur de nouvelles fonctionnalit\u00e9s importantes et aimerions avoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester les fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un email \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des retours ou besoin d\u2019aide ? Consultez notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/12"},{"location":"newsletters/2022-12/#bulletin-de-decembre-2022","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill D\u00e9cembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de d\u00e9cembre 2022"},{"location":"newsletters/2022-12/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-12/#nouveau-filtre-de-date-avec-calendrier","text":"Le filtrage des colonnes de date et de datetime est devenu plus facile. Vous pouvez maintenant s\u00e9lectionner un intervalle de dates en utilisant un s\u00e9lecteur de calendrier. Les limites de l\u2019intervalle peuvent \u00e9galement \u00eatre relatives \u2014 par exemple, du 1er jour de ce mois \u00e0 Aujourd'hui . Le filtre se mettra \u00e0 jour chaque jour.","title":"Nouveau filtre de date avec calendrier"},{"location":"newsletters/2022-12/#instantanes-dans-grist-core","text":"Auparavant, les instantan\u00e9s \u00e9taient disponibles sur Grist h\u00e9berg\u00e9 et le plan d\u2019entreprise autog\u00e9r\u00e9, et reposaient sur des services de stockage cloud commerciaux. D\u00e9sormais, la prise en charge des instantan\u00e9s est \u00e9galement disponible sur Grist Core \u2014 la version open source de Grist \u2014 et peut fonctionner avec des options de stockage autog\u00e9r\u00e9es open source telles que MinIO. \ud83c\udf89 Apprenez comment configurer les instantan\u00e9s .","title":"Instantan\u00e9s dans Grist Core"},{"location":"newsletters/2022-12/#suppression-rapide-des-permissions-avancees-de-tablecolonne-invalides","text":"S\u2019il existe des permissions avanc\u00e9es pour une table ou une colonne qui a \u00e9t\u00e9 supprim\u00e9e, il y a maintenant un bouton pratique pour supprimer les r\u00e8gles qui s\u2019appliquent \u00e0 la colonne ou \u00e0 la table supprim\u00e9e. Vous gardez le contr\u00f4le sur les r\u00e8gles qui restent et celles qui sont supprim\u00e9es, vous n\u2019avez donc pas \u00e0 vous inqui\u00e9ter de la disparition des r\u00e8gles si vous r\u00e9organisez votre document. Dans cet exemple, la colonne Breeder_Retirement a \u00e9t\u00e9 supprim\u00e9e, donc la r\u00e8gle de colonne pour cette colonne doit \u00e9galement \u00eatre supprim\u00e9e.","title":"Suppression rapide des permissions avanc\u00e9es de table/colonne invalides"},{"location":"newsletters/2022-12/#interface-utilisateur-amelioree-pour-la-redaction-de-memos","text":"Les permissions avanc\u00e9es ont maintenant un bouton m\u00e9mo pour ajouter des m\u00e9mos aux r\u00e8gles, rendant la r\u00e9daction et l\u2019\u00e9dition des m\u00e9mos plus pratiques. Les m\u00e9mos peuvent vraiment aider les coll\u00e8gues \u00e0 comprendre pourquoi ils ne peuvent pas faire quelque chose, car les m\u00e9mos sont affich\u00e9s dans une popup lorsqu\u2019une action est bloqu\u00e9e par une r\u00e8gle.","title":"Interface utilisateur am\u00e9lior\u00e9e pour la r\u00e9daction de m\u00e9mos"},{"location":"newsletters/2022-12/#conseils","text":"Pour vous aider, vous et vos co\u00e9quipiers, \u00e0 tirer le meilleur parti de Grist, des conseils apparaissent d\u00e9sormais lorsque vous explorez les fonctionnalit\u00e9s de Grist. Pour ignorer tous les conseils, cochez la case \u201cNe pas afficher les conseils\u201d.","title":"Conseils"},{"location":"newsletters/2022-12/#contributions-open-source","text":"Merci \u00e0 @jperon qui a cr\u00e9\u00e9 et partag\u00e9 un widget de tableau crois\u00e9 dynamique personnalis\u00e9. Trouvez-le dans notre d\u00e9p\u00f4t Github de widgets personnalis\u00e9s, grist-widget .","title":"Contributions open source"},{"location":"newsletters/2022-12/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-12/#webinaire-permissions-avancees-pour-les-equipes","text":"Apprenez \u00e0 \u00e9crire des permissions avanc\u00e9es qui g\u00e8rent les autorisations des membres de l\u2019\u00e9quipe sur un document. Jeudi 19 janvier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER","title":"Webinaire : Permissions avanc\u00e9es pour les \u00e9quipes"},{"location":"newsletters/2022-12/#modification-des-modeles","text":"En d\u00e9cembre, nous avons appris \u00e0 modifier un mod\u00e8le de notre galerie de mod\u00e8les pour mieux s\u2019adapter \u00e0 votre flux de travail. REGARDEZ L\u2019ENREGISTREMENT DE D\u00c9CEMBRE","title":"Modification des mod\u00e8les"},{"location":"newsletters/2022-12/#programme-sprouts","text":"Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-12/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2022-12/#gestion-deglise","text":"L\u2019utilisateur de Grist Paul Janzen a construit un CRM pour g\u00e9rer les informations des paroissiens de son \u00e9glise. Il a partag\u00e9 le mod\u00e8le avec nous pour l\u2019inclure dans notre galerie. Merci ! \ud83d\ude4f ALLER AU MOD\u00c8LE","title":"Gestion d’\u00e9glise"},{"location":"newsletters/2022-12/#club-de-lecture","text":"Une r\u00e9solution courante du Nouvel An est de lire plus de livres. Lancez vos habitudes de lecture avec un club de lecture ! Utilisez ce mod\u00e8le pour suivre les suggestions de livres, et trouvez des livres dans les magasins et les biblioth\u00e8ques en un clic. ALLER AU MOD\u00c8LE","title":"Club de lecture"},{"location":"newsletters/2022-12/#vous-voulez-aider-au-developpement-de-grist","text":"Nous travaillons toujours sur de nouvelles fonctionnalit\u00e9s importantes et aimerions avoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester les fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un email \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL","title":"Vous voulez aider au d\u00e9veloppement de Grist ?"},{"location":"newsletters/2022-12/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-12/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des retours ou besoin d\u2019aide ? Consultez notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-01/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Janvier 2023 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Janvier 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Grist en Fran\u00e7ais, Espa\u00f1ol, Portugu\u00eas und Deutsch! # Grist est d\u00e9sormais disponible en plusieurs langues. Pour d\u00e9finir une langue, cliquez sur votre ic\u00f4ne utilisateur > param\u00e8tres du profil > s\u00e9lectionnez une langue dans le menu d\u00e9roulant. Nous sommes tr\u00e8s reconnaissants aux b\u00e9n\u00e9voles qui ont traduit Grist, \u00e0 savoir l\u2019\u00e9quipe de l\u2019ANCT et Paul Janzen. \ud83d\ude4f Les d\u00e9veloppeurs de l\u2019ANCT ont \u00e9galement fait le gros du travail pour rendre une bonne partie de l\u2019application traduisible. Merci bien! Vous souhaitez aider \u00e0 traduire Grist? Nous utilisons Weblate pour g\u00e9rer les traductions et nous accueillons volontiers les traducteurs b\u00e9n\u00e9voles. Merci \u00e0 tous ceux qui contribuent. Agrandir les Vues # Travailler sur de petits \u00e9crans devient plus facile! Il est maintenant possible d\u2019agrandir les vues en cliquant sur l\u2019ic\u00f4ne d\u2019agrandissement dans le coin sup\u00e9rieur droit. Voir Comme un Autre Utilisateur # Voir un document comme diff\u00e9rents membres de l\u2019\u00e9quipe est utile lors des tests de permissions avanc\u00e9es. Il est maintenant plus facile de parcourir les membres dans une banni\u00e8re \u201cVoir Comme\u201d sans quitter la page. Vous pouvez \u00e9galement voir comme un membre de l\u2019\u00e9quipe depuis le menu \u00e0 trois points dans le bouton des permissions avanc\u00e9es dans le panneau lat\u00e9ral gauche. R\u00e8gles par D\u00e9faut pour les Permissions Granulaires de Table # Lors de l\u2019\u00e9criture de permissions avanc\u00e9es, il est assez courant de r\u00e9p\u00e9ter la m\u00eame r\u00e8gle sur plusieurs tables \u2014 par exemple, toujours accorder aux propri\u00e9taires des permissions compl\u00e8tes de lecture et d\u2019\u00e9criture. Il y a maintenant une case \u00e0 cocher qui accordera automatiquement aux propri\u00e9taires un acc\u00e8s complet chaque fois que des r\u00e8gles de table sont ajout\u00e9es. Les r\u00e8gles qui sont automatiquement ajout\u00e9es aux nouvelles r\u00e8gles de table sont appel\u00e9es r\u00e8gles par d\u00e9faut. Vous pouvez modifier les r\u00e8gles par d\u00e9faut et m\u00eame ajouter des m\u00e9mos si n\u00e9cessaire. Basculement en Un Clic pour Refuser les Permissions de Sch\u00e9ma aux \u00c9diteurs # Par d\u00e9faut, les \u00e9diteurs d\u2019un document ont des permissions de sch\u00e9ma, ce qui leur permet de modifier la structure, les vues et les formules d\u2019un document. Les formules sont puissantes car un utilisateur d\u00e9termin\u00e9 peut r\u00e9cup\u00e9rer des informations auxquelles il n\u2019a pas acc\u00e8s en utilisant des formules. Pour se prot\u00e9ger contre cela, les \u00e9diteurs peuvent se voir refuser les permissions de sch\u00e9ma avec une r\u00e8gle d\u2019acc\u00e8s suppl\u00e9mentaire. Nous avons rendu cela plus facile avec une case \u00e0 cocher en un clic. Les Param\u00e8tres du Document ont D\u00e9plac\u00e9 # Vous pouvez maintenant trouver les param\u00e8tres du document dans la section \u201cOutils\u201d du panneau lat\u00e9ral gauche. Points Forts de la Communaut\u00e9 # @jperon a cr\u00e9\u00e9 et partag\u00e9 un widget QR code personnalis\u00e9. @enthus1ast a cr\u00e9\u00e9 une application qui sauvegarde p\u00e9riodiquement les documents Grist aux formats de fichiers SQLite, Xlsx et CSV. Merci \u00e0 vous deux! \ud83d\ude4f Apprendre Grist # Webinaire : Travailler avec les Dates # Les dates sont une partie courante des donn\u00e9es. Cependant, travailler avec elles dans les formules et les filtres peut \u00eatre intimidant. Dans le webinaire de ce mois-ci, nous partagerons des conseils pour travailler avec les dates. Jeudi 16 f\u00e9vrier \u00e0 14h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER Permissions Avanc\u00e9es pour les \u00c9quipes # En janvier, nous avons appris \u00e0 \u00e9crire des permissions avanc\u00e9es pour g\u00e9rer les permissions des membres de l\u2019\u00e9quipe sur un document. REGARDER L\u2019ENREGISTREMENT DE JANVIER Mod\u00e8les # Suivi des Habitudes # Pr\u00e9parez-vous au succ\u00e8s en adoptant de meilleures habitudes! Suivez vos progr\u00e8s avec ce simple suivi hebdomadaire des habitudes. ALLER AU MOD\u00c8LE D\u00e9penses de Carte de Cr\u00e9dit # Suivez les d\u00e9penses de carte de cr\u00e9dit des employ\u00e9s et analysez les d\u00e9penses en un seul endroit. ALLER AU MOD\u00c8LE Recrutement # Utilisez ce mod\u00e8le pour suivre les candidats postulant \u00e0 des r\u00f4les dans votre \u00e9quipe. Suivez collaborativement les candidats, et joignez des CV et des notes d\u2019entretien. ALLER AU MOD\u00c8LE Vous Voulez Aider au D\u00e9veloppement de Grist? # Nous travaillons toujours sur de grandes nouvelles fonctionnalit\u00e9s et aimerions recevoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester des fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un email \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL Aider \u00e0 faire conna\u00eetre Grist? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/01"},{"location":"newsletters/2023-01/#bulletin-de-janvier-2023","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Janvier 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Janvier 2023"},{"location":"newsletters/2023-01/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-01/#grist-en-francais-espanol-portugues-und-deutsch","text":"Grist est d\u00e9sormais disponible en plusieurs langues. Pour d\u00e9finir une langue, cliquez sur votre ic\u00f4ne utilisateur > param\u00e8tres du profil > s\u00e9lectionnez une langue dans le menu d\u00e9roulant. Nous sommes tr\u00e8s reconnaissants aux b\u00e9n\u00e9voles qui ont traduit Grist, \u00e0 savoir l\u2019\u00e9quipe de l\u2019ANCT et Paul Janzen. \ud83d\ude4f Les d\u00e9veloppeurs de l\u2019ANCT ont \u00e9galement fait le gros du travail pour rendre une bonne partie de l\u2019application traduisible. Merci bien! Vous souhaitez aider \u00e0 traduire Grist? Nous utilisons Weblate pour g\u00e9rer les traductions et nous accueillons volontiers les traducteurs b\u00e9n\u00e9voles. Merci \u00e0 tous ceux qui contribuent.","title":"Grist en Fran\u00e7ais, Espa\u00f1ol, Portugu\u00eas und Deutsch!"},{"location":"newsletters/2023-01/#agrandir-les-vues","text":"Travailler sur de petits \u00e9crans devient plus facile! Il est maintenant possible d\u2019agrandir les vues en cliquant sur l\u2019ic\u00f4ne d\u2019agrandissement dans le coin sup\u00e9rieur droit.","title":"Agrandir les Vues"},{"location":"newsletters/2023-01/#voir-comme-un-autre-utilisateur","text":"Voir un document comme diff\u00e9rents membres de l\u2019\u00e9quipe est utile lors des tests de permissions avanc\u00e9es. Il est maintenant plus facile de parcourir les membres dans une banni\u00e8re \u201cVoir Comme\u201d sans quitter la page. Vous pouvez \u00e9galement voir comme un membre de l\u2019\u00e9quipe depuis le menu \u00e0 trois points dans le bouton des permissions avanc\u00e9es dans le panneau lat\u00e9ral gauche.","title":"Voir Comme un Autre Utilisateur"},{"location":"newsletters/2023-01/#regles-par-defaut-pour-les-permissions-granulaires-de-table","text":"Lors de l\u2019\u00e9criture de permissions avanc\u00e9es, il est assez courant de r\u00e9p\u00e9ter la m\u00eame r\u00e8gle sur plusieurs tables \u2014 par exemple, toujours accorder aux propri\u00e9taires des permissions compl\u00e8tes de lecture et d\u2019\u00e9criture. Il y a maintenant une case \u00e0 cocher qui accordera automatiquement aux propri\u00e9taires un acc\u00e8s complet chaque fois que des r\u00e8gles de table sont ajout\u00e9es. Les r\u00e8gles qui sont automatiquement ajout\u00e9es aux nouvelles r\u00e8gles de table sont appel\u00e9es r\u00e8gles par d\u00e9faut. Vous pouvez modifier les r\u00e8gles par d\u00e9faut et m\u00eame ajouter des m\u00e9mos si n\u00e9cessaire.","title":"R\u00e8gles par D\u00e9faut pour les Permissions Granulaires de Table"},{"location":"newsletters/2023-01/#basculement-en-un-clic-pour-refuser-les-permissions-de-schema-aux-editeurs","text":"Par d\u00e9faut, les \u00e9diteurs d\u2019un document ont des permissions de sch\u00e9ma, ce qui leur permet de modifier la structure, les vues et les formules d\u2019un document. Les formules sont puissantes car un utilisateur d\u00e9termin\u00e9 peut r\u00e9cup\u00e9rer des informations auxquelles il n\u2019a pas acc\u00e8s en utilisant des formules. Pour se prot\u00e9ger contre cela, les \u00e9diteurs peuvent se voir refuser les permissions de sch\u00e9ma avec une r\u00e8gle d\u2019acc\u00e8s suppl\u00e9mentaire. Nous avons rendu cela plus facile avec une case \u00e0 cocher en un clic.","title":"Basculement en Un Clic pour Refuser les Permissions de Sch\u00e9ma aux \u00c9diteurs"},{"location":"newsletters/2023-01/#les-parametres-du-document-ont-deplace","text":"Vous pouvez maintenant trouver les param\u00e8tres du document dans la section \u201cOutils\u201d du panneau lat\u00e9ral gauche.","title":"Les Param\u00e8tres du Document ont D\u00e9plac\u00e9"},{"location":"newsletters/2023-01/#points-forts-de-la-communaute","text":"@jperon a cr\u00e9\u00e9 et partag\u00e9 un widget QR code personnalis\u00e9. @enthus1ast a cr\u00e9\u00e9 une application qui sauvegarde p\u00e9riodiquement les documents Grist aux formats de fichiers SQLite, Xlsx et CSV. Merci \u00e0 vous deux! \ud83d\ude4f","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2023-01/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-01/#webinaire-travailler-avec-les-dates","text":"Les dates sont une partie courante des donn\u00e9es. Cependant, travailler avec elles dans les formules et les filtres peut \u00eatre intimidant. Dans le webinaire de ce mois-ci, nous partagerons des conseils pour travailler avec les dates. Jeudi 16 f\u00e9vrier \u00e0 14h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER","title":"Webinaire : Travailler avec les Dates"},{"location":"newsletters/2023-01/#permissions-avancees-pour-les-equipes","text":"En janvier, nous avons appris \u00e0 \u00e9crire des permissions avanc\u00e9es pour g\u00e9rer les permissions des membres de l\u2019\u00e9quipe sur un document. REGARDER L\u2019ENREGISTREMENT DE JANVIER","title":"Permissions Avanc\u00e9es pour les \u00c9quipes"},{"location":"newsletters/2023-01/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-01/#suivi-des-habitudes","text":"Pr\u00e9parez-vous au succ\u00e8s en adoptant de meilleures habitudes! Suivez vos progr\u00e8s avec ce simple suivi hebdomadaire des habitudes. ALLER AU MOD\u00c8LE","title":"Suivi des Habitudes"},{"location":"newsletters/2023-01/#depenses-de-carte-de-credit","text":"Suivez les d\u00e9penses de carte de cr\u00e9dit des employ\u00e9s et analysez les d\u00e9penses en un seul endroit. ALLER AU MOD\u00c8LE","title":"D\u00e9penses de Carte de Cr\u00e9dit"},{"location":"newsletters/2023-01/#recrutement","text":"Utilisez ce mod\u00e8le pour suivre les candidats postulant \u00e0 des r\u00f4les dans votre \u00e9quipe. Suivez collaborativement les candidats, et joignez des CV et des notes d\u2019entretien. ALLER AU MOD\u00c8LE","title":"Recrutement"},{"location":"newsletters/2023-01/#vous-voulez-aider-au-developpement-de-grist","text":"Nous travaillons toujours sur de grandes nouvelles fonctionnalit\u00e9s et aimerions recevoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester des fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un email \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL","title":"Vous Voulez Aider au D\u00e9veloppement de Grist?"},{"location":"newsletters/2023-01/#aider-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aider \u00e0 faire conna\u00eetre Grist?"},{"location":"newsletters/2023-01/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-02/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de F\u00e9vrier 2023 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill F\u00e9vrier 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Plus de Langues Disponibles # Le mois dernier, nous avons annonc\u00e9 que Grist est d\u00e9sormais disponible en plusieurs langues gr\u00e2ce aux efforts des traducteurs b\u00e9n\u00e9voles. Depuis, d\u2019autres b\u00e9n\u00e9voles ont rejoint, d\u00e9passant largement nos attentes. Un grand merci \u00e0 tous ceux qui ont traduit Grist ! \ud83d\ude4f Il est maintenant traduit dans les langues suivantes : Chinois Fran\u00e7ais Allemand Italien Portugais Russe Espagnol Ukrainien Il y a aussi des traductions partielles du norv\u00e9gien Bokm\u00e5l et du polonais. Si vous \u00eates int\u00e9ress\u00e9 par la finalisation de ces traductions, visitez notre projet Weblate pour contribuer \u00e0 ces efforts. Si vous souhaitez que nous ajoutions une nouvelle langue \u00e0 Weblate, faites-nous savoir laquelle dans ce fil de discussion communautaire . Notez que la traduction chinoise est toute nouvelle et sera disponible dans le produit la semaine prochaine. Parole aux D\u00e9veloppeurs # Ce mois-ci, nous mettons en avant des projets parall\u00e8les int\u00e9ressants qui passionnent les ing\u00e9nieurs de Grist. Application Grist Electron # Paul travaille sur une version Electron de Grist ! C\u2019est un projet de longue date pour lui de faire de Grist une application autonome sur Windows, Mac et Linux. L\u2019ann\u00e9e derni\u00e8re, l\u2019utilisateur @stan-donarise a travaill\u00e9 sur une application Grist Electron pour Windows 7 ou plus . Paul a pris des id\u00e9es de cet effort, de ce fil de discussion sur le forum , et d\u2019une version autonome pr\u00e9coce de Grist d\u00e9velopp\u00e9e chez Grist Labs. D\u00e9couvrez le repo de l\u2019application Grist Electron sur Github . Utilisez-le avec vos propres documents Grist ou des documents de confiance car il n\u2019y a pas encore de sandbox. \ud83d\ude0f Pourquoi le Tri est Plus Difficile qu\u2019il n\u2019y Para\u00eet # De temps en temps, un utilisateur signale un bug de tri. Certains d\u00e9veloppeurs peuvent penser que le tri est facile. Voici pourquoi ce n\u2019est pas le cas, et une plong\u00e9e fascinante dans les coins inattendus du tri . Vos Documents Lourds Vous Ralentissent ? # Nos ing\u00e9nieurs ont \u00e9galement travaill\u00e9 sur des optimisations pour am\u00e9liorer les performances des formules. L\u2019outil de profilage Python py-spy a \u00e9t\u00e9 particuli\u00e8rement utile pour savoir o\u00f9 le temps CPU \u00e9tait pass\u00e9. Les tests sur un grand document ont montr\u00e9 une am\u00e9lioration de 26% de la vitesse de performance. Vos r\u00e9sultats peuvent varier, et nous serions curieux de savoir si quelqu\u2019un a remarqu\u00e9 l\u2019acc\u00e9l\u00e9ration. Apprendre Grist # Webinaire : Nettoyage des Donn\u00e9es # Typiquement, apr\u00e8s avoir import\u00e9 des donn\u00e9es dans Grist, l\u2019\u00e9tape suivante est de nettoyer ces donn\u00e9es. Nous partagerons des astuces pour assainir les donn\u00e9es efficacement, y compris quelques astuces propres \u00e0 Grist. Jeudi 16 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Travailler avec les Dates # En f\u00e9vrier, nous avons appris \u00e0 travailler avec les dates dans les filtres, les tables de r\u00e9sum\u00e9 et les formules. REGARDEZ L\u2019ENREGISTREMENT DE F\u00c9VRIER Mod\u00e8les # Gestion des T\u00e2ches # Organisez les t\u00e2ches de votre \u00e9quipe et guidez une r\u00e9union hebdomadaire. ALLER AU MOD\u00c8LE Paie # Notre simple suivi de la paie est l\u2019un de nos mod\u00e8les les plus populaires. Suivez les informations salariales des employ\u00e9s, les paiements de la paie et les d\u00e9penses de la paie par p\u00e9riode en un seul endroit. ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/02"},{"location":"newsletters/2023-02/#bulletin-de-fevrier-2023","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill F\u00e9vrier 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de F\u00e9vrier 2023"},{"location":"newsletters/2023-02/#plus-de-langues-disponibles","text":"Le mois dernier, nous avons annonc\u00e9 que Grist est d\u00e9sormais disponible en plusieurs langues gr\u00e2ce aux efforts des traducteurs b\u00e9n\u00e9voles. Depuis, d\u2019autres b\u00e9n\u00e9voles ont rejoint, d\u00e9passant largement nos attentes. Un grand merci \u00e0 tous ceux qui ont traduit Grist ! \ud83d\ude4f Il est maintenant traduit dans les langues suivantes : Chinois Fran\u00e7ais Allemand Italien Portugais Russe Espagnol Ukrainien Il y a aussi des traductions partielles du norv\u00e9gien Bokm\u00e5l et du polonais. Si vous \u00eates int\u00e9ress\u00e9 par la finalisation de ces traductions, visitez notre projet Weblate pour contribuer \u00e0 ces efforts. Si vous souhaitez que nous ajoutions une nouvelle langue \u00e0 Weblate, faites-nous savoir laquelle dans ce fil de discussion communautaire . Notez que la traduction chinoise est toute nouvelle et sera disponible dans le produit la semaine prochaine.","title":"Plus de Langues Disponibles"},{"location":"newsletters/2023-02/#parole-aux-developpeurs","text":"Ce mois-ci, nous mettons en avant des projets parall\u00e8les int\u00e9ressants qui passionnent les ing\u00e9nieurs de Grist.","title":"Parole aux D\u00e9veloppeurs"},{"location":"newsletters/2023-02/#application-grist-electron","text":"Paul travaille sur une version Electron de Grist ! C\u2019est un projet de longue date pour lui de faire de Grist une application autonome sur Windows, Mac et Linux. L\u2019ann\u00e9e derni\u00e8re, l\u2019utilisateur @stan-donarise a travaill\u00e9 sur une application Grist Electron pour Windows 7 ou plus . Paul a pris des id\u00e9es de cet effort, de ce fil de discussion sur le forum , et d\u2019une version autonome pr\u00e9coce de Grist d\u00e9velopp\u00e9e chez Grist Labs. D\u00e9couvrez le repo de l\u2019application Grist Electron sur Github . Utilisez-le avec vos propres documents Grist ou des documents de confiance car il n\u2019y a pas encore de sandbox. \ud83d\ude0f","title":"Application Grist Electron"},{"location":"newsletters/2023-02/#pourquoi-le-tri-est-plus-difficile-quil-ny-parait","text":"De temps en temps, un utilisateur signale un bug de tri. Certains d\u00e9veloppeurs peuvent penser que le tri est facile. Voici pourquoi ce n\u2019est pas le cas, et une plong\u00e9e fascinante dans les coins inattendus du tri .","title":"Pourquoi le Tri est Plus Difficile qu’il n’y Para\u00eet"},{"location":"newsletters/2023-02/#vos-documents-lourds-vous-ralentissent","text":"Nos ing\u00e9nieurs ont \u00e9galement travaill\u00e9 sur des optimisations pour am\u00e9liorer les performances des formules. L\u2019outil de profilage Python py-spy a \u00e9t\u00e9 particuli\u00e8rement utile pour savoir o\u00f9 le temps CPU \u00e9tait pass\u00e9. Les tests sur un grand document ont montr\u00e9 une am\u00e9lioration de 26% de la vitesse de performance. Vos r\u00e9sultats peuvent varier, et nous serions curieux de savoir si quelqu\u2019un a remarqu\u00e9 l\u2019acc\u00e9l\u00e9ration.","title":"Vos Documents Lourds Vous Ralentissent ?"},{"location":"newsletters/2023-02/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-02/#webinaire-nettoyage-des-donnees","text":"Typiquement, apr\u00e8s avoir import\u00e9 des donn\u00e9es dans Grist, l\u2019\u00e9tape suivante est de nettoyer ces donn\u00e9es. Nous partagerons des astuces pour assainir les donn\u00e9es efficacement, y compris quelques astuces propres \u00e0 Grist. Jeudi 16 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS","title":"Webinaire : Nettoyage des Donn\u00e9es"},{"location":"newsletters/2023-02/#travailler-avec-les-dates","text":"En f\u00e9vrier, nous avons appris \u00e0 travailler avec les dates dans les filtres, les tables de r\u00e9sum\u00e9 et les formules. REGARDEZ L\u2019ENREGISTREMENT DE F\u00c9VRIER","title":"Travailler avec les Dates"},{"location":"newsletters/2023-02/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-02/#gestion-des-taches","text":"Organisez les t\u00e2ches de votre \u00e9quipe et guidez une r\u00e9union hebdomadaire. ALLER AU MOD\u00c8LE","title":"Gestion des T\u00e2ches"},{"location":"newsletters/2023-02/#paie","text":"Notre simple suivi de la paie est l\u2019un de nos mod\u00e8les les plus populaires. Suivez les informations salariales des employ\u00e9s, les paiements de la paie et les d\u00e9penses de la paie par p\u00e9riode en un seul endroit. ALLER AU MOD\u00c8LE","title":"Paie"},{"location":"newsletters/2023-02/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2023-02/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-03/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mars 2023 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Mars 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Dans ce Bulletin Minimiser les Vues Faites de la place sur vos tableaux de bord en r\u00e9duisant les vues en boutons. Tutoriel de Base Grist Une mani\u00e8re pratique et interactive d\u2019apprendre Grist. Sondage Utilisateur Faites-nous part de votre avis ! \ud83d\udc40 Contributions Open Source \ud83d\ude4f Descriptions de colonnes, vue calendrier personnalis\u00e9e, et plus encore ! Vue Flashcards Personnalis\u00e9e Une nouvelle vue personnalis\u00e9e parfaite pour l\u2019apprentissage. Travailler chez Grist ! Deux postes en marketing sont ouverts chez Grist. Le Grand Sondage Grist ! \ud83d\udd25 # Aidez \u00e0 am\u00e9liorer Grist en r\u00e9pondant \u00e0 notre sondage de 5 questions sur l\u2019exp\u00e9rience utilisateur ! Il y a peut-\u00eatre m\u00eame un prix \u00e0 gagner ! \ud83c\udf08\ud83d\udcb0 PARTICIPER AU SONDAGE Vous voulez travailler chez Grist ? # Aimez-vous Grist et le marketing ? Consultez nos nouvelles offres d\u2019emploi sur https://www.getgrist.com/jobs/ . Quoi de Neuf # Minimiser les Vues # Besoin de plus de place sur votre tableau de bord ? Avez-vous une vue qui n\u2019a pas besoin d\u2019\u00eatre visible en permanence ? Vous pouvez maintenant r\u00e9duire les vues en boutons en haut de la page ! La vue s\u2019agrandira au clic et conservera le lien dynamique avec les autres vues de la page. Tutoriel de Base Grist en Produit # Apprendre Grist n\u2019a jamais \u00e9t\u00e9 aussi facile ! D\u00e9couvrez notre nouveau tutoriel pratique. Ce guide \u00e9tape par \u00e9tape vous donnera les bases pour passer des feuilles de calcul aux tableaux de bord productifs. Contributions Open Source # Descriptions de Colonnes # Merci \u00e0 @CamilleLegeron qui a rendu possible l\u2019ajout de descriptions aux colonnes. \ud83c\udf89\ud83d\ude4f Vous pouvez maintenant d\u00e9finir des descriptions de colonnes dans le panneau de cr\u00e9ation. Vue Calendrier Personnalis\u00e9e # @ToJans sur Twitter a partag\u00e9 sa vue calendrier personnalis\u00e9e, ainsi qu\u2019un lien que vous pouvez int\u00e9grer dans vos propres documents. Consultez son tweet . \u00c7a marche ! \ud83d\udcaa TASTEME() ?? # Le mois dernier, nous avons \u00e9galement re\u00e7u une nouvelle fonction de @DysfunctionalWerewolf. La fonction TASTEME() renvoie True pour un texte savoureux, False pour un texte non savoureux. C\u2019est\u2026utile ? \ud83e\udd14 @DysfunctionalWerewolf a montr\u00e9 la fonction en action sur Twitter @were_functions . Nous nous sommes amus\u00e9s \u00e0 essayer de percer le secret de ce qui est savoureux ou non ! Faites-nous savoir si vos donn\u00e9es sont, euh, approuv\u00e9es par les loups-garous ? Mise \u00e0 Jour sur l\u2019Application Grist Electron \u2014 Sandboxing ! # Bonne nouvelle, tout le monde ! L\u2019application Grist electron a maintenant le sandboxing par d\u00e9faut. Tout le monde peut t\u00e9l\u00e9charger l\u2019application sans avoir \u00e0 compiler \u00e0 partir de la source ou conna\u00eetre Docker. Enfin, un moyen super facile de faire fonctionner Grist localement sur votre ordinateur. En savoir plus sur Github . Trouvez le bon fichier de t\u00e9l\u00e9chargement dans cette liste . Sponsoriser Grist sur Github # Vous voulez montrer votre soutien \u00e0 notre projet open source ? Parlez de nous sur tous vos r\u00e9seaux sociaux et \u00e0 vos amis ! Si vous voulez faire encore plus, envisagez de nous sponsoriser sur Github. \ud83e\udde1 Nous sommes reconnaissants envers notre premier sponsor d\u2019entreprise Dotphoton, et envers le sponsor @emanuelegissi ! \ud83d\ude4f SPONSORISER GRIST Apprendre Grist # Webinar : Formules d\u2019Initialisation # Les formules Grist peuvent \u00eatre d\u00e9finies pour se d\u00e9clencher sur des \u00e9v\u00e9nements d\u2019enregistrement sp\u00e9cifiques. Apprenez tout sur les formules d\u2019initialisation, quand les utiliser, et les usages courants des formules d\u2019initialisation pour garder vos donn\u00e9es organis\u00e9es et productives. Mercredi 12 avril \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAR D\u2019AVRIL Nettoyage des Donn\u00e9es # En mars, Natalie a partag\u00e9 des astuces pour nettoyer vos donn\u00e9es rapidement dans Grist, y compris quelques astuces exclusives \u00e0 Grist. REGARDER L\u2019ENREGISTREMENT DE MARS Nouveau Mod\u00e8le et Vue Personnalis\u00e9e # Flashcards # Pr\u00eat \u00e0 r\u00e9ussir votre prochain test ? Vous obtiendrez \ud83d\udcaf en \u00e9tudiant avec ces petites merveilles. Les flashcards sont l\u2019une des formes d\u2019\u00e9tude les plus efficaces \u2014 et avec Grist, elles sont toutes au m\u00eame endroit. ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/03"},{"location":"newsletters/2023-03/#bulletin-de-mars-2023","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Mars 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Dans ce Bulletin Minimiser les Vues Faites de la place sur vos tableaux de bord en r\u00e9duisant les vues en boutons. Tutoriel de Base Grist Une mani\u00e8re pratique et interactive d\u2019apprendre Grist. Sondage Utilisateur Faites-nous part de votre avis ! \ud83d\udc40 Contributions Open Source \ud83d\ude4f Descriptions de colonnes, vue calendrier personnalis\u00e9e, et plus encore ! Vue Flashcards Personnalis\u00e9e Une nouvelle vue personnalis\u00e9e parfaite pour l\u2019apprentissage. Travailler chez Grist ! Deux postes en marketing sont ouverts chez Grist.","title":"Bulletin de Mars 2023"},{"location":"newsletters/2023-03/#le-grand-sondage-grist","text":"Aidez \u00e0 am\u00e9liorer Grist en r\u00e9pondant \u00e0 notre sondage de 5 questions sur l\u2019exp\u00e9rience utilisateur ! Il y a peut-\u00eatre m\u00eame un prix \u00e0 gagner ! \ud83c\udf08\ud83d\udcb0 PARTICIPER AU SONDAGE","title":"Le Grand Sondage Grist ! \ud83d\udd25"},{"location":"newsletters/2023-03/#vous-voulez-travailler-chez-grist","text":"Aimez-vous Grist et le marketing ? Consultez nos nouvelles offres d\u2019emploi sur https://www.getgrist.com/jobs/ .","title":"Vous voulez travailler chez Grist ?"},{"location":"newsletters/2023-03/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-03/#minimiser-les-vues","text":"Besoin de plus de place sur votre tableau de bord ? Avez-vous une vue qui n\u2019a pas besoin d\u2019\u00eatre visible en permanence ? Vous pouvez maintenant r\u00e9duire les vues en boutons en haut de la page ! La vue s\u2019agrandira au clic et conservera le lien dynamique avec les autres vues de la page.","title":"Minimiser les Vues"},{"location":"newsletters/2023-03/#tutoriel-de-base-grist-en-produit","text":"Apprendre Grist n\u2019a jamais \u00e9t\u00e9 aussi facile ! D\u00e9couvrez notre nouveau tutoriel pratique. Ce guide \u00e9tape par \u00e9tape vous donnera les bases pour passer des feuilles de calcul aux tableaux de bord productifs.","title":"Tutoriel de Base Grist en Produit"},{"location":"newsletters/2023-03/#contributions-open-source","text":"","title":"Contributions Open Source"},{"location":"newsletters/2023-03/#descriptions-de-colonnes","text":"Merci \u00e0 @CamilleLegeron qui a rendu possible l\u2019ajout de descriptions aux colonnes. \ud83c\udf89\ud83d\ude4f Vous pouvez maintenant d\u00e9finir des descriptions de colonnes dans le panneau de cr\u00e9ation.","title":"Descriptions de Colonnes"},{"location":"newsletters/2023-03/#vue-calendrier-personnalisee","text":"@ToJans sur Twitter a partag\u00e9 sa vue calendrier personnalis\u00e9e, ainsi qu\u2019un lien que vous pouvez int\u00e9grer dans vos propres documents. Consultez son tweet . \u00c7a marche ! \ud83d\udcaa","title":"Vue Calendrier Personnalis\u00e9e"},{"location":"newsletters/2023-03/#tasteme","text":"Le mois dernier, nous avons \u00e9galement re\u00e7u une nouvelle fonction de @DysfunctionalWerewolf. La fonction TASTEME() renvoie True pour un texte savoureux, False pour un texte non savoureux. C\u2019est\u2026utile ? \ud83e\udd14 @DysfunctionalWerewolf a montr\u00e9 la fonction en action sur Twitter @were_functions . Nous nous sommes amus\u00e9s \u00e0 essayer de percer le secret de ce qui est savoureux ou non ! Faites-nous savoir si vos donn\u00e9es sont, euh, approuv\u00e9es par les loups-garous ?","title":"TASTEME() ??"},{"location":"newsletters/2023-03/#mise-a-jour-sur-lapplication-grist-electron-sandboxing","text":"Bonne nouvelle, tout le monde ! L\u2019application Grist electron a maintenant le sandboxing par d\u00e9faut. Tout le monde peut t\u00e9l\u00e9charger l\u2019application sans avoir \u00e0 compiler \u00e0 partir de la source ou conna\u00eetre Docker. Enfin, un moyen super facile de faire fonctionner Grist localement sur votre ordinateur. En savoir plus sur Github . Trouvez le bon fichier de t\u00e9l\u00e9chargement dans cette liste .","title":"Mise \u00e0 Jour sur l’Application Grist Electron \u2014 Sandboxing !"},{"location":"newsletters/2023-03/#sponsoriser-grist-sur-github","text":"Vous voulez montrer votre soutien \u00e0 notre projet open source ? Parlez de nous sur tous vos r\u00e9seaux sociaux et \u00e0 vos amis ! Si vous voulez faire encore plus, envisagez de nous sponsoriser sur Github. \ud83e\udde1 Nous sommes reconnaissants envers notre premier sponsor d\u2019entreprise Dotphoton, et envers le sponsor @emanuelegissi ! \ud83d\ude4f SPONSORISER GRIST","title":"Sponsoriser Grist sur Github"},{"location":"newsletters/2023-03/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-03/#webinar-formules-dinitialisation","text":"Les formules Grist peuvent \u00eatre d\u00e9finies pour se d\u00e9clencher sur des \u00e9v\u00e9nements d\u2019enregistrement sp\u00e9cifiques. Apprenez tout sur les formules d\u2019initialisation, quand les utiliser, et les usages courants des formules d\u2019initialisation pour garder vos donn\u00e9es organis\u00e9es et productives. Mercredi 12 avril \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAR D\u2019AVRIL","title":"Webinar : Formules d’Initialisation"},{"location":"newsletters/2023-03/#nettoyage-des-donnees","text":"En mars, Natalie a partag\u00e9 des astuces pour nettoyer vos donn\u00e9es rapidement dans Grist, y compris quelques astuces exclusives \u00e0 Grist. REGARDER L\u2019ENREGISTREMENT DE MARS","title":"Nettoyage des Donn\u00e9es"},{"location":"newsletters/2023-03/#nouveau-modele-et-vue-personnalisee","text":"","title":"Nouveau Mod\u00e8le et Vue Personnalis\u00e9e"},{"location":"newsletters/2023-03/#flashcards","text":"Pr\u00eat \u00e0 r\u00e9ussir votre prochain test ? Vous obtiendrez \ud83d\udcaf en \u00e9tudiant avec ces petites merveilles. Les flashcards sont l\u2019une des formes d\u2019\u00e9tude les plus efficaces \u2014 et avec Grist, elles sont toutes au m\u00eame endroit. ALLER AU MOD\u00c8LE","title":"Flashcards"},{"location":"newsletters/2023-03/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2023-03/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-04/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Avril 2023 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2023 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Concours de Flashcards : Construisez le Meilleur Deck de Connaissances # En mai, nous parrainons un concours de flashcards. Construisez le meilleur deck de flashcards en utilisant notre Mod\u00e8le de Flashcards pour partager votre expertise sur n\u2019importe quel sujet. La communaut\u00e9 votera ensuite pour les trois decks de flashcards les plus \u00e9poustouflants. Chacun des trois gagnants recevra un thermos Grist rare et tr\u00e8s recherch\u00e9. EN SAVOIR PLUS Quoi de Neuf # Nous avons rickroll\u00e9, et vous pouvez aussi # Le mois dernier, nous vous avons invit\u00e9 \u00e0 r\u00e9pondre \u00e0 une enqu\u00eate Grist et avons r\u00e9compens\u00e9 votre gentillesse avec une blague du 1er avril : un rickroll dans Grist. La bonne nouvelle est que vous pouvez transmettre cela \u00e0 tout moment \u00e0 qui vous voulez avec n\u2019importe quel document. Prenez n\u2019importe quel lien d\u2019ancrage Grist et remplacez le r dans l\u2019URL par rr. Nous appelons cela \u201crickrow\u201d car ce r s\u2019ancre \u00e0 une ligne. Pour trouver un lien d\u2019ancrage, cliquez avec le bouton droit sur n\u2019importe quelle cellule et s\u00e9lectionnez \u201ccopier le lien d\u2019ancrage\u201d dans le menu contextuel (raccourci clavier indiqu\u00e9 dans le menu). Dans ce cas, le lien d\u2019ancrage est https://templates.getgrist.com/doc/lightweight-crm#a1.s1.r20.c2 Pour rickrow quelqu\u2019un, modifiez le lien d\u2019ancrage en https://templates.getgrist.com/doc/lightweight-crm#a1.s1.rr20.c2 Pour un rickrolling complet, assurez-vous que le destinataire peut acc\u00e9der au document ! Grist-static : Publiez des donn\u00e9es sur des sites statiques sans int\u00e9grations # Jetez un \u0153il \u00e0 la derni\u00e8re exp\u00e9rience de notre CTO Paul. Grist-static offre un moyen de visualiser et d\u2019interagir avec des fichiers .grist sur des sites web r\u00e9guliers, sans support back-end sp\u00e9cial n\u00e9cessaire. Grist-static est id\u00e9al pour afficher des rapports de tableur sur un site web, similaire aux rapports PDF, mais en mieux ! Avec grist-static, les spectateurs pourront changer les s\u00e9lections et exp\u00e9rimenter en modifiant les chiffres pour voir ce qui se passe. Chaque spectateur a sa propre copie, et ses modifications ne seront pas vues par les autres, ni stock\u00e9es. Ce serait \u00e9galement un moyen \u00e9volutif de montrer un document Grist \u00e0 des millions d\u2019utilisateurs simultan\u00e9s. Voir quelques exemples ici . En savoir plus sur Github . Nous voulons avoir de vos nouvelles. Voyez-vous d\u00e9j\u00e0 un cas d\u2019utilisation pour grist-static ? \u00cates-vous enthousiasm\u00e9 par cela ? Dites-le-nous en nous envoyant un e-mail \u00e0 support@getgrist.com , ou en postant dans notre forum communautaire . Ce n\u2019est que le d\u00e9but pour grist-static et vos commentaires aident \u00e0 orienter notre conception. Une autre attaque de loup-garou : MOONPHASE() # Une autre contribution de fonction par l\u2019utilisateur @were_functions sur Twitter. La fonction MOONPHASE() renvoie la phase de la lune \u00e0 la date donn\u00e9e. Voici ce qu\u2019elle nous dit sur la date de ce bulletin : MOONPHASE(TODAY()) est \ud83c\udf13. Avec d\u2019autres arguments, nous pouvons trouver qu\u2019il s\u2019est \u00e9coul\u00e9 8 jours depuis la nouvelle lune, ou 0,27 d\u2019un mois. Aussi que MOONPHASE(TODAY(), \"lunacy\") est \ud83d\udd7a. S\u00fbr pour l\u2019instant, mais il reste moins d\u2019une semaine avant la prochaine pleine lune. Quelqu\u2019un devrait commencer \u00e0 prendre la potion de l\u2019aconit. Essayez-le vous-m\u00eame ! Conseil : Remplacez \u201clunacy\u201d par \u201cdays\u201d pour calculer l\u2019\u00e2ge de la lune en jours, ou \u201cfraction\u201d pour calculer la fraction du mois lunaire depuis la nouvelle lune. Parrainer Grist sur Github # Vous voulez montrer votre soutien \u00e0 notre projet open source ? Parlez de nous sur tous vos r\u00e9seaux sociaux et dites-le \u00e0 vos amis ! Si vous voulez faire encore plus, envisagez de nous parrainer sur Github. \ud83e\udde1 PARRAINER GRIST-CORE Apprendre Grist # Webinaire : Importer des Donn\u00e9es # De nombreux utilisateurs de Grist ont import\u00e9 des tableurs dans Grist, mais tous ne sont pas conscients de toutes les fonctionnalit\u00e9s d\u2019importation int\u00e9ressantes que Grist offre, telles que les importations incr\u00e9mentielles, les champs de fusion et les transformations de formules. En mai, nous approfondirons l\u2019importation de donn\u00e9es comme un pro. Mardi 16 mai \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI Formules d\u2019Initialisation # En avril, nous avons tout appris sur les formules d\u2019initialisation, quand les utiliser et les utilisations courantes des formules d\u2019initialisation pour garder vos donn\u00e9es organis\u00e9es et productives. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL Nouveau Mod\u00e8le # Pr\u00e9paration aux Tests # Cr\u00e9ez des tests d\u2019\u00e9chantillons chronom\u00e9tr\u00e9s et des flashcards pour r\u00e9ussir votre prochain test ! ALLER AU MOD\u00c8LE Aidez \u00e0 faire passer le mot ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/04"},{"location":"newsletters/2023-04/#bulletin-davril-2023","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2023 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’Avril 2023"},{"location":"newsletters/2023-04/#concours-de-flashcards-construisez-le-meilleur-deck-de-connaissances","text":"En mai, nous parrainons un concours de flashcards. Construisez le meilleur deck de flashcards en utilisant notre Mod\u00e8le de Flashcards pour partager votre expertise sur n\u2019importe quel sujet. La communaut\u00e9 votera ensuite pour les trois decks de flashcards les plus \u00e9poustouflants. Chacun des trois gagnants recevra un thermos Grist rare et tr\u00e8s recherch\u00e9. EN SAVOIR PLUS","title":"Concours de Flashcards : Construisez le Meilleur Deck de Connaissances"},{"location":"newsletters/2023-04/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-04/#nous-avons-rickrolle-et-vous-pouvez-aussi","text":"Le mois dernier, nous vous avons invit\u00e9 \u00e0 r\u00e9pondre \u00e0 une enqu\u00eate Grist et avons r\u00e9compens\u00e9 votre gentillesse avec une blague du 1er avril : un rickroll dans Grist. La bonne nouvelle est que vous pouvez transmettre cela \u00e0 tout moment \u00e0 qui vous voulez avec n\u2019importe quel document. Prenez n\u2019importe quel lien d\u2019ancrage Grist et remplacez le r dans l\u2019URL par rr. Nous appelons cela \u201crickrow\u201d car ce r s\u2019ancre \u00e0 une ligne. Pour trouver un lien d\u2019ancrage, cliquez avec le bouton droit sur n\u2019importe quelle cellule et s\u00e9lectionnez \u201ccopier le lien d\u2019ancrage\u201d dans le menu contextuel (raccourci clavier indiqu\u00e9 dans le menu). Dans ce cas, le lien d\u2019ancrage est https://templates.getgrist.com/doc/lightweight-crm#a1.s1.r20.c2 Pour rickrow quelqu\u2019un, modifiez le lien d\u2019ancrage en https://templates.getgrist.com/doc/lightweight-crm#a1.s1.rr20.c2 Pour un rickrolling complet, assurez-vous que le destinataire peut acc\u00e9der au document !","title":"Nous avons rickroll\u00e9, et vous pouvez aussi"},{"location":"newsletters/2023-04/#grist-static-publiez-des-donnees-sur-des-sites-statiques-sans-integrations","text":"Jetez un \u0153il \u00e0 la derni\u00e8re exp\u00e9rience de notre CTO Paul. Grist-static offre un moyen de visualiser et d\u2019interagir avec des fichiers .grist sur des sites web r\u00e9guliers, sans support back-end sp\u00e9cial n\u00e9cessaire. Grist-static est id\u00e9al pour afficher des rapports de tableur sur un site web, similaire aux rapports PDF, mais en mieux ! Avec grist-static, les spectateurs pourront changer les s\u00e9lections et exp\u00e9rimenter en modifiant les chiffres pour voir ce qui se passe. Chaque spectateur a sa propre copie, et ses modifications ne seront pas vues par les autres, ni stock\u00e9es. Ce serait \u00e9galement un moyen \u00e9volutif de montrer un document Grist \u00e0 des millions d\u2019utilisateurs simultan\u00e9s. Voir quelques exemples ici . En savoir plus sur Github . Nous voulons avoir de vos nouvelles. Voyez-vous d\u00e9j\u00e0 un cas d\u2019utilisation pour grist-static ? \u00cates-vous enthousiasm\u00e9 par cela ? Dites-le-nous en nous envoyant un e-mail \u00e0 support@getgrist.com , ou en postant dans notre forum communautaire . Ce n\u2019est que le d\u00e9but pour grist-static et vos commentaires aident \u00e0 orienter notre conception.","title":"Grist-static : Publiez des donn\u00e9es sur des sites statiques sans int\u00e9grations"},{"location":"newsletters/2023-04/#une-autre-attaque-de-loup-garou-moonphase","text":"Une autre contribution de fonction par l\u2019utilisateur @were_functions sur Twitter. La fonction MOONPHASE() renvoie la phase de la lune \u00e0 la date donn\u00e9e. Voici ce qu\u2019elle nous dit sur la date de ce bulletin : MOONPHASE(TODAY()) est \ud83c\udf13. Avec d\u2019autres arguments, nous pouvons trouver qu\u2019il s\u2019est \u00e9coul\u00e9 8 jours depuis la nouvelle lune, ou 0,27 d\u2019un mois. Aussi que MOONPHASE(TODAY(), \"lunacy\") est \ud83d\udd7a. S\u00fbr pour l\u2019instant, mais il reste moins d\u2019une semaine avant la prochaine pleine lune. Quelqu\u2019un devrait commencer \u00e0 prendre la potion de l\u2019aconit. Essayez-le vous-m\u00eame ! Conseil : Remplacez \u201clunacy\u201d par \u201cdays\u201d pour calculer l\u2019\u00e2ge de la lune en jours, ou \u201cfraction\u201d pour calculer la fraction du mois lunaire depuis la nouvelle lune.","title":"Une autre attaque de loup-garou : MOONPHASE()"},{"location":"newsletters/2023-04/#parrainer-grist-sur-github","text":"Vous voulez montrer votre soutien \u00e0 notre projet open source ? Parlez de nous sur tous vos r\u00e9seaux sociaux et dites-le \u00e0 vos amis ! Si vous voulez faire encore plus, envisagez de nous parrainer sur Github. \ud83e\udde1 PARRAINER GRIST-CORE","title":"Parrainer Grist sur Github"},{"location":"newsletters/2023-04/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-04/#webinaire-importer-des-donnees","text":"De nombreux utilisateurs de Grist ont import\u00e9 des tableurs dans Grist, mais tous ne sont pas conscients de toutes les fonctionnalit\u00e9s d\u2019importation int\u00e9ressantes que Grist offre, telles que les importations incr\u00e9mentielles, les champs de fusion et les transformations de formules. En mai, nous approfondirons l\u2019importation de donn\u00e9es comme un pro. Mardi 16 mai \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI","title":"Webinaire : Importer des Donn\u00e9es"},{"location":"newsletters/2023-04/#formules-dinitialisation","text":"En avril, nous avons tout appris sur les formules d\u2019initialisation, quand les utiliser et les utilisations courantes des formules d\u2019initialisation pour garder vos donn\u00e9es organis\u00e9es et productives. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL","title":"Formules d’Initialisation"},{"location":"newsletters/2023-04/#nouveau-modele","text":"","title":"Nouveau Mod\u00e8le"},{"location":"newsletters/2023-04/#preparation-aux-tests","text":"Cr\u00e9ez des tests d\u2019\u00e9chantillons chronom\u00e9tr\u00e9s et des flashcards pour r\u00e9ussir votre prochain test ! ALLER AU MOD\u00c8LE","title":"Pr\u00e9paration aux Tests"},{"location":"newsletters/2023-04/#aidez-a-faire-passer-le-mot","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire passer le mot ?"},{"location":"newsletters/2023-04/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2023 # /* r\u00e9tablir certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Concours de Flashcards : Votez pour le Meilleur Jeu ! # En mai, nous avons sponsoris\u00e9 un concours de flashcards. Les utilisateurs de Grist \u00e9taient invit\u00e9s \u00e0 cr\u00e9er le meilleur jeu de flashcards en utilisant notre Mod\u00e8le de Flashcards . Merci pour vos soumissions ! La communaut\u00e9 va maintenant voter pour les meilleurs jeux de flashcards ! VOTEZ Quoi de Neuf # Descriptions de Colonnes et de Widgets # En mars, @CamilleLegeron a rendu possible l\u2019ajout de descriptions aux colonnes. D\u00e9sormais, les colonnes avec des descriptions ont une ic\u00f4ne d\u2019information dans leurs en-t\u00eates, qui, lorsqu\u2019elle est survol\u00e9e ou cliqu\u00e9e, r\u00e9v\u00e8le la description respective. Cette fonctionnalit\u00e9 a \u00e9galement \u00e9t\u00e9 activ\u00e9e sur les widgets, fournissant encore plus de contexte \u00e0 votre \u00e9quipe. Pour d\u00e9finir une description de colonne ou de widget, cliquez sur le titre pour ouvrir la bo\u00eete de dialogue de renommage qui inclut d\u00e9sormais un champ de description. Alternativement, les descriptions peuvent \u00eatre d\u00e9finies dans le panneau de cr\u00e9ation. Webhooks ! # Nous sommes heureux de lancer la prise en charge des webhooks en version b\u00eata ! \ud83c\udf89 Les webhooks sont un moyen d\u2019envoyer des informations de Grist vers d\u2019autres applications. Par exemple, si un enregistrement est mis \u00e0 jour dans Grist, envoyez un message dans Slack. Lorsque vous \u00eates dans un document, naviguez vers la page des param\u00e8tres list\u00e9e dans le panneau de gauche sous \u201cOutils\u201d. Le bouton \u201cG\u00e9rer les Webhooks\u201d en bas vous m\u00e8nera \u00e0 la page des webhooks. La prise en charge non officielle de l\u2019API pour les webhooks est disponible depuis un certain temps, formant la base pour Zapier, Pabbly Connect et d\u2019autres int\u00e9grations. Cette API continuera de fonctionner et n\u2019est plus limit\u00e9e \u00e0 des partenaires sp\u00e9cifiques \u2014 vous pouvez maintenant l\u2019utiliser avec n\u2019importe quel site. Apprendre Grist # Webinar : D\u00e9construire un Mod\u00e8le, Suivi des Offres Logiciels # En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. Au cours des quatre prochains mois, nous reconstruirons des mod\u00e8les avec vous et mettrons en \u00e9vidence des sch\u00e9mas communs dans chaque document. En juin, nous vous montrerons comment nous avons construit le Suivi des Offres Logiciels . Le mod\u00e8le a trois pages, chacune avec plusieurs widgets ax\u00e9s sur diff\u00e9rents flux de travail, et pourtant le document est construit sur une seule table de donn\u00e9es. Nous vous montrerons pourquoi pour vous aider \u00e0 anticiper vos propres cas d\u2019utilisation o\u00f9 tout ce dont vous avez besoin est une table avec plusieurs vues. Jeudi 22 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR DE JUIN Importation de Donn\u00e9es # En mai, nous avons explor\u00e9 toutes les fonctionnalit\u00e9s d\u2019importation int\u00e9ressantes que Grist offre, telles que les importations incr\u00e9mentielles, les champs de fusion et les transformations de formules. REGARDEZ L\u2019ENREGISTREMENT DE MAI Mod\u00e8les # Suivi des D\u00e9penses pour les \u00c9quipes # G\u00e9rez toutes les d\u00e9penses des employ\u00e9s en un seul endroit. Fini de jongler avec les feuilles de calcul des d\u00e9penses des employ\u00e9s pour les int\u00e9grer dans une liste ma\u00eetresse chaque mois. Avec les permissions avanc\u00e9es, les employ\u00e9s peuvent se connecter \u00e0 Grist, voir et mettre \u00e0 jour uniquement leurs d\u00e9penses, et Grist s\u2019occupe du reste. Regardez le webinar de ce mod\u00e8le pour en savoir plus sur la fa\u00e7on dont ce mod\u00e8le a \u00e9t\u00e9 construit. ALLER AU MOD\u00c8LE Suivi du Temps Simple # Comme un chronom\u00e8tre dans une feuille de calcul pour cr\u00e9er un journal du temps pass\u00e9 sur les t\u00e2ches. ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/05"},{"location":"newsletters/2023-05/#bulletin-de-mai-2023","text":"/* r\u00e9tablir certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist.","title":"Bulletin de Mai 2023"},{"location":"newsletters/2023-05/#concours-de-flashcards-votez-pour-le-meilleur-jeu","text":"En mai, nous avons sponsoris\u00e9 un concours de flashcards. Les utilisateurs de Grist \u00e9taient invit\u00e9s \u00e0 cr\u00e9er le meilleur jeu de flashcards en utilisant notre Mod\u00e8le de Flashcards . Merci pour vos soumissions ! La communaut\u00e9 va maintenant voter pour les meilleurs jeux de flashcards ! VOTEZ","title":"Concours de Flashcards : Votez pour le Meilleur Jeu !"},{"location":"newsletters/2023-05/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-05/#descriptions-de-colonnes-et-de-widgets","text":"En mars, @CamilleLegeron a rendu possible l\u2019ajout de descriptions aux colonnes. D\u00e9sormais, les colonnes avec des descriptions ont une ic\u00f4ne d\u2019information dans leurs en-t\u00eates, qui, lorsqu\u2019elle est survol\u00e9e ou cliqu\u00e9e, r\u00e9v\u00e8le la description respective. Cette fonctionnalit\u00e9 a \u00e9galement \u00e9t\u00e9 activ\u00e9e sur les widgets, fournissant encore plus de contexte \u00e0 votre \u00e9quipe. Pour d\u00e9finir une description de colonne ou de widget, cliquez sur le titre pour ouvrir la bo\u00eete de dialogue de renommage qui inclut d\u00e9sormais un champ de description. Alternativement, les descriptions peuvent \u00eatre d\u00e9finies dans le panneau de cr\u00e9ation.","title":"Descriptions de Colonnes et de Widgets"},{"location":"newsletters/2023-05/#webhooks","text":"Nous sommes heureux de lancer la prise en charge des webhooks en version b\u00eata ! \ud83c\udf89 Les webhooks sont un moyen d\u2019envoyer des informations de Grist vers d\u2019autres applications. Par exemple, si un enregistrement est mis \u00e0 jour dans Grist, envoyez un message dans Slack. Lorsque vous \u00eates dans un document, naviguez vers la page des param\u00e8tres list\u00e9e dans le panneau de gauche sous \u201cOutils\u201d. Le bouton \u201cG\u00e9rer les Webhooks\u201d en bas vous m\u00e8nera \u00e0 la page des webhooks. La prise en charge non officielle de l\u2019API pour les webhooks est disponible depuis un certain temps, formant la base pour Zapier, Pabbly Connect et d\u2019autres int\u00e9grations. Cette API continuera de fonctionner et n\u2019est plus limit\u00e9e \u00e0 des partenaires sp\u00e9cifiques \u2014 vous pouvez maintenant l\u2019utiliser avec n\u2019importe quel site.","title":"Webhooks !"},{"location":"newsletters/2023-05/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-05/#webinar-deconstruire-un-modele-suivi-des-offres-logiciels","text":"En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. Au cours des quatre prochains mois, nous reconstruirons des mod\u00e8les avec vous et mettrons en \u00e9vidence des sch\u00e9mas communs dans chaque document. En juin, nous vous montrerons comment nous avons construit le Suivi des Offres Logiciels . Le mod\u00e8le a trois pages, chacune avec plusieurs widgets ax\u00e9s sur diff\u00e9rents flux de travail, et pourtant le document est construit sur une seule table de donn\u00e9es. Nous vous montrerons pourquoi pour vous aider \u00e0 anticiper vos propres cas d\u2019utilisation o\u00f9 tout ce dont vous avez besoin est une table avec plusieurs vues. Jeudi 22 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR DE JUIN","title":"Webinar : D\u00e9construire un Mod\u00e8le, Suivi des Offres Logiciels"},{"location":"newsletters/2023-05/#importation-de-donnees","text":"En mai, nous avons explor\u00e9 toutes les fonctionnalit\u00e9s d\u2019importation int\u00e9ressantes que Grist offre, telles que les importations incr\u00e9mentielles, les champs de fusion et les transformations de formules. REGARDEZ L\u2019ENREGISTREMENT DE MAI","title":"Importation de Donn\u00e9es"},{"location":"newsletters/2023-05/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-05/#suivi-des-depenses-pour-les-equipes","text":"G\u00e9rez toutes les d\u00e9penses des employ\u00e9s en un seul endroit. Fini de jongler avec les feuilles de calcul des d\u00e9penses des employ\u00e9s pour les int\u00e9grer dans une liste ma\u00eetresse chaque mois. Avec les permissions avanc\u00e9es, les employ\u00e9s peuvent se connecter \u00e0 Grist, voir et mettre \u00e0 jour uniquement leurs d\u00e9penses, et Grist s\u2019occupe du reste. Regardez le webinar de ce mod\u00e8le pour en savoir plus sur la fa\u00e7on dont ce mod\u00e8le a \u00e9t\u00e9 construit. ALLER AU MOD\u00c8LE","title":"Suivi des D\u00e9penses pour les \u00c9quipes"},{"location":"newsletters/2023-05/#suivi-du-temps-simple","text":"Comme un chronom\u00e8tre dans une feuille de calcul pour cr\u00e9er un journal du temps pass\u00e9 sur les t\u00e2ches. ALLER AU MOD\u00c8LE","title":"Suivi du Temps Simple"},{"location":"newsletters/2023-05/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2023-05/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2023 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Mise en \u00e9vidence des lignes de s\u00e9lection # Une petite mais puissante correction. Grist met d\u00e9sormais en \u00e9vidence la ligne s\u00e9lectionn\u00e9e li\u00e9e aux vues sur une page. Points Forts de la Communaut\u00e9 # @wunter8 a cr\u00e9\u00e9 un widget de calendrier qui est un excellent exemple de ce que les widgets personnalis\u00e9s peuvent faire. Qui sait, peut-\u00eatre que cela pourrait inspirer un widget de calendrier officiel ? \ud83d\udc40 (@ToJans a \u00e9galement partag\u00e9 un widget de calendrier en mars .) Les amateurs de bases de donn\u00e9es appr\u00e9cieront le PostgreSQL Foreign Data Wrapper de @John1, qui est un outil tr\u00e8s astucieux permettant d\u2019importer et de requ\u00eater des tables Grist dans PostgreSQL. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinar : D\u00e9construction du mod\u00e8le CRM de ventes num\u00e9riques # En juillet, nous reconstruirons notre mod\u00e8le CRM de ventes num\u00e9riques . Ce mod\u00e8le contient des sch\u00e9mas structurels courants utilis\u00e9s dans les documents Grist pour une vari\u00e9t\u00e9 de cas d\u2019utilisation. Il contient \u00e9galement des exemples simples et courants de formules de recherche, et analyse les m\u00eames donn\u00e9es de vente de deux mani\u00e8res : revenus \u00e0 vie par client et revenus \u00e0 vie par produit. Jeudi 20 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR DE JUILLET D\u00e9construction du mod\u00e8le de suivi des offres de logiciels # En juin, nous avons reconstruit le Suivi des offres de logiciels . Ce mod\u00e8le comporte plusieurs pages et vues ax\u00e9es sur diff\u00e9rents flux de travail, et pourtant le document est construit sur une seule table de donn\u00e9es. Nous vous montrons pourquoi pour vous aider \u00e0 anticiper vos propres cas d\u2019utilisation o\u00f9 tout ce dont vous avez besoin est une table avec plusieurs vues. REGARDEZ L\u2019ENREGISTREMENT DE JUIN Mod\u00e8les # Planificateur de Sorties Scolaires # Organiser une sortie scolaire n\u00e9cessite de jongler avec les autorisations parentales, les d\u00e9jeuners, les paiements, les accompagnateurs et autres membres du personnel. C\u2019est beaucoup ! Apportez de la zenitude \u00e0 votre planification de sorties scolaires avec ce nouveau mod\u00e8le. ALLER AU MOD\u00c8LE Suivi de Nutrition # Suivez votre nutrition, vos macros et vos calories avec ce mod\u00e8le simple cr\u00e9\u00e9 par l\u2019utilisateur Jawaad Mahmood. \ud83c\udf4f Consultez le post de pr\u00e9sentation de Jawaad dans notre communaut\u00e9 . ALLER AU MOD\u00c8LE Pr\u00e9paration aux Ouragans # La saison des ouragans est une pr\u00e9occupation pour beaucoup. Si vous \u00eates pr\u00e8s d\u2019une c\u00f4te, ne stressez pas ! Utilisez ce mod\u00e8le pour vous assurer d\u2019avoir tout ce dont vous avez besoin en cas d\u2019ouragan. ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/06"},{"location":"newsletters/2023-06/#bulletin-de-juin-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2023 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juin 2023"},{"location":"newsletters/2023-06/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-06/#mise-en-evidence-des-lignes-de-selection","text":"Une petite mais puissante correction. Grist met d\u00e9sormais en \u00e9vidence la ligne s\u00e9lectionn\u00e9e li\u00e9e aux vues sur une page.","title":"Mise en \u00e9vidence des lignes de s\u00e9lection"},{"location":"newsletters/2023-06/#points-forts-de-la-communaute","text":"@wunter8 a cr\u00e9\u00e9 un widget de calendrier qui est un excellent exemple de ce que les widgets personnalis\u00e9s peuvent faire. Qui sait, peut-\u00eatre que cela pourrait inspirer un widget de calendrier officiel ? \ud83d\udc40 (@ToJans a \u00e9galement partag\u00e9 un widget de calendrier en mars .) Les amateurs de bases de donn\u00e9es appr\u00e9cieront le PostgreSQL Foreign Data Wrapper de @John1, qui est un outil tr\u00e8s astucieux permettant d\u2019importer et de requ\u00eater des tables Grist dans PostgreSQL. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2023-06/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-06/#webinar-deconstruction-du-modele-crm-de-ventes-numeriques","text":"En juillet, nous reconstruirons notre mod\u00e8le CRM de ventes num\u00e9riques . Ce mod\u00e8le contient des sch\u00e9mas structurels courants utilis\u00e9s dans les documents Grist pour une vari\u00e9t\u00e9 de cas d\u2019utilisation. Il contient \u00e9galement des exemples simples et courants de formules de recherche, et analyse les m\u00eames donn\u00e9es de vente de deux mani\u00e8res : revenus \u00e0 vie par client et revenus \u00e0 vie par produit. Jeudi 20 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR DE JUILLET","title":"Webinar : D\u00e9construction du mod\u00e8le CRM de ventes num\u00e9riques"},{"location":"newsletters/2023-06/#deconstruction-du-modele-de-suivi-des-offres-de-logiciels","text":"En juin, nous avons reconstruit le Suivi des offres de logiciels . Ce mod\u00e8le comporte plusieurs pages et vues ax\u00e9es sur diff\u00e9rents flux de travail, et pourtant le document est construit sur une seule table de donn\u00e9es. Nous vous montrons pourquoi pour vous aider \u00e0 anticiper vos propres cas d\u2019utilisation o\u00f9 tout ce dont vous avez besoin est une table avec plusieurs vues. REGARDEZ L\u2019ENREGISTREMENT DE JUIN","title":"D\u00e9construction du mod\u00e8le de suivi des offres de logiciels"},{"location":"newsletters/2023-06/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-06/#planificateur-de-sorties-scolaires","text":"Organiser une sortie scolaire n\u00e9cessite de jongler avec les autorisations parentales, les d\u00e9jeuners, les paiements, les accompagnateurs et autres membres du personnel. C\u2019est beaucoup ! Apportez de la zenitude \u00e0 votre planification de sorties scolaires avec ce nouveau mod\u00e8le. ALLER AU MOD\u00c8LE","title":"Planificateur de Sorties Scolaires"},{"location":"newsletters/2023-06/#suivi-de-nutrition","text":"Suivez votre nutrition, vos macros et vos calories avec ce mod\u00e8le simple cr\u00e9\u00e9 par l\u2019utilisateur Jawaad Mahmood. \ud83c\udf4f Consultez le post de pr\u00e9sentation de Jawaad dans notre communaut\u00e9 . ALLER AU MOD\u00c8LE","title":"Suivi de Nutrition"},{"location":"newsletters/2023-06/#preparation-aux-ouragans","text":"La saison des ouragans est une pr\u00e9occupation pour beaucoup. Si vous \u00eates pr\u00e8s d\u2019une c\u00f4te, ne stressez pas ! Utilisez ce mod\u00e8le pour vous assurer d\u2019avoir tout ce dont vous avez besoin en cas d\u2019ouragan. ALLER AU MOD\u00c8LE","title":"Pr\u00e9paration aux Ouragans"},{"location":"newsletters/2023-06/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2023-06/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juillet 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Juillet a \u00e9t\u00e9 un grand mois pour Grist, avec une toute nouvelle fonctionnalit\u00e9 qui apporte une suite d\u2019autres am\u00e9liorations. Comme toujours, nous aimerions recevoir vos retours et nous accueillons volontiers tout exemple de choses cools/utile que vous cr\u00e9ez avec Grist. Quoi de neuf # Assistant de Formule IA # Il y a quelque temps, nous avons fait une exp\u00e9rience avec l\u2019IA pour voir comment elle pourrait aider les utilisateurs de Grist avec les formules. Nous sommes ravis d\u2019annoncer que l\u2019exp\u00e9rience est maintenant une fonctionnalit\u00e9 int\u00e9gr\u00e9e dans un Assistant de Formule IA ! R\u00e9sum\u00e9 : En utilisant un langage simple, discutez avec une IA pour vous aider \u00e0 cr\u00e9er des formules Grist. Grist envoie le contexte n\u00e9cessaire, donc pas besoin de d\u00e9crire la structure de vos donn\u00e9es. Parce que l\u2019Assistant IA utilise la structure de Grist, nous recommandons fortement de lire cette liste rapide de meilleures pratiques . Tous les comptes Grist obtiennent 100 cr\u00e9dits gratuitement \u2013 vous pouvez donc tester l\u2019assistant d\u00e8s maintenant ! Consultez l\u2019annonce compl\u00e8te . Apprenez \u00e0 utiliser l\u2019assistant et comment les donn\u00e9es sont g\u00e9r\u00e9es dans notre centre d\u2019aide . \u00c9diteur de formule flottant # Vous travaillez sur des formules complexes et vous vous sentez un peu \u00e0 l\u2019\u00e9troit ? Plus maintenant ! L\u2019Assistant de Formule IA apporte avec lui un nouvel \u00e9diteur de formule flottant. D\u00e9veloppez, r\u00e9duisez et d\u00e9placez l\u2019\u00e9diteur sur l\u2019\u00e9cran comme bon vous semble. Commencez simplement \u00e0 \u00e9diter n\u2019importe quelle colonne de formule et cliquez sur l\u2019ic\u00f4ne d\u2019agrandissement en haut \u00e0 droite de la cellule. Les modifications apport\u00e9es dans l\u2019\u00e9diteur flottant agrandi ne s\u2019appliqueront pas tant que vous n\u2019aurez pas cliqu\u00e9 sur le bouton Enregistrer. Fonctionnalit\u00e9 bonus : Pr\u00e9visualisez les modifications ! Cliquez sur le nouveau bouton Aper\u00e7u dans l\u2019\u00e9diteur flottant pour voir comment vos modifications affecteront la colonne en question. Testez facilement les formules sans mettre \u00e0 jour l\u2019ensemble de vos donn\u00e9es. Vos modifications ne s\u2019appliqueront pas tant que vous n\u2019aurez pas cliqu\u00e9 sur Enregistrer. \ud83e\udd29 Meilleure gestion des emojis dans les noms de Page # Chez Grist, nous aimons utiliser les emojis comme raccourcis visuels pour les noms de Page. Ils sont facilement reconnaissables et fonctionnent bien lorsque le panneau des Pages est minimis\u00e9. D\u00e9sormais, Grist d\u00e9tecte automatiquement lorsqu\u2019un emoji est utilis\u00e9 au d\u00e9but d\u2019un nom et le stylise en cons\u00e9quence. T\u00e9l\u00e9m\u00e9trie pour les utilisateurs auto-h\u00e9berg\u00e9s # Nous nous appuyons sur les donn\u00e9es d\u2019utilisation du produit pour nous aider \u00e0 am\u00e9liorer Grist. Les auto-h\u00e9bergeurs peuvent d\u00e9sormais choisir de partager des donn\u00e9es de t\u00e9l\u00e9m\u00e9trie limit\u00e9es avec nous. Nous ne collectons que des statistiques d\u2019utilisation, jamais le contenu des documents. Si vous \u00eates un fan de Grist qui s\u2019auto-h\u00e9berge, opter pour la t\u00e9l\u00e9m\u00e9trie est l\u2019un des meilleurs moyens de nous soutenir. Vous pouvez lire une liste d\u00e9taill\u00e9e de ce que nous collectons dans notre centre d\u2019aide . Pour opter, cliquez sur le bouton d\u2019opt-in sur la banni\u00e8re \u201cSupport Grist\u201d de votre page d\u2019accueil, ou modifiez la variable d\u2019environnement GRIST_TELEMETRY_LEVEL comme d\u00e9crit dans l\u2019aper\u00e7u de la t\u00e9l\u00e9m\u00e9trie de notre centre d\u2019aide . Vous pouvez vous d\u00e9sinscrire \u00e0 tout moment. Conseils & Astuces # Permissions avanc\u00e9es : Restreindre la cr\u00e9ation de nouveaux enregistrements jusqu\u2019\u00e0 ce que tous les champs obligatoires soient remplis # Dans le forum Showcase, Natalie nous explique comment utiliser les permissions avanc\u00e9es pour emp\u00eacher un utilisateur de cr\u00e9er de nouveaux enregistrements jusqu\u2019\u00e0 ce que tous les champs obligatoires soient remplis pour les enregistrements existants dans une table. Tr\u00e8s pratique pour la sanitation des donn\u00e9es ! Points forts de la communaut\u00e9 # @enthus1ast a construit un petit d\u00e9mon (\ud83d\ude08) comme syst\u00e8me de surveillance d\u2019infrastructure en utilisant Grist. En bonus, ils ont \u00e9galement fourni un client API REST \u00e9crit en Nim. @Leonard_Gallion a partag\u00e9 du code Python pratique qui vous permet de t\u00e9l\u00e9charger des documents en tant que fichiers .grist . Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinar : D\u00e9construire le mod\u00e8le d\u2019inscription aux cours # En ao\u00fbt, nous allons reconstruire notre mod\u00e8le d\u2019inscription aux cours . Ce mod\u00e8le utilise des colonnes de r\u00e9f\u00e9rence pour relier les donn\u00e9es dans cinq tables diff\u00e9rentes. Apprenez quand utiliser des colonnes de r\u00e9f\u00e9rence, dans quelle direction, et comment utiliser des tables d\u2019assistance pour mieux structurer vos donn\u00e9es. Vous apprendrez \u00e9galement comment construire des tableaux de bord productifs qui visualisent les m\u00eames donn\u00e9es sous diff\u00e9rents angles. Jeudi 17 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR D\u2019AO\u00dbT D\u00e9construire le mod\u00e8le CRM de ventes num\u00e9riques # En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En juillet, nous avons reconstruit notre mod\u00e8le CRM de ventes num\u00e9riques. Ce mod\u00e8le contient des sch\u00e9mas structurels courants utilis\u00e9s dans les documents Grist pour divers cas d\u2019utilisation. Il contient \u00e9galement des exemples simples et courants de formules d\u2019appairage, et analyse les m\u00eames donn\u00e9es de vente de deux mani\u00e8res : revenu \u00e0 vie par client et revenu \u00e0 vie par produit. REGARDEZ L\u2019ENREGISTREMENT DE JUILLET Mod\u00e8les # Budg\u00e9tisation # Ce mod\u00e8le de budget simplifie la d\u00e9finition d\u2019un budget, le suivi des revenus et des d\u00e9penses, et la comparaison des attentes avec la r\u00e9alit\u00e9 financi\u00e8re. \ud83d\udcb8 ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/07"},{"location":"newsletters/2023-07/#bulletin-de-juillet-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juillet 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Juillet a \u00e9t\u00e9 un grand mois pour Grist, avec une toute nouvelle fonctionnalit\u00e9 qui apporte une suite d\u2019autres am\u00e9liorations. Comme toujours, nous aimerions recevoir vos retours et nous accueillons volontiers tout exemple de choses cools/utile que vous cr\u00e9ez avec Grist.","title":"Bulletin de Juillet 2023"},{"location":"newsletters/2023-07/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2023-07/#assistant-de-formule-ia","text":"Il y a quelque temps, nous avons fait une exp\u00e9rience avec l\u2019IA pour voir comment elle pourrait aider les utilisateurs de Grist avec les formules. Nous sommes ravis d\u2019annoncer que l\u2019exp\u00e9rience est maintenant une fonctionnalit\u00e9 int\u00e9gr\u00e9e dans un Assistant de Formule IA ! R\u00e9sum\u00e9 : En utilisant un langage simple, discutez avec une IA pour vous aider \u00e0 cr\u00e9er des formules Grist. Grist envoie le contexte n\u00e9cessaire, donc pas besoin de d\u00e9crire la structure de vos donn\u00e9es. Parce que l\u2019Assistant IA utilise la structure de Grist, nous recommandons fortement de lire cette liste rapide de meilleures pratiques . Tous les comptes Grist obtiennent 100 cr\u00e9dits gratuitement \u2013 vous pouvez donc tester l\u2019assistant d\u00e8s maintenant ! Consultez l\u2019annonce compl\u00e8te . Apprenez \u00e0 utiliser l\u2019assistant et comment les donn\u00e9es sont g\u00e9r\u00e9es dans notre centre d\u2019aide .","title":"Assistant de Formule IA"},{"location":"newsletters/2023-07/#editeur-de-formule-flottant","text":"Vous travaillez sur des formules complexes et vous vous sentez un peu \u00e0 l\u2019\u00e9troit ? Plus maintenant ! L\u2019Assistant de Formule IA apporte avec lui un nouvel \u00e9diteur de formule flottant. D\u00e9veloppez, r\u00e9duisez et d\u00e9placez l\u2019\u00e9diteur sur l\u2019\u00e9cran comme bon vous semble. Commencez simplement \u00e0 \u00e9diter n\u2019importe quelle colonne de formule et cliquez sur l\u2019ic\u00f4ne d\u2019agrandissement en haut \u00e0 droite de la cellule. Les modifications apport\u00e9es dans l\u2019\u00e9diteur flottant agrandi ne s\u2019appliqueront pas tant que vous n\u2019aurez pas cliqu\u00e9 sur le bouton Enregistrer. Fonctionnalit\u00e9 bonus : Pr\u00e9visualisez les modifications ! Cliquez sur le nouveau bouton Aper\u00e7u dans l\u2019\u00e9diteur flottant pour voir comment vos modifications affecteront la colonne en question. Testez facilement les formules sans mettre \u00e0 jour l\u2019ensemble de vos donn\u00e9es. Vos modifications ne s\u2019appliqueront pas tant que vous n\u2019aurez pas cliqu\u00e9 sur Enregistrer.","title":"\u00c9diteur de formule flottant"},{"location":"newsletters/2023-07/#meilleure-gestion-des-emojis-dans-les-noms-de-page","text":"Chez Grist, nous aimons utiliser les emojis comme raccourcis visuels pour les noms de Page. Ils sont facilement reconnaissables et fonctionnent bien lorsque le panneau des Pages est minimis\u00e9. D\u00e9sormais, Grist d\u00e9tecte automatiquement lorsqu\u2019un emoji est utilis\u00e9 au d\u00e9but d\u2019un nom et le stylise en cons\u00e9quence.","title":"\ud83e\udd29 Meilleure gestion des emojis dans les noms de Page"},{"location":"newsletters/2023-07/#telemetrie-pour-les-utilisateurs-auto-heberges","text":"Nous nous appuyons sur les donn\u00e9es d\u2019utilisation du produit pour nous aider \u00e0 am\u00e9liorer Grist. Les auto-h\u00e9bergeurs peuvent d\u00e9sormais choisir de partager des donn\u00e9es de t\u00e9l\u00e9m\u00e9trie limit\u00e9es avec nous. Nous ne collectons que des statistiques d\u2019utilisation, jamais le contenu des documents. Si vous \u00eates un fan de Grist qui s\u2019auto-h\u00e9berge, opter pour la t\u00e9l\u00e9m\u00e9trie est l\u2019un des meilleurs moyens de nous soutenir. Vous pouvez lire une liste d\u00e9taill\u00e9e de ce que nous collectons dans notre centre d\u2019aide . Pour opter, cliquez sur le bouton d\u2019opt-in sur la banni\u00e8re \u201cSupport Grist\u201d de votre page d\u2019accueil, ou modifiez la variable d\u2019environnement GRIST_TELEMETRY_LEVEL comme d\u00e9crit dans l\u2019aper\u00e7u de la t\u00e9l\u00e9m\u00e9trie de notre centre d\u2019aide . Vous pouvez vous d\u00e9sinscrire \u00e0 tout moment.","title":"T\u00e9l\u00e9m\u00e9trie pour les utilisateurs auto-h\u00e9berg\u00e9s"},{"location":"newsletters/2023-07/#conseils-astuces","text":"","title":"Conseils & Astuces"},{"location":"newsletters/2023-07/#permissions-avancees-restreindre-la-creation-de-nouveaux-enregistrements-jusqua-ce-que-tous-les-champs-obligatoires-soient-remplis","text":"Dans le forum Showcase, Natalie nous explique comment utiliser les permissions avanc\u00e9es pour emp\u00eacher un utilisateur de cr\u00e9er de nouveaux enregistrements jusqu\u2019\u00e0 ce que tous les champs obligatoires soient remplis pour les enregistrements existants dans une table. Tr\u00e8s pratique pour la sanitation des donn\u00e9es !","title":"Permissions avanc\u00e9es : Restreindre la cr\u00e9ation de nouveaux enregistrements jusqu’\u00e0 ce que tous les champs obligatoires soient remplis"},{"location":"newsletters/2023-07/#points-forts-de-la-communaute","text":"@enthus1ast a construit un petit d\u00e9mon (\ud83d\ude08) comme syst\u00e8me de surveillance d\u2019infrastructure en utilisant Grist. En bonus, ils ont \u00e9galement fourni un client API REST \u00e9crit en Nim. @Leonard_Gallion a partag\u00e9 du code Python pratique qui vous permet de t\u00e9l\u00e9charger des documents en tant que fichiers .grist . Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2023-07/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-07/#webinar-deconstruire-le-modele-dinscription-aux-cours","text":"En ao\u00fbt, nous allons reconstruire notre mod\u00e8le d\u2019inscription aux cours . Ce mod\u00e8le utilise des colonnes de r\u00e9f\u00e9rence pour relier les donn\u00e9es dans cinq tables diff\u00e9rentes. Apprenez quand utiliser des colonnes de r\u00e9f\u00e9rence, dans quelle direction, et comment utiliser des tables d\u2019assistance pour mieux structurer vos donn\u00e9es. Vous apprendrez \u00e9galement comment construire des tableaux de bord productifs qui visualisent les m\u00eames donn\u00e9es sous diff\u00e9rents angles. Jeudi 17 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR D\u2019AO\u00dbT","title":"Webinar : D\u00e9construire le mod\u00e8le d’inscription aux cours"},{"location":"newsletters/2023-07/#deconstruire-le-modele-crm-de-ventes-numeriques","text":"En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En juillet, nous avons reconstruit notre mod\u00e8le CRM de ventes num\u00e9riques. Ce mod\u00e8le contient des sch\u00e9mas structurels courants utilis\u00e9s dans les documents Grist pour divers cas d\u2019utilisation. Il contient \u00e9galement des exemples simples et courants de formules d\u2019appairage, et analyse les m\u00eames donn\u00e9es de vente de deux mani\u00e8res : revenu \u00e0 vie par client et revenu \u00e0 vie par produit. REGARDEZ L\u2019ENREGISTREMENT DE JUILLET","title":"D\u00e9construire le mod\u00e8le CRM de ventes num\u00e9riques"},{"location":"newsletters/2023-07/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-07/#budgetisation","text":"Ce mod\u00e8le de budget simplifie la d\u00e9finition d\u2019un budget, le suivi des revenus et des d\u00e9penses, et la comparaison des attentes avec la r\u00e9alit\u00e9 financi\u00e8re. \ud83d\udcb8 ALLER AU MOD\u00c8LE","title":"Budg\u00e9tisation"},{"location":"newsletters/2023-07/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-07/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-08/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019ao\u00fbt 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Ao\u00fbt 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Offre d\u2019emploi Nous recherchons un Cr\u00e9ateur Vid\u00e9o & Designer Graphique pour rejoindre notre \u00e9quipe. Venez travailler avec nous ! Visionneuse CSV Grist Lib\u00e9rez le CSV ! Ce nouvel outil permet aux utilisateurs de votre site de pr\u00e9visualiser les CSV avec la puissance de Grist. Assistant AI Support Llama Ex\u00e9cutez des mod\u00e8les Llama locaux avec l\u2019aide de llama2-cpp-python . \ud83e\udd99 Options de t\u00e9l\u00e9chargement de fichiers .grist R\u00e9duisez la taille des fichiers en t\u00e9l\u00e9chargeant sans historique, ou cr\u00e9ez des mod\u00e8les en t\u00e9l\u00e9chargeant uniquement la structure d\u2019un fichier. Refonte de l\u2019importation de fichiers Am\u00e9lioration du support pour l\u2019importation de plusieurs fichiers/feuilles et le mappage des colonnes. Widget QR Code personnalis\u00e9 G\u00e9n\u00e9rez des codes QR en un clin d\u2019\u0153il, directement dans Grist. \ud83e\udd33 Travailler chez Grist # Grist recherche actuellement un Cr\u00e9ateur Vid\u00e9o & Designer Graphique ayant une bonne compr\u00e9hension des outils de tableur-base de donn\u00e9es. Si vous \u00eates dou\u00e9 pour cr\u00e9er des vid\u00e9os engageantes et des designs graphiques visuellement attrayants, venez travailler avec nous ! Il s\u2019agit d\u2019un poste en contrat. Pour plus de d\u00e9tails, consultez la description du poste . Quoi de neuf # Visionneuse CSV Grist # Un autre mois, une autre mise \u00e0 jour excitante \u2013 cette fois pour le format de fichier v\u00e9n\u00e9rable que nous connaissons tous et aimons, le .csv . La Visionneuse CSV Grist est un outil gratuit qui donne aux CSV la puissance de Grist sur le web. Plus besoin de t\u00e9l\u00e9charger et d\u2019ouvrir les CSV dans une application externe, vous pouvez maintenant pr\u00e9visualiser et interagir avec les CSV dans une feuille de calcul aliment\u00e9e par Grist ! La visionneuse est open source, prend en charge des fonctionnalit\u00e9s telles que le filtrage, le tri, le copier/coller, et m\u00eame les formules. Et elle est facile \u00e0 installer, avec seulement deux lignes de HTML ajout\u00e9es \u00e0 n\u2019importe quel site web. Voyez-la en action Assistant AI \u2013 Support pour Llama # Les auto-h\u00e9bergeurs de Grist peuvent d\u00e9sormais utiliser la famille de mod\u00e8les auto-h\u00e9bergeables Llama via le wrapper llama2-cpp-python en configurant les variables d\u2019environnement \u00e9tendues li\u00e9es \u00e0 l\u2019Assistant AI . En-t\u00eates de colonnes stylis\u00e9es # Vous pouvez maintenant styliser les en-t\u00eates de colonnes ! Regardez ! (Merci \u00e0 @CamilleLegeron et l\u2019ANCT pour le PR.) Options de t\u00e9l\u00e9chargement de fichiers .grist # Vous pouvez maintenant t\u00e9l\u00e9charger la structure d\u2019un fichier .grist sans aucune donn\u00e9e, ce qui est utile pour la cr\u00e9ation de mod\u00e8les. Ou vous pouvez t\u00e9l\u00e9charger un .grist sans historique de document, ce qui r\u00e9duit la taille du fichier. Dans nos tests, nous avons vu des documents passer de 10,8 Mo \u00e0 1,5 Mo apr\u00e8s avoir omis l\u2019historique des fichiers. \ud83d\ude32 Refonte de l\u2019importation de fichiers # L\u2019importation de fichiers a \u00e9t\u00e9 mise \u00e0 jour avec un nouveau flux, avec un meilleur support pour plusieurs fichiers/feuilles et le mappage des colonnes. Plus d\u2019am\u00e9liorations # Grist a \u00e9t\u00e9 mis \u00e0 niveau de Python 3.9 \u00e0 3.11. Cette mise \u00e0 jour apporte les nouvelles fonctionnalit\u00e9s suivantes : L\u2019ex\u00e9cution devrait \u00eatre l\u00e9g\u00e8rement plus rapide. Support suppl\u00e9mentaire pour le module de statistiques , y compris les fonctions covariance , correlation , et linear_regression . Support pour le Matching de motifs structurels . Vous pouvez maintenant voir des marques ^ pointant vers le probl\u00e8me dans les tracebacks, ce qui peut aider \u00e0 d\u00e9boguer les erreurs. Les liens sont maintenant cliquables dans les vues et les infobulles de description de colonnes . La s\u00e9lection de grille prend d\u00e9sormais en charge les raccourcis CTRL/CMD+Shift+ . Si vous avez utilis\u00e9 ce raccourci dans d\u2019autres produits de tableur populaires, vous serez comme chez vous ! (Merci \u00e0 @Ocarthon pour sa contribution !) Astuces & Conseils # Grist pour les utilisateurs de tableurs # Nouveau sur Grist mais expert avec Excel/Google Sheets ? Notre nouveau post de blog couvre ce qui rend Grist diff\u00e9rent et pourquoi il est con\u00e7u de cette mani\u00e8re, sp\u00e9cifiquement pour les utilisateurs familiers avec les applications de tableur habituelles. Auto-h\u00e9bergement de grist-static # Le d\u00e9p\u00f4t GitHub de grist-static GitHub repo a \u00e9t\u00e9 mis \u00e0 jour avec des informations suppl\u00e9mentaires pour vous aider \u00e0 servir Grist sur votre propre site web ou CDN \u2013 y compris la nouvelle Visionneuse CSV. Points forts de la communaut\u00e9 # Le widget QR code astucieux de @jperon de janvier dernier a \u00e9t\u00e9 officiellement ajout\u00e9 en tant que widget personnalis\u00e9 ! \ud83c\udf89 Scannez le code ci-dessus pour visiter le post original, et cliquez ici pour en savoir plus sur les widgets personnalis\u00e9s. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : D\u00e9construire le mod\u00e8le de paie # En septembre, nous reconstruirons notre mod\u00e8le de paie . Ce mod\u00e8le utilise des formules pour rechercher les taux horaires en fonction de la personne, du r\u00f4le et de la date. Vous apprendrez \u00e9galement \u00e0 cr\u00e9er des tableaux de bord de synth\u00e8se dynamiques qui r\u00e9sument les donn\u00e9es par cat\u00e9gories et vous permettent d\u2019explorer les enregistrements dans ces cat\u00e9gories. Jeudi 21 septembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE SEPTEMBRE D\u00e9construire le mod\u00e8le d\u2019inscription aux cours # En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En ao\u00fbt, nous avons reconstruit notre mod\u00e8le d\u2019inscription aux cours . Ce mod\u00e8le utilise des colonnes de r\u00e9f\u00e9rence pour relier les donn\u00e9es dans cinq tables diff\u00e9rentes. Apprenez quand utiliser des colonnes de r\u00e9f\u00e9rence, dans quelle direction, et comment utiliser des tables d\u2019aide pour mieux structurer vos donn\u00e9es. REGARDEZ L\u2019ENREGISTREMENT D\u2019AO\u00dbT Mod\u00e8les # Propositions & Contrats # Natalie a cr\u00e9\u00e9 un tutoriel d\u00e9taill\u00e9 montrant comment ce mod\u00e8le (tr\u00e8s avanc\u00e9) a \u00e9t\u00e9 cr\u00e9\u00e9. Nous utilisons en fait une version de ce mod\u00e8le chez Grist pour g\u00e9rer les contrats, donc il est \u00e9prouv\u00e9 ! Non seulement ce mod\u00e8le peut \u00eatre utilis\u00e9 pour g\u00e9n\u00e9rer des contrats imprimables avec du contenu dynamique, mais il peut \u00e9galement g\u00e9n\u00e9rer les mod\u00e8les de contrat eux-m\u00eames . Vous pouvez donc avoir plusieurs versions de contrats dynamiques cr\u00e9\u00e9s \u00e0 partir du m\u00eame document Grist. \ud83e\udd2f ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/08"},{"location":"newsletters/2023-08/#bulletin-daout-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Ao\u00fbt 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Offre d\u2019emploi Nous recherchons un Cr\u00e9ateur Vid\u00e9o & Designer Graphique pour rejoindre notre \u00e9quipe. Venez travailler avec nous ! Visionneuse CSV Grist Lib\u00e9rez le CSV ! Ce nouvel outil permet aux utilisateurs de votre site de pr\u00e9visualiser les CSV avec la puissance de Grist. Assistant AI Support Llama Ex\u00e9cutez des mod\u00e8les Llama locaux avec l\u2019aide de llama2-cpp-python . \ud83e\udd99 Options de t\u00e9l\u00e9chargement de fichiers .grist R\u00e9duisez la taille des fichiers en t\u00e9l\u00e9chargeant sans historique, ou cr\u00e9ez des mod\u00e8les en t\u00e9l\u00e9chargeant uniquement la structure d\u2019un fichier. Refonte de l\u2019importation de fichiers Am\u00e9lioration du support pour l\u2019importation de plusieurs fichiers/feuilles et le mappage des colonnes. Widget QR Code personnalis\u00e9 G\u00e9n\u00e9rez des codes QR en un clin d\u2019\u0153il, directement dans Grist. \ud83e\udd33","title":"Bulletin d’ao\u00fbt 2023"},{"location":"newsletters/2023-08/#travailler-chez-grist","text":"Grist recherche actuellement un Cr\u00e9ateur Vid\u00e9o & Designer Graphique ayant une bonne compr\u00e9hension des outils de tableur-base de donn\u00e9es. Si vous \u00eates dou\u00e9 pour cr\u00e9er des vid\u00e9os engageantes et des designs graphiques visuellement attrayants, venez travailler avec nous ! Il s\u2019agit d\u2019un poste en contrat. Pour plus de d\u00e9tails, consultez la description du poste .","title":"Travailler chez Grist"},{"location":"newsletters/2023-08/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2023-08/#visionneuse-csv-grist","text":"Un autre mois, une autre mise \u00e0 jour excitante \u2013 cette fois pour le format de fichier v\u00e9n\u00e9rable que nous connaissons tous et aimons, le .csv . La Visionneuse CSV Grist est un outil gratuit qui donne aux CSV la puissance de Grist sur le web. Plus besoin de t\u00e9l\u00e9charger et d\u2019ouvrir les CSV dans une application externe, vous pouvez maintenant pr\u00e9visualiser et interagir avec les CSV dans une feuille de calcul aliment\u00e9e par Grist ! La visionneuse est open source, prend en charge des fonctionnalit\u00e9s telles que le filtrage, le tri, le copier/coller, et m\u00eame les formules. Et elle est facile \u00e0 installer, avec seulement deux lignes de HTML ajout\u00e9es \u00e0 n\u2019importe quel site web. Voyez-la en action","title":"Visionneuse CSV Grist"},{"location":"newsletters/2023-08/#assistant-ai-support-pour-llama","text":"Les auto-h\u00e9bergeurs de Grist peuvent d\u00e9sormais utiliser la famille de mod\u00e8les auto-h\u00e9bergeables Llama via le wrapper llama2-cpp-python en configurant les variables d\u2019environnement \u00e9tendues li\u00e9es \u00e0 l\u2019Assistant AI .","title":"Assistant AI \u2013 Support pour Llama"},{"location":"newsletters/2023-08/#en-tetes-de-colonnes-stylisees","text":"Vous pouvez maintenant styliser les en-t\u00eates de colonnes ! Regardez ! (Merci \u00e0 @CamilleLegeron et l\u2019ANCT pour le PR.)","title":"En-t\u00eates de colonnes stylis\u00e9es"},{"location":"newsletters/2023-08/#options-de-telechargement-de-fichiers-grist","text":"Vous pouvez maintenant t\u00e9l\u00e9charger la structure d\u2019un fichier .grist sans aucune donn\u00e9e, ce qui est utile pour la cr\u00e9ation de mod\u00e8les. Ou vous pouvez t\u00e9l\u00e9charger un .grist sans historique de document, ce qui r\u00e9duit la taille du fichier. Dans nos tests, nous avons vu des documents passer de 10,8 Mo \u00e0 1,5 Mo apr\u00e8s avoir omis l\u2019historique des fichiers. \ud83d\ude32","title":"Options de t\u00e9l\u00e9chargement de fichiers .grist"},{"location":"newsletters/2023-08/#refonte-de-limportation-de-fichiers","text":"L\u2019importation de fichiers a \u00e9t\u00e9 mise \u00e0 jour avec un nouveau flux, avec un meilleur support pour plusieurs fichiers/feuilles et le mappage des colonnes.","title":"Refonte de l’importation de fichiers"},{"location":"newsletters/2023-08/#plus-dameliorations","text":"Grist a \u00e9t\u00e9 mis \u00e0 niveau de Python 3.9 \u00e0 3.11. Cette mise \u00e0 jour apporte les nouvelles fonctionnalit\u00e9s suivantes : L\u2019ex\u00e9cution devrait \u00eatre l\u00e9g\u00e8rement plus rapide. Support suppl\u00e9mentaire pour le module de statistiques , y compris les fonctions covariance , correlation , et linear_regression . Support pour le Matching de motifs structurels . Vous pouvez maintenant voir des marques ^ pointant vers le probl\u00e8me dans les tracebacks, ce qui peut aider \u00e0 d\u00e9boguer les erreurs. Les liens sont maintenant cliquables dans les vues et les infobulles de description de colonnes . La s\u00e9lection de grille prend d\u00e9sormais en charge les raccourcis CTRL/CMD+Shift+ . Si vous avez utilis\u00e9 ce raccourci dans d\u2019autres produits de tableur populaires, vous serez comme chez vous ! (Merci \u00e0 @Ocarthon pour sa contribution !)","title":"Plus d’am\u00e9liorations"},{"location":"newsletters/2023-08/#astuces-conseils","text":"","title":"Astuces & Conseils"},{"location":"newsletters/2023-08/#grist-pour-les-utilisateurs-de-tableurs","text":"Nouveau sur Grist mais expert avec Excel/Google Sheets ? Notre nouveau post de blog couvre ce qui rend Grist diff\u00e9rent et pourquoi il est con\u00e7u de cette mani\u00e8re, sp\u00e9cifiquement pour les utilisateurs familiers avec les applications de tableur habituelles.","title":"Grist pour les utilisateurs de tableurs"},{"location":"newsletters/2023-08/#auto-hebergement-de-grist-static","text":"Le d\u00e9p\u00f4t GitHub de grist-static GitHub repo a \u00e9t\u00e9 mis \u00e0 jour avec des informations suppl\u00e9mentaires pour vous aider \u00e0 servir Grist sur votre propre site web ou CDN \u2013 y compris la nouvelle Visionneuse CSV.","title":"Auto-h\u00e9bergement de grist-static"},{"location":"newsletters/2023-08/#points-forts-de-la-communaute","text":"Le widget QR code astucieux de @jperon de janvier dernier a \u00e9t\u00e9 officiellement ajout\u00e9 en tant que widget personnalis\u00e9 ! \ud83c\udf89 Scannez le code ci-dessus pour visiter le post original, et cliquez ici pour en savoir plus sur les widgets personnalis\u00e9s. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2023-08/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-08/#webinaire-deconstruire-le-modele-de-paie","text":"En septembre, nous reconstruirons notre mod\u00e8le de paie . Ce mod\u00e8le utilise des formules pour rechercher les taux horaires en fonction de la personne, du r\u00f4le et de la date. Vous apprendrez \u00e9galement \u00e0 cr\u00e9er des tableaux de bord de synth\u00e8se dynamiques qui r\u00e9sument les donn\u00e9es par cat\u00e9gories et vous permettent d\u2019explorer les enregistrements dans ces cat\u00e9gories. Jeudi 21 septembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE SEPTEMBRE","title":"Webinaire : D\u00e9construire le mod\u00e8le de paie"},{"location":"newsletters/2023-08/#deconstruire-le-modele-dinscription-aux-cours","text":"En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En ao\u00fbt, nous avons reconstruit notre mod\u00e8le d\u2019inscription aux cours . Ce mod\u00e8le utilise des colonnes de r\u00e9f\u00e9rence pour relier les donn\u00e9es dans cinq tables diff\u00e9rentes. Apprenez quand utiliser des colonnes de r\u00e9f\u00e9rence, dans quelle direction, et comment utiliser des tables d\u2019aide pour mieux structurer vos donn\u00e9es. REGARDEZ L\u2019ENREGISTREMENT D\u2019AO\u00dbT","title":"D\u00e9construire le mod\u00e8le d’inscription aux cours"},{"location":"newsletters/2023-08/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-08/#propositions-contrats","text":"Natalie a cr\u00e9\u00e9 un tutoriel d\u00e9taill\u00e9 montrant comment ce mod\u00e8le (tr\u00e8s avanc\u00e9) a \u00e9t\u00e9 cr\u00e9\u00e9. Nous utilisons en fait une version de ce mod\u00e8le chez Grist pour g\u00e9rer les contrats, donc il est \u00e9prouv\u00e9 ! Non seulement ce mod\u00e8le peut \u00eatre utilis\u00e9 pour g\u00e9n\u00e9rer des contrats imprimables avec du contenu dynamique, mais il peut \u00e9galement g\u00e9n\u00e9rer les mod\u00e8les de contrat eux-m\u00eames . Vous pouvez donc avoir plusieurs versions de contrats dynamiques cr\u00e9\u00e9s \u00e0 partir du m\u00eame document Grist. \ud83e\udd2f ALLER AU MOD\u00c8LE","title":"Propositions & Contrats"},{"location":"newsletters/2023-08/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-08/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-09/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de septembre 2023 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Septembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Vue calendrier \ud83d\uddd3\ufe0f # Le moment est venu\u2026 la Vue Calendrier Officielle de Grist est l\u00e0 ! Nous savons qu\u2019elle est pratique car nous avons d\u00e9j\u00e0 mis \u00e0 jour plusieurs de nos mod\u00e8les pour l\u2019inclure. \ud83d\ude05 Nous avons m\u00eame cr\u00e9\u00e9 de nouveaux mod\u00e8les qui mettent sp\u00e9cifiquement en avant la vue calendrier (plus d\u2019infos ci-dessous). Les \u00e9v\u00e9nements sont cr\u00e9\u00e9s \u00e0 l\u2019aide de colonnes Date ou DateTime associ\u00e9es Vues jour, semaine & mois \u00c9dition d\u2019\u00e9v\u00e9nements par glisser-d\u00e9poser Support pour le lien de curseur \u2013 s\u00e9lectionnez un \u00e9v\u00e9nement et mettez automatiquement \u00e0 jour une vue li\u00e9e (cela est utile si vous souhaitez voir les d\u00e9tails d\u2019un \u00e9v\u00e9nement dans une vue fiche, par exemple) VOIR LA DOCUMENTATION Point de terminaison SQL # Grist dispose d\u00e9sormais d\u2019un point de terminaison SQL qui vous permet d\u2019ex\u00e9cuter des requ\u00eates SELECT en lecture seule via l\u2019API Grist ! C\u2019est excitant pour un ensemble tr\u00e8s \u201cs\u00e9lect\u201d d\u2019utilisateurs de Grist. \ud83e\udd20 Par exemple, voici une simple requ\u00eate SQL effectu\u00e9e sur notre mod\u00e8le CRM L\u00e9ger (ce ne sont pas de vrais emails !) : SELECT Email FROM Contacts WHERE Due IS NOT NULL Voir ici pour la documentation compl\u00e8te de l\u2019API. Points Forts de la Communaut\u00e9 # @jperon a trouv\u00e9 un moyen de cr\u00e9er une vue de recherche avanc\u00e9e en utilisant la m\u00e9thode eval de Python. Voir le post de la communaut\u00e9 pour un exemple, car c\u2019est un peu compliqu\u00e9 \u00e0 expliquer. Un grand merci \u00e0 @prijatelj.francek pour son travail sur la nouvelle traduction slov\u00e8ne. Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Nouvelle vid\u00e9o d\u2019orientation # Les nouveaux utilisateurs de Grist verront une vid\u00e9o d\u2019orientation mise \u00e0 jour lorsqu\u2019ils s\u2019inscriront, ce qui peut \u00e9galement \u00eatre un rappel utile pour les utilisateurs existants. Webinaire : Calendrier # Les calendriers sont l\u00e0 ! Apprenez tous les trucs et astuces pour tirer le meilleur parti des vues calendrier dans vos documents. Les fiches se marient bien avec les calendriers, nous plongerons donc \u00e9galement dans les vues fiche. Jeudi 26 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019OCTOBRE D\u00e9construction du Mod\u00e8le de Paie # En regardant nos mod\u00e8les, vous pouvez vous demander pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En septembre, nous avons reconstruit notre Mod\u00e8le de Paie . Ce mod\u00e8le utilise des formules pour rechercher les taux horaires en fonction de la personne, du r\u00f4le et de la date. Apprenez \u00e0 construire des tableaux de bord de synth\u00e8se dynamiques qui r\u00e9sument les donn\u00e9es par cat\u00e9gories et vous permettent d\u2019explorer les enregistrements dans ces cat\u00e9gories. REGARDER L\u2019ENREGISTREMENT DE SEPTEMBRE Mod\u00e8les # Planification de Voyage # L\u2019\u00e9t\u00e9 est peut-\u00eatre termin\u00e9, mais cela signifie simplement qu\u2019il est temps de planifier votre prochain voyage. Utilisez le nouveau mod\u00e8le de Planification de Voyage de Grist pour planifier et organiser plusieurs voyages en un seul endroit, avec des itin\u00e9raires d\u00e9taill\u00e9s et des listes de bagages. Ce mod\u00e8le est \u00e9galement une excellente vitrine pour la nouvelle vue calendrier ! ALLER AU MOD\u00c8LE Calendrier de Contenu pour les R\u00e9seaux Sociaux # Mais attendez, il y a plus ! Nous avons adapt\u00e9 et am\u00e9lior\u00e9 le document que nous utilisons en interne pour suivre nos publications sur les r\u00e9seaux sociaux et l\u2019avons transform\u00e9 en mod\u00e8le. Cr\u00e9ez et suivez des campagnes, approuvez du contenu et planifiez des publications (texte/image/vid\u00e9o). Et oui, ce mod\u00e8le utilise \u00e9galement tr\u00e8s bien la nouvelle vue calendrier ! ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel Sprouts gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/09"},{"location":"newsletters/2023-09/#bulletin-de-septembre-2023","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Septembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de septembre 2023"},{"location":"newsletters/2023-09/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-09/#vue-calendrier","text":"Le moment est venu\u2026 la Vue Calendrier Officielle de Grist est l\u00e0 ! Nous savons qu\u2019elle est pratique car nous avons d\u00e9j\u00e0 mis \u00e0 jour plusieurs de nos mod\u00e8les pour l\u2019inclure. \ud83d\ude05 Nous avons m\u00eame cr\u00e9\u00e9 de nouveaux mod\u00e8les qui mettent sp\u00e9cifiquement en avant la vue calendrier (plus d\u2019infos ci-dessous). Les \u00e9v\u00e9nements sont cr\u00e9\u00e9s \u00e0 l\u2019aide de colonnes Date ou DateTime associ\u00e9es Vues jour, semaine & mois \u00c9dition d\u2019\u00e9v\u00e9nements par glisser-d\u00e9poser Support pour le lien de curseur \u2013 s\u00e9lectionnez un \u00e9v\u00e9nement et mettez automatiquement \u00e0 jour une vue li\u00e9e (cela est utile si vous souhaitez voir les d\u00e9tails d\u2019un \u00e9v\u00e9nement dans une vue fiche, par exemple) VOIR LA DOCUMENTATION","title":"Vue calendrier \ud83d\uddd3\ufe0f"},{"location":"newsletters/2023-09/#point-de-terminaison-sql","text":"Grist dispose d\u00e9sormais d\u2019un point de terminaison SQL qui vous permet d\u2019ex\u00e9cuter des requ\u00eates SELECT en lecture seule via l\u2019API Grist ! C\u2019est excitant pour un ensemble tr\u00e8s \u201cs\u00e9lect\u201d d\u2019utilisateurs de Grist. \ud83e\udd20 Par exemple, voici une simple requ\u00eate SQL effectu\u00e9e sur notre mod\u00e8le CRM L\u00e9ger (ce ne sont pas de vrais emails !) : SELECT Email FROM Contacts WHERE Due IS NOT NULL Voir ici pour la documentation compl\u00e8te de l\u2019API.","title":"Point de terminaison SQL"},{"location":"newsletters/2023-09/#points-forts-de-la-communaute","text":"@jperon a trouv\u00e9 un moyen de cr\u00e9er une vue de recherche avanc\u00e9e en utilisant la m\u00e9thode eval de Python. Voir le post de la communaut\u00e9 pour un exemple, car c\u2019est un peu compliqu\u00e9 \u00e0 expliquer. Un grand merci \u00e0 @prijatelj.francek pour son travail sur la nouvelle traduction slov\u00e8ne. Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2023-09/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-09/#nouvelle-video-dorientation","text":"Les nouveaux utilisateurs de Grist verront une vid\u00e9o d\u2019orientation mise \u00e0 jour lorsqu\u2019ils s\u2019inscriront, ce qui peut \u00e9galement \u00eatre un rappel utile pour les utilisateurs existants.","title":"Nouvelle vid\u00e9o d’orientation"},{"location":"newsletters/2023-09/#webinaire-calendrier","text":"Les calendriers sont l\u00e0 ! Apprenez tous les trucs et astuces pour tirer le meilleur parti des vues calendrier dans vos documents. Les fiches se marient bien avec les calendriers, nous plongerons donc \u00e9galement dans les vues fiche. Jeudi 26 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019OCTOBRE","title":"Webinaire : Calendrier"},{"location":"newsletters/2023-09/#deconstruction-du-modele-de-paie","text":"En regardant nos mod\u00e8les, vous pouvez vous demander pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En septembre, nous avons reconstruit notre Mod\u00e8le de Paie . Ce mod\u00e8le utilise des formules pour rechercher les taux horaires en fonction de la personne, du r\u00f4le et de la date. Apprenez \u00e0 construire des tableaux de bord de synth\u00e8se dynamiques qui r\u00e9sument les donn\u00e9es par cat\u00e9gories et vous permettent d\u2019explorer les enregistrements dans ces cat\u00e9gories. REGARDER L\u2019ENREGISTREMENT DE SEPTEMBRE","title":"D\u00e9construction du Mod\u00e8le de Paie"},{"location":"newsletters/2023-09/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-09/#planification-de-voyage","text":"L\u2019\u00e9t\u00e9 est peut-\u00eatre termin\u00e9, mais cela signifie simplement qu\u2019il est temps de planifier votre prochain voyage. Utilisez le nouveau mod\u00e8le de Planification de Voyage de Grist pour planifier et organiser plusieurs voyages en un seul endroit, avec des itin\u00e9raires d\u00e9taill\u00e9s et des listes de bagages. Ce mod\u00e8le est \u00e9galement une excellente vitrine pour la nouvelle vue calendrier ! ALLER AU MOD\u00c8LE","title":"Planification de Voyage"},{"location":"newsletters/2023-09/#calendrier-de-contenu-pour-les-reseaux-sociaux","text":"Mais attendez, il y a plus ! Nous avons adapt\u00e9 et am\u00e9lior\u00e9 le document que nous utilisons en interne pour suivre nos publications sur les r\u00e9seaux sociaux et l\u2019avons transform\u00e9 en mod\u00e8le. Cr\u00e9ez et suivez des campagnes, approuvez du contenu et planifiez des publications (texte/image/vid\u00e9o). Et oui, ce mod\u00e8le utilise \u00e9galement tr\u00e8s bien la nouvelle vue calendrier ! ALLER AU MOD\u00c8LE","title":"Calendrier de Contenu pour les R\u00e9seaux Sociaux"},{"location":"newsletters/2023-09/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-09/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel Sprouts gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-10/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Octobre 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Octobre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Nouveaux raccourcis de formule Il y a un nouveau menu d\u2019options lors de l\u2019ajout d\u2019une colonne, y compris des raccourcis de cible et de formule ! B\u00eata : Widget de graphique avanc\u00e9 personnalis\u00e9 Essayez un widget exp\u00e9rimental qui donne \u00e0 Grist des capacit\u00e9s de cr\u00e9ation de graphiques \u00e9tendues. B\u00eata : Widget de notebook JupyterLite Ex\u00e9cutez du code Python personnalis\u00e9 dans notre widget exp\u00e9rimental JupyterLite. \u00c9v\u00e9nements color\u00e9s dans le calendrier \ud83c\udf08 Vous pouvez d\u00e9sormais colorier les \u00e9v\u00e9nements, et am\u00e9liorer les performances pour un grand nombre d\u2019\u00e9v\u00e9nements. T\u00e9l\u00e9chargements de fichiers depuis le visualiseur CSV de Grist Les utilisateurs peuvent d\u00e9sormais t\u00e9l\u00e9charger des fichiers CSV et XLSX directement depuis le visualiseur CSV de Grist. Grist au NEC 2023 \ud83c\uddeb\ud83c\uddf7 Une mise \u00e0 jour rapide de notre voyage \u00e0 Bordeaux, o\u00f9 nous avons parl\u00e9 de Grist et des communs num\u00e9riques ! Quoi de neuf # Raccourcis de formule # Si vous ouvrez le menu \u00ab Ajouter une colonne \u00bb, vous verrez quelques nouvelles options qui n\u2019\u00e9taient pas l\u00e0 auparavant : Cibles et Raccourcis . Ce sont deux types de cr\u00e9ation de formule en un clic qui facilitent la construction de vos documents Grist. Cibles : Si votre table r\u00e9f\u00e9rence d\u2019autres tables, ou est r\u00e9f\u00e9renc\u00e9e dans d\u2019autres tables, vous pourrez acc\u00e9der aux donn\u00e9es associ\u00e9es en un seul clic et effectuer des op\u00e9rations telles que la somme ou la moyenne si applicable. Raccourcis : Les raccourcis introduisent une mani\u00e8re en un clic d\u2019ajouter des formules d\u2019initialisation courantes : horodatages, tampons d\u2019auteur, d\u00e9tection des doublons et cr\u00e9ation d\u2019identifiants uniques. En savoir plus dans notre documentation . Fonctionnalit\u00e9 b\u00eata : Widget de graphique avanc\u00e9 personnalis\u00e9 # Le widget de graphique avanc\u00e9 personnalis\u00e9 vous offre plus de puissance et de flexibilit\u00e9 que les graphiques int\u00e9gr\u00e9s de Grist, offrant une grande vari\u00e9t\u00e9 de types de graphiques ainsi qu\u2019un contr\u00f4le accru sur le style et la mise en page. Pour en savoir plus et l\u2019essayer vous-m\u00eame, consultez notre documentation b\u00eata , et n\u2019oubliez pas : cliquez r\u00e9guli\u00e8rement sur le bouton \u00ab Enregistrer \u00bb au-dessus du widget pour conserver votre configuration ! Fonctionnalit\u00e9 b\u00eata : Widget de notebook JupyterLite # Ce widget exp\u00e9rimental vous permet d\u2019ex\u00e9cuter du code Python personnalis\u00e9 dans JupyterLite , une version de JupyterLab fonctionnant enti\u00e8rement dans le navigateur. Il peut utiliser l\u2019 API du plugin de widget personnalis\u00e9 et acc\u00e9der ou modifier toutes les donn\u00e9es du document (sous r\u00e9serve des permissions avanc\u00e9es), ouvrant des possibilit\u00e9s presque illimit\u00e9es pour les utilisateurs avanc\u00e9s. Pour plus d\u2019informations sur la mise en route, consultez notre documentation b\u00eata . \u00c9v\u00e9nements color\u00e9s dans le widget de calendrier ! # Vous pouvez d\u00e9sormais coder par couleur les \u00e9v\u00e9nements dans le widget de calendrier ! Tout ce que vous avez \u00e0 faire est d\u2019assigner une colonne \u00ab Type \u00bb optionnelle qui contient la cat\u00e9gorie et le style de l\u2019\u00e9v\u00e9nement. \ud83c\udfa8 Liaison bidirectionnelle du curseur # Gr\u00e2ce au travail acharn\u00e9 de @jvorob (qui \u00e9tait avec nous pour l\u2019\u00e9t\u00e9 et va beaucoup nous manquer !), la liaison du curseur a re\u00e7u une mise \u00e0 niveau significative. Dans le cadre de cela, deux widgets peuvent d\u00e9sormais \u00eatre li\u00e9s dans les deux sens, permettant une interaction plus naturelle du curseur. La liaison bidirectionnelle prend tout son sens en action : T\u00e9l\u00e9chargements de fichiers depuis le visualiseur CSV de Grist # Vous pouvez d\u00e9sormais t\u00e9l\u00e9charger les fichiers affich\u00e9s dans le visualiseur CSV de Grist en tant que fichiers CSV et XLSX. Grist Labs au NEC 2023 # Une partie de l\u2019\u00e9quipe Grist s\u2019est rendue \u00e0 Bordeaux, en France, pour parler de l\u2019aspect no-code de Grist au NEC 2023 , une conf\u00e9rence ax\u00e9e sur les communs num\u00e9riques . Nous avons pu rencontrer des utilisateurs de Grist travaillant dans le secteur public, et m\u00eame certains de nos pr\u00e9cieux contributeurs open source de l\u2019 ANCT . Si vous \u00eates int\u00e9ress\u00e9 par la venue de membres de l\u2019\u00e9quipe Grist pour parler de la fa\u00e7on dont Grist est cool et utile lors de votre convention, contactez-nous ! Encore plus d\u2019am\u00e9liorations ! # Une \u00e9tape furtive mais majeure pour le backend de Grist : il a \u00e9t\u00e9 mis \u00e0 jour vers Node 18. H\u00e9bergeurs open source : Grist peut d\u00e9sormais servir des m\u00e9triques au syst\u00e8me de surveillance Prometheus via une nouvelle variable d\u2019environnement GRIST_PROMCLIENT_PORT . Points forts de la communaut\u00e9 # @jperon est de retour avec un nouveau widget de s\u00e9lection SQL personnalis\u00e9 qui tire parti du point de terminaison SQL du mois dernier. \ud83e\udd2f Merci \u00e0 @marumaru pour avoir lanc\u00e9 notre traduction japonaise ! Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Graphiques et tableaux r\u00e9capitulatifs # En novembre, nous apprendrons comment r\u00e9sumer et analyser des donn\u00e9es dans des graphiques et des tableaux r\u00e9capitulatifs, avec des astuces pour tirer le meilleur parti des tableaux r\u00e9capitulatifs. Lundi 20 novembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE NOVEMBRE Calendriers et fiches # En octobre, nous avons examin\u00e9 le nouveau widget de calendrier et d\u00e9couvert comment tirer le meilleur parti des vues de calendrier dans vos documents. \u00c9tant donn\u00e9 que les widgets de fiches se marient bien avec les calendriers, nous les avons \u00e9galement examin\u00e9s. REGARDEZ L\u2019ENREGISTREMENT D\u2019OCTOBRE Mod\u00e8les # Nous avons parcouru notre liste de mod\u00e8les et ajout\u00e9 une pinc\u00e9e de widgets de calendrier pour nous assurer qu\u2019ils sont aussi utiles que possible. Prenez, par exemple, le mod\u00e8le de suivi du temps + facturation , qui a maintenant une vue de calendrier : ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/10"},{"location":"newsletters/2023-10/#bulletin-doctobre-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Octobre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Nouveaux raccourcis de formule Il y a un nouveau menu d\u2019options lors de l\u2019ajout d\u2019une colonne, y compris des raccourcis de cible et de formule ! B\u00eata : Widget de graphique avanc\u00e9 personnalis\u00e9 Essayez un widget exp\u00e9rimental qui donne \u00e0 Grist des capacit\u00e9s de cr\u00e9ation de graphiques \u00e9tendues. B\u00eata : Widget de notebook JupyterLite Ex\u00e9cutez du code Python personnalis\u00e9 dans notre widget exp\u00e9rimental JupyterLite. \u00c9v\u00e9nements color\u00e9s dans le calendrier \ud83c\udf08 Vous pouvez d\u00e9sormais colorier les \u00e9v\u00e9nements, et am\u00e9liorer les performances pour un grand nombre d\u2019\u00e9v\u00e9nements. T\u00e9l\u00e9chargements de fichiers depuis le visualiseur CSV de Grist Les utilisateurs peuvent d\u00e9sormais t\u00e9l\u00e9charger des fichiers CSV et XLSX directement depuis le visualiseur CSV de Grist. Grist au NEC 2023 \ud83c\uddeb\ud83c\uddf7 Une mise \u00e0 jour rapide de notre voyage \u00e0 Bordeaux, o\u00f9 nous avons parl\u00e9 de Grist et des communs num\u00e9riques !","title":"Bulletin d’Octobre 2023"},{"location":"newsletters/2023-10/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2023-10/#raccourcis-de-formule","text":"Si vous ouvrez le menu \u00ab Ajouter une colonne \u00bb, vous verrez quelques nouvelles options qui n\u2019\u00e9taient pas l\u00e0 auparavant : Cibles et Raccourcis . Ce sont deux types de cr\u00e9ation de formule en un clic qui facilitent la construction de vos documents Grist. Cibles : Si votre table r\u00e9f\u00e9rence d\u2019autres tables, ou est r\u00e9f\u00e9renc\u00e9e dans d\u2019autres tables, vous pourrez acc\u00e9der aux donn\u00e9es associ\u00e9es en un seul clic et effectuer des op\u00e9rations telles que la somme ou la moyenne si applicable. Raccourcis : Les raccourcis introduisent une mani\u00e8re en un clic d\u2019ajouter des formules d\u2019initialisation courantes : horodatages, tampons d\u2019auteur, d\u00e9tection des doublons et cr\u00e9ation d\u2019identifiants uniques. En savoir plus dans notre documentation .","title":"Raccourcis de formule"},{"location":"newsletters/2023-10/#fonctionnalite-beta-widget-de-graphique-avance-personnalise","text":"Le widget de graphique avanc\u00e9 personnalis\u00e9 vous offre plus de puissance et de flexibilit\u00e9 que les graphiques int\u00e9gr\u00e9s de Grist, offrant une grande vari\u00e9t\u00e9 de types de graphiques ainsi qu\u2019un contr\u00f4le accru sur le style et la mise en page. Pour en savoir plus et l\u2019essayer vous-m\u00eame, consultez notre documentation b\u00eata , et n\u2019oubliez pas : cliquez r\u00e9guli\u00e8rement sur le bouton \u00ab Enregistrer \u00bb au-dessus du widget pour conserver votre configuration !","title":"Fonctionnalit\u00e9 b\u00eata : Widget de graphique avanc\u00e9 personnalis\u00e9"},{"location":"newsletters/2023-10/#fonctionnalite-beta-widget-de-notebook-jupyterlite","text":"Ce widget exp\u00e9rimental vous permet d\u2019ex\u00e9cuter du code Python personnalis\u00e9 dans JupyterLite , une version de JupyterLab fonctionnant enti\u00e8rement dans le navigateur. Il peut utiliser l\u2019 API du plugin de widget personnalis\u00e9 et acc\u00e9der ou modifier toutes les donn\u00e9es du document (sous r\u00e9serve des permissions avanc\u00e9es), ouvrant des possibilit\u00e9s presque illimit\u00e9es pour les utilisateurs avanc\u00e9s. Pour plus d\u2019informations sur la mise en route, consultez notre documentation b\u00eata .","title":"Fonctionnalit\u00e9 b\u00eata : Widget de notebook JupyterLite"},{"location":"newsletters/2023-10/#evenements-colores-dans-le-widget-de-calendrier","text":"Vous pouvez d\u00e9sormais coder par couleur les \u00e9v\u00e9nements dans le widget de calendrier ! Tout ce que vous avez \u00e0 faire est d\u2019assigner une colonne \u00ab Type \u00bb optionnelle qui contient la cat\u00e9gorie et le style de l\u2019\u00e9v\u00e9nement. \ud83c\udfa8","title":"\u00c9v\u00e9nements color\u00e9s dans le widget de calendrier !"},{"location":"newsletters/2023-10/#liaison-bidirectionnelle-du-curseur","text":"Gr\u00e2ce au travail acharn\u00e9 de @jvorob (qui \u00e9tait avec nous pour l\u2019\u00e9t\u00e9 et va beaucoup nous manquer !), la liaison du curseur a re\u00e7u une mise \u00e0 niveau significative. Dans le cadre de cela, deux widgets peuvent d\u00e9sormais \u00eatre li\u00e9s dans les deux sens, permettant une interaction plus naturelle du curseur. La liaison bidirectionnelle prend tout son sens en action :","title":"Liaison bidirectionnelle du curseur"},{"location":"newsletters/2023-10/#telechargements-de-fichiers-depuis-le-visualiseur-csv-de-grist","text":"Vous pouvez d\u00e9sormais t\u00e9l\u00e9charger les fichiers affich\u00e9s dans le visualiseur CSV de Grist en tant que fichiers CSV et XLSX.","title":"T\u00e9l\u00e9chargements de fichiers depuis le visualiseur CSV de Grist"},{"location":"newsletters/2023-10/#grist-labs-au-nec-2023","text":"Une partie de l\u2019\u00e9quipe Grist s\u2019est rendue \u00e0 Bordeaux, en France, pour parler de l\u2019aspect no-code de Grist au NEC 2023 , une conf\u00e9rence ax\u00e9e sur les communs num\u00e9riques . Nous avons pu rencontrer des utilisateurs de Grist travaillant dans le secteur public, et m\u00eame certains de nos pr\u00e9cieux contributeurs open source de l\u2019 ANCT . Si vous \u00eates int\u00e9ress\u00e9 par la venue de membres de l\u2019\u00e9quipe Grist pour parler de la fa\u00e7on dont Grist est cool et utile lors de votre convention, contactez-nous !","title":"Grist Labs au NEC 2023"},{"location":"newsletters/2023-10/#encore-plus-dameliorations","text":"Une \u00e9tape furtive mais majeure pour le backend de Grist : il a \u00e9t\u00e9 mis \u00e0 jour vers Node 18. H\u00e9bergeurs open source : Grist peut d\u00e9sormais servir des m\u00e9triques au syst\u00e8me de surveillance Prometheus via une nouvelle variable d\u2019environnement GRIST_PROMCLIENT_PORT .","title":"Encore plus d’am\u00e9liorations !"},{"location":"newsletters/2023-10/#points-forts-de-la-communaute","text":"@jperon est de retour avec un nouveau widget de s\u00e9lection SQL personnalis\u00e9 qui tire parti du point de terminaison SQL du mois dernier. \ud83e\udd2f Merci \u00e0 @marumaru pour avoir lanc\u00e9 notre traduction japonaise ! Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2023-10/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-10/#webinaire-graphiques-et-tableaux-recapitulatifs","text":"En novembre, nous apprendrons comment r\u00e9sumer et analyser des donn\u00e9es dans des graphiques et des tableaux r\u00e9capitulatifs, avec des astuces pour tirer le meilleur parti des tableaux r\u00e9capitulatifs. Lundi 20 novembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE NOVEMBRE","title":"Webinaire : Graphiques et tableaux r\u00e9capitulatifs"},{"location":"newsletters/2023-10/#calendriers-et-fiches","text":"En octobre, nous avons examin\u00e9 le nouveau widget de calendrier et d\u00e9couvert comment tirer le meilleur parti des vues de calendrier dans vos documents. \u00c9tant donn\u00e9 que les widgets de fiches se marient bien avec les calendriers, nous les avons \u00e9galement examin\u00e9s. REGARDEZ L\u2019ENREGISTREMENT D\u2019OCTOBRE","title":"Calendriers et fiches"},{"location":"newsletters/2023-10/#modeles","text":"Nous avons parcouru notre liste de mod\u00e8les et ajout\u00e9 une pinc\u00e9e de widgets de calendrier pour nous assurer qu\u2019ils sont aussi utiles que possible. Prenez, par exemple, le mod\u00e8le de suivi du temps + facturation , qui a maintenant une vue de calendrier : ALLER AU MOD\u00c8LE","title":"Mod\u00e8les"},{"location":"newsletters/2023-10/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-10/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-11/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Novembre 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Novembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Rejoignez-nous sur Discord ! # Nous avons cr\u00e9\u00e9 un serveur Discord officiel Grist pour ceux qui souhaitent discuter de Grist et de sujets li\u00e9s \u00e0 Grist. Pour marquer le coup, nous allons voir combien des puzzles de l\u2019 Advent of Code de cette ann\u00e9e nous pouvons r\u00e9soudre avec Grist. \ud83d\udcc6\ud83e\udde9 REJOINDRE DISCORD Vues fiche # Ne vous laissez pas tromper par le nom modeste, c\u2019est une grande nouveaut\u00e9 ! Nous savons tous \u00e0 quel point les r\u00e9f\u00e9rences sont utiles. Mais parfois, vous voulez jeter un coup d\u2019\u0153il \u00e0 l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 sans changer votre vue actuelle. Maintenant, vous pouvez ! L\u2019ic\u00f4ne \u201clien\u201d dans les colonnes de r\u00e9f\u00e9rence et de liste de r\u00e9f\u00e9rences est d\u00e9sormais un v\u00e9ritable hyperlien, et il ouvre l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans une fen\u00eatre contextuelle. Mais cela ne concerne pas seulement les r\u00e9f\u00e9rences ! Vous pouvez \u00e9galement voir n\u2019importe quelle ligne dans une table comme une carte en un seul clic, vous permettant de voir son enregistrement de base en entier. Les vues fiche sont des vues par d\u00e9faut pour chaque table. Elles peuvent \u00eatre configur\u00e9es sur la page des Donn\u00e9es Sources . Ajouter une colonne avec type # Notre qu\u00eate pour am\u00e9liorer l\u2019exp\u00e9rience d\u2019ajout de nouvelles colonnes continue. D\u00e9sormais, vous pouvez d\u00e9finir le type de colonne directement dans le menu \u201cAjouter une colonne\u201d. Admirez ! Mise \u00e0 jour de s\u00e9curit\u00e9 pour les auto-h\u00e9bergeurs # Nous avons publi\u00e9 une correction de s\u00e9curit\u00e9 plus t\u00f4t ce mois-ci li\u00e9e \u00e0 la configuration sugg\u00e9r\u00e9e de grist-core avec traefik, ainsi que pour grist-omnibus . Voir cette mise \u00e0 jour de la communaut\u00e9 pour plus de d\u00e9tails. La correction affecte \u00e9galement ceux qui font l\u2019authentification Grist en transf\u00e9rant un en-t\u00eate pour tous les points de terminaison (par exemple, derri\u00e8re HTTP Basic Auth), car elle rend obligatoire un drapeau pr\u00e9c\u00e9demment optionnel. Vous devrez peut-\u00eatre revoir vos param\u00e8tres \u2013 voir ce probl\u00e8me pour plus de d\u00e9tails. Questions-R\u00e9ponses Console Grist # Le CTO Paul a pu partager des informations fascinantes li\u00e9es \u00e0 Grist dans une excellente session de Questions-R\u00e9ponses Console . D\u00e9couvrez les origines du nom \u201cGrist\u201d, comment (et pourquoi) nous construisons Grist, et comment nous pourrions communiquer avec des extraterrestres. \ud83d\udc7d (Ce dernier point n\u2019est peut-\u00eatre pas directement li\u00e9 \u00e0 Grist.) Faits Saillants de la Communaut\u00e9 # Auto-h\u00e9bergeurs : Grist prend d\u00e9sormais en charge nativement l\u2019authentification avec OpenID Connect. Voir la documentation compl\u00e8te ici . Un grand merci \u00e0 @fflorent de l\u2019ANCT pour leur travail sur cette PR ! Vous cherchez un moyen plus simple d\u2019auto-h\u00e9berger Grist ? Florent a \u00e9galement empaquet\u00e9 Grist sur YunoHost , un OS bas\u00e9 sur Debian con\u00e7u pour aider \u00e0 d\u00e9mocratiser l\u2019auto-h\u00e9bergement. Consultez le post de Florent sur notre forum pour plus d\u2019informations. Andreas Kl\u00f6ckner ( @inducer sur GitHub) a partag\u00e9 non pas un, ni deux, mais TROIS projets li\u00e9s \u00e0 Grist sur le forum de la communaut\u00e9 : grist-availability : un outil pour aider \u00e0 la planification multi-personnes en utilisant le nouveau widget calendrier. grist-mailmerge : un exp\u00e9diteur de courriels en lot pilot\u00e9 par une table Grist et un mod\u00e8le Jinja. pygrist-mini : un petit client API Grist pour Python. Les traductions ont commenc\u00e9 pour l\u2019arabe, le tch\u00e8que, le chinois (traditionnel), le n\u00e9erlandais et le tha\u00ef ! Nous en sommes maintenant \u00e0 20 langues soit compl\u00e8tes, soit en cours, gr\u00e2ce \u00e0 la contribution de la communaut\u00e9. Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Vues Multim\u00e9dia # En d\u00e9cembre, nous couvrirons les vues multim\u00e9dia afin que vous puissiez explorer encore plus de fa\u00e7ons d\u2019afficher vos donn\u00e9es. Cartes, blocs-notes et lecteurs vid\u00e9o, oh l\u00e0 l\u00e0 ! Jeudi 14 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE D\u00c9CEMBRE Graphiques et Tableaux de Synth\u00e8se # En novembre, nous avons appris \u00e0 r\u00e9sumer et analyser les donn\u00e9es dans des graphiques et des tableaux de synth\u00e8se, avec des astuces pour tirer le meilleur parti des tableaux de synth\u00e8se. REGARDER L\u2019ENREGISTREMENT DE NOVEMBRE Aidez \u00e0 faire conna\u00eetre Grist # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/11"},{"location":"newsletters/2023-11/#bulletin-de-novembre-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Novembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Novembre 2023"},{"location":"newsletters/2023-11/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-11/#rejoignez-nous-sur-discord","text":"Nous avons cr\u00e9\u00e9 un serveur Discord officiel Grist pour ceux qui souhaitent discuter de Grist et de sujets li\u00e9s \u00e0 Grist. Pour marquer le coup, nous allons voir combien des puzzles de l\u2019 Advent of Code de cette ann\u00e9e nous pouvons r\u00e9soudre avec Grist. \ud83d\udcc6\ud83e\udde9 REJOINDRE DISCORD","title":"Rejoignez-nous sur Discord !"},{"location":"newsletters/2023-11/#vues-fiche","text":"Ne vous laissez pas tromper par le nom modeste, c\u2019est une grande nouveaut\u00e9 ! Nous savons tous \u00e0 quel point les r\u00e9f\u00e9rences sont utiles. Mais parfois, vous voulez jeter un coup d\u2019\u0153il \u00e0 l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 sans changer votre vue actuelle. Maintenant, vous pouvez ! L\u2019ic\u00f4ne \u201clien\u201d dans les colonnes de r\u00e9f\u00e9rence et de liste de r\u00e9f\u00e9rences est d\u00e9sormais un v\u00e9ritable hyperlien, et il ouvre l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans une fen\u00eatre contextuelle. Mais cela ne concerne pas seulement les r\u00e9f\u00e9rences ! Vous pouvez \u00e9galement voir n\u2019importe quelle ligne dans une table comme une carte en un seul clic, vous permettant de voir son enregistrement de base en entier. Les vues fiche sont des vues par d\u00e9faut pour chaque table. Elles peuvent \u00eatre configur\u00e9es sur la page des Donn\u00e9es Sources .","title":"Vues fiche"},{"location":"newsletters/2023-11/#ajouter-une-colonne-avec-type","text":"Notre qu\u00eate pour am\u00e9liorer l\u2019exp\u00e9rience d\u2019ajout de nouvelles colonnes continue. D\u00e9sormais, vous pouvez d\u00e9finir le type de colonne directement dans le menu \u201cAjouter une colonne\u201d. Admirez !","title":"Ajouter une colonne avec type"},{"location":"newsletters/2023-11/#mise-a-jour-de-securite-pour-les-auto-hebergeurs","text":"Nous avons publi\u00e9 une correction de s\u00e9curit\u00e9 plus t\u00f4t ce mois-ci li\u00e9e \u00e0 la configuration sugg\u00e9r\u00e9e de grist-core avec traefik, ainsi que pour grist-omnibus . Voir cette mise \u00e0 jour de la communaut\u00e9 pour plus de d\u00e9tails. La correction affecte \u00e9galement ceux qui font l\u2019authentification Grist en transf\u00e9rant un en-t\u00eate pour tous les points de terminaison (par exemple, derri\u00e8re HTTP Basic Auth), car elle rend obligatoire un drapeau pr\u00e9c\u00e9demment optionnel. Vous devrez peut-\u00eatre revoir vos param\u00e8tres \u2013 voir ce probl\u00e8me pour plus de d\u00e9tails.","title":"Mise \u00e0 jour de s\u00e9curit\u00e9 pour les auto-h\u00e9bergeurs"},{"location":"newsletters/2023-11/#questions-reponses-console-grist","text":"Le CTO Paul a pu partager des informations fascinantes li\u00e9es \u00e0 Grist dans une excellente session de Questions-R\u00e9ponses Console . D\u00e9couvrez les origines du nom \u201cGrist\u201d, comment (et pourquoi) nous construisons Grist, et comment nous pourrions communiquer avec des extraterrestres. \ud83d\udc7d (Ce dernier point n\u2019est peut-\u00eatre pas directement li\u00e9 \u00e0 Grist.)","title":"Questions-R\u00e9ponses Console Grist"},{"location":"newsletters/2023-11/#faits-saillants-de-la-communaute","text":"Auto-h\u00e9bergeurs : Grist prend d\u00e9sormais en charge nativement l\u2019authentification avec OpenID Connect. Voir la documentation compl\u00e8te ici . Un grand merci \u00e0 @fflorent de l\u2019ANCT pour leur travail sur cette PR ! Vous cherchez un moyen plus simple d\u2019auto-h\u00e9berger Grist ? Florent a \u00e9galement empaquet\u00e9 Grist sur YunoHost , un OS bas\u00e9 sur Debian con\u00e7u pour aider \u00e0 d\u00e9mocratiser l\u2019auto-h\u00e9bergement. Consultez le post de Florent sur notre forum pour plus d\u2019informations. Andreas Kl\u00f6ckner ( @inducer sur GitHub) a partag\u00e9 non pas un, ni deux, mais TROIS projets li\u00e9s \u00e0 Grist sur le forum de la communaut\u00e9 : grist-availability : un outil pour aider \u00e0 la planification multi-personnes en utilisant le nouveau widget calendrier. grist-mailmerge : un exp\u00e9diteur de courriels en lot pilot\u00e9 par une table Grist et un mod\u00e8le Jinja. pygrist-mini : un petit client API Grist pour Python. Les traductions ont commenc\u00e9 pour l\u2019arabe, le tch\u00e8que, le chinois (traditionnel), le n\u00e9erlandais et le tha\u00ef ! Nous en sommes maintenant \u00e0 20 langues soit compl\u00e8tes, soit en cours, gr\u00e2ce \u00e0 la contribution de la communaut\u00e9. Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Faits Saillants de la Communaut\u00e9"},{"location":"newsletters/2023-11/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-11/#webinaire-vues-multimedia","text":"En d\u00e9cembre, nous couvrirons les vues multim\u00e9dia afin que vous puissiez explorer encore plus de fa\u00e7ons d\u2019afficher vos donn\u00e9es. Cartes, blocs-notes et lecteurs vid\u00e9o, oh l\u00e0 l\u00e0 ! Jeudi 14 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE D\u00c9CEMBRE","title":"Webinaire : Vues Multim\u00e9dia"},{"location":"newsletters/2023-11/#graphiques-et-tableaux-de-synthese","text":"En novembre, nous avons appris \u00e0 r\u00e9sumer et analyser les donn\u00e9es dans des graphiques et des tableaux de synth\u00e8se, avec des astuces pour tirer le meilleur parti des tableaux de synth\u00e8se. REGARDER L\u2019ENREGISTREMENT DE NOVEMBRE","title":"Graphiques et Tableaux de Synth\u00e8se"},{"location":"newsletters/2023-11/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-11/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-12/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de D\u00e9cembre 2023 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin D\u00e9cembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Nous avons publi\u00e9 un aper\u00e7u de tout ce qui s\u2019est pass\u00e9 pendant une ann\u00e9e 2023 tr\u00e8s charg\u00e9e pour Grist. Consultez notre Ann\u00e9e en Revue pour tout savoir, ainsi qu\u2019une abondance de contributions \u00e9tonnantes de la communaut\u00e9 et un aper\u00e7u de ce qui nous attend en 2024. \ud83e\udde0 LIRE L\u2019ANN\u00c9E EN REVUE Quoi de Neuf # Bient\u00f4t (tr\u00e8s) disponible : Formulaires # Capture d\u2019\u00e9cran du design de l\u2019\u00e9diteur de formulaires. Les formulaires sont presque l\u00e0, et nous ne pourrions pas \u00eatre plus excit\u00e9s. Nous publierons une version de pr\u00e9visualisation pour les tests en janvier, et nous aimerions recevoir des retours pr\u00e9coces des utilisateurs. Pour fournir des retours, rejoignez notre serveur Discord. REJOINDRE DISCORD Test B\u00eata : Grist sur AWS Marketplace # En 2024, nous pr\u00e9voyons de lancer de nouvelles options pour Grist auto-h\u00e9berg\u00e9, afin qu\u2019il devienne plus facile \u00e0 ex\u00e9cuter (et \u00e0 maintenir) sur votre propre infrastructure. Grist auto-h\u00e9berg\u00e9 peut d\u00e9j\u00e0 fonctionner presque partout, surtout lorsque quelqu\u2019un a fait le travail de l\u2019emballer pour votre environnement sp\u00e9cifique. L\u2019un des premiers exemples de cela \u00e9tait le paquet Grist pour Unraid d\u2019Adrian, et l\u2019un des plus r\u00e9cents est le paquet Grist pour YunoHost de Florent, datant du mois dernier. Chez Grist Labs, nous avons commenc\u00e9 \u00e0 travailler sur un paquet Grist pour AWS Marketplace, et nous recherchons des utilisateurs amicaux sur le cloud AWS pour l\u2019essayer et donner leur avis. Int\u00e9ress\u00e9 ? Veuillez rejoindre notre Discord et surveiller une annonce en janvier, merci ! Autres am\u00e9liorations # Graphiques Avanc\u00e9s et le JupyterLite Notebook sont d\u00e9sormais des vues personnalis\u00e9es officielles disponibles dans le menu d\u00e9roulant. Dans les vues de table, vous pouvez maintenant appuyer sur la barre d\u2019espace pour ouvrir la ligne s\u00e9lectionn\u00e9e en tant que vue fiche. Points Forts de la Communaut\u00e9 # Sur le Discord de Grist , @CoverWhale a partag\u00e9 son client Grist Go en phase initiale, avec le nom d\u00e9licieux de Gorist . Toujours sur Discord, @jperon a partag\u00e9 un widget pug_py pour aider \u00e0 d\u00e9velopper des vues personnalis\u00e9es. La traduction a commenc\u00e9 pour le roumain (merci @chiuta) ! Voir ici pour plus d\u2019informations sur la traduction de Grist. Nous sommes tellement impressionn\u00e9s par la diligence de @jperon pour r\u00e9soudre autant de puzzles Advent of Code que possible dans Grist. Statut de h\u00e9ros. Juste\u2026regardez \u00e7a : https://docs.getgrist.com/cU5y9f2ViVQQ/AOC2023/p/17 Pendant ce temps chez Grist\u2026 Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Magie du Widget Markdown \ud83e\uddd9\u200d\u2642\ufe0f # En janvier, nous apprendrons \u00e0 utiliser la vue Markdown pour cr\u00e9er des fichiers PDF imprimables, remplis avec les donn\u00e9es de votre document Grist. Nous reconstruirons notre \ud83d\udcdd Mod\u00e8le de Propositions & Contrats pour vous montrer comment c\u2019est fait ! Jeudi 18 janvier \u00e0 16h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER Vues Multim\u00e9dia # En d\u00e9cembre, nous avons couvert les vues multim\u00e9dia et explor\u00e9 encore plus de fa\u00e7ons d\u2019afficher vos donn\u00e9es. Cartes, blocs-notes et lecteurs vid\u00e9o, oh l\u00e0 l\u00e0 ! REGARDER L\u2019ENREGISTREMENT DE D\u00c9CEMBRE Aidez \u00e0 faire passer le mot # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 grandir, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/12"},{"location":"newsletters/2023-12/#bulletin-de-decembre-2023","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin D\u00e9cembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Nous avons publi\u00e9 un aper\u00e7u de tout ce qui s\u2019est pass\u00e9 pendant une ann\u00e9e 2023 tr\u00e8s charg\u00e9e pour Grist. Consultez notre Ann\u00e9e en Revue pour tout savoir, ainsi qu\u2019une abondance de contributions \u00e9tonnantes de la communaut\u00e9 et un aper\u00e7u de ce qui nous attend en 2024. \ud83e\udde0 LIRE L\u2019ANN\u00c9E EN REVUE","title":"Bulletin de D\u00e9cembre 2023"},{"location":"newsletters/2023-12/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-12/#bientot-tres-disponible-formulaires","text":"Capture d\u2019\u00e9cran du design de l\u2019\u00e9diteur de formulaires. Les formulaires sont presque l\u00e0, et nous ne pourrions pas \u00eatre plus excit\u00e9s. Nous publierons une version de pr\u00e9visualisation pour les tests en janvier, et nous aimerions recevoir des retours pr\u00e9coces des utilisateurs. Pour fournir des retours, rejoignez notre serveur Discord. REJOINDRE DISCORD","title":"Bient\u00f4t (tr\u00e8s) disponible : Formulaires"},{"location":"newsletters/2023-12/#test-beta-grist-sur-aws-marketplace","text":"En 2024, nous pr\u00e9voyons de lancer de nouvelles options pour Grist auto-h\u00e9berg\u00e9, afin qu\u2019il devienne plus facile \u00e0 ex\u00e9cuter (et \u00e0 maintenir) sur votre propre infrastructure. Grist auto-h\u00e9berg\u00e9 peut d\u00e9j\u00e0 fonctionner presque partout, surtout lorsque quelqu\u2019un a fait le travail de l\u2019emballer pour votre environnement sp\u00e9cifique. L\u2019un des premiers exemples de cela \u00e9tait le paquet Grist pour Unraid d\u2019Adrian, et l\u2019un des plus r\u00e9cents est le paquet Grist pour YunoHost de Florent, datant du mois dernier. Chez Grist Labs, nous avons commenc\u00e9 \u00e0 travailler sur un paquet Grist pour AWS Marketplace, et nous recherchons des utilisateurs amicaux sur le cloud AWS pour l\u2019essayer et donner leur avis. Int\u00e9ress\u00e9 ? Veuillez rejoindre notre Discord et surveiller une annonce en janvier, merci !","title":"Test B\u00eata : Grist sur AWS Marketplace"},{"location":"newsletters/2023-12/#autres-ameliorations","text":"Graphiques Avanc\u00e9s et le JupyterLite Notebook sont d\u00e9sormais des vues personnalis\u00e9es officielles disponibles dans le menu d\u00e9roulant. Dans les vues de table, vous pouvez maintenant appuyer sur la barre d\u2019espace pour ouvrir la ligne s\u00e9lectionn\u00e9e en tant que vue fiche.","title":"Autres am\u00e9liorations"},{"location":"newsletters/2023-12/#points-forts-de-la-communaute","text":"Sur le Discord de Grist , @CoverWhale a partag\u00e9 son client Grist Go en phase initiale, avec le nom d\u00e9licieux de Gorist . Toujours sur Discord, @jperon a partag\u00e9 un widget pug_py pour aider \u00e0 d\u00e9velopper des vues personnalis\u00e9es. La traduction a commenc\u00e9 pour le roumain (merci @chiuta) ! Voir ici pour plus d\u2019informations sur la traduction de Grist. Nous sommes tellement impressionn\u00e9s par la diligence de @jperon pour r\u00e9soudre autant de puzzles Advent of Code que possible dans Grist. Statut de h\u00e9ros. Juste\u2026regardez \u00e7a : https://docs.getgrist.com/cU5y9f2ViVQQ/AOC2023/p/17 Pendant ce temps chez Grist\u2026 Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2023-12/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-12/#webinaire-magie-du-widget-markdown","text":"En janvier, nous apprendrons \u00e0 utiliser la vue Markdown pour cr\u00e9er des fichiers PDF imprimables, remplis avec les donn\u00e9es de votre document Grist. Nous reconstruirons notre \ud83d\udcdd Mod\u00e8le de Propositions & Contrats pour vous montrer comment c\u2019est fait ! Jeudi 18 janvier \u00e0 16h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER","title":"Webinaire : Magie du Widget Markdown \ud83e\uddd9\u200d\u2642\ufe0f"},{"location":"newsletters/2023-12/#vues-multimedia","text":"En d\u00e9cembre, nous avons couvert les vues multim\u00e9dia et explor\u00e9 encore plus de fa\u00e7ons d\u2019afficher vos donn\u00e9es. Cartes, blocs-notes et lecteurs vid\u00e9o, oh l\u00e0 l\u00e0 ! REGARDER L\u2019ENREGISTREMENT DE D\u00c9CEMBRE","title":"Vues Multim\u00e9dia"},{"location":"newsletters/2023-12/#aidez-a-faire-passer-le-mot","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 grandir, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire passer le mot"},{"location":"newsletters/2023-12/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-01/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de janvier 2024 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Janvier 2024 \u2022 getgrist.com Bienvenue dans notre newsletter mensuelle de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Bonne ann\u00e9e ! # Si ce n\u2019est pas d\u00e9j\u00e0 fait, n\u2019oubliez pas de consulter notre Revue de l\u2019ann\u00e9e 2023 . Nous sommes extr\u00eamement enthousiastes pour 2024 et nous commen\u00e7ons l\u2019ann\u00e9e en grande forme. \ud83d\ude09 Quoi de neuf # Formulaires Grist # EN SAVOIR PLUS Les formulaires Grist sont maintenant en ligne ! Cr\u00e9ez des formulaires simples et efficaces directement dans un document Grist et partagez-les en un clic. \u00c9tant donn\u00e9 que les champs de formulaire proviennent directement des colonnes Grist, toutes vos donn\u00e9es sont achemin\u00e9es directement dans la structure correcte, organis\u00e9es et pr\u00eates pour l\u2019analyse. Concevez des formulaires visuellement dans Grist Pr\u00e9visualisez, publiez et partagez en un seul clic Analysez les donn\u00e9es en temps r\u00e9el Mais nous n\u2019en restons pas l\u00e0 \u2013 nous continuons \u00e0 ajouter des fonctionnalit\u00e9s aux formulaires Grist. Nous voulons que le meilleur outil de donn\u00e9es ait le moyen le plus simple de collecter des donn\u00e9es. Nous collectons \u00e9galement des retours \u2013 soit en nous envoyant un e-mail \u00e0 support@getgrist.com, soit en nous laissant un message sur notre serveur Discord officiel . Visitez notre page des formulaires Grist pour plus d\u2019informations, et plongez dans notre Centre d\u2019aide pour une documentation compl\u00e8te. Pour un aper\u00e7u pratique des formulaires, inscrivez-vous au webinaire de ce mois pour tout apprendre \u00e0 leur sujet ! Console API # Grist dispose d\u00e9j\u00e0 d\u2019une documentation API de r\u00e9f\u00e9rence \u00e9tendue, mais nous sommes ravis de lancer une nouvelle page de console API pour permettre aux d\u00e9veloppeurs de tester les appels API dans une interface web pratique. Remarque : Cette page utilise votre session actuelle. Points forts de la communaut\u00e9 # D\u00e9composez-vous/reconstruisez-vous souvent des URL ? Andreas Kloeckner ( @inducer sur GitHub) a partag\u00e9 un petit widget personnalis\u00e9 pour permettre une visualisation correcte (cliquable) des URL calcul\u00e9es. Juste apr\u00e8s gorist , @hooksie1 a partag\u00e9 une version alpha de vrist , un client Grist en V ! Qu\u2019est-ce qui vient ensuite, TypeGrist ? Grust ? Grist peut-il faire du kanban ? Les fans de Grist se rassemblent et planifient, et Grist peut faire du kanban ! Les utilisateurs de notre serveur Discord ont commenc\u00e9 \u00e0 r\u00e9fl\u00e9chir, ce qui a conduit \u00e0 plusieurs prototypes d\u2019une solution kanban Grist : un qui n\u2019utilise aucun widget personnalis\u00e9 (!) par wunter8 et un widget personnalis\u00e9 complet et glissable par @jperon Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Formulaires # F\u00e9vrier est le mois pour c\u00e9l\u00e9brer notre amour \ud83d\udc96\u2026 des formulaires ! Nous apprendrons \u00e0 cr\u00e9er une belle vue de formulaire pour collecter des donn\u00e9es qui rempliront une table de donn\u00e9es Grist lors de la soumission. Jeudi 22 f\u00e9vrier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER Magie du widget Markdown \ud83e\uddd9\u200d\u2642\ufe0f # En janvier, nous avons plong\u00e9 dans notre exemple de propositions et contrats et appris \u00e0 utiliser le widget Markdown pour cr\u00e9er des fichiers PDF imprimables avec les donn\u00e9es de votre document Grist. REGARDER L\u2019ENREGISTREMENT DE JANVIER Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit Sprouts avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/01"},{"location":"newsletters/2024-01/#bulletin-de-janvier-2024","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Janvier 2024 \u2022 getgrist.com Bienvenue dans notre newsletter mensuelle de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de janvier 2024"},{"location":"newsletters/2024-01/#bonne-annee","text":"Si ce n\u2019est pas d\u00e9j\u00e0 fait, n\u2019oubliez pas de consulter notre Revue de l\u2019ann\u00e9e 2023 . Nous sommes extr\u00eamement enthousiastes pour 2024 et nous commen\u00e7ons l\u2019ann\u00e9e en grande forme. \ud83d\ude09","title":"Bonne ann\u00e9e !"},{"location":"newsletters/2024-01/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-01/#formulaires-grist","text":"EN SAVOIR PLUS Les formulaires Grist sont maintenant en ligne ! Cr\u00e9ez des formulaires simples et efficaces directement dans un document Grist et partagez-les en un clic. \u00c9tant donn\u00e9 que les champs de formulaire proviennent directement des colonnes Grist, toutes vos donn\u00e9es sont achemin\u00e9es directement dans la structure correcte, organis\u00e9es et pr\u00eates pour l\u2019analyse. Concevez des formulaires visuellement dans Grist Pr\u00e9visualisez, publiez et partagez en un seul clic Analysez les donn\u00e9es en temps r\u00e9el Mais nous n\u2019en restons pas l\u00e0 \u2013 nous continuons \u00e0 ajouter des fonctionnalit\u00e9s aux formulaires Grist. Nous voulons que le meilleur outil de donn\u00e9es ait le moyen le plus simple de collecter des donn\u00e9es. Nous collectons \u00e9galement des retours \u2013 soit en nous envoyant un e-mail \u00e0 support@getgrist.com, soit en nous laissant un message sur notre serveur Discord officiel . Visitez notre page des formulaires Grist pour plus d\u2019informations, et plongez dans notre Centre d\u2019aide pour une documentation compl\u00e8te. Pour un aper\u00e7u pratique des formulaires, inscrivez-vous au webinaire de ce mois pour tout apprendre \u00e0 leur sujet !","title":"Formulaires Grist"},{"location":"newsletters/2024-01/#console-api","text":"Grist dispose d\u00e9j\u00e0 d\u2019une documentation API de r\u00e9f\u00e9rence \u00e9tendue, mais nous sommes ravis de lancer une nouvelle page de console API pour permettre aux d\u00e9veloppeurs de tester les appels API dans une interface web pratique. Remarque : Cette page utilise votre session actuelle.","title":"Console API"},{"location":"newsletters/2024-01/#points-forts-de-la-communaute","text":"D\u00e9composez-vous/reconstruisez-vous souvent des URL ? Andreas Kloeckner ( @inducer sur GitHub) a partag\u00e9 un petit widget personnalis\u00e9 pour permettre une visualisation correcte (cliquable) des URL calcul\u00e9es. Juste apr\u00e8s gorist , @hooksie1 a partag\u00e9 une version alpha de vrist , un client Grist en V ! Qu\u2019est-ce qui vient ensuite, TypeGrist ? Grust ? Grist peut-il faire du kanban ? Les fans de Grist se rassemblent et planifient, et Grist peut faire du kanban ! Les utilisateurs de notre serveur Discord ont commenc\u00e9 \u00e0 r\u00e9fl\u00e9chir, ce qui a conduit \u00e0 plusieurs prototypes d\u2019une solution kanban Grist : un qui n\u2019utilise aucun widget personnalis\u00e9 (!) par wunter8 et un widget personnalis\u00e9 complet et glissable par @jperon Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-01/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-01/#webinaire-formulaires","text":"F\u00e9vrier est le mois pour c\u00e9l\u00e9brer notre amour \ud83d\udc96\u2026 des formulaires ! Nous apprendrons \u00e0 cr\u00e9er une belle vue de formulaire pour collecter des donn\u00e9es qui rempliront une table de donn\u00e9es Grist lors de la soumission. Jeudi 22 f\u00e9vrier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER","title":"Webinaire : Formulaires"},{"location":"newsletters/2024-01/#magie-du-widget-markdown","text":"En janvier, nous avons plong\u00e9 dans notre exemple de propositions et contrats et appris \u00e0 utiliser le widget Markdown pour cr\u00e9er des fichiers PDF imprimables avec les donn\u00e9es de votre document Grist. REGARDER L\u2019ENREGISTREMENT DE JANVIER","title":"Magie du widget Markdown \ud83e\uddd9\u200d\u2642\ufe0f"},{"location":"newsletters/2024-01/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-01/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit Sprouts avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-02/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de F\u00e9vrier 2024 # /* r\u00e9tablir certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill F\u00e9vrier 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Grist recrute ! # Venez travailler avec nous et aidez \u00e0 am\u00e9liorer Grist. Note : les deux candidatures impliquent des \u00e9nigmes. \ud83e\udee1 R\u00e9dacteur de contenu Ing\u00e9nieur syst\u00e8mes Quoi de neuf # Ce mois-ci, nous avons constat\u00e9 une \u00e9norme augmentation de l\u2019activit\u00e9 communautaire, ce qui est incroyablement excitant. Nous ne pouvons pas assez dire \u00e0 quel point il est motivant de voir des utilisateurs sur Discord ou le Forum Communautaire cr\u00e9er des choses cool et utiles dans Grist. Mais nous ne pouvons pas vous laisser tout le plaisir - nous avons \u00e9t\u00e9 tr\u00e8s occup\u00e9s en coulisses. Voici quelques \u00e9l\u00e9ments qui ont \u00e9t\u00e9 livr\u00e9s le mois dernier, mais gardez les yeux ouverts pour plus dans un avenir proche. \ud83d\udc40 Am\u00e9liorations diverses # \ud83d\uddd3\ufe0f Les \u00e9v\u00e9nements du calendrier s\u2019ouvrent d\u00e9sormais dans les vues fiches en double-cliquant \ud83d\uddbc\ufe0f Le widget de visualisation d\u2019images personnalis\u00e9 peut d\u00e9sormais afficher un carrousel si plusieurs URL sont d\u00e9tect\u00e9es \ud83e\udee8 Le widget Markdown enregistre par d\u00e9faut lorsque vous perdez le focus \ud83e\udd16 L\u2019 Assistant de Formule AI de Grist peut d\u00e9sormais g\u00e9rer des documents plus volumineux \u270b Les widgets personnalis\u00e9s affichent d\u00e9sormais un avertissement plus agr\u00e9able lorsque les colonnes requises ne sont pas mapp\u00e9es Points forts de la communaut\u00e9 # Pr\u00e9sentation \u00e9clair \u00e0 FOSDEM \u26a1\ufe0f # Le contributeur de Grist et membre de l\u2019ANCT Florent a donn\u00e9 une excellente pr\u00e9sentation \u00e9clair \u00e0 la conf\u00e9rence FOSDEM de cette ann\u00e9e. Widget de visualisation d\u2019arbre \ud83c\udf32 # L\u2019inimitable jperon (qui fera une autre apparition) a partag\u00e9 un widget tr\u00e8s astucieux pour visualiser des donn\u00e9es hi\u00e9rarchiques (comme un organigramme, par exemple). Il a m\u00eame un lien de curseur bidirectionnel ! D\u00e9couvrez-le ! Impression de rapports DOCX \ud83d\udcc4 # En utilisant docxtemplater , TomNit a partag\u00e9 un widget mis \u00e0 jour qui permet \u00e0 Grist de traiter des fichiers .docx mod\u00e9lis\u00e9s, vous permettant essentiellement de g\u00e9n\u00e9rer des documents \u00e0 partir des donn\u00e9es de Grist. \ud83e\udd2f D\u00e9couvrez le code source complet sur GitHub . Widget de signature \u270d\ufe0f # Merci encore \u00e0 jperon (et bien s\u00fbr aux autres d\u00e9veloppeurs JS open-source qui rendent ces exp\u00e9riences possibles), nous avons vu une preuve de concept d\u2019un widget de collecte de signatures qui est trop amusant. Listes d\u00e9roulantes de r\u00e9f\u00e9rence dynamiques dans Grist \ud83d\udd0e # Rogerio_Penna a r\u00e9dig\u00e9 un guide d\u00e9taill\u00e9 sur le Forum Communautaire d\u00e9crivant sa solution pour avoir des listes d\u00e9roulantes filtr\u00e9es/dynamiques. Avez-vous d\u00e9j\u00e0 voulu que les options d\u2019une colonne de r\u00e9f\u00e9rence soient filtr\u00e9es par une autre colonne de r\u00e9f\u00e9rence ? Ce n\u2019est pas un cas d\u2019utilisation rare, et Rogerio a trouv\u00e9 un moyen de le faire avec le widget personnalis\u00e9 de bouton d\u2019action (sur lequel la communaut\u00e9 a \u00e9galement travaill\u00e9 ). Navigation simple par menu avec hyperliens \ud83d\ude80 # Peter_P_Breithaupt, partiellement inspir\u00e9 par la puissante fonction SELF_HYPERLINK() de Grist , a cr\u00e9\u00e9 une exploration approfondie des avantages de l\u2019utilisation des hyperliens de navigation sur de grandes tables plates. Plus important encore, comment vous pouvez garder le m\u00eame enregistrement actif lors du passage d\u2019une page \u00e0 l\u2019autre ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Contr\u00f4ler le chaos des feuilles de calcul # En mars, nous verrons comment Grist peut contenir la prolif\u00e9ration des feuilles de calcul. Comme lors de notre pr\u00e9c\u00e9dent webinaire Grist/Excel , nous verrons comment Grist est con\u00e7u pour \u00e9viter bon nombre des probl\u00e8mes tr\u00e8s familiers associ\u00e9s aux flux de travail des feuilles de calcul, tels que la fusion et la normalisation. Jeudi 21 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Formulaires ! # En f\u00e9vrier, nous avons c\u00e9l\u00e9br\u00e9 notre amour des formulaires ! Nous avons appris \u00e0 cr\u00e9er un beau formulaire et \u00e0 collecter des donn\u00e9es qui rempliront une table de donn\u00e9es Grist lors de la soumission. REGARDER L\u2019ENREGISTREMENT DE F\u00c9VRIER Aidez \u00e0 faire conna\u00eetre Grist # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/02"},{"location":"newsletters/2024-02/#bulletin-de-fevrier-2024","text":"/* r\u00e9tablir certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill F\u00e9vrier 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de F\u00e9vrier 2024"},{"location":"newsletters/2024-02/#grist-recrute","text":"Venez travailler avec nous et aidez \u00e0 am\u00e9liorer Grist. Note : les deux candidatures impliquent des \u00e9nigmes. \ud83e\udee1 R\u00e9dacteur de contenu Ing\u00e9nieur syst\u00e8mes","title":"Grist recrute !"},{"location":"newsletters/2024-02/#quoi-de-neuf","text":"Ce mois-ci, nous avons constat\u00e9 une \u00e9norme augmentation de l\u2019activit\u00e9 communautaire, ce qui est incroyablement excitant. Nous ne pouvons pas assez dire \u00e0 quel point il est motivant de voir des utilisateurs sur Discord ou le Forum Communautaire cr\u00e9er des choses cool et utiles dans Grist. Mais nous ne pouvons pas vous laisser tout le plaisir - nous avons \u00e9t\u00e9 tr\u00e8s occup\u00e9s en coulisses. Voici quelques \u00e9l\u00e9ments qui ont \u00e9t\u00e9 livr\u00e9s le mois dernier, mais gardez les yeux ouverts pour plus dans un avenir proche. \ud83d\udc40","title":"Quoi de neuf"},{"location":"newsletters/2024-02/#ameliorations-diverses","text":"\ud83d\uddd3\ufe0f Les \u00e9v\u00e9nements du calendrier s\u2019ouvrent d\u00e9sormais dans les vues fiches en double-cliquant \ud83d\uddbc\ufe0f Le widget de visualisation d\u2019images personnalis\u00e9 peut d\u00e9sormais afficher un carrousel si plusieurs URL sont d\u00e9tect\u00e9es \ud83e\udee8 Le widget Markdown enregistre par d\u00e9faut lorsque vous perdez le focus \ud83e\udd16 L\u2019 Assistant de Formule AI de Grist peut d\u00e9sormais g\u00e9rer des documents plus volumineux \u270b Les widgets personnalis\u00e9s affichent d\u00e9sormais un avertissement plus agr\u00e9able lorsque les colonnes requises ne sont pas mapp\u00e9es","title":"Am\u00e9liorations diverses"},{"location":"newsletters/2024-02/#points-forts-de-la-communaute","text":"","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-02/#presentation-eclair-a-fosdem","text":"Le contributeur de Grist et membre de l\u2019ANCT Florent a donn\u00e9 une excellente pr\u00e9sentation \u00e9clair \u00e0 la conf\u00e9rence FOSDEM de cette ann\u00e9e.","title":"Pr\u00e9sentation \u00e9clair \u00e0 FOSDEM \u26a1\ufe0f"},{"location":"newsletters/2024-02/#widget-de-visualisation-darbre","text":"L\u2019inimitable jperon (qui fera une autre apparition) a partag\u00e9 un widget tr\u00e8s astucieux pour visualiser des donn\u00e9es hi\u00e9rarchiques (comme un organigramme, par exemple). Il a m\u00eame un lien de curseur bidirectionnel ! D\u00e9couvrez-le !","title":"Widget de visualisation d’arbre \ud83c\udf32"},{"location":"newsletters/2024-02/#impression-de-rapports-docx","text":"En utilisant docxtemplater , TomNit a partag\u00e9 un widget mis \u00e0 jour qui permet \u00e0 Grist de traiter des fichiers .docx mod\u00e9lis\u00e9s, vous permettant essentiellement de g\u00e9n\u00e9rer des documents \u00e0 partir des donn\u00e9es de Grist. \ud83e\udd2f D\u00e9couvrez le code source complet sur GitHub .","title":"Impression de rapports DOCX \ud83d\udcc4"},{"location":"newsletters/2024-02/#widget-de-signature","text":"Merci encore \u00e0 jperon (et bien s\u00fbr aux autres d\u00e9veloppeurs JS open-source qui rendent ces exp\u00e9riences possibles), nous avons vu une preuve de concept d\u2019un widget de collecte de signatures qui est trop amusant.","title":"Widget de signature \u270d\ufe0f"},{"location":"newsletters/2024-02/#listes-deroulantes-de-reference-dynamiques-dans-grist","text":"Rogerio_Penna a r\u00e9dig\u00e9 un guide d\u00e9taill\u00e9 sur le Forum Communautaire d\u00e9crivant sa solution pour avoir des listes d\u00e9roulantes filtr\u00e9es/dynamiques. Avez-vous d\u00e9j\u00e0 voulu que les options d\u2019une colonne de r\u00e9f\u00e9rence soient filtr\u00e9es par une autre colonne de r\u00e9f\u00e9rence ? Ce n\u2019est pas un cas d\u2019utilisation rare, et Rogerio a trouv\u00e9 un moyen de le faire avec le widget personnalis\u00e9 de bouton d\u2019action (sur lequel la communaut\u00e9 a \u00e9galement travaill\u00e9 ).","title":"Listes d\u00e9roulantes de r\u00e9f\u00e9rence dynamiques dans Grist \ud83d\udd0e"},{"location":"newsletters/2024-02/#navigation-simple-par-menu-avec-hyperliens","text":"Peter_P_Breithaupt, partiellement inspir\u00e9 par la puissante fonction SELF_HYPERLINK() de Grist , a cr\u00e9\u00e9 une exploration approfondie des avantages de l\u2019utilisation des hyperliens de navigation sur de grandes tables plates. Plus important encore, comment vous pouvez garder le m\u00eame enregistrement actif lors du passage d\u2019une page \u00e0 l\u2019autre ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Navigation simple par menu avec hyperliens \ud83d\ude80"},{"location":"newsletters/2024-02/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-02/#webinaire-controler-le-chaos-des-feuilles-de-calcul","text":"En mars, nous verrons comment Grist peut contenir la prolif\u00e9ration des feuilles de calcul. Comme lors de notre pr\u00e9c\u00e9dent webinaire Grist/Excel , nous verrons comment Grist est con\u00e7u pour \u00e9viter bon nombre des probl\u00e8mes tr\u00e8s familiers associ\u00e9s aux flux de travail des feuilles de calcul, tels que la fusion et la normalisation. Jeudi 21 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS","title":"Webinaire : Contr\u00f4ler le chaos des feuilles de calcul"},{"location":"newsletters/2024-02/#formulaires","text":"En f\u00e9vrier, nous avons c\u00e9l\u00e9br\u00e9 notre amour des formulaires ! Nous avons appris \u00e0 cr\u00e9er un beau formulaire et \u00e0 collecter des donn\u00e9es qui rempliront une table de donn\u00e9es Grist lors de la soumission. REGARDER L\u2019ENREGISTREMENT DE F\u00c9VRIER","title":"Formulaires !"},{"location":"newsletters/2024-02/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-02/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-03/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mars 2024 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mars 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Am\u00e9liorations des formulaires Grist # Sections Vous pouvez maintenant ajouter des sections aux formulaires Grist. Pour ajouter une section \u00e0 votre formulaire, cliquez sur le bouton Ajouter Nouveau en bas de chaque section, puis cliquez sur \u00ab Ins\u00e9rer une section au-dessus \u00bb ou \u00ab Ins\u00e9rer une section en dessous \u00bb. Choix et s\u00e9lection de r\u00e9f\u00e9rence Lors de la saisie d\u2019un formulaire, vous pouvez maintenant rechercher des valeurs dans les champs de choix et de s\u00e9lection de r\u00e9f\u00e9rence longs, ce qui facilite la recherche de l\u2019option exacte que vous recherchez. Code d\u2019int\u00e9gration rapide Si vous souhaitez int\u00e9grer un formulaire sur votre site web, cliquez sur l\u2019ic\u00f4ne de partage puis \u00ab Int\u00e9grer ce formulaire \u00bb pour r\u00e9v\u00e9ler un code d\u2019int\u00e9gration. R\u00e9initialiser le formulaire Un nouveau bouton \u00ab R\u00e9initialiser \u00bb est maintenant disponible sur les formulaires publi\u00e9s afin que les preneurs de formulaire puissent r\u00e9initialiser un formulaire \u00e0 son \u00e9tat initial. Importations et exportations - deux nouveaux formats de fichiers ! # Valeurs S\u00e9par\u00e9es par DOO (DSV) Votre tableur peut-il faire DOO ? Le format Valeurs S\u00e9par\u00e9es par DOO (DSV) est une am\u00e9lioration importante des Valeurs S\u00e9par\u00e9es par des Virgules (CSV), et est maintenant pris en charge pour l\u2019importation et l\u2019exportation par Grist. DSV utilise un caract\u00e8re sp\u00e9cial du plan astral Unicode comme s\u00e9parateur, pour mieux prot\u00e9ger l\u2019int\u00e9grit\u00e9 de vos donn\u00e9es. Apprenez comment. Cr\u00e9dits : DSV a \u00e9t\u00e9 initialement propos\u00e9 par Jamie Matthews . Nous avons suivi sa sp\u00e9cification \u00e0 la lettre, mais avons chang\u00e9 l\u2019extension de fichier pour \u00e9viter un conflit avec les Valeurs S\u00e9par\u00e9es par des Tubes (PSV). La valeur de ce caract\u00e8re sp\u00e9cifique du plan astral Unicode pour tester les logiciels a \u00e9t\u00e9 propos\u00e9e pour la premi\u00e8re fois par Mathias Bynens . Valeurs S\u00e9par\u00e9es par des Tabulations (TSV) Vous pouvez maintenant exporter et importer des donn\u00e9es au format Valeurs S\u00e9par\u00e9es par des Tabulations (TSV) depuis le menu Partager. Page de d\u00e9marrage Grist # Une version pr\u00e9coce d\u2019une page de diagnostic pour Grist auto-h\u00e9berg\u00e9 est maintenant disponible. Apprenez comment l\u2019activer. Migration depuis Spreadsheet.com # Nous avons cr\u00e9\u00e9 un outil pour vous aider \u00e0 migrer vos donn\u00e9es Spreadsheet.com vers Grist, y compris les pi\u00e8ces jointes et les relations, sans avoir besoin de t\u00e9l\u00e9charger et de t\u00e9l\u00e9verser manuellement vos fichiers. D\u00e9couvrez-le ici ! Points forts de la communaut\u00e9 # @tomnitschke a cr\u00e9\u00e9 de nouveaux widgets personnalis\u00e9s, y compris Un widget d\u2019action automatique qui vous permet d\u2019ex\u00e9cuter automatiquement des actions utilisateur au chargement de la page Un widget pour visualiser des fichiers PDF et ODT/ODF directement dans le navigateur Un widget pour cr\u00e9er des fichiers DOCX ou PDF \u00e0 partir de HTML ou Markdown Vous pouvez les trouver tous sur Github. @jonathanperret a cr\u00e9\u00e9 un widget personnalis\u00e9 qui int\u00e8gre paysage - un terrain de jeu de codage collaboratif et visuel - dans un document Grist. Euh, c\u2019est incroyable ? Regardez la vid\u00e9o compl\u00e8te ici . Apprendre Grist # Webinaire : Meilleures pratiques de l\u2019assistant de formule AI # L\u2019assistant de formule AI de Grist simplifie la partie la plus difficile des tableurs \u2014 les formules. Lors du webinaire d\u2019avril, nous partagerons des conseils sur la fa\u00e7on de tirer le meilleur parti de l\u2019assistant. Jeudi 25 avril \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019AVRIL Contr\u00f4ler le chaos des tableurs # En mars, nous avons vu comment Grist peut contenir la prolif\u00e9ration des tableurs. Similaire \u00e0 notre pr\u00e9c\u00e9dent webinaire Grist/Excel , nous examinons comment Grist est con\u00e7u pour \u00e9viter bon nombre des probl\u00e8mes tr\u00e8s familiers associ\u00e9s aux flux de travail des tableurs, tels que la fusion et la normalisation. REGARDER L\u2019ENREGISTREMENT DE MARS Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Consultez notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/03"},{"location":"newsletters/2024-03/#bulletin-de-mars-2024","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mars 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mars 2024"},{"location":"newsletters/2024-03/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-03/#ameliorations-des-formulaires-grist","text":"Sections Vous pouvez maintenant ajouter des sections aux formulaires Grist. Pour ajouter une section \u00e0 votre formulaire, cliquez sur le bouton Ajouter Nouveau en bas de chaque section, puis cliquez sur \u00ab Ins\u00e9rer une section au-dessus \u00bb ou \u00ab Ins\u00e9rer une section en dessous \u00bb. Choix et s\u00e9lection de r\u00e9f\u00e9rence Lors de la saisie d\u2019un formulaire, vous pouvez maintenant rechercher des valeurs dans les champs de choix et de s\u00e9lection de r\u00e9f\u00e9rence longs, ce qui facilite la recherche de l\u2019option exacte que vous recherchez. Code d\u2019int\u00e9gration rapide Si vous souhaitez int\u00e9grer un formulaire sur votre site web, cliquez sur l\u2019ic\u00f4ne de partage puis \u00ab Int\u00e9grer ce formulaire \u00bb pour r\u00e9v\u00e9ler un code d\u2019int\u00e9gration. R\u00e9initialiser le formulaire Un nouveau bouton \u00ab R\u00e9initialiser \u00bb est maintenant disponible sur les formulaires publi\u00e9s afin que les preneurs de formulaire puissent r\u00e9initialiser un formulaire \u00e0 son \u00e9tat initial.","title":"Am\u00e9liorations des formulaires Grist"},{"location":"newsletters/2024-03/#importations-et-exportations-deux-nouveaux-formats-de-fichiers","text":"Valeurs S\u00e9par\u00e9es par DOO (DSV) Votre tableur peut-il faire DOO ? Le format Valeurs S\u00e9par\u00e9es par DOO (DSV) est une am\u00e9lioration importante des Valeurs S\u00e9par\u00e9es par des Virgules (CSV), et est maintenant pris en charge pour l\u2019importation et l\u2019exportation par Grist. DSV utilise un caract\u00e8re sp\u00e9cial du plan astral Unicode comme s\u00e9parateur, pour mieux prot\u00e9ger l\u2019int\u00e9grit\u00e9 de vos donn\u00e9es. Apprenez comment. Cr\u00e9dits : DSV a \u00e9t\u00e9 initialement propos\u00e9 par Jamie Matthews . Nous avons suivi sa sp\u00e9cification \u00e0 la lettre, mais avons chang\u00e9 l\u2019extension de fichier pour \u00e9viter un conflit avec les Valeurs S\u00e9par\u00e9es par des Tubes (PSV). La valeur de ce caract\u00e8re sp\u00e9cifique du plan astral Unicode pour tester les logiciels a \u00e9t\u00e9 propos\u00e9e pour la premi\u00e8re fois par Mathias Bynens . Valeurs S\u00e9par\u00e9es par des Tabulations (TSV) Vous pouvez maintenant exporter et importer des donn\u00e9es au format Valeurs S\u00e9par\u00e9es par des Tabulations (TSV) depuis le menu Partager.","title":"Importations et exportations - deux nouveaux formats de fichiers !"},{"location":"newsletters/2024-03/#page-de-demarrage-grist","text":"Une version pr\u00e9coce d\u2019une page de diagnostic pour Grist auto-h\u00e9berg\u00e9 est maintenant disponible. Apprenez comment l\u2019activer.","title":"Page de d\u00e9marrage Grist"},{"location":"newsletters/2024-03/#migration-depuis-spreadsheetcom","text":"Nous avons cr\u00e9\u00e9 un outil pour vous aider \u00e0 migrer vos donn\u00e9es Spreadsheet.com vers Grist, y compris les pi\u00e8ces jointes et les relations, sans avoir besoin de t\u00e9l\u00e9charger et de t\u00e9l\u00e9verser manuellement vos fichiers. D\u00e9couvrez-le ici !","title":"Migration depuis Spreadsheet.com"},{"location":"newsletters/2024-03/#points-forts-de-la-communaute","text":"@tomnitschke a cr\u00e9\u00e9 de nouveaux widgets personnalis\u00e9s, y compris Un widget d\u2019action automatique qui vous permet d\u2019ex\u00e9cuter automatiquement des actions utilisateur au chargement de la page Un widget pour visualiser des fichiers PDF et ODT/ODF directement dans le navigateur Un widget pour cr\u00e9er des fichiers DOCX ou PDF \u00e0 partir de HTML ou Markdown Vous pouvez les trouver tous sur Github. @jonathanperret a cr\u00e9\u00e9 un widget personnalis\u00e9 qui int\u00e8gre paysage - un terrain de jeu de codage collaboratif et visuel - dans un document Grist. Euh, c\u2019est incroyable ? Regardez la vid\u00e9o compl\u00e8te ici .","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-03/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-03/#webinaire-meilleures-pratiques-de-lassistant-de-formule-ai","text":"L\u2019assistant de formule AI de Grist simplifie la partie la plus difficile des tableurs \u2014 les formules. Lors du webinaire d\u2019avril, nous partagerons des conseils sur la fa\u00e7on de tirer le meilleur parti de l\u2019assistant. Jeudi 25 avril \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019AVRIL","title":"Webinaire : Meilleures pratiques de l’assistant de formule AI"},{"location":"newsletters/2024-03/#controler-le-chaos-des-tableurs","text":"En mars, nous avons vu comment Grist peut contenir la prolif\u00e9ration des tableurs. Similaire \u00e0 notre pr\u00e9c\u00e9dent webinaire Grist/Excel , nous examinons comment Grist est con\u00e7u pour \u00e9viter bon nombre des probl\u00e8mes tr\u00e8s familiers associ\u00e9s aux flux de travail des tableurs, tels que la fusion et la normalisation. REGARDER L\u2019ENREGISTREMENT DE MARS","title":"Contr\u00f4ler le chaos des tableurs"},{"location":"newsletters/2024-03/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-03/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Consultez notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-04/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Avril 2024 # /* restaurer quelques d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Promouvoir vos solutions construites dans Grist # Certains utilisateurs nous ont demand\u00e9 comment ils pouvaient vendre les solutions qu\u2019ils ont construites dans Grist. Souvent, ils sont experts dans un probl\u00e8me particulier, l\u2019ont r\u00e9solu dans Grist, et veulent aider les autres \u00e0 le r\u00e9soudre aussi. Avant de construire notre propre marketplace Grist, nous voulons exp\u00e9rimenter sur une marketplace existante pour les mod\u00e8les et services de solutions \u2014 Gumroad : https://gumroad.com/ Si vous \u00eates int\u00e9ress\u00e9 par la vente de solutions Grist, nous aimerions collaborer avec vous. Rejoignez notre Discord et partagez vos id\u00e9es dans le canal #sellers. EN SAVOIR PLUS SUR DISCORD Quoi de neuf # Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix # Lors de la saisie de donn\u00e9es dans une colonne de r\u00e9f\u00e9rence ou de choix, vous voyez une liste d\u00e9roulante de toutes les valeurs disponibles \u00e0 choisir. Parfois, la liste peut devenir longue ou confuse. Vous pouvez maintenant filtrer les listes d\u00e9roulantes des colonnes de r\u00e9f\u00e9rence et de choix en d\u00e9finissant une condition. Apprenez comment. Raccourci pour utiliser comme en-t\u00eates de table # Souvent, lors de l\u2019importation de donn\u00e9es d\u2019Excel vers Grist, la premi\u00e8re ligne contient ce qui devrait \u00eatre les en-t\u00eates de colonne. D\u00e9finir manuellement les en-t\u00eates de colonne corrects peut \u00eatre chronophage, mais plus maintenant ! Merci \u00e0 Camille Legeron ( @CamilleLegeron ) de l\u2019\u00e9quipe ANCT qui a ajout\u00e9 un raccourci astucieux pour copier les valeurs d\u2019une ligne vers les \u00e9tiquettes de leurs colonnes respectives. \ud83e\udd29 Cr\u00e9er de nouveaux espaces d\u2019\u00e9quipe dans Grist auto-h\u00e9berg\u00e9 # Merci encore \u00e0 Camille Legeron qui a rendu possible la cr\u00e9ation d\u2019espaces d\u2019\u00e9quipe suppl\u00e9mentaires dans Grist auto-h\u00e9berg\u00e9. Pour cr\u00e9er un nouvel espace, s\u00e9lectionnez \u00ab Cr\u00e9er un nouvel espace d\u2019\u00e9quipe \u00bb dans le menu utilisateur ou site, sp\u00e9cifiez le nom et le domaine du nouvel espace, et cliquez sur \u00ab Cr\u00e9er l\u2019espace \u00bb. Console d\u2019administration pour les auto-h\u00e9bergeurs # La console d\u2019administration pour les auto-h\u00e9bergeurs inclut d\u00e9sormais des informations sur les param\u00e8tres de sandbox et une case \u00e0 cocher pour v\u00e9rifier automatiquement les mises \u00e0 jour des versions de Grist. \ud83c\udf89 Am\u00e9liorations du r\u00e9seau # Le contributeur Jonathan Perret ( @jonathanperret ) a mis en \u0153uvre un m\u00e9canisme de secours pour les r\u00e9seaux o\u00f9 le trafic WebSocket n\u2019est pas autoris\u00e9. Si vous ou un coll\u00e8gue avez eu des difficult\u00e9s \u00e0 utiliser Grist derri\u00e8re un r\u00e9seau d\u2019entreprise dans le pass\u00e9, essayez \u00e0 nouveau ! Points forts de la communaut\u00e9 # @v1adimirn0va a construit un widget personnalis\u00e9 qui affiche les donn\u00e9es sur une chronologie. Si vous \u00eates sur notre serveur Discord, consultez-le ici ! Si vous n\u2019\u00eates pas sur notre Discord, rejoignez notre serveur ! Andreas Kl\u00f6ckner ( @inducer sur Github) a construit un outil pour collecter les r\u00e9ponses de formulaire et les enregistrer dans des enregistrements existants dans un document Grist. Consultez-le ici ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre canal Discord #grist-showcase ! Apprendre Grist # Webinaire : Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix # Le filtrage de la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence ou de choix est tr\u00e8s utile dans une vari\u00e9t\u00e9 de cas. En mai, nous vous montrerons comment \u00e9crire des formules de condition de liste d\u00e9roulante pour les sc\u00e9narios les plus courants. Jeudi 16 mai \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI Meilleures pratiques de l\u2019assistant de formule AI # En avril, nous avons couvert l\u2019assistant de formule AI de Grist qui simplifie la partie la plus difficile des feuilles de calcul \u2014 les formules. Dans ce webinaire, nous partageons des conseils sur la fa\u00e7on de tirer le meilleur parti de l\u2019assistant. C\u2019\u00e9tait aussi la premi\u00e8re fois que Michael animait un webinaire ! Michael a rejoint l\u2019\u00e9quipe Grist en tant qu\u2019ing\u00e9nieur solutions en mars. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL Migrer depuis Spreadsheet.com # Au cas o\u00f9 vous l\u2019auriez manqu\u00e9, en mars nous avons construit un outil pour vous aider \u00e0 migrer vos donn\u00e9es Spreadsheet.com vers Grist, y compris les pi\u00e8ces jointes et les relations, sans avoir besoin de t\u00e9l\u00e9charger et de t\u00e9l\u00e9charger manuellement vos fichiers. Consultez-le ici ! Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit Sprouts avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/04"},{"location":"newsletters/2024-04/#bulletin-davril-2024","text":"/* restaurer quelques d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist.","title":"Bulletin d’Avril 2024"},{"location":"newsletters/2024-04/#promouvoir-vos-solutions-construites-dans-grist","text":"Certains utilisateurs nous ont demand\u00e9 comment ils pouvaient vendre les solutions qu\u2019ils ont construites dans Grist. Souvent, ils sont experts dans un probl\u00e8me particulier, l\u2019ont r\u00e9solu dans Grist, et veulent aider les autres \u00e0 le r\u00e9soudre aussi. Avant de construire notre propre marketplace Grist, nous voulons exp\u00e9rimenter sur une marketplace existante pour les mod\u00e8les et services de solutions \u2014 Gumroad : https://gumroad.com/ Si vous \u00eates int\u00e9ress\u00e9 par la vente de solutions Grist, nous aimerions collaborer avec vous. Rejoignez notre Discord et partagez vos id\u00e9es dans le canal #sellers. EN SAVOIR PLUS SUR DISCORD","title":"Promouvoir vos solutions construites dans Grist"},{"location":"newsletters/2024-04/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-04/#filtrage-des-listes-deroulantes-de-reference-et-de-choix","text":"Lors de la saisie de donn\u00e9es dans une colonne de r\u00e9f\u00e9rence ou de choix, vous voyez une liste d\u00e9roulante de toutes les valeurs disponibles \u00e0 choisir. Parfois, la liste peut devenir longue ou confuse. Vous pouvez maintenant filtrer les listes d\u00e9roulantes des colonnes de r\u00e9f\u00e9rence et de choix en d\u00e9finissant une condition. Apprenez comment.","title":"Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix"},{"location":"newsletters/2024-04/#raccourci-pour-utiliser-comme-en-tetes-de-table","text":"Souvent, lors de l\u2019importation de donn\u00e9es d\u2019Excel vers Grist, la premi\u00e8re ligne contient ce qui devrait \u00eatre les en-t\u00eates de colonne. D\u00e9finir manuellement les en-t\u00eates de colonne corrects peut \u00eatre chronophage, mais plus maintenant ! Merci \u00e0 Camille Legeron ( @CamilleLegeron ) de l\u2019\u00e9quipe ANCT qui a ajout\u00e9 un raccourci astucieux pour copier les valeurs d\u2019une ligne vers les \u00e9tiquettes de leurs colonnes respectives. \ud83e\udd29","title":"Raccourci pour utiliser comme en-t\u00eates de table"},{"location":"newsletters/2024-04/#creer-de-nouveaux-espaces-dequipe-dans-grist-auto-heberge","text":"Merci encore \u00e0 Camille Legeron qui a rendu possible la cr\u00e9ation d\u2019espaces d\u2019\u00e9quipe suppl\u00e9mentaires dans Grist auto-h\u00e9berg\u00e9. Pour cr\u00e9er un nouvel espace, s\u00e9lectionnez \u00ab Cr\u00e9er un nouvel espace d\u2019\u00e9quipe \u00bb dans le menu utilisateur ou site, sp\u00e9cifiez le nom et le domaine du nouvel espace, et cliquez sur \u00ab Cr\u00e9er l\u2019espace \u00bb.","title":"Cr\u00e9er de nouveaux espaces d’\u00e9quipe dans Grist auto-h\u00e9berg\u00e9"},{"location":"newsletters/2024-04/#console-dadministration-pour-les-auto-hebergeurs","text":"La console d\u2019administration pour les auto-h\u00e9bergeurs inclut d\u00e9sormais des informations sur les param\u00e8tres de sandbox et une case \u00e0 cocher pour v\u00e9rifier automatiquement les mises \u00e0 jour des versions de Grist. \ud83c\udf89","title":"Console d’administration pour les auto-h\u00e9bergeurs"},{"location":"newsletters/2024-04/#ameliorations-du-reseau","text":"Le contributeur Jonathan Perret ( @jonathanperret ) a mis en \u0153uvre un m\u00e9canisme de secours pour les r\u00e9seaux o\u00f9 le trafic WebSocket n\u2019est pas autoris\u00e9. Si vous ou un coll\u00e8gue avez eu des difficult\u00e9s \u00e0 utiliser Grist derri\u00e8re un r\u00e9seau d\u2019entreprise dans le pass\u00e9, essayez \u00e0 nouveau !","title":"Am\u00e9liorations du r\u00e9seau"},{"location":"newsletters/2024-04/#points-forts-de-la-communaute","text":"@v1adimirn0va a construit un widget personnalis\u00e9 qui affiche les donn\u00e9es sur une chronologie. Si vous \u00eates sur notre serveur Discord, consultez-le ici ! Si vous n\u2019\u00eates pas sur notre Discord, rejoignez notre serveur ! Andreas Kl\u00f6ckner ( @inducer sur Github) a construit un outil pour collecter les r\u00e9ponses de formulaire et les enregistrer dans des enregistrements existants dans un document Grist. Consultez-le ici ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre canal Discord #grist-showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-04/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-04/#webinaire-filtrage-des-listes-deroulantes-de-reference-et-de-choix","text":"Le filtrage de la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence ou de choix est tr\u00e8s utile dans une vari\u00e9t\u00e9 de cas. En mai, nous vous montrerons comment \u00e9crire des formules de condition de liste d\u00e9roulante pour les sc\u00e9narios les plus courants. Jeudi 16 mai \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI","title":"Webinaire : Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix"},{"location":"newsletters/2024-04/#meilleures-pratiques-de-lassistant-de-formule-ai","text":"En avril, nous avons couvert l\u2019assistant de formule AI de Grist qui simplifie la partie la plus difficile des feuilles de calcul \u2014 les formules. Dans ce webinaire, nous partageons des conseils sur la fa\u00e7on de tirer le meilleur parti de l\u2019assistant. C\u2019\u00e9tait aussi la premi\u00e8re fois que Michael animait un webinaire ! Michael a rejoint l\u2019\u00e9quipe Grist en tant qu\u2019ing\u00e9nieur solutions en mars. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL","title":"Meilleures pratiques de l’assistant de formule AI"},{"location":"newsletters/2024-04/#migrer-depuis-spreadsheetcom","text":"Au cas o\u00f9 vous l\u2019auriez manqu\u00e9, en mars nous avons construit un outil pour vous aider \u00e0 migrer vos donn\u00e9es Spreadsheet.com vers Grist, y compris les pi\u00e8ces jointes et les relations, sans avoir besoin de t\u00e9l\u00e9charger et de t\u00e9l\u00e9charger manuellement vos fichiers. Consultez-le ici !","title":"Migrer depuis Spreadsheet.com"},{"location":"newsletters/2024-04/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-04/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit Sprouts avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2024 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Nouveau plan Grist Business # Nous avons travaill\u00e9 dur pour nous assurer que Grist convient aux \u00e9quipes plus importantes avec des donn\u00e9es complexes et sensibles. Pour r\u00e9pondre \u00e0 ce segment, nous avons mis \u00e0 jour notre page de tarification pour inclure un nouveau plan Business \u2014 avec une saveur autog\u00e9r\u00e9e ! Nous esp\u00e9rons que ce nouveau plan augmentera la transparence des prix autour des d\u00e9ploiements de Grist qui pourraient utiliser davantage notre support, plut\u00f4t que d\u2019exiger des organisations qu\u2019elles nous contactent directement pour obtenir des informations sur les prix. Il y a aussi une nouvelle option pour s\u2019abonner annuellement. Les nouveaux abonnements Pro sont d\u00e9sormais \u00e0 10 $ sur le plan mensuel, mais toujours \u00e0 8 $ si vous payez annuellement. Les abonnements Pro existants ne sont pas affect\u00e9s par ce changement. Nous avons \u00e9galement mis \u00e0 jour notre page des services professionnels pour inclure de nouvelles opportunit\u00e9s concernant l\u2019obtention d\u2019une aide experte pour la cr\u00e9ation de documents Grist. Minuteur de formule # Assez, c\u2019est assez \u2013 il est temps de mettre vos formules \u00e0 l\u2019\u00e9preuve. \ud83c\udfc3\u200d\u2640\ufe0f\u23f1\ufe0f Il est courant de voir une feuille de calcul s\u2019effondrer sous son propre poids, comme une \u00e9toile mourante compos\u00e9e de conditionnels. M\u00eame les puissants documents Grist peuvent ralentir lorsque la puissance de Python n\u2019est pas contr\u00f4l\u00e9e. Mais maintenant, il existe un moyen de diagnostiquer vos formules avant que les choses ne deviennent supernova. Pr\u00e9sentation du minuteur de formule , qui vous permet de chronom\u00e9trer les formules pour des changements sp\u00e9cifiques ou pour un rechargement complet du document. Pour plus d\u2019informations, lisez tout sur l\u2019\u00e9conomie de millisecondes avec le minuteur de formule \u2014 \u00e9crit par l\u2019un des nouveaux membres de l\u2019\u00e9quipe Grist Labs, Jordan ! \ud83d\udc4b R\u00e9organisation des styles conditionnels (avec bonus de glissabilit\u00e9) # Vous pouvez d\u00e9sormais r\u00e9organiser facilement les styles conditionnels, \u00e0 la fois sur les lignes et les colonnes ! Ne demandez pas comment cela \u00e9tait accompli auparavant ! Am\u00e9liorations de la console d\u2019administration en auto-h\u00e9bergement # Notre nouvelle console d\u2019administration continue de cro\u00eetre et de se d\u00e9velopper alors que nous travaillons vers nos ambitions de faciliter l\u2019auto-h\u00e9bergement. \ud83d\udd1c La m\u00e9thode d\u2019authentification de l\u2019application est d\u00e9sormais incluse dans la section \u201cParam\u00e8tres de s\u00e9curit\u00e9\u201d. Si elle n\u2019est pas configur\u00e9e, vous serez averti. \u270b\ud83e\udd28 Les v\u00e9rifications du panneau de d\u00e9marrage sont d\u00e9sormais visibles (et \u00e9tendues/am\u00e9lior\u00e9es en fonction de vos retours !). Nous continuons \u00e0 it\u00e9rer sur ce point, alors faites-nous savoir sur Discord si vous avez d\u2019autres retours. Pour rendre le panneau plus robuste, il respecte d\u00e9sormais l\u2019acc\u00e8s d\u2019urgence via un param\u00e8tre GRIST_BOOT_KEY si l\u2019authentification est cass\u00e9e, et devrait m\u00eame \u00eatre utilisable si l\u2019application a des erreurs de configuration courantes. Cela signifie que vous pouvez compter sur le panneau d\u2019administration pour ne pas devenir inaccessible juste au moment o\u00f9 vous en avez le plus besoin ! Points forts de la communaut\u00e9 # marc.fargas a fourni \u00e0 notre communaut\u00e9 un guide d\u00e9taill\u00e9 de son pipeline Grist \u2192 rendu PDF. La solution n\u00e9cessite des services externes (qui peuvent ne pas \u00eatre enti\u00e8rement gratuits), mais c\u2019est un excellent exemple d\u2019extension de Grist. Riccardo_Polignieri a cr\u00e9\u00e9 un wrapper Python pour l\u2019API de Grist appel\u00e9 PyGrister ! Ajoutez plus de Python \u00e0 votre flux de travail ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre canal Discord #grist-showcase ! Apprendre Grist # Webinaire : Colonnes de r\u00e9f\u00e9rence # En juin, nous plongerons dans ce que sont les r\u00e9f\u00e9rences, comment les colonnes de r\u00e9f\u00e9rence fonctionnent dans Grist, et expliquerons comment les utiliser pour cr\u00e9er des tableaux de bord productifs en utilisant le mod\u00e8le de conf\u00e9renciers d\u2019\u00e9v\u00e9nements . Jeudi 20 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUIN Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix # En mai, Anais est revenue pour examiner comment le filtrage de la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence ou de choix est tr\u00e8s utile dans une vari\u00e9t\u00e9 de cas. D\u00e9couvrez comment tirer parti de l\u2019une des fonctionnalit\u00e9s les plus r\u00e9centes et les plus puissantes de Grist. REGARDER L\u2019ENREGISTREMENT DE MAI Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/05"},{"location":"newsletters/2024-05/#bulletin-de-mai-2024","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mai 2024"},{"location":"newsletters/2024-05/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-05/#nouveau-plan-grist-business","text":"Nous avons travaill\u00e9 dur pour nous assurer que Grist convient aux \u00e9quipes plus importantes avec des donn\u00e9es complexes et sensibles. Pour r\u00e9pondre \u00e0 ce segment, nous avons mis \u00e0 jour notre page de tarification pour inclure un nouveau plan Business \u2014 avec une saveur autog\u00e9r\u00e9e ! Nous esp\u00e9rons que ce nouveau plan augmentera la transparence des prix autour des d\u00e9ploiements de Grist qui pourraient utiliser davantage notre support, plut\u00f4t que d\u2019exiger des organisations qu\u2019elles nous contactent directement pour obtenir des informations sur les prix. Il y a aussi une nouvelle option pour s\u2019abonner annuellement. Les nouveaux abonnements Pro sont d\u00e9sormais \u00e0 10 $ sur le plan mensuel, mais toujours \u00e0 8 $ si vous payez annuellement. Les abonnements Pro existants ne sont pas affect\u00e9s par ce changement. Nous avons \u00e9galement mis \u00e0 jour notre page des services professionnels pour inclure de nouvelles opportunit\u00e9s concernant l\u2019obtention d\u2019une aide experte pour la cr\u00e9ation de documents Grist.","title":"Nouveau plan Grist Business"},{"location":"newsletters/2024-05/#minuteur-de-formule","text":"Assez, c\u2019est assez \u2013 il est temps de mettre vos formules \u00e0 l\u2019\u00e9preuve. \ud83c\udfc3\u200d\u2640\ufe0f\u23f1\ufe0f Il est courant de voir une feuille de calcul s\u2019effondrer sous son propre poids, comme une \u00e9toile mourante compos\u00e9e de conditionnels. M\u00eame les puissants documents Grist peuvent ralentir lorsque la puissance de Python n\u2019est pas contr\u00f4l\u00e9e. Mais maintenant, il existe un moyen de diagnostiquer vos formules avant que les choses ne deviennent supernova. Pr\u00e9sentation du minuteur de formule , qui vous permet de chronom\u00e9trer les formules pour des changements sp\u00e9cifiques ou pour un rechargement complet du document. Pour plus d\u2019informations, lisez tout sur l\u2019\u00e9conomie de millisecondes avec le minuteur de formule \u2014 \u00e9crit par l\u2019un des nouveaux membres de l\u2019\u00e9quipe Grist Labs, Jordan ! \ud83d\udc4b","title":"Minuteur de formule"},{"location":"newsletters/2024-05/#reorganisation-des-styles-conditionnels-avec-bonus-de-glissabilite","text":"Vous pouvez d\u00e9sormais r\u00e9organiser facilement les styles conditionnels, \u00e0 la fois sur les lignes et les colonnes ! Ne demandez pas comment cela \u00e9tait accompli auparavant !","title":"R\u00e9organisation des styles conditionnels (avec bonus de glissabilit\u00e9)"},{"location":"newsletters/2024-05/#ameliorations-de-la-console-dadministration-en-auto-hebergement","text":"Notre nouvelle console d\u2019administration continue de cro\u00eetre et de se d\u00e9velopper alors que nous travaillons vers nos ambitions de faciliter l\u2019auto-h\u00e9bergement. \ud83d\udd1c La m\u00e9thode d\u2019authentification de l\u2019application est d\u00e9sormais incluse dans la section \u201cParam\u00e8tres de s\u00e9curit\u00e9\u201d. Si elle n\u2019est pas configur\u00e9e, vous serez averti. \u270b\ud83e\udd28 Les v\u00e9rifications du panneau de d\u00e9marrage sont d\u00e9sormais visibles (et \u00e9tendues/am\u00e9lior\u00e9es en fonction de vos retours !). Nous continuons \u00e0 it\u00e9rer sur ce point, alors faites-nous savoir sur Discord si vous avez d\u2019autres retours. Pour rendre le panneau plus robuste, il respecte d\u00e9sormais l\u2019acc\u00e8s d\u2019urgence via un param\u00e8tre GRIST_BOOT_KEY si l\u2019authentification est cass\u00e9e, et devrait m\u00eame \u00eatre utilisable si l\u2019application a des erreurs de configuration courantes. Cela signifie que vous pouvez compter sur le panneau d\u2019administration pour ne pas devenir inaccessible juste au moment o\u00f9 vous en avez le plus besoin !","title":"Am\u00e9liorations de la console d’administration en auto-h\u00e9bergement"},{"location":"newsletters/2024-05/#points-forts-de-la-communaute","text":"marc.fargas a fourni \u00e0 notre communaut\u00e9 un guide d\u00e9taill\u00e9 de son pipeline Grist \u2192 rendu PDF. La solution n\u00e9cessite des services externes (qui peuvent ne pas \u00eatre enti\u00e8rement gratuits), mais c\u2019est un excellent exemple d\u2019extension de Grist. Riccardo_Polignieri a cr\u00e9\u00e9 un wrapper Python pour l\u2019API de Grist appel\u00e9 PyGrister ! Ajoutez plus de Python \u00e0 votre flux de travail ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre canal Discord #grist-showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-05/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-05/#webinaire-colonnes-de-reference","text":"En juin, nous plongerons dans ce que sont les r\u00e9f\u00e9rences, comment les colonnes de r\u00e9f\u00e9rence fonctionnent dans Grist, et expliquerons comment les utiliser pour cr\u00e9er des tableaux de bord productifs en utilisant le mod\u00e8le de conf\u00e9renciers d\u2019\u00e9v\u00e9nements . Jeudi 20 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUIN","title":"Webinaire : Colonnes de r\u00e9f\u00e9rence"},{"location":"newsletters/2024-05/#filtrage-des-listes-deroulantes-de-reference-et-de-choix","text":"En mai, Anais est revenue pour examiner comment le filtrage de la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence ou de choix est tr\u00e8s utile dans une vari\u00e9t\u00e9 de cas. D\u00e9couvrez comment tirer parti de l\u2019une des fonctionnalit\u00e9s les plus r\u00e9centes et les plus puissantes de Grist. REGARDER L\u2019ENREGISTREMENT DE MAI","title":"Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix"},{"location":"newsletters/2024-05/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-05/#nous-sommes-la-pour-vous-soutenir","text":"Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2024 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Encore un mois o\u00f9 la communaut\u00e9 Grist nous offre une multitude de contributions cool, pour lesquelles nous sommes constamment reconnaissants. Gardez un \u0153il sur certaines choses sensationnelles que nous mijotons pour cet \u00e9t\u00e9. \u2600\ufe0f Nouveaux mod\u00e8les de recherche \ud83d\udc69\u200d\ud83d\udd2c # Nous avons cr\u00e9\u00e9 trois nouveaux mod\u00e8les sp\u00e9cialement pour les laboratoires de recherche . Ce n\u2019est pas une co\u00efncidence, car nous continuons d\u2019entendre des scientifiques et des techniciens qui trouvent que Grist est un ajout bienvenu \u00e0 leur pile logicielle. \ud83e\uddea Gestion des \u00e9chantillons \ud83d\udccb Gestion de projet \ud83d\udce6 Gestion des stocks Auto-h\u00e9bergeurs : vous pouvez maintenant ex\u00e9cuter Grist sans privil\u00e8ges root # Il est maintenant beaucoup plus facile de passer de gVisor \u00e0 la sandbox Pyodide , ce qui vous permet d\u2019ex\u00e9cuter un conteneur Grist en tant qu\u2019utilisateur r\u00e9gulier sans privil\u00e8ges administratifs. Voir cette PR pour tous les d\u00e9tails. Grist Desktop a \u00e9t\u00e9 mis \u00e0 jour (et renomm\u00e9) ! # Grist Desktop (anciennement Grist Electron) a re\u00e7u une mise \u00e0 jour significative ! Il y a une nouvelle version portable pour Windows, ainsi que des corrections de bugs et une mise \u00e0 jour de grist-core . Consultez les notes de version compl\u00e8tes et t\u00e9l\u00e9chargez Grist Desktop sur GitHub . Attendez-vous \u00e0 plus de nouvelles sur Grist Desktop dans les prochains mois\u2026 \ud83d\udc40 Points forts de la communaut\u00e9 # Mise \u00e0 jour de la traduction # Les traductions en finnois, vietnamien, bulgare et slovaque sont bien avanc\u00e9es ! Un grand merci \u00e0 tous nos contributeurs, et voir ici pour plus d\u2019informations sur l\u2019aide \u00e0 la traduction de Grist. OpenAPI \ud83e\udd1d Grist # En haut de la console API de Grist se trouve un lien vers un fichier YML contenant la sp\u00e9cification OpenAPI de Grist (notez, pas OpenAI). Nous sommes ravis de le voir utilis\u00e9 dans certains projets communautaires passionnants : grist-js de ben-pr-p, un nouveau client TypeScript. Int\u00e9gration GraphQL de yala1 utilisant Hasura. Interface de chat Grist avec listes de cartes \ud83d\udcac # Sur Discord , celine de france a partag\u00e9 une impl\u00e9mentation novatrice de listes de cartes fonctionnant comme une fonctionnalit\u00e9 native de chat/commentaires dans Grist, compl\u00e8te avec des accus\u00e9s de lecture manuels et des r\u00e9actions emoji. \u2705\ud83d\udc4d Cr\u00e9ations de widgets personnalis\u00e9s \ud83e\udde9 # Le modeste widget de visualisation HTML rec\u00e8le bien des secrets. nicobako a d\u00e9couvert que vous pouvez ex\u00e9cuter des scripts comme Mermaid.js pour cr\u00e9er des graphiques et des diagrammes sophistiqu\u00e9s. Vous pouvez maintenant faire en sorte que le widget de bloc-notes personnalis\u00e9 exporte du HTML classique vers une autre colonne, gr\u00e2ce \u00e0 la PR r\u00e9cente de guillett. Paul (CTO de Grist Labs) n\u2019est pas exactement un \u201cmembre de la communaut\u00e9\u201d (d\u00e9sol\u00e9 Paul \ud83d\ude22), mais son guide pour faire fonctionner les widgets personnalis\u00e9s hors ligne peut \u00eatre utile pour les apprentis sorciers des widgets. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre #grist-showcase canal Discord ! Apprendre Grist # Webinaire : Cl\u00e9s de lien # En juillet, nous expliquerons comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Apprenez \u00e0 utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles \u2013 m\u00eame une seule ligne \u2013 avec des tiers. Jeudi 25 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUILLET Colonnes de r\u00e9f\u00e9rence # En juin, Natalie a expliqu\u00e9 ce que sont les r\u00e9f\u00e9rences, comment les colonnes de r\u00e9f\u00e9rence fonctionnent dans Grist, et comment les utiliser pour cr\u00e9er des tableaux de bord productifs en utilisant le Mod\u00e8le de conf\u00e9renciers d\u2019\u00e9v\u00e9nements . REGARDER L\u2019ENREGISTREMENT DE JUIN Aidez \u00e0 faire conna\u00eetre Grist # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Forum Communautaire , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/06"},{"location":"newsletters/2024-06/#bulletin-de-juin-2024","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juin 2024"},{"location":"newsletters/2024-06/#quoi-de-neuf","text":"Encore un mois o\u00f9 la communaut\u00e9 Grist nous offre une multitude de contributions cool, pour lesquelles nous sommes constamment reconnaissants. Gardez un \u0153il sur certaines choses sensationnelles que nous mijotons pour cet \u00e9t\u00e9. \u2600\ufe0f","title":"Quoi de neuf"},{"location":"newsletters/2024-06/#nouveaux-modeles-de-recherche","text":"Nous avons cr\u00e9\u00e9 trois nouveaux mod\u00e8les sp\u00e9cialement pour les laboratoires de recherche . Ce n\u2019est pas une co\u00efncidence, car nous continuons d\u2019entendre des scientifiques et des techniciens qui trouvent que Grist est un ajout bienvenu \u00e0 leur pile logicielle. \ud83e\uddea Gestion des \u00e9chantillons \ud83d\udccb Gestion de projet \ud83d\udce6 Gestion des stocks","title":"Nouveaux mod\u00e8les de recherche \ud83d\udc69\u200d\ud83d\udd2c"},{"location":"newsletters/2024-06/#auto-hebergeurs-vous-pouvez-maintenant-executer-grist-sans-privileges-root","text":"Il est maintenant beaucoup plus facile de passer de gVisor \u00e0 la sandbox Pyodide , ce qui vous permet d\u2019ex\u00e9cuter un conteneur Grist en tant qu\u2019utilisateur r\u00e9gulier sans privil\u00e8ges administratifs. Voir cette PR pour tous les d\u00e9tails.","title":"Auto-h\u00e9bergeurs : vous pouvez maintenant ex\u00e9cuter Grist sans privil\u00e8ges root"},{"location":"newsletters/2024-06/#grist-desktop-a-ete-mis-a-jour-et-renomme","text":"Grist Desktop (anciennement Grist Electron) a re\u00e7u une mise \u00e0 jour significative ! Il y a une nouvelle version portable pour Windows, ainsi que des corrections de bugs et une mise \u00e0 jour de grist-core . Consultez les notes de version compl\u00e8tes et t\u00e9l\u00e9chargez Grist Desktop sur GitHub . Attendez-vous \u00e0 plus de nouvelles sur Grist Desktop dans les prochains mois\u2026 \ud83d\udc40","title":"Grist Desktop a \u00e9t\u00e9 mis \u00e0 jour (et renomm\u00e9) !"},{"location":"newsletters/2024-06/#points-forts-de-la-communaute","text":"","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-06/#mise-a-jour-de-la-traduction","text":"Les traductions en finnois, vietnamien, bulgare et slovaque sont bien avanc\u00e9es ! Un grand merci \u00e0 tous nos contributeurs, et voir ici pour plus d\u2019informations sur l\u2019aide \u00e0 la traduction de Grist.","title":"Mise \u00e0 jour de la traduction"},{"location":"newsletters/2024-06/#openapi-grist","text":"En haut de la console API de Grist se trouve un lien vers un fichier YML contenant la sp\u00e9cification OpenAPI de Grist (notez, pas OpenAI). Nous sommes ravis de le voir utilis\u00e9 dans certains projets communautaires passionnants : grist-js de ben-pr-p, un nouveau client TypeScript. Int\u00e9gration GraphQL de yala1 utilisant Hasura.","title":"OpenAPI \ud83e\udd1d Grist"},{"location":"newsletters/2024-06/#interface-de-chat-grist-avec-listes-de-cartes","text":"Sur Discord , celine de france a partag\u00e9 une impl\u00e9mentation novatrice de listes de cartes fonctionnant comme une fonctionnalit\u00e9 native de chat/commentaires dans Grist, compl\u00e8te avec des accus\u00e9s de lecture manuels et des r\u00e9actions emoji. \u2705\ud83d\udc4d","title":"Interface de chat Grist avec listes de cartes \ud83d\udcac"},{"location":"newsletters/2024-06/#creations-de-widgets-personnalises","text":"Le modeste widget de visualisation HTML rec\u00e8le bien des secrets. nicobako a d\u00e9couvert que vous pouvez ex\u00e9cuter des scripts comme Mermaid.js pour cr\u00e9er des graphiques et des diagrammes sophistiqu\u00e9s. Vous pouvez maintenant faire en sorte que le widget de bloc-notes personnalis\u00e9 exporte du HTML classique vers une autre colonne, gr\u00e2ce \u00e0 la PR r\u00e9cente de guillett. Paul (CTO de Grist Labs) n\u2019est pas exactement un \u201cmembre de la communaut\u00e9\u201d (d\u00e9sol\u00e9 Paul \ud83d\ude22), mais son guide pour faire fonctionner les widgets personnalis\u00e9s hors ligne peut \u00eatre utile pour les apprentis sorciers des widgets. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre #grist-showcase canal Discord !","title":"Cr\u00e9ations de widgets personnalis\u00e9s \ud83e\udde9"},{"location":"newsletters/2024-06/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-06/#webinaire-cles-de-lien","text":"En juillet, nous expliquerons comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Apprenez \u00e0 utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles \u2013 m\u00eame une seule ligne \u2013 avec des tiers. Jeudi 25 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUILLET","title":"Webinaire : Cl\u00e9s de lien"},{"location":"newsletters/2024-06/#colonnes-de-reference","text":"En juin, Natalie a expliqu\u00e9 ce que sont les r\u00e9f\u00e9rences, comment les colonnes de r\u00e9f\u00e9rence fonctionnent dans Grist, et comment les utiliser pour cr\u00e9er des tableaux de bord productifs en utilisant le Mod\u00e8le de conf\u00e9renciers d\u2019\u00e9v\u00e9nements . REGARDER L\u2019ENREGISTREMENT DE JUIN","title":"Colonnes de r\u00e9f\u00e9rence"},{"location":"newsletters/2024-06/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-06/#nous-sommes-la-pour-vous-soutenir","text":"Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Forum Communautaire , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2024 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juillet 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Fonctions cumulatives : PREVIOUS() , NEXT() et RANK() # Si vous avez d\u00e9j\u00e0 essay\u00e9 d\u2019obtenir un total cumulatif dans une table Grist, ou d\u2019acc\u00e9der aux valeurs pr\u00e9c\u00e9dentes pour des calculs, nous avons de bonnes nouvelles. Nous avons ajout\u00e9 une s\u00e9rie de nouvelles fonctionnalit\u00e9s li\u00e9es aux fonctions cumulatives qui \u00e9largissent consid\u00e9rablement ce que vous pouvez faire dans la grille : PREVIOUS() trouve l\u2019enregistrement pr\u00e9c\u00e9dent dans une table compl\u00e8te. NEXT() fait la m\u00eame chose, mais dans l\u2019autre sens. RANK() renvoie le rang de l\u2019enregistrement au sein du groupe, en commen\u00e7ant par 1. Consultez notre documentation compl\u00e8te dans notre Centre d\u2019aide . Nouveaux types de recherches : m\u00e9thodes find.* # M\u00eame pour un pro de Python, il peut \u00eatre difficile de rechercher des \u00e9l\u00e9ments en fonction de leur proximit\u00e9 avec un seuil, surtout si la recherche doit \u00eatre efficace. Ces nouvelles m\u00e9thodes find.* rendent cela beaucoup plus facile. Essentiellement, lookupRecords() permet d\u00e9sormais la recherche dans des r\u00e9sultats tri\u00e9s ! Voici un exemple, montrant l\u2019ancienne m\u00e9thode (\ud83d\udc22\ud83d\ude45) et la nouvelle m\u00e9thode (\ud83c\udfc3\u200d\u27a1\ufe0f) : Plus de d\u00e9tails : Les m\u00e9thodes find.* sont le , lt , ge , gt et eq (moins que ou \u00e9gal, moins que, plus que ou \u00e9gal, plus que, \u00e9gal). L\u2019argument order_by prend d\u00e9sormais en charge les tuples, ainsi que le pr\u00e9fixe \u201c-\u201d pour inverser l\u2019ordre, par exemple (\"Category\", \"-Date\") . Voir la documentation compl\u00e8te dans notre Centre d\u2019aide . Progression du tutoriel # Si vous lisez ceci, vous n\u2019avez probablement pas besoin de compl\u00e9ter notre tutoriel de base. Cependant, nous voulions vous montrer cette nouvelle barre de progression cool et sugg\u00e9rer d\u2019autres am\u00e9liorations d\u2019int\u00e9gration pour aider les nouveaux utilisateurs \u00e0 se mettre \u00e0 niveau ! Vous \u00eates \u00e9galement maintenant \u00e0 environ 38% de ce bulletin. Bon travail ! \ud83d\udcc8 Grist Enterprise : maintenant un bouton ! # Pour nos grands utilisateurs d\u2019entreprise, l\u2019installation de Grist est devenue plus facile : vous pouvez d\u00e9sormais utiliser l\u2019image Docker standard ! Nous avons consolid\u00e9 les images afin que l\u2019activation et l\u2019activation d\u2019Enterprise se fassent dans la console d\u2019administration. Cela signifie \u00e9galement que les utilisateurs non-Enterprise peuvent essayer les fonctionnalit\u00e9s Enterprise comme GristConnect et stockage Azure/S3 pendant 30 jours. Le plan Enterprise complet comprend \u00e9galement le support d\u2019installation et les services professionnels fournis par nos experts Grist. Consultez notre page de tarification pour plus de d\u00e9tails. Int\u00e9gration Grist ActivePieces # L\u2019outil d\u2019automatisation open source ActivePieces dispose d\u00e9sormais d\u2019un ensemble d\u2019actions et de d\u00e9clencheurs sp\u00e9cifiques \u00e0 Grist . Merci \u00e0 Kishan Parmar pour la pull request ! Am\u00e9lioration de la synchronisation des renommages de colonnes # Une petite mais puissante correction qui r\u00e9sout plusieurs frustrations d\u2019utilisabilit\u00e9 dans Grist. D\u00e9sormais, lorsque vous renommez une colonne, les permissions avanc\u00e9es et les r\u00e8gles de mise en forme conditionnelle associ\u00e9es se mettent \u00e0 jour automatiquement ! Aper\u00e7us de build Fly.io pour les contributeurs externes # Si vous \u00eates un contributeur grist-core travaillant sur une PR, nous avons d\u00e9sormais des aper\u00e7us automatiques pour votre travail. Tout le monde peut d\u00e9sormais voir des d\u00e9mos en direct, ce qui devrait aider \u00e0 acc\u00e9l\u00e9rer le processus de r\u00e9vision ! Nous utilisons Fly.io pour ex\u00e9cuter une instance auto-h\u00e9berg\u00e9e de Grist incluant votre code. Coup de projecteur sur les utilisateurs \u2013 Callum Spawforth/Savage Game Design # Lorsqu\u2019il ne travaille pas sur Grist, Callum ( @Spoffy sur GitHub) travaille avec l\u2019\u00e9quipe de Savage Game Design pour d\u00e9velopper des jeux vid\u00e9o sur la guerre du Vietnam. L\u2019\u00e9quipe de Savage et leurs conseillers militaires s\u2019efforcent de rendre leur jeu historiquement exact, ce qui signifie suivre une tonne d\u2019\u00e9v\u00e9nements r\u00e9els, de lieux, de personnes, d\u2019unit\u00e9s, etc\u2026 et les relier tous entre eux. L\u2019\u00e9quipe utilise Grist pour construire une base de donn\u00e9es d\u2019\u00e9v\u00e9nements \u00e0 mesure qu\u2019ils cr\u00e9ent leurs sc\u00e9narios, la traitant comme un \u201cpoint de d\u00e9part pour cartographier ce qu\u2019ils veulent faire pendant une certaine p\u00e9riode\u201d. \u00c0 mesure que les sc\u00e9narios \u00e9voluent et deviennent plus complexes, ils connectent leurs documents Grist avec d\u2019autres outils comme Google Docs, maintenant un lien avec leur source unique de v\u00e9rit\u00e9. Au lieu d\u2019avoir seulement un document de conception de jeu, ils ont maintenant aussi une base de donn\u00e9es de conception de jeu. Points forts de la communaut\u00e9 # Une nouvelle traduction basque est presque termin\u00e9e, gr\u00e2ce \u00e0 xabirequejo ! Voir ici pour plus d\u2019informations sur l\u2019aide \u00e0 la traduction de Grist. Si vous avez utilis\u00e9 notre mod\u00e8le de propositions et contrats (ou m\u00eame suivi notre tutoriel sur la fa\u00e7on de le construire !), vous serez int\u00e9ress\u00e9 de voir cette fonction de mod\u00e8le de vue Markdown mise \u00e0 jour par l\u2019utilisateur Discord celine de france . Cette fonction est un moyen plus simple de remplacer des champs dans un mod\u00e8le (m\u00eame imbriqu\u00e9s dans des r\u00e9f\u00e9rences !), automatisant efficacement le processus pour la plupart des cas. Voir leur post original ici , ou consultez une d\u00e9mo en direct . Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre #grist-showcase canal Discord ! Apprendre Grist # Webinar : Grist 101 : Guide du nouvel utilisateur # Rejoignez-nous pour un webinaire d\u2019introduction con\u00e7u pour aider les nouveaux utilisateurs \u00e0 naviguer dans les bases de Grist. Cette session vous fournira les outils et connaissances essentiels pour commencer. Nous couvrirons les fonctionnalit\u00e9s cl\u00e9s et les meilleures pratiques pour maximiser votre productivit\u00e9. Parfait pour les d\u00e9butants, ce webinaire vous mettra sur la voie pour devenir un pro de Grist. Ne manquez pas cette occasion - r\u00e9servez votre place d\u00e8s aujourd\u2019hui ! Jeudi 15 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019AO\u00dbT Partager des donn\u00e9es partielles avec des cl\u00e9s de lien # En juillet, Natalie a expliqu\u00e9 comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Nous avons couvert comment utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles - m\u00eame une seule ligne - avec des tiers. REGARDER L\u2019ENREGISTREMENT DE JUILLET Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Forum Communautaire , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/07"},{"location":"newsletters/2024-07/#bulletin-de-juillet-2024","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juillet 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juillet 2024"},{"location":"newsletters/2024-07/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-07/#fonctions-cumulatives-previous-next-et-rank","text":"Si vous avez d\u00e9j\u00e0 essay\u00e9 d\u2019obtenir un total cumulatif dans une table Grist, ou d\u2019acc\u00e9der aux valeurs pr\u00e9c\u00e9dentes pour des calculs, nous avons de bonnes nouvelles. Nous avons ajout\u00e9 une s\u00e9rie de nouvelles fonctionnalit\u00e9s li\u00e9es aux fonctions cumulatives qui \u00e9largissent consid\u00e9rablement ce que vous pouvez faire dans la grille : PREVIOUS() trouve l\u2019enregistrement pr\u00e9c\u00e9dent dans une table compl\u00e8te. NEXT() fait la m\u00eame chose, mais dans l\u2019autre sens. RANK() renvoie le rang de l\u2019enregistrement au sein du groupe, en commen\u00e7ant par 1. Consultez notre documentation compl\u00e8te dans notre Centre d\u2019aide .","title":"Fonctions cumulatives : PREVIOUS(), NEXT() et RANK()"},{"location":"newsletters/2024-07/#nouveaux-types-de-recherches-methodes-find","text":"M\u00eame pour un pro de Python, il peut \u00eatre difficile de rechercher des \u00e9l\u00e9ments en fonction de leur proximit\u00e9 avec un seuil, surtout si la recherche doit \u00eatre efficace. Ces nouvelles m\u00e9thodes find.* rendent cela beaucoup plus facile. Essentiellement, lookupRecords() permet d\u00e9sormais la recherche dans des r\u00e9sultats tri\u00e9s ! Voici un exemple, montrant l\u2019ancienne m\u00e9thode (\ud83d\udc22\ud83d\ude45) et la nouvelle m\u00e9thode (\ud83c\udfc3\u200d\u27a1\ufe0f) : Plus de d\u00e9tails : Les m\u00e9thodes find.* sont le , lt , ge , gt et eq (moins que ou \u00e9gal, moins que, plus que ou \u00e9gal, plus que, \u00e9gal). L\u2019argument order_by prend d\u00e9sormais en charge les tuples, ainsi que le pr\u00e9fixe \u201c-\u201d pour inverser l\u2019ordre, par exemple (\"Category\", \"-Date\") . Voir la documentation compl\u00e8te dans notre Centre d\u2019aide .","title":"Nouveaux types de recherches : m\u00e9thodes find.*"},{"location":"newsletters/2024-07/#progression-du-tutoriel","text":"Si vous lisez ceci, vous n\u2019avez probablement pas besoin de compl\u00e9ter notre tutoriel de base. Cependant, nous voulions vous montrer cette nouvelle barre de progression cool et sugg\u00e9rer d\u2019autres am\u00e9liorations d\u2019int\u00e9gration pour aider les nouveaux utilisateurs \u00e0 se mettre \u00e0 niveau ! Vous \u00eates \u00e9galement maintenant \u00e0 environ 38% de ce bulletin. Bon travail ! \ud83d\udcc8","title":"Progression du tutoriel"},{"location":"newsletters/2024-07/#grist-enterprise-maintenant-un-bouton","text":"Pour nos grands utilisateurs d\u2019entreprise, l\u2019installation de Grist est devenue plus facile : vous pouvez d\u00e9sormais utiliser l\u2019image Docker standard ! Nous avons consolid\u00e9 les images afin que l\u2019activation et l\u2019activation d\u2019Enterprise se fassent dans la console d\u2019administration. Cela signifie \u00e9galement que les utilisateurs non-Enterprise peuvent essayer les fonctionnalit\u00e9s Enterprise comme GristConnect et stockage Azure/S3 pendant 30 jours. Le plan Enterprise complet comprend \u00e9galement le support d\u2019installation et les services professionnels fournis par nos experts Grist. Consultez notre page de tarification pour plus de d\u00e9tails.","title":"Grist Enterprise : maintenant un bouton !"},{"location":"newsletters/2024-07/#integration-grist-activepieces","text":"L\u2019outil d\u2019automatisation open source ActivePieces dispose d\u00e9sormais d\u2019un ensemble d\u2019actions et de d\u00e9clencheurs sp\u00e9cifiques \u00e0 Grist . Merci \u00e0 Kishan Parmar pour la pull request !","title":"Int\u00e9gration Grist ActivePieces"},{"location":"newsletters/2024-07/#amelioration-de-la-synchronisation-des-renommages-de-colonnes","text":"Une petite mais puissante correction qui r\u00e9sout plusieurs frustrations d\u2019utilisabilit\u00e9 dans Grist. D\u00e9sormais, lorsque vous renommez une colonne, les permissions avanc\u00e9es et les r\u00e8gles de mise en forme conditionnelle associ\u00e9es se mettent \u00e0 jour automatiquement !","title":"Am\u00e9lioration de la synchronisation des renommages de colonnes"},{"location":"newsletters/2024-07/#apercus-de-build-flyio-pour-les-contributeurs-externes","text":"Si vous \u00eates un contributeur grist-core travaillant sur une PR, nous avons d\u00e9sormais des aper\u00e7us automatiques pour votre travail. Tout le monde peut d\u00e9sormais voir des d\u00e9mos en direct, ce qui devrait aider \u00e0 acc\u00e9l\u00e9rer le processus de r\u00e9vision ! Nous utilisons Fly.io pour ex\u00e9cuter une instance auto-h\u00e9berg\u00e9e de Grist incluant votre code.","title":"Aper\u00e7us de build Fly.io pour les contributeurs externes"},{"location":"newsletters/2024-07/#coup-de-projecteur-sur-les-utilisateurs-callum-spawforthsavage-game-design","text":"Lorsqu\u2019il ne travaille pas sur Grist, Callum ( @Spoffy sur GitHub) travaille avec l\u2019\u00e9quipe de Savage Game Design pour d\u00e9velopper des jeux vid\u00e9o sur la guerre du Vietnam. L\u2019\u00e9quipe de Savage et leurs conseillers militaires s\u2019efforcent de rendre leur jeu historiquement exact, ce qui signifie suivre une tonne d\u2019\u00e9v\u00e9nements r\u00e9els, de lieux, de personnes, d\u2019unit\u00e9s, etc\u2026 et les relier tous entre eux. L\u2019\u00e9quipe utilise Grist pour construire une base de donn\u00e9es d\u2019\u00e9v\u00e9nements \u00e0 mesure qu\u2019ils cr\u00e9ent leurs sc\u00e9narios, la traitant comme un \u201cpoint de d\u00e9part pour cartographier ce qu\u2019ils veulent faire pendant une certaine p\u00e9riode\u201d. \u00c0 mesure que les sc\u00e9narios \u00e9voluent et deviennent plus complexes, ils connectent leurs documents Grist avec d\u2019autres outils comme Google Docs, maintenant un lien avec leur source unique de v\u00e9rit\u00e9. Au lieu d\u2019avoir seulement un document de conception de jeu, ils ont maintenant aussi une base de donn\u00e9es de conception de jeu.","title":"Coup de projecteur sur les utilisateurs \u2013 Callum Spawforth/Savage Game Design"},{"location":"newsletters/2024-07/#points-forts-de-la-communaute","text":"Une nouvelle traduction basque est presque termin\u00e9e, gr\u00e2ce \u00e0 xabirequejo ! Voir ici pour plus d\u2019informations sur l\u2019aide \u00e0 la traduction de Grist. Si vous avez utilis\u00e9 notre mod\u00e8le de propositions et contrats (ou m\u00eame suivi notre tutoriel sur la fa\u00e7on de le construire !), vous serez int\u00e9ress\u00e9 de voir cette fonction de mod\u00e8le de vue Markdown mise \u00e0 jour par l\u2019utilisateur Discord celine de france . Cette fonction est un moyen plus simple de remplacer des champs dans un mod\u00e8le (m\u00eame imbriqu\u00e9s dans des r\u00e9f\u00e9rences !), automatisant efficacement le processus pour la plupart des cas. Voir leur post original ici , ou consultez une d\u00e9mo en direct . Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre #grist-showcase canal Discord !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-07/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-07/#webinar-grist-101-guide-du-nouvel-utilisateur","text":"Rejoignez-nous pour un webinaire d\u2019introduction con\u00e7u pour aider les nouveaux utilisateurs \u00e0 naviguer dans les bases de Grist. Cette session vous fournira les outils et connaissances essentiels pour commencer. Nous couvrirons les fonctionnalit\u00e9s cl\u00e9s et les meilleures pratiques pour maximiser votre productivit\u00e9. Parfait pour les d\u00e9butants, ce webinaire vous mettra sur la voie pour devenir un pro de Grist. Ne manquez pas cette occasion - r\u00e9servez votre place d\u00e8s aujourd\u2019hui ! Jeudi 15 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019AO\u00dbT","title":"Webinar : Grist 101 : Guide du nouvel utilisateur"},{"location":"newsletters/2024-07/#partager-des-donnees-partielles-avec-des-cles-de-lien","text":"En juillet, Natalie a expliqu\u00e9 comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Nous avons couvert comment utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles - m\u00eame une seule ligne - avec des tiers. REGARDER L\u2019ENREGISTREMENT DE JUILLET","title":"Partager des donn\u00e9es partielles avec des cl\u00e9s de lien"},{"location":"newsletters/2024-07/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-07/#nous-sommes-la-pour-vous-soutenir","text":"Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Forum Communautaire , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"api/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Grist API Reference # REST API for manipulating documents, workspaces, and team sites. API Usage is an introduction to using the API. API Console allows you to make API calls from the browser. Authentication orgs get List the orgs you have access to get Describe an org patch Modify an org del Delete an org get List users with access to org patch Change who has access to org workspaces get List workspaces and documents within an org post Create an empty workspace get Describe a workspace patch Modify a workspace del Delete a workspace get List users with access to workspace patch Change who has access to workspace docs post Create an empty document get Describe a document patch Modify document metadata (but not its contents) del Delete a document patch Move document to another workspace. get List users with access to document patch Change who has access to document get Content of document, as an Sqlite file get Content of document, as an Excel file get Content of table, as a CSV file get The schema of a table post Truncate the document's action history post Reload a document records get Fetch records from a table post Add records to a table patch Modify records of a table put Add or update records of a table tables get List tables in a document post Add tables to a document patch Modify tables of a document columns get List columns in a table post Add columns to a table patch Modify columns of a table put Add or update columns of a table del Delete a column of a table data get Fetch data from a table post Add rows to a table patch Modify rows of a table post Delete rows of a table attachments get List metadata of all attachments in a doc post Upload attachments to a doc get Get the metadata for an attachment get Download the contents of an attachment webhooks get Webhooks associated with a document post Create new webhooks for a document patch Modify a webhook del Remove a webhook del Empty a document's queue of undelivered payloads sql get Run an SQL query against a document post Run an SQL query against a document, with options or parameters users del Delete a user from Grist API docs by Redocly Grist API ( 1.0.1 ) An API for manipulating Grist sites, workspaces, and documents. Authentication ApiKey Access to the Grist API is controlled by an Authorization header, which should contain the word 'Bearer', followed by a space, followed by your API key. Security Scheme Type: HTTP HTTP Authorization Scheme: bearer Bearer format: Authorization: Bearer XXXXXXXXXXX orgs Team sites and personal spaces are called 'orgs' in the API. List the orgs you have access to get /orgs https://{subdomain}.getgrist.com/api /orgs This enumerates all the team sites or personal areas available. Authorizations: ApiKey Responses 200 An array of organizations Response samples 200 Content type application/json Copy Expand all Collapse all [ { \"id\" : 42 , \"name\" : \"Grist Labs\" , \"domain\" : \"gristlabs\" , \"owner\" : { \"id\" : 101 , \"name\" : \"Helga Hufflepuff\" , \"picture\" : null } , \"access\" : \"owners\" , \"createdAt\" : \"2019-09-13T15:42:35.000Z\" , \"updatedAt\" : \"2019-09-13T15:42:35.000Z\" } ] Describe an org get /orgs/{orgId} https://{subdomain}.getgrist.com/api /orgs/{orgId} Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Responses 200 An organization Response samples 200 Content type application/json Copy Expand all Collapse all { \"id\" : 42 , \"name\" : \"Grist Labs\" , \"domain\" : \"gristlabs\" , \"owner\" : { \"id\" : 101 , \"name\" : \"Helga Hufflepuff\" , \"picture\" : null } , \"access\" : \"owners\" , \"createdAt\" : \"2019-09-13T15:42:35.000Z\" , \"updatedAt\" : \"2019-09-13T15:42:35.000Z\" } Modify an org patch /orgs/{orgId} https://{subdomain}.getgrist.com/api /orgs/{orgId} Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Request Body schema: application/json the changes to make name string Responses 200 Success Request samples Payload Content type application/json Copy { \"name\" : \"ACME Unlimited\" } Delete an org delete /orgs/{orgId} https://{subdomain}.getgrist.com/api /orgs/{orgId} Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Responses 200 Success 403 Access denied 404 Not found List users with access to org get /orgs/{orgId}/access https://{subdomain}.getgrist.com/api /orgs/{orgId}/access Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Responses 200 Users with access to org Response samples 200 Content type application/json Copy Expand all Collapse all { \"users\" : [ { \"id\" : 1 , \"name\" : \"Andrea\" , \"email\" : \"andrea@getgrist.com\" , \"access\" : \"owners\" } ] } Change who has access to org patch /orgs/{orgId}/access https://{subdomain}.getgrist.com/api /orgs/{orgId}/access Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Request Body schema: application/json the changes to make delta required object ( OrgAccessWrite ) Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"delta\" : { \"users\" : { \"foo@getgrist.com\" : \"owners\" , \"bar@getgrist.com\" : null } } } workspaces Sites can be organized into groups of documents called workspaces. List workspaces and documents within an org get /orgs/{orgId}/workspaces https://{subdomain}.getgrist.com/api /orgs/{orgId}/workspaces Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Responses 200 An org's workspaces and documents Response samples 200 Content type application/json Copy Expand all Collapse all [ { \"id\" : 97 , \"name\" : \"Secret Plans\" , \"access\" : \"owners\" , \"docs\" : [ { \"id\" : 145 , \"name\" : \"Project Lollipop\" , \"access\" : \"owners\" , \"isPinned\" : true , \"urlId\" : null } ] , \"orgDomain\" : \"gristlabs\" } ] Create an empty workspace post /orgs/{orgId}/workspaces https://{subdomain}.getgrist.com/api /orgs/{orgId}/workspaces Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Request Body schema: application/json settings for the workspace name string Responses 200 The workspace id Request samples Payload Content type application/json Copy { \"name\" : \"Retreat Docs\" } Response samples 200 Content type application/json Copy 155 Describe a workspace get /workspaces/{workspaceId} https://{subdomain}.getgrist.com/api /workspaces/{workspaceId} Authorizations: ApiKey path Parameters workspaceId required integer An integer id Responses 200 A workspace Response samples 200 Content type application/json Copy Expand all Collapse all { \"id\" : 97 , \"name\" : \"Secret Plans\" , \"access\" : \"owners\" , \"docs\" : [ { \"id\" : 145 , \"name\" : \"Project Lollipop\" , \"access\" : \"owners\" , \"isPinned\" : true , \"urlId\" : null } ] , \"org\" : { \"id\" : 42 , \"name\" : \"Grist Labs\" , \"domain\" : \"gristlabs\" , \"owner\" : { \"id\" : 101 , \"name\" : \"Helga Hufflepuff\" , \"picture\" : null } , \"access\" : \"owners\" , \"createdAt\" : \"2019-09-13T15:42:35.000Z\" , \"updatedAt\" : \"2019-09-13T15:42:35.000Z\" } } Modify a workspace patch /workspaces/{workspaceId} https://{subdomain}.getgrist.com/api /workspaces/{workspaceId} Authorizations: ApiKey path Parameters workspaceId required integer An integer id Request Body schema: application/json the changes to make name string Responses 200 Success Request samples Payload Content type application/json Copy { \"name\" : \"Retreat Docs\" } Delete a workspace delete /workspaces/{workspaceId} https://{subdomain}.getgrist.com/api /workspaces/{workspaceId} Authorizations: ApiKey path Parameters workspaceId required integer An integer id Responses 200 Success List users with access to workspace get /workspaces/{workspaceId}/access https://{subdomain}.getgrist.com/api /workspaces/{workspaceId}/access Authorizations: ApiKey path Parameters workspaceId required integer An integer id Responses 200 Users with access to workspace Response samples 200 Content type application/json Copy Expand all Collapse all { \"maxInheritedRole\" : \"owners\" , \"users\" : [ { \"id\" : 1 , \"name\" : \"Andrea\" , \"email\" : \"andrea@getgrist.com\" , \"access\" : \"owners\" , \"parentAccess\" : \"owners\" } ] } Change who has access to workspace patch /workspaces/{workspaceId}/access https://{subdomain}.getgrist.com/api /workspaces/{workspaceId}/access Authorizations: ApiKey path Parameters workspaceId required integer An integer id Request Body schema: application/json the changes to make delta required object ( WorkspaceAccessWrite ) Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"delta\" : { \"maxInheritedRole\" : \"owners\" , \"users\" : { \"foo@getgrist.com\" : \"owners\" , \"bar@getgrist.com\" : null } } } docs Workspaces contain collections of Grist documents. Create an empty document post /workspaces/{workspaceId}/docs https://{subdomain}.getgrist.com/api /workspaces/{workspaceId}/docs Authorizations: ApiKey path Parameters workspaceId required integer An integer id Request Body schema: application/json settings for the document name string isPinned boolean Responses 200 The document id Request samples Payload Content type application/json Copy { \"name\" : \"Competitive Analysis\" , \"isPinned\" : false } Response samples 200 Content type application/json Copy \"8b97c8db-b4df-4b34-b72c-17459e70140a\" Describe a document get /docs/{docId} https://{subdomain}.getgrist.com/api /docs/{docId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 A document's metadata Response samples 200 Content type application/json Copy Expand all Collapse all { \"id\" : 145 , \"name\" : \"Project Lollipop\" , \"access\" : \"owners\" , \"isPinned\" : true , \"urlId\" : null , \"workspace\" : { \"id\" : 97 , \"name\" : \"Secret Plans\" , \"access\" : \"owners\" , \"org\" : { \"id\" : 42 , \"name\" : \"Grist Labs\" , \"domain\" : \"gristlabs\" , \"owner\" : { \"id\" : 101 , \"name\" : \"Helga Hufflepuff\" , \"picture\" : null } , \"access\" : \"owners\" , \"createdAt\" : \"2019-09-13T15:42:35.000Z\" , \"updatedAt\" : \"2019-09-13T15:42:35.000Z\" } } } Modify document metadata (but not its contents) patch /docs/{docId} https://{subdomain}.getgrist.com/api /docs/{docId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the changes to make name string isPinned boolean Responses 200 Success Request samples Payload Content type application/json Copy { \"name\" : \"Competitive Analysis\" , \"isPinned\" : false } Delete a document delete /docs/{docId} https://{subdomain}.getgrist.com/api /docs/{docId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 Success Move document to another workspace. patch /docs/{docId}/move https://{subdomain}.getgrist.com/api /docs/{docId}/move Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the target workspace workspace required integer Responses 200 Success Request samples Payload Content type application/json Copy { \"workspace\" : 597 } List users with access to document get /docs/{docId}/access https://{subdomain}.getgrist.com/api /docs/{docId}/access Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 Users with access to document Response samples 200 Content type application/json Copy Expand all Collapse all { \"maxInheritedRole\" : \"owners\" , \"users\" : [ { \"id\" : 1 , \"name\" : \"Andrea\" , \"email\" : \"andrea@getgrist.com\" , \"access\" : \"owners\" , \"parentAccess\" : \"owners\" } ] } Change who has access to document patch /docs/{docId}/access https://{subdomain}.getgrist.com/api /docs/{docId}/access Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the changes to make delta required object ( DocAccessWrite ) Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"delta\" : { \"maxInheritedRole\" : \"owners\" , \"users\" : { \"foo@getgrist.com\" : \"owners\" , \"bar@getgrist.com\" : null } } } Content of document, as an Sqlite file get /docs/{docId}/download https://{subdomain}.getgrist.com/api /docs/{docId}/download Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters nohistory boolean Remove document history (can significantly reduce file size) template boolean Remove all data and history but keep the structure to use the document as a template Responses 200 A document's content in Sqlite form Content of document, as an Excel file get /docs/{docId}/download/xlsx https://{subdomain}.getgrist.com/api /docs/{docId}/download/xlsx Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters header string Enum : \"colId\" \"label\" Format for headers. Labels tend to be more human-friendly while colIds are more normalized. Responses 200 A document's content in Excel form Content of table, as a CSV file get /docs/{docId}/download/csv https://{subdomain}.getgrist.com/api /docs/{docId}/download/csv Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters tableId required string Name of a table (normalized). header string Enum : \"colId\" \"label\" Format for headers. Labels tend to be more human-friendly while colIds are more normalized. Responses 200 A table's content in CSV form The schema of a table get /docs/{docId}/download/table-schema https://{subdomain}.getgrist.com/api /docs/{docId}/download/table-schema The schema follows frictionlessdata's table-schema standard . Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters tableId required string Name of a table (normalized). header string Enum : \"colId\" \"label\" Format for headers. Labels tend to be more human-friendly while colIds are more normalized. Responses 200 A table's table-schema in JSON format. Response samples 200 Content type text/json Copy { \"name\" : \"string\" , \"title\" : \"string\" , \"path\" : \" https://getgrist.com/o/docs/api/docs/ID/download/csv?tableId=Table1&.... \" , \"format\" : \"csv\" , \"mediatype\" : \"text/csv\" , \"encoding\" : \"utf-8\" , \"dialect\" : \"{\\n \\\"dialect\\\": {\\n \\\"delimiter\\\": \\\";\\\"\\n }\\n}\\n\" , \"schema\" : \"{\\n \\\"schema\\\": {\\n \\\"fields\\\": [\\n {\\n \\\"name\\\": \\\"first_name\\\",\\n \\\"type\\\": \\\"string\\\"\\n \\\"constraints\\\": {\\n \\\"required\\\": true\\n }\\n },\\n {\\n \\\"name\\\": \\\"age\\\",\\n \\\"type\\\": \\\"integer\\\"\\n },\\n ],\\n \\\"primaryKey\\\": [\\n \\\"name\\\"\\n ]\\n }\\n}\\n\" } Truncate the document's action history post /docs/{docId}/states/remove https://{subdomain}.getgrist.com/api /docs/{docId}/states/remove Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json keep required integer The number of the latest history actions to keep Request samples Payload Content type application/json Copy { \"keep\" : 3 } Reload a document post /docs/{docId}/force-reload https://{subdomain}.getgrist.com/api /docs/{docId}/force-reload Closes and reopens the document, forcing the python engine to restart. Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 Document reloaded successfully records Tables contain collections of records (also called rows). Fetch records from a table get /docs/{docId}/tables/{tableId}/records https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/records Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters filter string Example: filter={\"pet\": [\"cat\", \"dog\"]} This is a JSON object mapping column names to arrays of allowed values. For example, to filter column pet for values cat and dog , the filter would be {\"pet\": [\"cat\", \"dog\"]} . JSON contains characters that are not safe to place in a URL, so it is important to url-encode them. For this example, the url-encoding is %7B%22pet%22%3A%20%5B%22cat%22%2C%20%22dog%22%5D%7D . See https://rosettacode.org/wiki/URL_encoding for how to url-encode a string, or https://www.urlencoder.org/ to try some examples. Multiple columns can be filtered. For example the filter for pet being either cat or dog , AND size being either tiny or outrageously small , would be {\"pet\": [\"cat\", \"dog\"], \"size\": [\"tiny\", \"outrageously small\"]} . sort string Example: sort=pet,-age Order in which to return results. If a single column name is given (e.g. pet ), results are placed in ascending order of values in that column. To get results in an order that was previously prepared manually in Grist, use the special manualSort column name. Multiple columns can be specified, separated by commas (e.g. pet,age ). For descending order, prefix a column name with a - character (e.g. pet,-age ). To include additional sorting options append them after a colon (e.g. pet,-age:naturalSort;emptyFirst,owner ). Available options are: choiceOrder , naturalSort , emptyFirst . Without the sort parameter, the order of results is unspecified. limit number Example: limit=5 Return at most this number of rows. A value of 0 is equivalent to having no limit. hidden boolean Set to true to include the hidden columns (like \"manualSort\") header Parameters X-Sort string Example: pet,-age Same as sort query parameter. X-Limit number Example: 5 Same as limit query parameter. Responses 200 Records from the table Response samples 200 Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"id\" : 1 , \"fields\" : { \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"id\" : 2 , \"fields\" : { \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } Add records to a table post /docs/{docId}/tables/{tableId}/records https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/records Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. Request Body schema: application/json the records to add records required Array of objects Responses 200 IDs of records added Request samples Payload Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"fields\" : { \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"fields\" : { \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } Response samples 200 Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"id\" : 1 } , { \"id\" : 2 } ] } Modify records of a table patch /docs/{docId}/tables/{tableId}/records https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/records Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. Request Body schema: application/json the records to change, with ids records required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"id\" : 1 , \"fields\" : { \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"id\" : 2 , \"fields\" : { \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } Add or update records of a table put /docs/{docId}/tables/{tableId}/records https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/records Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. onmany string Enum : \"first\" \"none\" \"all\" Which records to update if multiple records are found to match require . first - the first matching record (default) none - do not update anything all - update all matches noadd boolean Set to true to prohibit adding records. noupdate boolean Set to true to prohibit updating records. allow_empty_require boolean Set to true to allow require in the body to be empty, which will match and update all records in the table. Request Body schema: application/json The records to add or update. Instead of an id, a require object is provided, with the same structure as fields . If no query parameter options are set, then the operation is as follows. First, we check if a record exists matching the values specified for columns in require . If so, we update it by setting the values specified for columns in fields . If not, we create a new record with a combination of the values in require and fields , with fields taking priority if the same column is specified in both. The query parameters allow for variations on this behavior. records required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"require\" : { \"pet\" : \"cat\" } , \"fields\" : { \"popularity\" : 67 } } , { \"require\" : { \"pet\" : \"dog\" } , \"fields\" : { \"popularity\" : 95 } } ] } tables Documents are structured as a collection of tables. List tables in a document get /docs/{docId}/tables https://{subdomain}.getgrist.com/api /docs/{docId}/tables Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 The tables in a document Response samples 200 Content type application/json Copy Expand all Collapse all { \"tables\" : [ { \"id\" : \"People\" , \"fields\" : { \"tableRef\" : 1 , \"onDemand\" : true } } , { \"id\" : \"Places\" , \"fields\" : { \"tableRef\" : 2 , \"onDemand\" : false } } ] } Add tables to a document post /docs/{docId}/tables https://{subdomain}.getgrist.com/api /docs/{docId}/tables Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the tables to add tables required Array of objects Responses 200 The table created Request samples Payload Content type application/json Copy Expand all Collapse all { \"tables\" : [ { \"id\" : \"People\" , \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" } } ] } ] } Response samples 200 Content type application/json Copy Expand all Collapse all { \"tables\" : [ { \"id\" : \"People\" } , { \"id\" : \"Places\" } ] } Modify tables of a document patch /docs/{docId}/tables https://{subdomain}.getgrist.com/api /docs/{docId}/tables Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the tables to change, with ids tables required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"tables\" : [ { \"id\" : \"People\" , \"fields\" : { \"tableRef\" : 1 , \"onDemand\" : true } } , { \"id\" : \"Places\" , \"fields\" : { \"tableRef\" : 2 , \"onDemand\" : false } } ] } columns Tables are structured as a collection of columns. List columns in a table get /docs/{docId}/tables/{tableId}/columns https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters hidden boolean Set to true to include the hidden columns (like \"manualSort\") Responses 200 The columns in a table Response samples 200 Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" , \"type\" : \"Int\" } } ] } Add columns to a table post /docs/{docId}/tables/{tableId}/columns https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables Request Body schema: application/json the columns to add columns required Array of objects Responses 200 The columns created Request samples Payload Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" , \"type\" : \"Int\" } } , { \"id\" : \"Order\" , \"fields\" : { \"type\" : \"Ref:Orders\" , \"visibleCol\" : 2 } } , { \"id\" : \"Formula\" , \"fields\" : { \"type\" : \"Int\" , \"formula\" : \"$A + $B\" , \"isFormula\" : true } } , { \"id\" : \"Status\" , \"fields\" : { \"type\" : \"Choice\" , \"widgetOptions\" : \"{\\\"choices\\\":[\\\"New\\\",\\\"Old\\\"],\\\"choiceOptions\\\":{\\\"New\\\":{\\\"fillColor\\\":\\\"#FF0000\\\",\\\"textColor\\\":\\\"#FFFFFF\\\"}}}\" } } ] } Response samples 200 Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" } , { \"id\" : \"popularity\" } ] } Modify columns of a table patch /docs/{docId}/tables/{tableId}/columns https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables Request Body schema: application/json the columns to change, with ids columns required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" , \"type\" : \"Int\" } } ] } Add or update columns of a table put /docs/{docId}/tables/{tableId}/columns https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noadd boolean Set to true to prohibit adding columns. noupdate boolean Set to true to prohibit updating columns. replaceall boolean Set to true to remove existing columns (except the hidden ones) that are not specified in the request body. Request Body schema: application/json The columns to add or update. We check whether the specified column ID exists: if so, the column is updated with the provided data, otherwise a new column is created. Also note that some query parameters alter this behavior. columns required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" , \"type\" : \"Int\" } } ] } Delete a column of a table delete /docs/{docId}/tables/{tableId}/columns/{colId} https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns/{colId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables colId required string The column id (without the starting $ ) as shown in the column configuration below the label Responses 200 Success data Work with table data, using a (now deprecated) columnar format. We now recommend the records endpoints. Fetch data from a table Deprecated get /docs/{docId}/tables/{tableId}/data https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/data Deprecated in favor of records endpoints. We have no immediate plans to remove these endpoints, but consider records a better starting point for new projects. Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters filter string Example: filter={\"pet\": [\"cat\", \"dog\"]} This is a JSON object mapping column names to arrays of allowed values. For example, to filter column pet for values cat and dog , the filter would be {\"pet\": [\"cat\", \"dog\"]} . JSON contains characters that are not safe to place in a URL, so it is important to url-encode them. For this example, the url-encoding is %7B%22pet%22%3A%20%5B%22cat%22%2C%20%22dog%22%5D%7D . See https://rosettacode.org/wiki/URL_encoding for how to url-encode a string, or https://www.urlencoder.org/ to try some examples. Multiple columns can be filtered. For example the filter for pet being either cat or dog , AND size being either tiny or outrageously small , would be {\"pet\": [\"cat\", \"dog\"], \"size\": [\"tiny\", \"outrageously small\"]} . sort string Example: sort=pet,-age Order in which to return results. If a single column name is given (e.g. pet ), results are placed in ascending order of values in that column. To get results in an order that was previously prepared manually in Grist, use the special manualSort column name. Multiple columns can be specified, separated by commas (e.g. pet,age ). For descending order, prefix a column name with a - character (e.g. pet,-age ). To include additional sorting options append them after a colon (e.g. pet,-age:naturalSort;emptyFirst,owner ). Available options are: choiceOrder , naturalSort , emptyFirst . Without the sort parameter, the order of results is unspecified. limit number Example: limit=5 Return at most this number of rows. A value of 0 is equivalent to having no limit. header Parameters X-Sort string Example: pet,-age Same as sort query parameter. X-Limit number Example: 5 Same as limit query parameter. Responses 200 Cells from the table Response samples 200 Content type application/json Copy Expand all Collapse all { \"id\" : [ 1 , 2 ] , \"pet\" : [ \"cat\" , \"dog\" ] , \"popularity\" : [ 67 , 95 ] } Add rows to a table Deprecated post /docs/{docId}/tables/{tableId}/data https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/data Deprecated in favor of records endpoints. We have no immediate plans to remove these endpoints, but consider records a better starting point for new projects. Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. Request Body schema: application/json the data to add property name* additional property Array of objects Responses 200 IDs of rows added Request samples Payload Content type application/json Copy Expand all Collapse all { \"pet\" : [ \"cat\" , \"dog\" ] , \"popularity\" : [ 67 , 95 ] } Response samples 200 Content type application/json Copy [ 101 , 102 , 103 ] Modify rows of a table Deprecated patch /docs/{docId}/tables/{tableId}/data https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/data Deprecated in favor of records endpoints. We have no immediate plans to remove these endpoints, but consider records a better starting point for new projects. Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. Request Body schema: application/json the data to change, with ids id required Array of integers property name* additional property Array of objects Responses 200 IDs of rows modified Request samples Payload Content type application/json Copy Expand all Collapse all { \"id\" : [ 1 , 2 ] , \"pet\" : [ \"cat\" , \"dog\" ] , \"popularity\" : [ 67 , 95 ] } Response samples 200 Content type application/json Copy [ 101 , 102 , 103 ] Delete rows of a table post /docs/{docId}/tables/{tableId}/data/delete https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/data/delete Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables Request Body schema: application/json the IDs of rows to remove Array integer Responses 200 Nothing returned Request samples Payload Content type application/json Copy [ 101 , 102 , 103 ] attachments Documents may include attached files. Data records can refer to these using a column of type Attachments . List metadata of all attachments in a doc get /docs/{docId}/attachments https://{subdomain}.getgrist.com/api /docs/{docId}/attachments Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters filter string Example: filter={\"pet\": [\"cat\", \"dog\"]} This is a JSON object mapping column names to arrays of allowed values. For example, to filter column pet for values cat and dog , the filter would be {\"pet\": [\"cat\", \"dog\"]} . JSON contains characters that are not safe to place in a URL, so it is important to url-encode them. For this example, the url-encoding is %7B%22pet%22%3A%20%5B%22cat%22%2C%20%22dog%22%5D%7D . See https://rosettacode.org/wiki/URL_encoding for how to url-encode a string, or https://www.urlencoder.org/ to try some examples. Multiple columns can be filtered. For example the filter for pet being either cat or dog , AND size being either tiny or outrageously small , would be {\"pet\": [\"cat\", \"dog\"], \"size\": [\"tiny\", \"outrageously small\"]} . sort string Example: sort=pet,-age Order in which to return results. If a single column name is given (e.g. pet ), results are placed in ascending order of values in that column. To get results in an order that was previously prepared manually in Grist, use the special manualSort column name. Multiple columns can be specified, separated by commas (e.g. pet,age ). For descending order, prefix a column name with a - character (e.g. pet,-age ). To include additional sorting options append them after a colon (e.g. pet,-age:naturalSort;emptyFirst,owner ). Available options are: choiceOrder , naturalSort , emptyFirst . Without the sort parameter, the order of results is unspecified. limit number Example: limit=5 Return at most this number of rows. A value of 0 is equivalent to having no limit. header Parameters X-Sort string Example: pet,-age Same as sort query parameter. X-Limit number Example: 5 Same as limit query parameter. Responses 200 List of attachment metadata records. Note that the list may temporarily include records for attachments that are stored in the document but not referenced by any Attachments type cell. Response samples 200 Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"id\" : 1 , \"fields\" : { \"fileName\" : \"logo.png\" , \"fileSize\" : 12345 , \"timeUploaded\" : \"2020-02-13T12:17:19.000Z\" } } ] } Upload attachments to a doc post /docs/{docId}/attachments https://{subdomain}.getgrist.com/api /docs/{docId}/attachments Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: multipart/form-data the files to add to the doc upload Array of strings < binary > Responses 200 IDs of attachments added, one per file. Response samples 200 Content type application/json Copy [ 101 , 102 , 103 ] Get the metadata for an attachment get /docs/{docId}/attachments/{attachmentId} https://{subdomain}.getgrist.com/api /docs/{docId}/attachments/{attachmentId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) attachmentId required number ( AttachmentId ) An integer ID Responses 200 Attachment metadata Response samples 200 Content type application/json Copy { \"fileName\" : \"logo.png\" , \"fileSize\" : 12345 , \"timeUploaded\" : \"2020-02-13T12:17:19.000Z\" } Download the contents of an attachment get /docs/{docId}/attachments/{attachmentId}/download https://{subdomain}.getgrist.com/api /docs/{docId}/attachments/{attachmentId}/download Authorizations: ApiKey path Parameters docId required string A string id (UUID) attachmentId required number ( AttachmentId ) An integer ID Responses 200 Attachment contents, with suitable Content-Type. webhooks Document changes can trigger requests to URLs called webhooks. Webhooks associated with a document get /docs/{docId}/webhooks https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 A list of webhooks. Response samples 200 Content type application/json Copy Expand all Collapse all { \"webhooks\" : [ { \"id\" : \"xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx\" , \"fields\" : { \"name\" : \"new-project-email\" , \"memo\" : \"Send an email when a project is added\" , \"url\" : \" https://example.com/webhook/123 \" , \"enabled\" : true , \"eventTypes\" : [ \"add\" , \"update\" ] , \"isReadyColumn\" : null , \"tableId\" : \"Projects\" , \"unsubscribeKey\" : \"string\" } , \"usage\" : { \"numWaiting\" : 0 , \"status\" : \"idle\" , \"updatedTime\" : 1685637500424 , \"lastSuccessTime\" : 1685637500424 , \"lastFailureTime\" : 1685637500424 , \"lastErrorMessage\" : null , \"lastHttpStatus\" : 200 , \"lastEventBatch\" : { \"size\" : 1 , \"attempts\" : 1 , \"errorMessage\" : null , \"httpStatus\" : 200 , \"status\" : \"success\" } } } ] } Create new webhooks for a document post /docs/{docId}/webhooks https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json an array of webhook settings webhooks required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"webhooks\" : [ { \"fields\" : { \"name\" : \"new-project-email\" , \"memo\" : \"Send an email when a project is added\" , \"url\" : \" https://example.com/webhook/123 \" , \"enabled\" : true , \"eventTypes\" : [ \"add\" , \"update\" ] , \"isReadyColumn\" : null , \"tableId\" : \"Projects\" } } ] } Response samples 200 Content type application/json Copy Expand all Collapse all { \"webhooks\" : [ { \"id\" : \"xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx\" } ] } Modify a webhook patch /docs/{docId}/webhooks/{webhookId} https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks/{webhookId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) webhookId required string Request Body schema: application/json the changes to make name string or null memo string or null url string < uri > enabled boolean eventTypes Array of strings isReadyColumn string or null tableId string Responses 200 Success. Request samples Payload Content type application/json Copy Expand all Collapse all { \"name\" : \"new-project-email\" , \"memo\" : \"Send an email when a project is added\" , \"url\" : \" https://example.com/webhook/123 \" , \"enabled\" : true , \"eventTypes\" : [ \"add\" , \"update\" ] , \"isReadyColumn\" : null , \"tableId\" : \"Projects\" } Remove a webhook delete /docs/{docId}/webhooks/{webhookId} https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks/{webhookId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) webhookId required string Responses 200 Success. Response samples 200 Content type application/json Copy { \"success\" : true } Empty a document's queue of undelivered payloads delete /docs/{docId}/webhooks/queue https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks/queue Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 Success. sql Sql endpoint to query data from documents. Run an SQL query against a document get /docs/{docId}/sql https://{subdomain}.getgrist.com/api /docs/{docId}/sql Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters q string The SQL query to run. This GET endpoint is a simplified version of the corresponding POST endpoint, without support for parameters or options. See the POST endpoint for details of what's allowed in the SQL query string. Responses 200 The result set for the query. Response samples 200 Content type application/json Copy Expand all Collapse all { \"statement\" : \"select * from Pets ...\" , \"records\" : [ { \"fields\" : { \"id\" : 1 , \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"fields\" : { \"id\" : 2 , \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } Run an SQL query against a document, with options or parameters post /docs/{docId}/sql https://{subdomain}.getgrist.com/api /docs/{docId}/sql Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json Query options sql required string The SQL query to run. Must be a single SELECT statement, with no trailing semicolon. WITH clauses are permitted. All Grist documents are currently SQLite databases, and the SQL query is interpreted and run by SQLite, with various defensive measures. Statements that would modify the database are not supported. args Array of numbers or strings Parameters for the query. timeout number Timeout after which operations on the document will be interrupted. Specified in milliseconds. Defaults to 1000 (1 second). This default is controlled by an optional environment variable read by the Grist app, GRIST_SQL_TIMEOUT_MSEC. The default cannot be exceeded, only reduced. Responses 200 The result set for the query. Request samples Payload Content type application/json Copy Expand all Collapse all { \"sql\" : \"select * from Pets where popularity >= ?\" , \"args\" : [ 50 ] , \"timeout\" : 500 } Response samples 200 Content type application/json Copy Expand all Collapse all { \"statement\" : \"select * from Pets ...\" , \"records\" : [ { \"fields\" : { \"id\" : 1 , \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"fields\" : { \"id\" : 2 , \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } users Grist users. Delete a user from Grist delete /users/{userId} https://{subdomain}.getgrist.com/api /users/{userId} This action also deletes the user's personal organisation and all the workspaces and documents it contains. Currently, only the users themselves are allowed to delete their own accounts. \u26a0\ufe0f This action cannot be undone, please be cautious when using this endpoint \u26a0\ufe0f Authorizations: ApiKey path Parameters userId required integer A user id Request Body schema: application/json name required string The user's name to delete (for confirmation, to avoid deleting the wrong account). Responses 200 The account has been deleted successfully 400 The passed user name does not match the one retrieved from the database given the passed user id 403 The caller is not allowed to delete this account 404 The user is not found Request samples Payload Content type application/json Copy { \"name\" : \"John Doe\" } const __redoc_state = {\"menu\":{\"activeItemIdx\":-1},\"spec\":{\"data\":{\"info\":{\"description\":\"An API for manipulating Grist sites, workspaces, and documents.\\n\\n# Authentication\\n\\n\",\"version\":\"1.0.1\",\"title\":\"Grist API\"},\"openapi\":\"3.0.0\",\"security\":[{\"ApiKey\":[]}],\"servers\":[{\"url\":\"https://{subdomain}.getgrist.com/api\",\"variables\":{\"subdomain\":{\"description\":\"The team name, or `docs` for personal areas\",\"default\":\"docs\"}}}],\"paths\":{\"/orgs\":{\"get\":{\"operationId\":\"listOrgs\",\"tags\":[\"orgs\"],\"summary\":\"List the orgs you have access to\",\"description\":\"This enumerates all the team sites or personal areas available.\",\"responses\":{\"200\":{\"description\":\"An array of organizations\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Orgs\"}}}}}}},\"/orgs/{orgId}\":{\"get\":{\"operationId\":\"describeOrg\",\"tags\":[\"orgs\"],\"summary\":\"Describe an org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"An organization\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Org\"}}}}}},\"patch\":{\"operationId\":\"modifyOrg\",\"tags\":[\"orgs\"],\"summary\":\"Modify an org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/OrgParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"delete\":{\"operationId\":\"deleteOrg\",\"tags\":[\"orgs\"],\"summary\":\"Delete an org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success\"},\"403\":{\"description\":\"Access denied\"},\"404\":{\"description\":\"Not found\"}}}},\"/orgs/{orgId}/access\":{\"get\":{\"operationId\":\"listOrgAccess\",\"tags\":[\"orgs\"],\"summary\":\"List users with access to org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Users with access to org\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/OrgAccessRead\"}}}}}},\"patch\":{\"operationId\":\"modifyOrgAccess\",\"tags\":[\"orgs\"],\"summary\":\"Change who has access to org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"delta\"],\"properties\":{\"delta\":{\"$ref\":\"#/components/schemas/OrgAccessWrite\"}}}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/orgs/{orgId}/workspaces\":{\"get\":{\"operationId\":\"listWorkspaces\",\"tags\":[\"workspaces\"],\"summary\":\"List workspaces and documents within an org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"An org's workspaces and documents\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WorkspaceWithDocsAndDomain\"}}}}}}},\"post\":{\"operationId\":\"createWorkspace\",\"tags\":[\"workspaces\"],\"summary\":\"Create an empty workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"requestBody\":{\"description\":\"settings for the workspace\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WorkspaceParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"The workspace id\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"integer\",\"description\":\"an identifier for the workspace\",\"example\":155}}}}}}},\"/workspaces/{workspaceId}\":{\"get\":{\"operationId\":\"describeWorkspace\",\"tags\":[\"workspaces\"],\"summary\":\"Describe a workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"A workspace\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WorkspaceWithDocsAndOrg\"}}}}}},\"patch\":{\"operationId\":\"modifyWorkspace\",\"tags\":[\"workspaces\"],\"summary\":\"Modify a workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WorkspaceParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"delete\":{\"operationId\":\"deleteWorkspace\",\"tags\":[\"workspaces\"],\"summary\":\"Delete a workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/workspaces/{workspaceId}/docs\":{\"post\":{\"operationId\":\"createDoc\",\"tags\":[\"docs\"],\"summary\":\"Create an empty document\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"requestBody\":{\"description\":\"settings for the document\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"The document id\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"string\",\"description\":\"a unique identifier for the document\",\"example\":\"8b97c8db-b4df-4b34-b72c-17459e70140a\"}}}}}}},\"/workspaces/{workspaceId}/access\":{\"get\":{\"operationId\":\"listWorkspaceAccess\",\"tags\":[\"workspaces\"],\"summary\":\"List users with access to workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Users with access to workspace\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WorkspaceAccessRead\"}}}}}},\"patch\":{\"operationId\":\"modifyWorkspaceAccess\",\"tags\":[\"workspaces\"],\"summary\":\"Change who has access to workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"delta\"],\"properties\":{\"delta\":{\"$ref\":\"#/components/schemas/WorkspaceAccessWrite\"}}}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}\":{\"get\":{\"operationId\":\"describeDoc\",\"tags\":[\"docs\"],\"summary\":\"Describe a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"A document's metadata\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocWithWorkspace\"}}}}}},\"patch\":{\"operationId\":\"modifyDoc\",\"tags\":[\"docs\"],\"summary\":\"Modify document metadata (but not its contents)\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"delete\":{\"operationId\":\"deleteDoc\",\"tags\":[\"docs\"],\"summary\":\"Delete a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/move\":{\"patch\":{\"operationId\":\"moveDoc\",\"tags\":[\"docs\"],\"summary\":\"Move document to another workspace.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the target workspace\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"workspace\"],\"properties\":{\"workspace\":{\"type\":\"integer\",\"example\":597}}}}}},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/access\":{\"get\":{\"operationId\":\"listDocAccess\",\"tags\":[\"docs\"],\"summary\":\"List users with access to document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Users with access to document\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocAccessRead\"}}}}}},\"patch\":{\"operationId\":\"modifyDocAccess\",\"tags\":[\"docs\"],\"summary\":\"Change who has access to document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"delta\"],\"properties\":{\"delta\":{\"$ref\":\"#/components/schemas/DocAccessWrite\"}}}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/download\":{\"get\":{\"operationId\":\"downloadDoc\",\"tags\":[\"docs\"],\"summary\":\"Content of document, as an Sqlite file\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"query\",\"name\":\"nohistory\",\"schema\":{\"type\":\"boolean\",\"description\":\"Remove document history (can significantly reduce file size)\"},\"required\":false},{\"in\":\"query\",\"name\":\"template\",\"schema\":{\"type\":\"boolean\",\"description\":\"Remove all data and history but keep the structure to use the document as a template\"},\"required\":false}],\"responses\":{\"200\":{\"description\":\"A document's content in Sqlite form\",\"content\":{\"application/x-sqlite3\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"}}}}}}},\"/docs/{docId}/download/xlsx\":{\"get\":{\"operationId\":\"downloadDocXlsx\",\"tags\":[\"docs\"],\"summary\":\"Content of document, as an Excel file\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/headerQueryParam\"}],\"responses\":{\"200\":{\"description\":\"A document's content in Excel form\",\"content\":{\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"}}}}}}},\"/docs/{docId}/download/csv\":{\"get\":{\"operationId\":\"downloadDocCsv\",\"tags\":[\"docs\"],\"summary\":\"Content of table, as a CSV file\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"query\",\"name\":\"tableId\",\"schema\":{\"type\":\"string\",\"description\":\"Name of a table (normalized).\"},\"required\":true},{\"$ref\":\"#/components/parameters/headerQueryParam\"}],\"responses\":{\"200\":{\"description\":\"A table's content in CSV form\",\"content\":{\"text/csv\":{\"schema\":{\"type\":\"string\"}}}}}}},\"/docs/{docId}/download/table-schema\":{\"get\":{\"operationId\":\"downloadTableSchema\",\"tags\":[\"docs\"],\"summary\":\"The schema of a table\",\"description\":\"The schema follows [frictionlessdata's table-schema standard](https://specs.frictionlessdata.io/table-schema/).\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"query\",\"name\":\"tableId\",\"schema\":{\"type\":\"string\",\"description\":\"Name of a table (normalized).\"},\"required\":true},{\"$ref\":\"#/components/parameters/headerQueryParam\"}],\"responses\":{\"200\":{\"description\":\"A table's table-schema in JSON format.\",\"content\":{\"text/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TableSchemaResult\"}}}}}}},\"/docs/{docId}/states/remove\":{\"post\":{\"operationId\":\"deleteActions\",\"tags\":[\"docs\"],\"summary\":\"Truncate the document's action history\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"keep\"],\"properties\":{\"keep\":{\"type\":\"integer\",\"description\":\"The number of the latest history actions to keep\"}},\"example\":{\"keep\":3}}}}}}},\"/docs/{docId}/force-reload\":{\"post\":{\"operationId\":\"forceReload\",\"tags\":[\"docs\"],\"summary\":\"Reload a document\",\"description\":\"Closes and reopens the document, forcing the python engine to restart.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Document reloaded successfully\"}}}},\"/docs/{docId}/tables/{tableId}/data\":{\"get\":{\"operationId\":\"getTableData\",\"tags\":[\"data\"],\"summary\":\"Fetch data from a table\",\"deprecated\":true,\"description\":\"Deprecated in favor of `records` endpoints. We have no immediate plans to remove these endpoints, but consider `records` a better starting point for new projects.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/filterQueryParam\"},{\"$ref\":\"#/components/parameters/sortQueryParam\"},{\"$ref\":\"#/components/parameters/limitQueryParam\"},{\"$ref\":\"#/components/parameters/sortHeaderParam\"},{\"$ref\":\"#/components/parameters/limitHeaderParam\"}],\"responses\":{\"200\":{\"description\":\"Cells from the table\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Data\"}}}}}},\"post\":{\"operationId\":\"addRows\",\"tags\":[\"data\"],\"summary\":\"Add rows to a table\",\"deprecated\":true,\"description\":\"Deprecated in favor of `records` endpoints. We have no immediate plans to remove these endpoints, but consider `records` a better starting point for new projects.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"}],\"requestBody\":{\"description\":\"the data to add\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DataWithoutId\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"IDs of rows added\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RowIds\"}}}}}},\"patch\":{\"operationId\":\"modifyRows\",\"tags\":[\"data\"],\"summary\":\"Modify rows of a table\",\"deprecated\":true,\"description\":\"Deprecated in favor of `records` endpoints. We have no immediate plans to remove these endpoints, but consider `records` a better starting point for new projects.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"}],\"requestBody\":{\"description\":\"the data to change, with ids\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Data\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"IDs of rows modified\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RowIds\"}}}}}}},\"/docs/{docId}/tables/{tableId}/data/delete\":{\"post\":{\"operationId\":\"deleteRows\",\"tags\":[\"data\"],\"summary\":\"Delete rows of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"}],\"requestBody\":{\"description\":\"the IDs of rows to remove\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RowIds\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Nothing returned\"}}}},\"/docs/{docId}/attachments\":{\"get\":{\"operationId\":\"listAttachments\",\"tags\":[\"attachments\"],\"summary\":\"List metadata of all attachments in a doc\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/filterQueryParam\"},{\"$ref\":\"#/components/parameters/sortQueryParam\"},{\"$ref\":\"#/components/parameters/limitQueryParam\"},{\"$ref\":\"#/components/parameters/sortHeaderParam\"},{\"$ref\":\"#/components/parameters/limitHeaderParam\"}],\"responses\":{\"200\":{\"description\":\"List of attachment metadata records. Note that the list may temporarily include records for attachments that are stored in the document but not referenced by any Attachments type cell.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AttachmentMetadataList\"}}}}}},\"post\":{\"operationId\":\"uploadAttachments\",\"tags\":[\"attachments\"],\"summary\":\"Upload attachments to a doc\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the files to add to the doc\",\"content\":{\"multipart/form-data\":{\"schema\":{\"$ref\":\"#/components/schemas/AttachmentUpload\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"IDs of attachments added, one per file.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RowIds\"}}}}}}},\"/docs/{docId}/attachments/{attachmentId}\":{\"get\":{\"operationId\":\"getAttachmentMetadata\",\"tags\":[\"attachments\"],\"summary\":\"Get the metadata for an attachment\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"path\",\"name\":\"attachmentId\",\"schema\":{\"$ref\":\"#/components/schemas/AttachmentId\"},\"required\":true}],\"responses\":{\"200\":{\"description\":\"Attachment metadata\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AttachmentMetadata\"}}}}}}},\"/docs/{docId}/attachments/{attachmentId}/download\":{\"get\":{\"operationId\":\"downloadAttachment\",\"tags\":[\"attachments\"],\"summary\":\"Download the contents of an attachment\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"path\",\"name\":\"attachmentId\",\"schema\":{\"$ref\":\"#/components/schemas/AttachmentId\"},\"required\":true}],\"responses\":{\"200\":{\"description\":\"Attachment contents, with suitable Content-Type.\"}}}},\"/docs/{docId}/tables/{tableId}/records\":{\"get\":{\"operationId\":\"listRecords\",\"tags\":[\"records\"],\"summary\":\"Fetch records from a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/filterQueryParam\"},{\"$ref\":\"#/components/parameters/sortQueryParam\"},{\"$ref\":\"#/components/parameters/limitQueryParam\"},{\"$ref\":\"#/components/parameters/sortHeaderParam\"},{\"$ref\":\"#/components/parameters/limitHeaderParam\"},{\"$ref\":\"#/components/parameters/hiddenQueryParam\"}],\"responses\":{\"200\":{\"description\":\"Records from the table\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsList\"}}}}}},\"post\":{\"operationId\":\"addRecords\",\"tags\":[\"records\"],\"summary\":\"Add records to a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"}],\"requestBody\":{\"description\":\"the records to add\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsWithoutId\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"IDs of records added\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsWithoutFields\"}}}}}},\"patch\":{\"operationId\":\"modifyRecords\",\"tags\":[\"records\"],\"summary\":\"Modify records of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"}],\"requestBody\":{\"description\":\"the records to change, with ids\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsList\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"put\":{\"operationId\":\"replaceRecords\",\"tags\":[\"records\"],\"summary\":\"Add or update records of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"},{\"in\":\"query\",\"name\":\"onmany\",\"schema\":{\"type\":\"string\",\"enum\":[\"first\",\"none\",\"all\"],\"description\":\"Which records to update if multiple records are found to match `require`.\\n * `first` - the first matching record (default)\\n * `none` - do not update anything\\n * `all` - update all matches\\n\"}},{\"in\":\"query\",\"name\":\"noadd\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to prohibit adding records.\"}},{\"in\":\"query\",\"name\":\"noupdate\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to prohibit updating records.\"}},{\"in\":\"query\",\"name\":\"allow_empty_require\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to allow `require` in the body to be empty, which will match and update all records in the table.\"}}],\"requestBody\":{\"description\":\"The records to add or update. Instead of an id, a `require` object is provided, with the same structure as `fields`. If no query parameter options are set, then the operation is as follows. First, we check if a record exists matching the values specified for columns in `require`. If so, we update it by setting the values specified for columns in `fields`. If not, we create a new record with a combination of the values in `require` and `fields`, with `fields` taking priority if the same column is specified in both. The query parameters allow for variations on this behavior.\\n\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsWithRequire\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/tables\":{\"get\":{\"operationId\":\"listTables\",\"tags\":[\"tables\"],\"summary\":\"List tables in a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"The tables in a document\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TablesList\"}}}}}},\"post\":{\"operationId\":\"addTables\",\"tags\":[\"tables\"],\"summary\":\"Add tables to a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the tables to add\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateTables\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"The table created\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TablesWithoutFields\"}}}}}},\"patch\":{\"operationId\":\"modifyTables\",\"tags\":[\"tables\"],\"summary\":\"Modify tables of a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the tables to change, with ids\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TablesList\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/tables/{tableId}/columns\":{\"get\":{\"operationId\":\"listColumns\",\"tags\":[\"columns\"],\"summary\":\"List columns in a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/hiddenQueryParam\"}],\"responses\":{\"200\":{\"description\":\"The columns in a table\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ColumnsList\"}}}}}},\"post\":{\"operationId\":\"addColumns\",\"tags\":[\"columns\"],\"summary\":\"Add columns to a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"}],\"requestBody\":{\"description\":\"the columns to add\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateColumns\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"The columns created\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ColumnsWithoutFields\"}}}}}},\"patch\":{\"operationId\":\"modifyColumns\",\"tags\":[\"columns\"],\"summary\":\"Modify columns of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"}],\"requestBody\":{\"description\":\"the columns to change, with ids\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/UpdateColumns\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"put\":{\"operationId\":\"replaceColumns\",\"tags\":[\"columns\"],\"summary\":\"Add or update columns of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"in\":\"query\",\"name\":\"noadd\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to prohibit adding columns.\"}},{\"in\":\"query\",\"name\":\"noupdate\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to prohibit updating columns.\"}},{\"in\":\"query\",\"name\":\"replaceall\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to remove existing columns (except the hidden ones) that are not specified in the request body.\"}}],\"requestBody\":{\"description\":\"The columns to add or update. We check whether the specified column ID exists: if so, the column is updated with the provided data, otherwise a new column is created.\\nAlso note that some query parameters alter this behavior.\\n\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/UpdateColumns\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/tables/{tableId}/columns/{colId}\":{\"delete\":{\"operationId\":\"deleteColumn\",\"tags\":[\"columns\"],\"summary\":\"Delete a column of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/colIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/webhooks\":{\"get\":{\"tags\":[\"webhooks\"],\"summary\":\"Webhooks associated with a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"A list of webhooks.\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"webhooks\"],\"properties\":{\"webhooks\":{\"type\":\"object\",\"$ref\":\"#/components/schemas/Webhooks\"}}}}}}}},\"post\":{\"tags\":[\"webhooks\"],\"summary\":\"Create new webhooks for a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"an array of webhook settings\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"webhooks\"],\"properties\":{\"webhooks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"fields\"],\"properties\":{\"fields\":{\"$ref\":\"#/components/schemas/WebhookPartialFields\"}}}}}}}}},\"responses\":{\"200\":{\"description\":\"Success\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"webhooks\"],\"properties\":{\"webhooks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"$ref\":\"#/components/schemas/WebhookId\"}}}}}}}}}},\"/docs/{docId}/webhooks/{webhookId}\":{\"patch\":{\"tags\":[\"webhooks\"],\"summary\":\"Modify a webhook\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"path\",\"name\":\"webhookId\",\"schema\":{\"type\":\"string\"},\"required\":true}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookPartialFields\"}}}},\"responses\":{\"200\":{\"description\":\"Success.\"}}},\"delete\":{\"tags\":[\"webhooks\"],\"summary\":\"Remove a webhook\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"path\",\"name\":\"webhookId\",\"schema\":{\"type\":\"string\"},\"required\":true}],\"responses\":{\"200\":{\"description\":\"Success.\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"success\"],\"properties\":{\"success\":{\"type\":\"boolean\",\"example\":true}}}}}}}}},\"/docs/{docId}/webhooks/queue\":{\"delete\":{\"tags\":[\"webhooks\"],\"summary\":\"Empty a document's queue of undelivered payloads\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success.\"}}}},\"/docs/{docId}/sql\":{\"get\":{\"tags\":[\"sql\"],\"summary\":\"Run an SQL query against a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"query\",\"name\":\"q\",\"schema\":{\"type\":\"string\",\"description\":\"The SQL query to run. This GET endpoint is a simplified version of the corresponding POST endpoint, without support for parameters or options. See the POST endpoint for details of what's allowed in the SQL query string.\"}}],\"responses\":{\"200\":{\"description\":\"The result set for the query.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SqlResultSet\"}}}}}},\"post\":{\"tags\":[\"sql\"],\"summary\":\"Run an SQL query against a document, with options or parameters\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"Query options\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"sql\"],\"properties\":{\"sql\":{\"type\":\"string\",\"description\":\"The SQL query to run. Must be a single SELECT statement, with no trailing semicolon. WITH clauses are permitted. All Grist documents are currently SQLite databases, and the SQL query is interpreted and run by SQLite, with various defensive measures. Statements that would modify the database are not supported.\",\"example\":\"select * from Pets where popularity >= ?\"},\"args\":{\"type\":\"array\",\"items\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"description\":\"Parameters for the query.\",\"example\":[50]},\"timeout\":{\"type\":\"number\",\"description\":\"Timeout after which operations on the document will be interrupted. Specified in milliseconds. Defaults to 1000 (1 second). This default is controlled by an optional environment variable read by the Grist app, GRIST_SQL_TIMEOUT_MSEC. The default cannot be exceeded, only reduced.\",\"example\":500}}}}}},\"responses\":{\"200\":{\"description\":\"The result set for the query.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SqlResultSet\"}}}}}}},\"/users/{userId}\":{\"delete\":{\"tags\":[\"users\"],\"summary\":\"Delete a user from Grist\",\"description\":\"This action also deletes the user's personal organisation and all the workspaces and documents it contains.\\nCurrently, only the users themselves are allowed to delete their own accounts.\\n\\n\u26a0\ufe0f **This action cannot be undone, please be cautious when using this endpoint** \u26a0\ufe0f\\n\",\"parameters\":[{\"$ref\":\"#/components/parameters/userIdPathParam\"}],\"requestBody\":{\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"name\"],\"properties\":{\"name\":{\"type\":\"string\",\"description\":\"The user's name to delete (for confirmation, to avoid deleting the wrong account).\",\"example\":\"John Doe\"}}}}}},\"responses\":{\"200\":{\"description\":\"The account has been deleted successfully\"},\"400\":{\"description\":\"The passed user name does not match the one retrieved from the database given the passed user id\"},\"403\":{\"description\":\"The caller is not allowed to delete this account\"},\"404\":{\"description\":\"The user is not found\"}}}}},\"tags\":[{\"name\":\"orgs\",\"description\":\"Team sites and personal spaces are called 'orgs' in the API.\"},{\"name\":\"workspaces\",\"description\":\"Sites can be organized into groups of documents called workspaces.\"},{\"name\":\"docs\",\"description\":\"Workspaces contain collections of Grist documents.\"},{\"name\":\"records\",\"description\":\"Tables contain collections of records (also called rows).\"},{\"name\":\"tables\",\"description\":\"Documents are structured as a collection of tables.\"},{\"name\":\"columns\",\"description\":\"Tables are structured as a collection of columns.\"},{\"name\":\"data\",\"description\":\"Work with table data, using a (now deprecated) columnar format. We now recommend the `records` endpoints.\"},{\"name\":\"attachments\",\"description\":\"Documents may include attached files. Data records can refer to these using a column of type `Attachments`.\"},{\"name\":\"webhooks\",\"description\":\"Document changes can trigger requests to URLs called webhooks.\"},{\"name\":\"sql\",\"description\":\"Sql endpoint to query data from documents.\"},{\"name\":\"users\",\"description\":\"Grist users.\"}],\"components\":{\"securitySchemes\":{\"ApiKey\":{\"type\":\"http\",\"scheme\":\"bearer\",\"bearerFormat\":\"Authorization: Bearer XXXXXXXXXXX\",\"description\":\"Access to the Grist API is controlled by an Authorization header, which should contain the word 'Bearer', followed by a space, followed by your API key.\"}},\"schemas\":{\"Org\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"domain\",\"owner\",\"createdAt\",\"updatedAt\",\"access\"],\"properties\":{\"id\":{\"type\":\"integer\",\"format\":\"int64\",\"example\":42},\"name\":{\"type\":\"string\",\"example\":\"Grist Labs\"},\"domain\":{\"type\":\"string\",\"nullable\":true,\"example\":\"gristlabs\"},\"owner\":{\"type\":\"object\",\"$ref\":\"#/components/schemas/User\",\"nullable\":true},\"access\":{\"type\":\"string\",\"$ref\":\"#/components/schemas/Access\"},\"createdAt\":{\"type\":\"string\",\"example\":\"2019-09-13T15:42:35.000Z\"},\"updatedAt\":{\"type\":\"string\",\"example\":\"2019-09-13T15:42:35.000Z\"}}},\"Orgs\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Org\"}},\"Webhooks\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Webhook\"}},\"Webhook\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"format\":\"uuid\",\"example\":\"xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx\"},\"fields\":{\"$ref\":\"#/components/schemas/WebhookFields\"},\"usage\":{\"$ref\":\"#/components/schemas/WebhookUsage\"}}},\"WebhookFields\":{\"allOf\":[{\"$ref\":\"#/components/schemas/WebhookPartialFields\"},{\"$ref\":\"#/components/schemas/WebhookRequiredFields\"}]},\"WebhookRequiredFields\":{\"type\":\"object\",\"required\":[\"name\",\"memo\",\"url\",\"enabled\",\"unsubscribeKey\",\"eventTypes\",\"isReadyColumn\",\"tableId\"],\"properties\":{\"unsubscribeKey\":{\"type\":\"string\"}}},\"WebhookPartialFields\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"new-project-email\",\"nullable\":true},\"memo\":{\"type\":\"string\",\"example\":\"Send an email when a project is added\",\"nullable\":true},\"url\":{\"type\":\"string\",\"format\":\"uri\",\"example\":\"https://example.com/webhook/123\"},\"enabled\":{\"type\":\"boolean\"},\"eventTypes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"example\":[\"add\",\"update\"]},\"isReadyColumn\":{\"type\":\"string\",\"nullable\":true,\"example\":null},\"tableId\":{\"type\":\"string\",\"example\":\"Projects\"}}},\"WebhookUsage\":{\"type\":\"object\",\"nullable\":true,\"required\":[\"numWaiting\",\"status\"],\"properties\":{\"numWaiting\":{\"type\":\"integer\"},\"status\":{\"type\":\"string\",\"example\":\"idle\"},\"updatedTime\":{\"type\":\"number\",\"nullable\":true,\"format\":\"UNIX epoch in milliseconds\",\"example\":1685637500424},\"lastSuccessTime\":{\"type\":\"number\",\"nullable\":true,\"format\":\"UNIX epoch in milliseconds\",\"example\":1685637500424},\"lastFailureTime\":{\"type\":\"number\",\"nullable\":true,\"format\":\"UNIX epoch in milliseconds\",\"example\":1685637500424},\"lastErrorMessage\":{\"type\":\"string\",\"nullable\":true,\"example\":null},\"lastHttpStatus\":{\"type\":\"number\",\"nullable\":true,\"example\":200},\"lastEventBatch\":{\"$ref\":\"#/components/schemas/WebhookBatchStatus\"}}},\"WebhookBatchStatus\":{\"type\":\"object\",\"nullable\":true,\"required\":[\"size\",\"attempts\",\"status\"],\"properties\":{\"size\":{\"type\":\"number\",\"example\":1},\"attempts\":{\"type\":\"number\",\"example\":1},\"errorMessage\":{\"type\":\"string\",\"nullable\":true,\"example\":null},\"httpStatus\":{\"type\":\"number\",\"example\":200},\"status\":{\"type\":\"string\",\"example\":\"success\"}}},\"WebhookId\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Webhook identifier\",\"example\":\"xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx\"}}},\"WebhookRequiredProperties\":{\"type\":\"object\",\"required\":[\"size\"],\"properties\":{\"size\":{\"type\":\"number\",\"example\":1}}},\"WebhookProperties\":{\"size\":{\"type\":\"number\",\"example\":1},\"attempts\":{\"type\":\"number\",\"example\":1},\"errorMessage\":{\"type\":\"string\",\"nullable\":true,\"example\":null},\"httpStatus\":{\"type\":\"number\",\"example\":200},\"status\":{\"type\":\"string\",\"example\":\"success\"}},\"Workspace\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"access\"],\"properties\":{\"id\":{\"type\":\"integer\",\"format\":\"int64\",\"example\":97},\"name\":{\"type\":\"string\",\"example\":\"Secret Plans\"},\"access\":{\"type\":\"string\",\"$ref\":\"#/components/schemas/Access\"}}},\"Doc\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"isPinned\",\"urlId\",\"access\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":145},\"name\":{\"type\":\"string\",\"example\":\"Project Lollipop\"},\"access\":{\"type\":\"string\",\"$ref\":\"#/components/schemas/Access\"},\"isPinned\":{\"type\":\"boolean\",\"example\":true},\"urlId\":{\"type\":\"string\",\"nullable\":true,\"example\":null}}},\"WorkspaceWithDocs\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Workspace\"},{\"type\":\"object\",\"required\":[\"docs\"],\"properties\":{\"docs\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Doc\"}}}}]},\"WorkspaceWithDocsAndDomain\":{\"allOf\":[{\"$ref\":\"#/components/schemas/WorkspaceWithDocs\"},{\"type\":\"object\",\"properties\":{\"orgDomain\":{\"type\":\"string\",\"example\":\"gristlabs\"}}}]},\"WorkspaceWithOrg\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Workspace\"},{\"type\":\"object\",\"required\":[\"org\"],\"properties\":{\"org\":{\"$ref\":\"#/components/schemas/Org\"}}}]},\"WorkspaceWithDocsAndOrg\":{\"allOf\":[{\"$ref\":\"#/components/schemas/WorkspaceWithDocs\"},{\"$ref\":\"#/components/schemas/WorkspaceWithOrg\"}]},\"DocWithWorkspace\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Doc\"},{\"type\":\"object\",\"required\":[\"workspace\"],\"properties\":{\"workspace\":{\"$ref\":\"#/components/schemas/WorkspaceWithOrg\"}}}]},\"User\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"picture\"],\"properties\":{\"id\":{\"type\":\"integer\",\"format\":\"int64\",\"example\":101},\"name\":{\"type\":\"string\",\"example\":\"Helga Hufflepuff\"},\"picture\":{\"type\":\"string\",\"nullable\":true,\"example\":null}}},\"Access\":{\"type\":\"string\",\"enum\":[\"owners\",\"editors\",\"viewers\"]},\"Data\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"array\",\"items\":{\"type\":\"integer\"}}},\"additionalProperties\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"example\":{\"id\":[1,2],\"pet\":[\"cat\",\"dog\"],\"popularity\":[67,95]}},\"DataWithoutId\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"example\":{\"pet\":[\"cat\",\"dog\"],\"popularity\":[67,95]}},\"RecordsList\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"fields\"],\"properties\":{\"id\":{\"type\":\"number\",\"example\":1},\"fields\":{\"type\":\"object\",\"description\":\"A JSON object mapping column names to [cell values](https://support.getgrist.com/code/interfaces/grist_plugin_api.rowrecord/#cellvalues).\"}}}}},\"example\":{\"records\":[{\"id\":1,\"fields\":{\"pet\":\"cat\",\"popularity\":67}},{\"id\":2,\"fields\":{\"pet\":\"dog\",\"popularity\":95}}]}},\"RecordsWithoutId\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"fields\"],\"properties\":{\"fields\":{\"type\":\"object\",\"description\":\"A JSON object mapping column names to [cell values](https://support.getgrist.com/code/interfaces/grist_plugin_api.rowrecord/#cellvalues).\"}}}}},\"example\":{\"records\":[{\"fields\":{\"pet\":\"cat\",\"popularity\":67}},{\"fields\":{\"pet\":\"dog\",\"popularity\":95}}]}},\"RecordsWithoutFields\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"number\",\"example\":1}}}}},\"example\":{\"records\":[{\"id\":1},{\"id\":2}]}},\"RecordsWithRequire\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"require\"],\"properties\":{\"require\":{\"type\":\"object\",\"description\":\"keys are column identifiers, and values are [cell values](https://support.getgrist.com/code/interfaces/grist_plugin_api.rowrecord/#cellvalues) we want to have in those columns (either by matching with an existing record, or creating a new record)\\n\"},\"fields\":{\"type\":\"object\",\"description\":\"keys are column identifiers, and values are [cell values](https://support.getgrist.com/code/interfaces/grist_plugin_api.rowrecord/#cellvalues) to place in those columns (either overwriting values in an existing record, or in a new record)\\n\"}}}}},\"example\":{\"records\":[{\"require\":{\"pet\":\"cat\"},\"fields\":{\"popularity\":67}},{\"require\":{\"pet\":\"dog\"},\"fields\":{\"popularity\":95}}]}},\"TablesList\":{\"type\":\"object\",\"required\":[\"tables\"],\"properties\":{\"tables\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"fields\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"Table1\"},\"fields\":{\"type\":\"object\"}}}}},\"example\":{\"tables\":[{\"id\":\"People\",\"fields\":{\"tableRef\":1,\"onDemand\":true}},{\"id\":\"Places\",\"fields\":{\"tableRef\":2,\"onDemand\":false}}]}},\"TablesWithoutFields\":{\"type\":\"object\",\"required\":[\"tables\"],\"properties\":{\"tables\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"Table1\"}}}}},\"example\":{\"tables\":[{\"id\":\"People\"},{\"id\":\"Places\"}]}},\"CreateTables\":{\"type\":\"object\",\"required\":[\"tables\"],\"properties\":{\"tables\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"columns\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"Table1\"},\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"ColumnName\"},\"fields\":{\"type\":\"object\"}}}}}}}},\"example\":{\"tables\":[{\"id\":\"People\",\"columns\":[{\"id\":\"pet\",\"fields\":{\"label\":\"Pet\"}},{\"id\":\"popularity\",\"fields\":{\"label\":\"Popularity \u2764\"}}]}]}},\"ColumnsList\":{\"type\":\"object\",\"properties\":{\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"ColumnName\"},\"fields\":{\"$ref\":\"#/components/schemas/GetFields\"}}}}},\"example\":{\"columns\":[{\"id\":\"pet\",\"fields\":{\"label\":\"Pet\"}},{\"id\":\"popularity\",\"fields\":{\"label\":\"Popularity \u2764\",\"type\":\"Int\"}}]}},\"CreateColumns\":{\"type\":\"object\",\"required\":[\"columns\"],\"properties\":{\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Column identifier\"},\"fields\":{\"$ref\":\"#/components/schemas/CreateFields\"}}}}},\"example\":{\"columns\":[{\"id\":\"pet\",\"fields\":{\"label\":\"Pet\"}},{\"id\":\"popularity\",\"fields\":{\"label\":\"Popularity \u2764\",\"type\":\"Int\"}},{\"id\":\"Order\",\"fields\":{\"type\":\"Ref:Orders\",\"visibleCol\":2}},{\"id\":\"Formula\",\"fields\":{\"type\":\"Int\",\"formula\":\"$A + $B\",\"isFormula\":true}},{\"id\":\"Status\",\"fields\":{\"type\":\"Choice\",\"widgetOptions\":\"{\\\"choices\\\":[\\\"New\\\",\\\"Old\\\"],\\\"choiceOptions\\\":{\\\"New\\\":{\\\"fillColor\\\":\\\"#FF0000\\\",\\\"textColor\\\":\\\"#FFFFFF\\\"}}}\"}}]}},\"UpdateColumns\":{\"type\":\"object\",\"required\":[\"columns\"],\"properties\":{\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"fields\"],\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Column identifier\"},\"fields\":{\"allOf\":[{\"$ref\":\"#/components/schemas/CreateFields\"},{\"type\":\"object\",\"properties\":{\"colId\":{\"type\":\"string\",\"description\":\"Set it to the new column ID when you want to change it.\"}}}]}}}}},\"example\":{\"columns\":[{\"id\":\"pet\",\"fields\":{\"label\":\"Pet\"}},{\"id\":\"popularity\",\"fields\":{\"label\":\"Popularity \u2764\",\"type\":\"Int\"}}]}},\"ColumnsWithoutFields\":{\"type\":\"object\",\"required\":[\"columns\"],\"properties\":{\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"ColumnName\"}}}}},\"example\":{\"columns\":[{\"id\":\"pet\"},{\"id\":\"popularity\"}]}},\"Fields\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"description\":\"Column type, by default Any. Ref, RefList and DateTime types requires a postfix, e.g. DateTime:America/New_York, Ref:Users\",\"enum\":[\"Any\",\"Text\",\"Numeric\",\"Int\",\"Bool\",\"Date\",\"DateTime:\",\"Choice\",\"ChoiceList\",\"Ref:\",\"RefList:\",\"Attachments\"]},\"label\":{\"type\":\"string\",\"description\":\"Column label.\"},\"formula\":{\"type\":\"string\",\"description\":\"A python formula, e.g.: $A + Table1.lookupOne(B=$B)\"},\"isFormula\":{\"type\":\"boolean\",\"description\":\"Use \\\"true\\\" to indicate that the column is a formula column. Use \\\"false\\\" for trigger formula column.\"},\"widgetOptions\":{\"type\":\"string\",\"description\":\"A JSON object with widget options, e.g.: {\\\"choices\\\": [\\\"cat\\\", \\\"dog\\\"], \\\"alignment\\\": \\\"right\\\"}\"},\"untieColIdFromLabel\":{\"type\":\"boolean\",\"description\":\"Use \\\"true\\\" to indicate that the column label should not be used as the column identifier. Use \\\"false\\\" to use the label as the identifier.\"},\"recalcWhen\":{\"type\":\"integer\",\"description\":\"A number indicating when the column should be recalculated.

    1. On new records or when any field in recalcDeps changes, it's a 'data-cleaning'.
    2. Never.
    3. Calculate on new records and on manual updates to any data field.
    \"},\"visibleCol\":{\"type\":\"integer\",\"description\":\"For Ref and RefList columns, the colRef of a column to display\"}}},\"CreateFields\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Fields\"},{\"type\":\"object\",\"properties\":{\"recalcDeps\":{\"type\":\"string\",\"description\":\"An encoded array of column identifiers (colRefs) that this column depends on. If any of these columns change, the column will be recalculated. E.g.: [2, 3]\"}}}]},\"GetFields\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Fields\"},{\"type\":\"object\",\"properties\":{\"recalcDeps\":{\"type\":\"array\",\"items\":{\"type\":\"integer\"},\"description\":\"An array of column identifiers (colRefs) that this column depends on, prefixed with \\\"L\\\" constant. If any of these columns change, the column will be recalculated. E.g.: [\\\"L\\\", 2, 3]\"},\"colRef\":{\"type\":\"integer\",\"description\":\"Column reference, e.g.: 2\"}}}]},\"RowIds\":{\"type\":\"array\",\"example\":[101,102,103],\"items\":{\"type\":\"integer\"}},\"DocParameters\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"Competitive Analysis\"},\"isPinned\":{\"type\":\"boolean\",\"example\":false}}},\"WorkspaceParameters\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"Retreat Docs\"}}},\"OrgParameters\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"ACME Unlimited\"}}},\"OrgAccessRead\":{\"type\":\"object\",\"required\":[\"users\"],\"properties\":{\"users\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"type\":\"integer\",\"example\":1},\"name\":{\"type\":\"string\",\"example\":\"Andrea\"},\"email\":{\"type\":\"string\",\"example\":\"andrea@getgrist.com\"},\"access\":{\"$ref\":\"#/components/schemas/Access\"}}}}}},\"OrgAccessWrite\":{\"type\":\"object\",\"required\":[\"users\"],\"properties\":{\"users\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\",\"enum\":[\"owners\",\"editors\",\"viewers\",\"members\",null]},\"example\":{\"foo@getgrist.com\":\"owners\",\"bar@getgrist.com\":null}}}},\"WorkspaceAccessRead\":{\"type\":\"object\",\"required\":[\"maxInheritedRole\",\"users\"],\"properties\":{\"maxInheritedRole\":{\"$ref\":\"#/components/schemas/Access\"},\"users\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"type\":\"integer\",\"example\":1},\"name\":{\"type\":\"string\",\"example\":\"Andrea\"},\"email\":{\"type\":\"string\",\"example\":\"andrea@getgrist.com\"},\"access\":{\"$ref\":\"#/components/schemas/Access\"},\"parentAccess\":{\"$ref\":\"#/components/schemas/Access\"}}}}}},\"WorkspaceAccessWrite\":{\"type\":\"object\",\"properties\":{\"maxInheritedRole\":{\"$ref\":\"#/components/schemas/Access\"},\"users\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\",\"enum\":[\"owners\",\"editors\",\"viewers\",\"members\",null]},\"example\":{\"foo@getgrist.com\":\"owners\",\"bar@getgrist.com\":null}}}},\"DocAccessWrite\":{\"$ref\":\"#/components/schemas/WorkspaceAccessWrite\"},\"DocAccessRead\":{\"$ref\":\"#/components/schemas/WorkspaceAccessRead\"},\"AttachmentUpload\":{\"type\":\"object\",\"properties\":{\"upload\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"format\":\"binary\"}}}},\"AttachmentId\":{\"type\":\"number\",\"description\":\"An integer ID\"},\"AttachmentMetadata\":{\"type\":\"object\",\"properties\":{\"fileName\":{\"type\":\"string\",\"example\":\"logo.png\"},\"fileSize\":{\"type\":\"number\",\"example\":12345},\"timeUploaded\":{\"type\":\"string\",\"example\":\"2020-02-13T12:17:19.000Z\"}}},\"AttachmentMetadataList\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"fields\"],\"properties\":{\"id\":{\"type\":\"number\",\"example\":1},\"fields\":{\"$ref\":\"#/components/schemas/AttachmentMetadata\"}}}}}},\"SqlResultSet\":{\"type\":\"object\",\"required\":[\"statement\",\"records\"],\"properties\":{\"statement\":{\"type\":\"string\",\"description\":\"A copy of the SQL statement.\",\"example\":\"select * from Pets ...\"},\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"fields\"],\"properties\":{\"fields\":{\"type\":\"object\"}}},\"example\":[{\"fields\":{\"id\":1,\"pet\":\"cat\",\"popularity\":67}},{\"fields\":{\"id\":2,\"pet\":\"dog\",\"popularity\":95}}]}}},\"TableSchemaResult\":{\"type\":\"object\",\"required\":[\"name\",\"title\",\"schema\"],\"properties\":{\"name\":{\"type\":\"string\",\"description\":\"The ID (technical name) of the table\"},\"title\":{\"type\":\"string\",\"description\":\"The human readable name of the table\"},\"path\":{\"type\":\"string\",\"description\":\"The URL to download the CSV\",\"example\":\"https://getgrist.com/o/docs/api/docs/ID/download/csv?tableId=Table1&....\"},\"format\":{\"type\":\"string\",\"enum\":[\"csv\"]},\"mediatype\":{\"type\":\"string\",\"enum\":[\"text/csv\"]},\"encoding\":{\"type\":\"string\",\"enum\":[\"utf-8\"]},\"dialect\":{\"$ref\":\"#/components/schemas/csv-dialect\"},\"schema\":{\"$ref\":\"#/components/schemas/table-schema\"}}},\"csv-dialect\":{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"CSV Dialect\",\"description\":\"The CSV dialect descriptor.\",\"type\":[\"string\",\"object\"],\"required\":[\"delimiter\",\"doubleQuote\"],\"properties\":{\"csvddfVersion\":{\"title\":\"CSV Dialect schema version\",\"description\":\"A number to indicate the schema version of CSV Dialect. Version 1.0 was named CSV Dialect Description Format and used different field names.\",\"type\":\"number\",\"default\":1.2,\"examples:\":[\"{\\n \\\"csvddfVersion\\\": \\\"1.2\\\"\\n}\\n\"]},\"delimiter\":{\"title\":\"Delimiter\",\"description\":\"A character sequence to use as the field separator.\",\"type\":\"string\",\"default\":\",\",\"examples\":[\"{\\n \\\"delimiter\\\": \\\",\\\"\\n}\\n\",\"{\\n \\\"delimiter\\\": \\\";\\\"\\n}\\n\"]},\"doubleQuote\":{\"title\":\"Double Quote\",\"description\":\"Specifies the handling of quotes inside fields.\",\"context\":\"If Double Quote is set to true, two consecutive quotes must be interpreted as one.\",\"type\":\"boolean\",\"default\":true,\"examples\":[\"{\\n \\\"doubleQuote\\\": true\\n}\\n\"]},\"lineTerminator\":{\"title\":\"Line Terminator\",\"description\":\"Specifies the character sequence that must be used to terminate rows.\",\"type\":\"string\",\"default\":\"\\r\\n\",\"examples\":[\"{\\n \\\"lineTerminator\\\": \\\"\\\\r\\\\n\\\"\\n}\\n\",\"{\\n \\\"lineTerminator\\\": \\\"\\\\n\\\"\\n}\\n\"]},\"nullSequence\":{\"title\":\"Null Sequence\",\"description\":\"Specifies the null sequence, for example, `\\\\N`.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"nullSequence\\\": \\\"\\\\N\\\"\\n}\\n\"]},\"quoteChar\":{\"title\":\"Quote Character\",\"description\":\"Specifies a one-character string to use as the quoting character.\",\"type\":\"string\",\"default\":\"\\\"\",\"examples\":[\"{\\n \\\"quoteChar\\\": \\\"'\\\"\\n}\\n\"]},\"escapeChar\":{\"title\":\"Escape Character\",\"description\":\"Specifies a one-character string to use as the escape character.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"escapeChar\\\": \\\"\\\\\\\\\\\"\\n}\\n\"]},\"skipInitialSpace\":{\"title\":\"Skip Initial Space\",\"description\":\"Specifies the interpretation of whitespace immediately following a delimiter. If false, whitespace immediately after a delimiter should be treated as part of the subsequent field.\",\"type\":\"boolean\",\"default\":false,\"examples\":[\"{\\n \\\"skipInitialSpace\\\": true\\n}\\n\"]},\"header\":{\"title\":\"Header\",\"description\":\"Specifies if the file includes a header row, always as the first row in the file.\",\"type\":\"boolean\",\"default\":true,\"examples\":[\"{\\n \\\"header\\\": true\\n}\\n\"]},\"commentChar\":{\"title\":\"Comment Character\",\"description\":\"Specifies that any row beginning with this one-character string, without preceeding whitespace, causes the entire line to be ignored.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"commentChar\\\": \\\"#\\\"\\n}\\n\"]},\"caseSensitiveHeader\":{\"title\":\"Case Sensitive Header\",\"description\":\"Specifies if the case of headers is meaningful.\",\"context\":\"Use of case in source CSV files is not always an intentional decision. For example, should \\\"CAT\\\" and \\\"Cat\\\" be considered to have the same meaning.\",\"type\":\"boolean\",\"default\":false,\"examples\":[\"{\\n \\\"caseSensitiveHeader\\\": true\\n}\\n\"]}},\"examples\":[\"{\\n \\\"dialect\\\": {\\n \\\"delimiter\\\": \\\";\\\"\\n }\\n}\\n\",\"{\\n \\\"dialect\\\": {\\n \\\"delimiter\\\": \\\"\\\\t\\\",\\n \\\"quoteChar\\\": \\\"'\\\",\\n \\\"commentChar\\\": \\\"#\\\"\\n }\\n}\\n\"]},\"table-schema\":{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Table Schema\",\"description\":\"A Table Schema for this resource, compliant with the [Table Schema](/tableschema/) specification.\",\"type\":[\"string\",\"object\"],\"required\":[\"fields\"],\"properties\":{\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"title\":\"Table Schema Field\",\"type\":\"object\",\"oneOf\":[{\"type\":\"object\",\"title\":\"String Field\",\"description\":\"The field contains strings, that is, sequences of characters.\",\"required\":[\"name\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `string`.\",\"enum\":[\"string\"]},\"format\":{\"description\":\"The format keyword options for `string` are `default`, `email`, `uri`, `binary`, and `uuid`.\",\"context\":\"The following `format` options are supported:\\n * **default**: any valid string.\\n * **email**: A valid email address.\\n * **uri**: A valid URI.\\n * **binary**: A base64 encoded string representing binary data.\\n * **uuid**: A string that is a uuid.\",\"enum\":[\"default\",\"email\",\"uri\",\"binary\",\"uuid\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `string` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"pattern\":{\"type\":\"string\",\"description\":\"A regular expression pattern to test each value of the property against, where a truthy response indicates validity.\",\"context\":\"Regular expressions `SHOULD` conform to the [XML Schema regular expression syntax](http://www.w3.org/TR/xmlschema-2/#regexs).\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the minimum length of a value.\"},\"maxLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the maximum length of a value.\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"name\\\",\\n \\\"type\\\": \\\"string\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"name\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"email\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"name\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"constraints\\\": {\\n \\\"minLength\\\": 3,\\n \\\"maxLength\\\": 35\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Number Field\",\"description\":\"The field contains numbers of any kind including decimals.\",\"context\":\"The lexical formatting follows that of decimal in [XMLSchema](https://www.w3.org/TR/xmlschema-2/#decimal): a non-empty finite-length sequence of decimal digits separated by a period as a decimal indicator. An optional leading sign is allowed. If the sign is omitted, '+' is assumed. Leading and trailing zeroes are optional. If the fractional part is zero, the period and following zero(es) can be omitted. For example: '-1.23', '12678967.543233', '+100000.00', '210'.\\n\\nThe following special string values are permitted (case does not need to be respected):\\n - NaN: not a number\\n - INF: positive infinity\\n - -INF: negative infinity\\n\\nA number `MAY` also have a trailing:\\n - exponent: this `MUST` consist of an E followed by an optional + or - sign followed by one or more decimal digits (0-9)\\n - percentage: the percentage sign: `%`. In conversion percentages should be divided by 100.\\n\\nIf both exponent and percentages are present the percentage `MUST` follow the exponent e.g. '53E10%' (equals 5.3).\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `number`.\",\"enum\":[\"number\"]},\"format\":{\"description\":\"There are no format keyword options for `number`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"bareNumber\":{\"type\":\"boolean\",\"title\":\"bareNumber\",\"description\":\"a boolean field with a default of `true`. If `true` the physical contents of this field must follow the formatting constraints already set out. If `false` the contents of this field may contain leading and/or trailing non-numeric characters (which implementors MUST therefore strip). The purpose of `bareNumber` is to allow publishers to publish numeric data that contains trailing characters such as percentages e.g. `95%` or leading characters such as currencies e.g. `\u20ac95` or `EUR 95`. Note that it is entirely up to implementors what, if anything, they do with stripped text.\",\"default\":true},\"decimalChar\":{\"type\":\"string\",\"description\":\"A string whose value is used to represent a decimal point within the number. The default value is `.`.\"},\"groupChar\":{\"type\":\"string\",\"description\":\"A string whose value is used to group digits within the number. The default value is `null`. A common value is `,` e.g. '100,000'.\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `number` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"number\"}}]},\"minimum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"number\"}]},\"maximum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"number\"}]}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"field-name\\\",\\n \\\"type\\\": \\\"number\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"field-name\\\",\\n \\\"type\\\": \\\"number\\\",\\n \\\"constraints\\\": {\\n \\\"enum\\\": [ \\\"1.00\\\", \\\"1.50\\\", \\\"2.00\\\" ]\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Integer Field\",\"description\":\"The field contains integers - that is whole numbers.\",\"context\":\"Integer values are indicated in the standard way for any valid integer.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `integer`.\",\"enum\":[\"integer\"]},\"format\":{\"description\":\"There are no format keyword options for `integer`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"bareNumber\":{\"type\":\"boolean\",\"title\":\"bareNumber\",\"description\":\"a boolean field with a default of `true`. If `true` the physical contents of this field must follow the formatting constraints already set out. If `false` the contents of this field may contain leading and/or trailing non-numeric characters (which implementors MUST therefore strip). The purpose of `bareNumber` is to allow publishers to publish numeric data that contains trailing characters such as percentages e.g. `95%` or leading characters such as currencies e.g. `\u20ac95` or `EUR 95`. Note that it is entirely up to implementors what, if anything, they do with stripped text.\",\"default\":true},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `integer` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"integer\"}}]},\"minimum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"integer\"}]},\"maximum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"integer\"}]}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"age\\\",\\n \\\"type\\\": \\\"integer\\\",\\n \\\"constraints\\\": {\\n \\\"unique\\\": true,\\n \\\"minimum\\\": 100,\\n \\\"maximum\\\": 9999\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Date Field\",\"description\":\"The field contains temporal date values.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `date`.\",\"enum\":[\"date\"]},\"format\":{\"description\":\"The format keyword options for `date` are `default`, `any`, and `{PATTERN}`.\",\"context\":\"The following `format` options are supported:\\n * **default**: An ISO8601 format string of YYYY-MM-DD.\\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).\",\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `date` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"date_of_birth\\\",\\n \\\"type\\\": \\\"date\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"date_of_birth\\\",\\n \\\"type\\\": \\\"date\\\",\\n \\\"constraints\\\": {\\n \\\"minimum\\\": \\\"01-01-1900\\\"\\n }\\n}\\n\",\"{\\n \\\"name\\\": \\\"date_of_birth\\\",\\n \\\"type\\\": \\\"date\\\",\\n \\\"format\\\": \\\"MM-DD-YYYY\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Time Field\",\"description\":\"The field contains temporal time values.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `time`.\",\"enum\":[\"time\"]},\"format\":{\"description\":\"The format keyword options for `time` are `default`, `any`, and `{PATTERN}`.\",\"context\":\"The following `format` options are supported:\\n * **default**: An ISO8601 format string for time.\\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).\",\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `time` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"appointment_start\\\",\\n \\\"type\\\": \\\"time\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"appointment_start\\\",\\n \\\"type\\\": \\\"time\\\",\\n \\\"format\\\": \\\"any\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Date Time Field\",\"description\":\"The field contains temporal datetime values.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `datetime`.\",\"enum\":[\"datetime\"]},\"format\":{\"description\":\"The format keyword options for `datetime` are `default`, `any`, and `{PATTERN}`.\",\"context\":\"The following `format` options are supported:\\n * **default**: An ISO8601 format string for datetime.\\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).\",\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `datetime` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"timestamp\\\",\\n \\\"type\\\": \\\"datetime\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"timestamp\\\",\\n \\\"type\\\": \\\"datetime\\\",\\n \\\"format\\\": \\\"default\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Year Field\",\"description\":\"A calendar year, being an integer with 4 digits. Equivalent to [gYear in XML Schema](https://www.w3.org/TR/xmlschema-2/#gYear)\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `year`.\",\"enum\":[\"year\"]},\"format\":{\"description\":\"There are no format keyword options for `year`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `year` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"integer\"}}]},\"minimum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"integer\"}]},\"maximum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"integer\"}]}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"year\\\",\\n \\\"type\\\": \\\"year\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"year\\\",\\n \\\"type\\\": \\\"year\\\",\\n \\\"constraints\\\": {\\n \\\"minimum\\\": 1970,\\n \\\"maximum\\\": 2003\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Year Month Field\",\"description\":\"A calendar year month, being an integer with 1 or 2 digits. Equivalent to [gYearMonth in XML Schema](https://www.w3.org/TR/xmlschema-2/#gYearMonth)\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `yearmonth`.\",\"enum\":[\"yearmonth\"]},\"format\":{\"description\":\"There are no format keyword options for `yearmonth`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `yearmonth` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"month\\\",\\n \\\"type\\\": \\\"yearmonth\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"month\\\",\\n \\\"type\\\": \\\"yearmonth\\\",\\n \\\"constraints\\\": {\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 6\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Boolean Field\",\"description\":\"The field contains boolean (true/false) data.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `boolean`.\",\"enum\":[\"boolean\"]},\"format\":{\"description\":\"There are no format keyword options for `boolean`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"trueValues\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"type\":\"string\"},\"default\":[\"true\",\"True\",\"TRUE\",\"1\"]},\"falseValues\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"type\":\"string\"},\"default\":[\"false\",\"False\",\"FALSE\",\"0\"]},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `boolean` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"boolean\"}}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"registered\\\",\\n \\\"type\\\": \\\"boolean\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Object Field\",\"description\":\"The field contains data which can be parsed as a valid JSON object.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `object`.\",\"enum\":[\"object\"]},\"format\":{\"description\":\"There are no format keyword options for `object`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints apply for `object` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"object\"}}]},\"minLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the minimum length of a value.\"},\"maxLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the maximum length of a value.\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"extra\\\"\\n \\\"type\\\": \\\"object\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"GeoPoint Field\",\"description\":\"The field contains data describing a geographic point.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `geopoint`.\",\"enum\":[\"geopoint\"]},\"format\":{\"description\":\"The format keyword options for `geopoint` are `default`,`array`, and `object`.\",\"context\":\"The following `format` options are supported:\\n * **default**: A string of the pattern 'lon, lat', where `lon` is the longitude and `lat` is the latitude.\\n * **array**: An array of exactly two items, where each item is either a number, or a string parsable as a number, and the first item is `lon` and the second item is `lat`.\\n * **object**: A JSON object with exactly two keys, `lat` and `lon`\",\"notes\":[\"Implementations `MUST` strip all white space in the default format of `lon, lat`.\"],\"enum\":[\"default\",\"array\",\"object\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `geopoint` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"array\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"object\"}}]}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"post_office\\\",\\n \\\"type\\\": \\\"geopoint\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"post_office\\\",\\n \\\"type\\\": \\\"geopoint\\\",\\n \\\"format\\\": \\\"array\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"GeoJSON Field\",\"description\":\"The field contains a JSON object according to GeoJSON or TopoJSON\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `geojson`.\",\"enum\":[\"geojson\"]},\"format\":{\"description\":\"The format keyword options for `geojson` are `default` and `topojson`.\",\"context\":\"The following `format` options are supported:\\n * **default**: A geojson object as per the [GeoJSON spec](http://geojson.org/).\\n * **topojson**: A topojson object as per the [TopoJSON spec](https://github.com/topojson/topojson-specification/blob/master/README.md)\",\"enum\":[\"default\",\"topojson\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `geojson` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"object\"}}]},\"minLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the minimum length of a value.\"},\"maxLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the maximum length of a value.\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"city_limits\\\",\\n \\\"type\\\": \\\"geojson\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"city_limits\\\",\\n \\\"type\\\": \\\"geojson\\\",\\n \\\"format\\\": \\\"topojson\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Array Field\",\"description\":\"The field contains data which can be parsed as a valid JSON array.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `array`.\",\"enum\":[\"array\"]},\"format\":{\"description\":\"There are no format keyword options for `array`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints apply for `array` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"array\"}}]},\"minLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the minimum length of a value.\"},\"maxLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the maximum length of a value.\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"options\\\"\\n \\\"type\\\": \\\"array\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Duration Field\",\"description\":\"The field contains a duration of time.\",\"context\":\"The lexical representation for duration is the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations) extended format `PnYnMnDTnHnMnS`, where `nY` represents the number of years, `nM` the number of months, `nD` the number of days, 'T' is the date/time separator, `nH` the number of hours, `nM` the number of minutes and `nS` the number of seconds. The number of seconds can include decimal digits to arbitrary precision. Date and time elements including their designator may be omitted if their value is zero, and lower order elements may also be omitted for reduced precision. Here we follow the definition of [XML Schema duration datatype](http://www.w3.org/TR/xmlschema-2/#duration) directly and that definition is implicitly inlined here.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `duration`.\",\"enum\":[\"duration\"]},\"format\":{\"description\":\"There are no format keyword options for `duration`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `duration` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"period\\\"\\n \\\"type\\\": \\\"duration\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Any Field\",\"description\":\"Any value is accepted, including values that are not captured by the type/format/constraint requirements of the specification.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `any`.\",\"enum\":[\"any\"]},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints apply to `any` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"notes\\\",\\n \\\"type\\\": \\\"any\\\"\\n\"]}]},\"description\":\"An `array` of Table Schema Field objects.\",\"examples\":[\"{\\n \\\"fields\\\": [\\n {\\n \\\"name\\\": \\\"my-field-name\\\"\\n }\\n ]\\n}\\n\",\"{\\n \\\"fields\\\": [\\n {\\n \\\"name\\\": \\\"my-field-name\\\",\\n \\\"type\\\": \\\"number\\\"\\n },\\n {\\n \\\"name\\\": \\\"my-field-name-2\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"email\\\"\\n }\\n ]\\n}\\n\"]},\"primaryKey\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"string\"}],\"description\":\"A primary key is a field name or an array of field names, whose values `MUST` uniquely identify each row in the table.\",\"context\":\"Field name in the `primaryKey` `MUST` be unique, and `MUST` match a field name in the associated table. It is acceptable to have an array with a single value, indicating that the value of a single field is the primary key.\",\"examples\":[\"{\\n \\\"primaryKey\\\": [\\n \\\"name\\\"\\n ]\\n}\\n\",\"{\\n \\\"primaryKey\\\": [\\n \\\"first_name\\\",\\n \\\"last_name\\\"\\n ]\\n}\\n\"]},\"foreignKeys\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"title\":\"Table Schema Foreign Key\",\"description\":\"Table Schema Foreign Key\",\"type\":\"object\",\"required\":[\"fields\",\"reference\"],\"oneOf\":[{\"properties\":{\"fields\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minItems\":1,\"uniqueItems\":true,\"description\":\"Fields that make up the primary key.\"}},\"reference\":{\"type\":\"object\",\"required\":[\"resource\",\"fields\"],\"properties\":{\"resource\":{\"type\":\"string\",\"default\":\"\"},\"fields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1,\"uniqueItems\":true}}}}},{\"properties\":{\"fields\":{\"type\":\"string\",\"description\":\"Fields that make up the primary key.\"},\"reference\":{\"type\":\"object\",\"required\":[\"resource\",\"fields\"],\"properties\":{\"resource\":{\"type\":\"string\",\"default\":\"\"},\"fields\":{\"type\":\"string\"}}}}}]},\"examples\":[\"{\\n \\\"foreignKeys\\\": [\\n {\\n \\\"fields\\\": \\\"state\\\",\\n \\\"reference\\\": {\\n \\\"resource\\\": \\\"the-resource\\\",\\n \\\"fields\\\": \\\"state_id\\\"\\n }\\n }\\n ]\\n}\\n\",\"{\\n \\\"foreignKeys\\\": [\\n {\\n \\\"fields\\\": \\\"state\\\",\\n \\\"reference\\\": {\\n \\\"resource\\\": \\\"\\\",\\n \\\"fields\\\": \\\"id\\\"\\n }\\n }\\n ]\\n}\\n\"]},\"missingValues\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"default\":[\"\"],\"description\":\"Values that when encountered in the source, should be considered as `null`, 'not present', or 'blank' values.\",\"context\":\"Many datasets arrive with missing data values, either because a value was not collected or it never existed.\\nMissing values may be indicated simply by the value being empty in other cases a special value may have been used e.g. `-`, `NaN`, `0`, `-9999` etc.\\nThe `missingValues` property provides a way to indicate that these values should be interpreted as equivalent to null.\\n\\n`missingValues` are strings rather than being the data type of the particular field. This allows for comparison prior to casting and for fields to have missing value which are not of their type, for example a `number` field to have missing values indicated by `-`.\\n\\nThe default value of `missingValue` for a non-string type field is the empty string `''`. For string type fields there is no default for `missingValue` (for string fields the empty string `''` is a valid value and need not indicate null).\",\"examples\":[\"{\\n \\\"missingValues\\\": [\\n \\\"-\\\",\\n \\\"NaN\\\",\\n \\\"\\\"\\n ]\\n}\\n\",\"{\\n \\\"missingValues\\\": []\\n}\\n\"]}},\"examples\":[\"{\\n \\\"schema\\\": {\\n \\\"fields\\\": [\\n {\\n \\\"name\\\": \\\"first_name\\\",\\n \\\"type\\\": \\\"string\\\"\\n \\\"constraints\\\": {\\n \\\"required\\\": true\\n }\\n },\\n {\\n \\\"name\\\": \\\"age\\\",\\n \\\"type\\\": \\\"integer\\\"\\n },\\n ],\\n \\\"primaryKey\\\": [\\n \\\"name\\\"\\n ]\\n }\\n}\\n\"]}},\"parameters\":{\"filterQueryParam\":{\"in\":\"query\",\"name\":\"filter\",\"schema\":{\"type\":\"string\"},\"description\":\"This is a JSON object mapping column names to arrays of allowed values. For example, to filter column `pet` for values `cat` and `dog`, the filter would be `{\\\"pet\\\": [\\\"cat\\\", \\\"dog\\\"]}`. JSON contains characters that are not safe to place in a URL, so it is important to url-encode them. For this example, the url-encoding is `%7B%22pet%22%3A%20%5B%22cat%22%2C%20%22dog%22%5D%7D`. See https://rosettacode.org/wiki/URL_encoding for how to url-encode a string, or https://www.urlencoder.org/ to try some examples. Multiple columns can be filtered. For example the filter for `pet` being either `cat` or `dog`, AND `size` being either `tiny` or `outrageously small`, would be `{\\\"pet\\\": [\\\"cat\\\", \\\"dog\\\"], \\\"size\\\": [\\\"tiny\\\", \\\"outrageously small\\\"]}`.\",\"example\":\"{\\\"pet\\\": [\\\"cat\\\", \\\"dog\\\"]}\",\"required\":false},\"sortQueryParam\":{\"in\":\"query\",\"name\":\"sort\",\"schema\":{\"type\":\"string\"},\"description\":\"Order in which to return results. If a single column name is given (e.g. `pet`), results are placed in ascending order of values in that column. To get results in an order that was previously prepared manually in Grist, use the special `manualSort` column name. Multiple columns can be specified, separated by commas (e.g. `pet,age`). For descending order, prefix a column name with a `-` character (e.g. `pet,-age`). To include additional sorting options append them after a colon (e.g. `pet,-age:naturalSort;emptyFirst,owner`). Available options are: `choiceOrder`, `naturalSort`, `emptyFirst`. Without the `sort` parameter, the order of results is unspecified.\",\"example\":\"pet,-age\",\"required\":false},\"limitQueryParam\":{\"in\":\"query\",\"name\":\"limit\",\"schema\":{\"type\":\"number\"},\"description\":\"Return at most this number of rows. A value of 0 is equivalent to having no limit.\",\"example\":\"5\",\"required\":false},\"sortHeaderParam\":{\"in\":\"header\",\"name\":\"X-Sort\",\"schema\":{\"type\":\"string\"},\"description\":\"Same as `sort` query parameter.\",\"example\":\"pet,-age\",\"required\":false},\"limitHeaderParam\":{\"in\":\"header\",\"name\":\"X-Limit\",\"schema\":{\"type\":\"number\"},\"description\":\"Same as `limit` query parameter.\",\"example\":\"5\",\"required\":false},\"colIdPathParam\":{\"in\":\"path\",\"name\":\"colId\",\"schema\":{\"type\":\"string\"},\"description\":\"The column id (without the starting `$`) as shown in the column configuration below the label\",\"required\":true},\"tableIdPathParam\":{\"in\":\"path\",\"name\":\"tableId\",\"schema\":{\"type\":\"string\"},\"description\":\"normalized table name (see `TABLE ID` in Raw Data) or numeric row ID in `_grist_Tables`\",\"required\":true},\"docIdPathParam\":{\"in\":\"path\",\"name\":\"docId\",\"schema\":{\"type\":\"string\"},\"description\":\"A string id (UUID)\",\"required\":true},\"orgIdPathParam\":{\"in\":\"path\",\"name\":\"orgId\",\"schema\":{\"oneOf\":[{\"type\":\"integer\"},{\"type\":\"string\"}]},\"description\":\"This can be an integer id, or a string subdomain (e.g. `gristlabs`), or `current` if the org is implied by the domain in the url\",\"required\":true},\"workspaceIdPathParam\":{\"in\":\"path\",\"name\":\"workspaceId\",\"description\":\"An integer id\",\"schema\":{\"type\":\"integer\"},\"required\":true},\"userIdPathParam\":{\"in\":\"path\",\"name\":\"userId\",\"schema\":{\"type\":\"integer\"},\"description\":\"A user id\",\"required\":true},\"noparseQueryParam\":{\"in\":\"query\",\"name\":\"noparse\",\"schema\":{\"type\":\"boolean\"},\"description\":\"Set to true to prohibit parsing strings according to the column type.\"},\"hiddenQueryParam\":{\"in\":\"query\",\"name\":\"hidden\",\"schema\":{\"type\":\"boolean\"},\"description\":\"Set to true to include the hidden columns (like \\\"manualSort\\\")\"},\"headerQueryParam\":{\"in\":\"query\",\"name\":\"header\",\"schema\":{\"type\":\"string\",\"enum\":[\"colId\",\"label\"]},\"description\":\"Format for headers. Labels tend to be more human-friendly while colIds are more normalized.\",\"required\":false}}}}},\"searchIndex\":{\"store\":[\"section/Authentication\",\"tag/orgs\",\"tag/orgs/operation/listOrgs\",\"tag/orgs/operation/describeOrg\",\"tag/orgs/operation/modifyOrg\",\"tag/orgs/operation/deleteOrg\",\"tag/orgs/operation/listOrgAccess\",\"tag/orgs/operation/modifyOrgAccess\",\"tag/workspaces\",\"tag/workspaces/operation/listWorkspaces\",\"tag/workspaces/operation/createWorkspace\",\"tag/workspaces/operation/describeWorkspace\",\"tag/workspaces/operation/modifyWorkspace\",\"tag/workspaces/operation/deleteWorkspace\",\"tag/workspaces/operation/listWorkspaceAccess\",\"tag/workspaces/operation/modifyWorkspaceAccess\",\"tag/docs\",\"tag/docs/operation/createDoc\",\"tag/docs/operation/describeDoc\",\"tag/docs/operation/modifyDoc\",\"tag/docs/operation/deleteDoc\",\"tag/docs/operation/moveDoc\",\"tag/docs/operation/listDocAccess\",\"tag/docs/operation/modifyDocAccess\",\"tag/docs/operation/downloadDoc\",\"tag/docs/operation/downloadDocXlsx\",\"tag/docs/operation/downloadDocCsv\",\"tag/docs/operation/downloadTableSchema\",\"tag/docs/operation/deleteActions\",\"tag/docs/operation/forceReload\",\"tag/records\",\"tag/records/operation/listRecords\",\"tag/records/operation/addRecords\",\"tag/records/operation/modifyRecords\",\"tag/records/operation/replaceRecords\",\"tag/tables\",\"tag/tables/operation/listTables\",\"tag/tables/operation/addTables\",\"tag/tables/operation/modifyTables\",\"tag/columns\",\"tag/columns/operation/listColumns\",\"tag/columns/operation/addColumns\",\"tag/columns/operation/modifyColumns\",\"tag/columns/operation/replaceColumns\",\"tag/columns/operation/deleteColumn\",\"tag/data\",\"tag/data/operation/getTableData\",\"tag/data/operation/addRows\",\"tag/data/operation/modifyRows\",\"tag/data/operation/deleteRows\",\"tag/attachments\",\"tag/attachments/operation/listAttachments\",\"tag/attachments/operation/uploadAttachments\",\"tag/attachments/operation/getAttachmentMetadata\",\"tag/attachments/operation/downloadAttachment\",\"tag/webhooks\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks/get\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks/post\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks~1{webhookId}/patch\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks~1{webhookId}/delete\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks~1queue/delete\",\"tag/sql\",\"tag/sql/paths/~1docs~1{docId}~1sql/get\",\"tag/sql/paths/~1docs~1{docId}~1sql/post\",\"tag/users\",\"tag/users/paths/~1users~1{userId}/delete\"],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"title\",\"description\"],\"fieldVectors\":[[\"title/0\",[0,5.15]],[\"description/0\",[1,4.48,2,3.878]],[\"title/1\",[3,2.512]],[\"description/1\",[3,1.243,4,2.206,5,1.98,6,1.98,7,2.548,8,1.811,9,2.548]],[\"title/2\",[3,1.797,10,2.002,11,2.124]],[\"description/2\",[3,1.243,4,2.206,5,1.98,6,1.98,12,2.548,13,2.548,14,2.548]],[\"title/3\",[3,2.096,15,3.338]],[\"description/3\",[16,4.103]],[\"title/4\",[3,2.096,17,2.335]],[\"description/4\",[16,4.103]],[\"title/5\",[3,2.096,18,2.476]],[\"description/5\",[16,4.103]],[\"title/6\",[3,1.573,10,1.753,11,1.859,19,1.859]],[\"description/6\",[20,4.571]],[\"title/7\",[3,1.797,11,2.124,21,2.619]],[\"description/7\",[20,4.571]],[\"title/8\",[22,2.276]],[\"description/8\",[5,2.167,8,1.982,22,1.232,23,2.789,24,2.789,25,0.681]],[\"title/9\",[3,1.399,10,1.559,22,1.268,25,0.7,26,2.868]],[\"description/9\",[27,4.571]],[\"title/10\",[22,1.628,28,2.863,29,2.863]],[\"description/10\",[27,4.571]],[\"title/11\",[15,3.338,22,1.898]],[\"description/11\",[30,4.103]],[\"title/12\",[17,2.335,22,1.898]],[\"description/12\",[30,4.103]],[\"title/13\",[18,2.476,22,1.898]],[\"description/13\",[30,4.103]],[\"title/14\",[10,1.753,11,1.859,19,1.859,22,1.425]],[\"description/14\",[31,4.571]],[\"title/15\",[11,2.124,21,2.619,22,1.628]],[\"description/15\",[31,4.571]],[\"title/16\",[32,4.002]],[\"description/16\",[22,1.361,25,0.752,33,2.393,34,2.189,35,2.393]],[\"title/17\",[25,0.9,28,2.863,29,2.863]],[\"description/17\",[36,5.281]],[\"title/18\",[15,3.338,25,1.049]],[\"description/18\",[37,4.103]],[\"title/19\",[17,1.753,25,0.787,38,2.506,39,2.122]],[\"description/19\",[37,4.103]],[\"title/20\",[18,2.476,25,1.049]],[\"description/20\",[37,4.103]],[\"title/21\",[22,1.425,25,0.787,40,3.226,41,3.226]],[\"description/21\",[42,5.281]],[\"title/22\",[10,1.753,11,1.859,19,1.859,25,0.787]],[\"description/22\",[43,4.571]],[\"title/23\",[11,2.124,21,2.619,25,0.9]],[\"description/23\",[43,4.571]],[\"title/24\",[25,0.787,39,2.122,44,3.226,45,2.293]],[\"description/24\",[46,5.281]],[\"title/25\",[25,0.787,39,2.122,45,2.293,47,3.226]],[\"description/25\",[48,5.281]],[\"title/26\",[39,2.122,45,2.293,49,0.889,50,3.226]],[\"description/26\",[51,5.281]],[\"title/27\",[49,1.185,52,3.718]],[\"description/27\",[52,2.414,53,2.789,54,2.789,55,2.789,56,2.789,57,2.789]],[\"title/28\",[58,3.226,59,2.792,60,2.792,61,3.226]],[\"description/28\",[62,5.281]],[\"title/29\",[25,1.049,63,4.296]],[\"description/29\",[25,0.573,64,2.346,65,2.346,66,2.346,67,2.346,68,2.346,69,2.346,70,2.346]],[\"title/30\",[71,2.389]],[\"description/30\",[8,1.982,33,2.167,34,1.982,49,0.769,71,1.294,72,1.982]],[\"title/31\",[49,1.016,71,1.709,73,3.189]],[\"description/31\",[74,3.754]],[\"title/32\",[49,1.016,71,1.709,75,2.262]],[\"description/32\",[74,3.754]],[\"title/33\",[17,2.002,49,1.016,71,1.709]],[\"description/33\",[74,3.754]],[\"title/34\",[49,0.889,71,1.496,75,1.981,76,2.792]],[\"description/34\",[74,3.754]],[\"title/35\",[49,1.42]],[\"description/35\",[25,0.839,34,2.444,49,0.948,77,2.975]],[\"title/36\",[10,2.002,25,0.9,49,1.016]],[\"description/36\",[78,4.103]],[\"title/37\",[25,0.9,49,1.016,75,2.262]],[\"description/37\",[78,4.103]],[\"title/38\",[17,2.002,25,0.9,49,1.016]],[\"description/38\",[78,4.103]],[\"title/39\",[79,2.799]],[\"description/39\",[34,2.444,49,0.948,77,2.975,79,1.868]],[\"title/40\",[10,2.002,49,1.016,79,2.002]],[\"description/40\",[80,3.754]],[\"title/41\",[49,1.016,75,2.262,79,2.002]],[\"description/41\",[80,3.754]],[\"title/42\",[17,2.002,49,1.016,79,2.002]],[\"description/42\",[80,3.754]],[\"title/43\",[49,0.889,75,1.981,76,2.792,79,1.753]],[\"description/43\",[80,3.754]],[\"title/44\",[18,2.124,49,1.016,79,2.002]],[\"description/44\",[81,5.281]],[\"title/45\",[82,3.389]],[\"description/45\",[49,0.491,71,0.826,82,1.172,83,1.781,84,1.383,85,2.936,86,1.266,87,1.781,88,1.781,89,1.781,90,1.093]],[\"title/46\",[49,1.016,73,3.189,82,2.424]],[\"description/46\",[71,1.136,86,1.02,90,1.504,91,1.115,92,1.115,93,1.115,94,1.02,95,1.115,96,1.115,97,1.115,98,1.115,99,1.02,100,1.115,101,1.115]],[\"title/47\",[49,1.016,72,2.619,75,2.262]],[\"description/47\",[71,1.136,86,1.02,90,1.504,91,1.115,92,1.115,93,1.115,94,1.02,95,1.115,96,1.115,97,1.115,98,1.115,99,1.02,100,1.115,101,1.115]],[\"title/48\",[17,2.002,49,1.016,72,2.619]],[\"description/48\",[71,1.136,86,1.02,90,1.504,91,1.115,92,1.115,93,1.115,94,1.02,95,1.115,96,1.115,97,1.115,98,1.115,99,1.02,100,1.115,101,1.115]],[\"title/49\",[18,2.124,49,1.016,72,2.619]],[\"description/49\",[102,5.281]],[\"title/50\",[103,3.163]],[\"description/50\",[25,0.463,45,1.347,71,0.879,79,1.03,82,1.247,84,1.472,103,1.897,104,1.895,105,1.895,106,1.895]],[\"title/51\",[10,1.753,32,2.506,38,2.506,103,1.981]],[\"description/51\",[107,4.571]],[\"title/52\",[32,2.863,103,2.262,108,3.685]],[\"description/52\",[107,4.571]],[\"title/53\",[38,3.338,103,2.638]],[\"description/53\",[109,5.281]],[\"title/54\",[39,2.424,103,2.262,110,3.685]],[\"description/54\",[111,5.281]],[\"title/55\",[112,3.163]],[\"description/55\",[8,1.811,21,1.811,25,0.622,112,1.565,113,2.548,114,2.548,115,2.548]],[\"title/56\",[25,0.9,112,2.262,116,3.685]],[\"description/56\",[117,4.571]],[\"title/57\",[25,0.787,28,2.506,99,2.293,112,1.981]],[\"description/57\",[117,4.571]],[\"title/58\",[17,2.335,112,2.638]],[\"description/58\",[118,4.571]],[\"title/59\",[94,3.054,112,2.638]],[\"description/59\",[118,4.571]],[\"title/60\",[29,2.229,59,2.483,119,2.868,120,2.868,121,2.868]],[\"description/60\",[122,5.281]],[\"title/61\",[123,3.661]],[\"description/61\",[25,0.752,82,2.026,90,1.891,123,2.189,124,2.393]],[\"title/62\",[25,0.7,123,2.039,124,2.229,125,2.483,126,2.483]],[\"description/62\",[127,4.571]],[\"title/63\",[25,0.573,123,1.669,124,1.824,125,2.032,126,2.032,128,2.348,129,2.348]],[\"description/63\",[127,4.571]],[\"title/64\",[19,2.969]],[\"description/64\",[19,2.582,35,3.481]],[\"title/65\",[18,2.124,19,2.124,35,2.863]],[\"description/65\",[2,1.643,6,0.832,18,1.094,19,0.617,22,0.473,25,0.261,33,0.832,60,1.643,84,0.832,90,0.658,130,1.071,131,1.071,132,1.071,133,1.071,134,1.071,135,1.071,136,1.071,137,1.071,138,1.071,139,1.071]]],\"invertedIndex\":[[\"\",{\"_index\":2,\"title\":{},\"description\":{\"0\":{},\"65\":{}}}],[\"access\",{\"_index\":11,\"title\":{\"2\":{},\"6\":{},\"7\":{},\"14\":{},\"15\":{},\"22\":{},\"23\":{}},\"description\":{}}],[\"account\",{\"_index\":135,\"title\":{},\"description\":{\"65\":{}}}],[\"action\",{\"_index\":60,\"title\":{\"28\":{}},\"description\":{\"65\":{}}}],[\"add\",{\"_index\":75,\"title\":{\"32\":{},\"34\":{},\"37\":{},\"41\":{},\"43\":{},\"47\":{}},\"description\":{}}],[\"against\",{\"_index\":126,\"title\":{\"62\":{},\"63\":{}},\"description\":{}}],[\"allow\",{\"_index\":134,\"title\":{},\"description\":{\"65\":{}}}],[\"anoth\",{\"_index\":41,\"title\":{\"21\":{}},\"description\":{}}],[\"api\",{\"_index\":9,\"title\":{},\"description\":{\"1\":{}}}],[\"area\",{\"_index\":13,\"title\":{},\"description\":{\"2\":{}}}],[\"associ\",{\"_index\":116,\"title\":{\"56\":{}},\"description\":{}}],[\"attach\",{\"_index\":103,\"title\":{\"50\":{},\"51\":{},\"52\":{},\"53\":{},\"54\":{}},\"description\":{\"50\":{}}}],[\"authent\",{\"_index\":0,\"title\":{\"0\":{}},\"description\":{}}],[\"avail\",{\"_index\":14,\"title\":{},\"description\":{\"2\":{}}}],[\"better\",{\"_index\":96,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"call\",{\"_index\":8,\"title\":{},\"description\":{\"1\":{},\"8\":{},\"30\":{},\"55\":{}}}],[\"cautiou\",{\"_index\":138,\"title\":{},\"description\":{\"65\":{}}}],[\"chang\",{\"_index\":21,\"title\":{\"7\":{},\"15\":{},\"23\":{}},\"description\":{\"55\":{}}}],[\"close\",{\"_index\":64,\"title\":{},\"description\":{\"29\":{}}}],[\"collect\",{\"_index\":34,\"title\":{},\"description\":{\"16\":{},\"30\":{},\"35\":{},\"39\":{}}}],[\"column\",{\"_index\":79,\"title\":{\"39\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{}},\"description\":{\"39\":{},\"50\":{}}}],[\"columnar\",{\"_index\":87,\"title\":{},\"description\":{\"45\":{}}}],[\"consid\",{\"_index\":95,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"contain\",{\"_index\":33,\"title\":{},\"description\":{\"16\":{},\"30\":{},\"65\":{}}}],[\"content\",{\"_index\":39,\"title\":{\"19\":{},\"24\":{},\"25\":{},\"26\":{},\"54\":{}},\"description\":{}}],[\"creat\",{\"_index\":28,\"title\":{\"10\":{},\"17\":{},\"57\":{}},\"description\":{}}],[\"csv\",{\"_index\":50,\"title\":{\"26\":{}},\"description\":{}}],[\"current\",{\"_index\":132,\"title\":{},\"description\":{\"65\":{}}}],[\"data\",{\"_index\":82,\"title\":{\"45\":{},\"46\":{}},\"description\":{\"45\":{},\"50\":{},\"61\":{}}}],[\"delet\",{\"_index\":18,\"title\":{\"5\":{},\"13\":{},\"20\":{},\"44\":{},\"49\":{},\"65\":{}},\"description\":{\"65\":{}}}],[\"deprec\",{\"_index\":86,\"title\":{},\"description\":{\"45\":{},\"46\":{},\"47\":{},\"48\":{}}}],[\"describ\",{\"_index\":15,\"title\":{\"3\":{},\"11\":{},\"18\":{}},\"description\":{}}],[\"doc\",{\"_index\":32,\"title\":{\"16\":{},\"51\":{},\"52\":{}},\"description\":{}}],[\"docs/{docid\",{\"_index\":37,\"title\":{},\"description\":{\"18\":{},\"19\":{},\"20\":{}}}],[\"docs/{docid}/access\",{\"_index\":43,\"title\":{},\"description\":{\"22\":{},\"23\":{}}}],[\"docs/{docid}/attach\",{\"_index\":107,\"title\":{},\"description\":{\"51\":{},\"52\":{}}}],[\"docs/{docid}/attachments/{attachmentid\",{\"_index\":109,\"title\":{},\"description\":{\"53\":{}}}],[\"docs/{docid}/attachments/{attachmentid}/download\",{\"_index\":111,\"title\":{},\"description\":{\"54\":{}}}],[\"docs/{docid}/download\",{\"_index\":46,\"title\":{},\"description\":{\"24\":{}}}],[\"docs/{docid}/download/csv\",{\"_index\":51,\"title\":{},\"description\":{\"26\":{}}}],[\"docs/{docid}/download/table-schema\",{\"_index\":57,\"title\":{},\"description\":{\"27\":{}}}],[\"docs/{docid}/download/xlsx\",{\"_index\":48,\"title\":{},\"description\":{\"25\":{}}}],[\"docs/{docid}/force-reload\",{\"_index\":70,\"title\":{},\"description\":{\"29\":{}}}],[\"docs/{docid}/mov\",{\"_index\":42,\"title\":{},\"description\":{\"21\":{}}}],[\"docs/{docid}/sql\",{\"_index\":127,\"title\":{},\"description\":{\"62\":{},\"63\":{}}}],[\"docs/{docid}/states/remov\",{\"_index\":62,\"title\":{},\"description\":{\"28\":{}}}],[\"docs/{docid}/t\",{\"_index\":78,\"title\":{},\"description\":{\"36\":{},\"37\":{},\"38\":{}}}],[\"docs/{docid}/tables/{tableid}/column\",{\"_index\":80,\"title\":{},\"description\":{\"40\":{},\"41\":{},\"42\":{},\"43\":{}}}],[\"docs/{docid}/tables/{tableid}/columns/{colid\",{\"_index\":81,\"title\":{},\"description\":{\"44\":{}}}],[\"docs/{docid}/tables/{tableid}/data\",{\"_index\":101,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"docs/{docid}/tables/{tableid}/data/delet\",{\"_index\":102,\"title\":{},\"description\":{\"49\":{}}}],[\"docs/{docid}/tables/{tableid}/record\",{\"_index\":74,\"title\":{},\"description\":{\"31\":{},\"32\":{},\"33\":{},\"34\":{}}}],[\"docs/{docid}/webhook\",{\"_index\":117,\"title\":{},\"description\":{\"56\":{},\"57\":{}}}],[\"docs/{docid}/webhooks/queu\",{\"_index\":122,\"title\":{},\"description\":{\"60\":{}}}],[\"docs/{docid}/webhooks/{webhookid\",{\"_index\":118,\"title\":{},\"description\":{\"58\":{},\"59\":{}}}],[\"document\",{\"_index\":25,\"title\":{\"9\":{},\"17\":{},\"18\":{},\"19\":{},\"20\":{},\"21\":{},\"22\":{},\"23\":{},\"24\":{},\"25\":{},\"29\":{},\"36\":{},\"37\":{},\"38\":{},\"56\":{},\"57\":{},\"62\":{},\"63\":{}},\"description\":{\"8\":{},\"16\":{},\"29\":{},\"35\":{},\"50\":{},\"55\":{},\"61\":{},\"65\":{}}}],[\"document'\",{\"_index\":59,\"title\":{\"28\":{},\"60\":{}},\"description\":{}}],[\"download\",{\"_index\":110,\"title\":{\"54\":{}},\"description\":{}}],[\"empti\",{\"_index\":29,\"title\":{\"10\":{},\"17\":{},\"60\":{}},\"description\":{}}],[\"endpoint\",{\"_index\":90,\"title\":{},\"description\":{\"45\":{},\"46\":{},\"47\":{},\"48\":{},\"61\":{},\"65\":{}}}],[\"engin\",{\"_index\":68,\"title\":{},\"description\":{\"29\":{}}}],[\"enumer\",{\"_index\":12,\"title\":{},\"description\":{\"2\":{}}}],[\"excel\",{\"_index\":47,\"title\":{\"25\":{}},\"description\":{}}],[\"favor\",{\"_index\":91,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"fetch\",{\"_index\":73,\"title\":{\"31\":{},\"46\":{}},\"description\":{}}],[\"file\",{\"_index\":45,\"title\":{\"24\":{},\"25\":{},\"26\":{}},\"description\":{\"50\":{}}}],[\"follow\",{\"_index\":53,\"title\":{},\"description\":{\"27\":{}}}],[\"forc\",{\"_index\":66,\"title\":{},\"description\":{\"29\":{}}}],[\"format\",{\"_index\":88,\"title\":{},\"description\":{\"45\":{}}}],[\"frictionlessdata'\",{\"_index\":54,\"title\":{},\"description\":{\"27\":{}}}],[\"grist\",{\"_index\":35,\"title\":{\"65\":{}},\"description\":{\"16\":{},\"64\":{}}}],[\"group\",{\"_index\":24,\"title\":{},\"description\":{\"8\":{}}}],[\"histori\",{\"_index\":61,\"title\":{\"28\":{}},\"description\":{}}],[\"immedi\",{\"_index\":92,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"includ\",{\"_index\":104,\"title\":{},\"description\":{\"50\":{}}}],[\"list\",{\"_index\":10,\"title\":{\"2\":{},\"6\":{},\"9\":{},\"14\":{},\"22\":{},\"36\":{},\"40\":{},\"51\":{}},\"description\":{}}],[\"metadata\",{\"_index\":38,\"title\":{\"19\":{},\"51\":{},\"53\":{}},\"description\":{}}],[\"modifi\",{\"_index\":17,\"title\":{\"4\":{},\"12\":{},\"19\":{},\"33\":{},\"38\":{},\"42\":{},\"48\":{},\"58\":{}},\"description\":{}}],[\"move\",{\"_index\":40,\"title\":{\"21\":{}},\"description\":{}}],[\"new\",{\"_index\":99,\"title\":{\"57\":{}},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"now\",{\"_index\":85,\"title\":{},\"description\":{\"45\":{}}}],[\"option\",{\"_index\":128,\"title\":{\"63\":{}},\"description\":{}}],[\"org\",{\"_index\":3,\"title\":{\"1\":{},\"2\":{},\"3\":{},\"4\":{},\"5\":{},\"6\":{},\"7\":{},\"9\":{}},\"description\":{\"1\":{},\"2\":{}}}],[\"organ\",{\"_index\":23,\"title\":{},\"description\":{\"8\":{}}}],[\"organis\",{\"_index\":131,\"title\":{},\"description\":{\"65\":{}}}],[\"orgs/{orgid\",{\"_index\":16,\"title\":{},\"description\":{\"3\":{},\"4\":{},\"5\":{}}}],[\"orgs/{orgid}/access\",{\"_index\":20,\"title\":{},\"description\":{\"6\":{},\"7\":{}}}],[\"orgs/{orgid}/workspac\",{\"_index\":27,\"title\":{},\"description\":{\"9\":{},\"10\":{}}}],[\"paramet\",{\"_index\":129,\"title\":{\"63\":{}},\"description\":{}}],[\"payload\",{\"_index\":121,\"title\":{\"60\":{}},\"description\":{}}],[\"person\",{\"_index\":6,\"title\":{},\"description\":{\"1\":{},\"2\":{},\"65\":{}}}],[\"plan\",{\"_index\":93,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"pleas\",{\"_index\":137,\"title\":{},\"description\":{\"65\":{}}}],[\"point\",{\"_index\":98,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"project\",{\"_index\":100,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"python\",{\"_index\":67,\"title\":{},\"description\":{\"29\":{}}}],[\"queri\",{\"_index\":124,\"title\":{\"62\":{},\"63\":{}},\"description\":{\"61\":{}}}],[\"queue\",{\"_index\":119,\"title\":{\"60\":{}},\"description\":{}}],[\"recommend\",{\"_index\":89,\"title\":{},\"description\":{\"45\":{}}}],[\"record\",{\"_index\":71,\"title\":{\"30\":{},\"31\":{},\"32\":{},\"33\":{},\"34\":{}},\"description\":{\"30\":{},\"45\":{},\"46\":{},\"47\":{},\"48\":{},\"50\":{}}}],[\"refer\",{\"_index\":105,\"title\":{},\"description\":{\"50\":{}}}],[\"reload\",{\"_index\":63,\"title\":{\"29\":{}},\"description\":{}}],[\"remov\",{\"_index\":94,\"title\":{\"59\":{}},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"reopen\",{\"_index\":65,\"title\":{},\"description\":{\"29\":{}}}],[\"request\",{\"_index\":114,\"title\":{},\"description\":{\"55\":{}}}],[\"restart\",{\"_index\":69,\"title\":{},\"description\":{\"29\":{}}}],[\"row\",{\"_index\":72,\"title\":{\"47\":{},\"48\":{},\"49\":{}},\"description\":{\"30\":{}}}],[\"run\",{\"_index\":125,\"title\":{\"62\":{},\"63\":{}},\"description\":{}}],[\"schema\",{\"_index\":52,\"title\":{\"27\":{}},\"description\":{\"27\":{}}}],[\"securitydefinit\",{\"_index\":1,\"title\":{},\"description\":{\"0\":{}}}],[\"site\",{\"_index\":5,\"title\":{},\"description\":{\"1\":{},\"2\":{},\"8\":{}}}],[\"space\",{\"_index\":7,\"title\":{},\"description\":{\"1\":{}}}],[\"sql\",{\"_index\":123,\"title\":{\"61\":{},\"62\":{},\"63\":{}},\"description\":{\"61\":{}}}],[\"sqlite\",{\"_index\":44,\"title\":{\"24\":{}},\"description\":{}}],[\"standard](https://specs.frictionlessdata.io/table-schema\",{\"_index\":56,\"title\":{},\"description\":{\"27\":{}}}],[\"start\",{\"_index\":97,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"structur\",{\"_index\":77,\"title\":{},\"description\":{\"35\":{},\"39\":{}}}],[\"tabl\",{\"_index\":49,\"title\":{\"26\":{},\"27\":{},\"31\":{},\"32\":{},\"33\":{},\"34\":{},\"35\":{},\"36\":{},\"37\":{},\"38\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{},\"46\":{},\"47\":{},\"48\":{},\"49\":{}},\"description\":{\"30\":{},\"35\":{},\"39\":{},\"45\":{}}}],[\"table-schema\",{\"_index\":55,\"title\":{},\"description\":{\"27\":{}}}],[\"team\",{\"_index\":4,\"title\":{},\"description\":{\"1\":{},\"2\":{}}}],[\"themselv\",{\"_index\":133,\"title\":{},\"description\":{\"65\":{}}}],[\"trigger\",{\"_index\":113,\"title\":{},\"description\":{\"55\":{}}}],[\"truncat\",{\"_index\":58,\"title\":{\"28\":{}},\"description\":{}}],[\"type\",{\"_index\":106,\"title\":{},\"description\":{\"50\":{}}}],[\"undeliv\",{\"_index\":120,\"title\":{\"60\":{}},\"description\":{}}],[\"undon\",{\"_index\":136,\"title\":{},\"description\":{\"65\":{}}}],[\"updat\",{\"_index\":76,\"title\":{\"34\":{},\"43\":{}},\"description\":{}}],[\"upload\",{\"_index\":108,\"title\":{\"52\":{}},\"description\":{}}],[\"url\",{\"_index\":115,\"title\":{},\"description\":{\"55\":{}}}],[\"us\",{\"_index\":84,\"title\":{},\"description\":{\"45\":{},\"50\":{},\"65\":{}}}],[\"user\",{\"_index\":19,\"title\":{\"6\":{},\"14\":{},\"22\":{},\"64\":{},\"65\":{}},\"description\":{\"64\":{},\"65\":{}}}],[\"user'\",{\"_index\":130,\"title\":{},\"description\":{\"65\":{}}}],[\"users/{userid\",{\"_index\":139,\"title\":{},\"description\":{\"65\":{}}}],[\"webhook\",{\"_index\":112,\"title\":{\"55\":{},\"56\":{},\"57\":{},\"58\":{},\"59\":{}},\"description\":{\"55\":{}}}],[\"within\",{\"_index\":26,\"title\":{\"9\":{}},\"description\":{}}],[\"work\",{\"_index\":83,\"title\":{},\"description\":{\"45\":{}}}],[\"workspac\",{\"_index\":22,\"title\":{\"8\":{},\"9\":{},\"10\":{},\"11\":{},\"12\":{},\"13\":{},\"14\":{},\"15\":{},\"21\":{}},\"description\":{\"8\":{},\"16\":{},\"65\":{}}}],[\"workspaces/{workspaceid\",{\"_index\":30,\"title\":{},\"description\":{\"11\":{},\"12\":{},\"13\":{}}}],[\"workspaces/{workspaceid}/access\",{\"_index\":31,\"title\":{},\"description\":{\"14\":{},\"15\":{}}}],[\"workspaces/{workspaceid}/doc\",{\"_index\":36,\"title\":{},\"description\":{\"17\":{}}}]],\"pipeline\":[]}},\"options\":{\"theme\":{\"spacing\":{\"sectionVertical\":2},\"breakpoints\":{\"medium\":\"50rem\",\"large\":\"50rem\"},\"sidebar\":{\"width\":\"0px\"}},\"hideDownloadButton\":true,\"pathInMiddlePanel\":true,\"scrollYOffset\":48,\"jsonSampleExpandLevel\":\"all\"}}; var container = document.getElementById('redoc'); Redoc.hydrate(__redoc_state, container);","title":"REST API reference"},{"location":"api/#grist-api-reference","text":"REST API for manipulating documents, workspaces, and team sites. API Usage is an introduction to using the API. API Console allows you to make API calls from the browser. Authentication orgs get List the orgs you have access to get Describe an org patch Modify an org del Delete an org get List users with access to org patch Change who has access to org workspaces get List workspaces and documents within an org post Create an empty workspace get Describe a workspace patch Modify a workspace del Delete a workspace get List users with access to workspace patch Change who has access to workspace docs post Create an empty document get Describe a document patch Modify document metadata (but not its contents) del Delete a document patch Move document to another workspace. get List users with access to document patch Change who has access to document get Content of document, as an Sqlite file get Content of document, as an Excel file get Content of table, as a CSV file get The schema of a table post Truncate the document's action history post Reload a document records get Fetch records from a table post Add records to a table patch Modify records of a table put Add or update records of a table tables get List tables in a document post Add tables to a document patch Modify tables of a document columns get List columns in a table post Add columns to a table patch Modify columns of a table put Add or update columns of a table del Delete a column of a table data get Fetch data from a table post Add rows to a table patch Modify rows of a table post Delete rows of a table attachments get List metadata of all attachments in a doc post Upload attachments to a doc get Get the metadata for an attachment get Download the contents of an attachment webhooks get Webhooks associated with a document post Create new webhooks for a document patch Modify a webhook del Remove a webhook del Empty a document's queue of undelivered payloads sql get Run an SQL query against a document post Run an SQL query against a document, with options or parameters users del Delete a user from Grist API docs by Redocly","title":"Grist API Reference"},{"location":"code/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Plugin API # The plugin API is used in custom widgets to interact with the document within which the widget is embedded. If you haven\u2019t already, be sure to read our summary of Custom Widgets and look at the grist-widget repository for examples of widget implementations. Here you can find a reference for functions and interfaces available to custom widgets, starting with the grist object.","title":"Intro to Plugin API"},{"location":"code/#plugin-api","text":"The plugin API is used in custom widgets to interact with the document within which the widget is embedded. If you haven\u2019t already, be sure to read our summary of Custom Widgets and look at the grist-widget repository for examples of widget implementations. Here you can find a reference for functions and interfaces available to custom widgets, starting with the grist object.","title":"Plugin API"},{"location":"code/modules/grist_plugin_api/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Module: grist-plugin-api # Table of contents # Interfaces # AccessTokenOptions AccessTokenResult ColumnToMap CursorPos CustomSectionAPI FetchSelectedOptions GristColumn GristDocAPI GristTable GristView InteractionOptions InteractionOptionsRequest ParseOptionSchema ParseOptions ReadyPayload RenderOptions WidgetAPI WidgetColumnMap Type Aliases # ColumnsToMap UIRowId Variables # checkers docApi sectionApi selectedTable viewApi widgetApi Functions # allowSelectBy clearOptions fetchSelectedRecord fetchSelectedTable getAccessToken getOption getOptions getTable mapColumnNames mapColumnNamesBack on onNewRecord onOptions onRecord onRecords ready setCursorPos setOption setOptions setSelectedRows Type Aliases # ColumnsToMap # \u01ac ColumnsToMap : ( string | ColumnToMap )[] Tells Grist what columns a Custom Widget expects and allows users to map between existing column names and those requested by the Custom Widget. UIRowId # \u01ac UIRowId : number | \"new\" Represents the id of a row in a table. The value of the id column. Might be a number or \u2018new\u2019 value for a new row. Variables # checkers # \u2022 Const checkers : Pick < ICheckerSuite , \"CustomSectionAPI\" | \"ParseOptions\" | \"ParseFileResult\" | \"FileSource\" | \"ParseOptionSchema\" | \"GristTables\" | \"EditOptionsAPI\" | \"ParseFileAPI\" | \"RenderTarget\" | \"RenderOptions\" | \"ComponentKind\" | \"GristAPI\" | \"GristDocAPI\" | \"GristView\" | \"GristColumn\" | \"GristTable\" | \"ImportSourceAPI\" | \"ImportProcessorAPI\" | \"ImportSource\" | \"FileContent\" | \"FileListItem\" | \"URL\" | \"InternalImportSourceAPI\" | \"Storage\" | \"WidgetAPI\" > We also create and export a global checker object that includes all of the types above. docApi # \u2022 Const docApi : GristDocAPI & GristView A collection of methods for fetching document data. The fetchSelectedTable and fetchSelectedRecord methods are overridden to decode data by default. sectionApi # \u2022 Const sectionApi : CustomSectionAPI Interface for the mapping of a custom widget. selectedTable # \u2022 Const selectedTable : TableOperations Get the current selected table (for custom widgets). viewApi # \u2022 Const viewApi : GristView Interface for the records backing a custom widget. widgetApi # \u2022 Const widgetApi : WidgetAPI Interface for the state of a custom widget. Functions # allowSelectBy # \u25b8 allowSelectBy (): Promise < void > Deprecated now. It was used for filtering selected table by setSelectedRows method. Now the preferred way it to use ready message. Returns # Promise < void > clearOptions # \u25b8 clearOptions (): Promise < void > Clears all the options. Returns # Promise < void > fetchSelectedRecord # \u25b8 fetchSelectedRecord ( rowId , options? ): Promise < any > Same as GristView.fetchSelectedRecord , but the option keepEncoded is false by default. Parameters # Name Type rowId number options FetchSelectedOptions Returns # Promise < any > fetchSelectedTable # \u25b8 fetchSelectedTable ( options? ): Promise < any > Same as GristView.fetchSelectedTable , but the option keepEncoded is false by default. Parameters # Name Type options FetchSelectedOptions Returns # Promise < any > getAccessToken # \u25b8 getAccessToken ( options? ): Promise < AccessTokenResult > Get an access token, for making API calls outside of the custom widget API. There is no caching of tokens. The returned token can be used to authorize regular REST API calls that access the content of the document. For example, in a custom widget for a table with a Photos column containing attachments, the following code will update the src of an image with id the_image to show the attachment: grist.onRecord(async (record) => { const tokenInfo = await grist.docApi.getAccessToken({readOnly: true}); const img = document.getElementById('the_image'); const id = record.Photos[0]; // get an id of an attachment - there could be several // in a cell, for this example we just take the first. const src = `${tokenInfo.baseUrl}/attachments/${id}/download?auth=${tokenInfo.token}`; img.setAttribute('src', src); }); Parameters # Name Type options? AccessTokenOptions Returns # Promise < AccessTokenResult > getOption # \u25b8 getOption ( key ): Promise < any > Get single value from Widget options object. Parameters # Name Type key string Returns # Promise < any > getOptions # \u25b8 getOptions (): Promise < null | object > Gets all options stored by the widget. Options are stored as plain JSON object. Returns # Promise < null | object > getTable # \u25b8 getTable ( tableId? ): TableOperations Get access to a table in the document. If no tableId specified, this will use the current selected table (for custom widgets). If a table does not exist, there will be no error until an operation on the table is attempted. Parameters # Name Type tableId? string Returns # TableOperations mapColumnNames # \u25b8 mapColumnNames ( data , options? ): any Renames columns in the result using columns mapping configuration passed in ready method. Returns null if not all required columns were mapped or not widget doesn\u2019t support custom column mapping. Parameters # Name Type data any options? Object options.columns? ColumnsToMap options.mappings? null | WidgetColumnMap options.reverse? boolean Returns # any mapColumnNamesBack # \u25b8 mapColumnNamesBack ( data , options? ): any Offer a convenient way to map data with renamed columns back into the form used in the original table. This is useful for making edits to the original table in a widget with column mappings. As for mapColumnNames(), we don\u2019t attempt to do these transformations automatically. Parameters # Name Type data any options? Object options.columns? ColumnsToMap options.mappings? null | WidgetColumnMap Returns # any on # \u25b8 on ( eventName , listener ): Rpc Adds the listener function to the end of the listeners array for the event named eventName . No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times. server.on('connection', (stream) => { console.log('someone connected!'); }); Returns a reference to the EventEmitter , so that calls can be chained. By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the event listener to the beginning of the listeners array. const myEE = new EventEmitter(); myEE.on('foo', () => console.log('a')); myEE.prependListener('foo', () => console.log('b')); myEE.emit('foo'); // Prints: // b // a Since v0.1.101 Parameters # Name Type Description eventName string | symbol The name of the event. listener (\u2026 args : any []) => void The callback function Returns # Rpc onNewRecord # \u25b8 onNewRecord ( callback ): void For custom widgets, add a handler that will be called whenever the new (blank) row is selected. Parameters # Name Type callback ( mappings : null | WidgetColumnMap ) => unknown Returns # void onOptions # \u25b8 onOptions ( callback ): void For custom widgets, add a handler that will be called whenever the widget options change (and on initial ready message). Handler will be called with an object containing saved json options, or null if no options were saved. The second parameter has information about the widgets relationship with the document that contains it. Parameters # Name Type callback ( options : any , settings : InteractionOptions ) => unknown Returns # void onRecord # \u25b8 onRecord ( callback , options? ): void For custom widgets, add a handler that will be called whenever the row with the cursor changes - either by switching to a different row, or by some value within the row potentially changing. Handler may in the future be called with null if the cursor moves away from any row. By default, options.keepEncoded is false . Parameters # Name Type callback ( data : null | RowRecord , mappings : null | WidgetColumnMap ) => unknown options FetchSelectedOptions Returns # void onRecords # \u25b8 onRecords ( callback , options? ): void For custom widgets, add a handler that will be called whenever the selected records change. By default, options.format is 'rows' and options.keepEncoded is false . Parameters # Name Type callback ( data : RowRecord [], mappings : null | WidgetColumnMap ) => unknown options FetchSelectedOptions Returns # void ready # \u25b8 ready ( settings? ): void Declare that a component is prepared to receive messages from the outside world. Grist will not attempt to communicate with it until this method is called. Parameters # Name Type settings? ReadyPayload Returns # void setCursorPos # \u25b8 setCursorPos ( pos ): Promise < void > Sets the cursor position to a specific row and field. sectionId is ignored. Used for widget linking. Parameters # Name Type pos CursorPos Returns # Promise < void > setOption # \u25b8 setOption ( key , value ): Promise < void > Store single value in the Widget options object (and create it if necessary). Parameters # Name Type key string value any Returns # Promise < void > setOptions # \u25b8 setOptions ( options ): Promise < void > Replaces all options stored by the widget. Parameters # Name Type options Object Returns # Promise < void > setSelectedRows # \u25b8 setSelectedRows ( rowIds ): Promise < void > Set the list of selected rows to be used against any linked widget. Parameters # Name Type rowIds null | number [] Returns # Promise < void >","title":"grist-plugin-api"},{"location":"code/modules/grist_plugin_api/#module-grist-plugin-api","text":"","title":"Module: grist-plugin-api"},{"location":"code/modules/grist_plugin_api/#table-of-contents","text":"","title":"Table of contents"},{"location":"code/modules/grist_plugin_api/#interfaces","text":"AccessTokenOptions AccessTokenResult ColumnToMap CursorPos CustomSectionAPI FetchSelectedOptions GristColumn GristDocAPI GristTable GristView InteractionOptions InteractionOptionsRequest ParseOptionSchema ParseOptions ReadyPayload RenderOptions WidgetAPI WidgetColumnMap","title":"Interfaces"},{"location":"code/modules/grist_plugin_api/#type-aliases","text":"ColumnsToMap UIRowId","title":"Type Aliases"},{"location":"code/modules/grist_plugin_api/#variables","text":"checkers docApi sectionApi selectedTable viewApi widgetApi","title":"Variables"},{"location":"code/modules/grist_plugin_api/#functions","text":"allowSelectBy clearOptions fetchSelectedRecord fetchSelectedTable getAccessToken getOption getOptions getTable mapColumnNames mapColumnNamesBack on onNewRecord onOptions onRecord onRecords ready setCursorPos setOption setOptions setSelectedRows","title":"Functions"},{"location":"code/modules/grist_plugin_api/#type-aliases_1","text":"","title":"Type Aliases"},{"location":"code/modules/grist_plugin_api/#columnstomap","text":"\u01ac ColumnsToMap : ( string | ColumnToMap )[] Tells Grist what columns a Custom Widget expects and allows users to map between existing column names and those requested by the Custom Widget.","title":"ColumnsToMap"},{"location":"code/modules/grist_plugin_api/#uirowid","text":"\u01ac UIRowId : number | \"new\" Represents the id of a row in a table. The value of the id column. Might be a number or \u2018new\u2019 value for a new row.","title":"UIRowId"},{"location":"code/modules/grist_plugin_api/#variables_1","text":"","title":"Variables"},{"location":"code/modules/grist_plugin_api/#checkers","text":"\u2022 Const checkers : Pick < ICheckerSuite , \"CustomSectionAPI\" | \"ParseOptions\" | \"ParseFileResult\" | \"FileSource\" | \"ParseOptionSchema\" | \"GristTables\" | \"EditOptionsAPI\" | \"ParseFileAPI\" | \"RenderTarget\" | \"RenderOptions\" | \"ComponentKind\" | \"GristAPI\" | \"GristDocAPI\" | \"GristView\" | \"GristColumn\" | \"GristTable\" | \"ImportSourceAPI\" | \"ImportProcessorAPI\" | \"ImportSource\" | \"FileContent\" | \"FileListItem\" | \"URL\" | \"InternalImportSourceAPI\" | \"Storage\" | \"WidgetAPI\" > We also create and export a global checker object that includes all of the types above.","title":"checkers"},{"location":"code/modules/grist_plugin_api/#docapi","text":"\u2022 Const docApi : GristDocAPI & GristView A collection of methods for fetching document data. The fetchSelectedTable and fetchSelectedRecord methods are overridden to decode data by default.","title":"docApi"},{"location":"code/modules/grist_plugin_api/#sectionapi","text":"\u2022 Const sectionApi : CustomSectionAPI Interface for the mapping of a custom widget.","title":"sectionApi"},{"location":"code/modules/grist_plugin_api/#selectedtable","text":"\u2022 Const selectedTable : TableOperations Get the current selected table (for custom widgets).","title":"selectedTable"},{"location":"code/modules/grist_plugin_api/#viewapi","text":"\u2022 Const viewApi : GristView Interface for the records backing a custom widget.","title":"viewApi"},{"location":"code/modules/grist_plugin_api/#widgetapi","text":"\u2022 Const widgetApi : WidgetAPI Interface for the state of a custom widget.","title":"widgetApi"},{"location":"code/modules/grist_plugin_api/#functions_1","text":"","title":"Functions"},{"location":"code/modules/grist_plugin_api/#allowselectby","text":"\u25b8 allowSelectBy (): Promise < void > Deprecated now. It was used for filtering selected table by setSelectedRows method. Now the preferred way it to use ready message.","title":"allowSelectBy"},{"location":"code/modules/grist_plugin_api/#returns","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#clearoptions","text":"\u25b8 clearOptions (): Promise < void > Clears all the options.","title":"clearOptions"},{"location":"code/modules/grist_plugin_api/#returns_1","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#fetchselectedrecord","text":"\u25b8 fetchSelectedRecord ( rowId , options? ): Promise < any > Same as GristView.fetchSelectedRecord , but the option keepEncoded is false by default.","title":"fetchSelectedRecord"},{"location":"code/modules/grist_plugin_api/#parameters","text":"Name Type rowId number options FetchSelectedOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_2","text":"Promise < any >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#fetchselectedtable","text":"\u25b8 fetchSelectedTable ( options? ): Promise < any > Same as GristView.fetchSelectedTable , but the option keepEncoded is false by default.","title":"fetchSelectedTable"},{"location":"code/modules/grist_plugin_api/#parameters_1","text":"Name Type options FetchSelectedOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_3","text":"Promise < any >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#getaccesstoken","text":"\u25b8 getAccessToken ( options? ): Promise < AccessTokenResult > Get an access token, for making API calls outside of the custom widget API. There is no caching of tokens. The returned token can be used to authorize regular REST API calls that access the content of the document. For example, in a custom widget for a table with a Photos column containing attachments, the following code will update the src of an image with id the_image to show the attachment: grist.onRecord(async (record) => { const tokenInfo = await grist.docApi.getAccessToken({readOnly: true}); const img = document.getElementById('the_image'); const id = record.Photos[0]; // get an id of an attachment - there could be several // in a cell, for this example we just take the first. const src = `${tokenInfo.baseUrl}/attachments/${id}/download?auth=${tokenInfo.token}`; img.setAttribute('src', src); });","title":"getAccessToken"},{"location":"code/modules/grist_plugin_api/#parameters_2","text":"Name Type options? AccessTokenOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_4","text":"Promise < AccessTokenResult >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#getoption","text":"\u25b8 getOption ( key ): Promise < any > Get single value from Widget options object.","title":"getOption"},{"location":"code/modules/grist_plugin_api/#parameters_3","text":"Name Type key string","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_5","text":"Promise < any >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#getoptions","text":"\u25b8 getOptions (): Promise < null | object > Gets all options stored by the widget. Options are stored as plain JSON object.","title":"getOptions"},{"location":"code/modules/grist_plugin_api/#returns_6","text":"Promise < null | object >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#gettable","text":"\u25b8 getTable ( tableId? ): TableOperations Get access to a table in the document. If no tableId specified, this will use the current selected table (for custom widgets). If a table does not exist, there will be no error until an operation on the table is attempted.","title":"getTable"},{"location":"code/modules/grist_plugin_api/#parameters_4","text":"Name Type tableId? string","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_7","text":"TableOperations","title":"Returns"},{"location":"code/modules/grist_plugin_api/#mapcolumnnames","text":"\u25b8 mapColumnNames ( data , options? ): any Renames columns in the result using columns mapping configuration passed in ready method. Returns null if not all required columns were mapped or not widget doesn\u2019t support custom column mapping.","title":"mapColumnNames"},{"location":"code/modules/grist_plugin_api/#parameters_5","text":"Name Type data any options? Object options.columns? ColumnsToMap options.mappings? null | WidgetColumnMap options.reverse? boolean","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_8","text":"any","title":"Returns"},{"location":"code/modules/grist_plugin_api/#mapcolumnnamesback","text":"\u25b8 mapColumnNamesBack ( data , options? ): any Offer a convenient way to map data with renamed columns back into the form used in the original table. This is useful for making edits to the original table in a widget with column mappings. As for mapColumnNames(), we don\u2019t attempt to do these transformations automatically.","title":"mapColumnNamesBack"},{"location":"code/modules/grist_plugin_api/#parameters_6","text":"Name Type data any options? Object options.columns? ColumnsToMap options.mappings? null | WidgetColumnMap","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_9","text":"any","title":"Returns"},{"location":"code/modules/grist_plugin_api/#on","text":"\u25b8 on ( eventName , listener ): Rpc Adds the listener function to the end of the listeners array for the event named eventName . No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times. server.on('connection', (stream) => { console.log('someone connected!'); }); Returns a reference to the EventEmitter , so that calls can be chained. By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the event listener to the beginning of the listeners array. const myEE = new EventEmitter(); myEE.on('foo', () => console.log('a')); myEE.prependListener('foo', () => console.log('b')); myEE.emit('foo'); // Prints: // b // a Since v0.1.101","title":"on"},{"location":"code/modules/grist_plugin_api/#parameters_7","text":"Name Type Description eventName string | symbol The name of the event. listener (\u2026 args : any []) => void The callback function","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_10","text":"Rpc","title":"Returns"},{"location":"code/modules/grist_plugin_api/#onnewrecord","text":"\u25b8 onNewRecord ( callback ): void For custom widgets, add a handler that will be called whenever the new (blank) row is selected.","title":"onNewRecord"},{"location":"code/modules/grist_plugin_api/#parameters_8","text":"Name Type callback ( mappings : null | WidgetColumnMap ) => unknown","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_11","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#onoptions","text":"\u25b8 onOptions ( callback ): void For custom widgets, add a handler that will be called whenever the widget options change (and on initial ready message). Handler will be called with an object containing saved json options, or null if no options were saved. The second parameter has information about the widgets relationship with the document that contains it.","title":"onOptions"},{"location":"code/modules/grist_plugin_api/#parameters_9","text":"Name Type callback ( options : any , settings : InteractionOptions ) => unknown","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_12","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#onrecord","text":"\u25b8 onRecord ( callback , options? ): void For custom widgets, add a handler that will be called whenever the row with the cursor changes - either by switching to a different row, or by some value within the row potentially changing. Handler may in the future be called with null if the cursor moves away from any row. By default, options.keepEncoded is false .","title":"onRecord"},{"location":"code/modules/grist_plugin_api/#parameters_10","text":"Name Type callback ( data : null | RowRecord , mappings : null | WidgetColumnMap ) => unknown options FetchSelectedOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_13","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#onrecords","text":"\u25b8 onRecords ( callback , options? ): void For custom widgets, add a handler that will be called whenever the selected records change. By default, options.format is 'rows' and options.keepEncoded is false .","title":"onRecords"},{"location":"code/modules/grist_plugin_api/#parameters_11","text":"Name Type callback ( data : RowRecord [], mappings : null | WidgetColumnMap ) => unknown options FetchSelectedOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_14","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#ready","text":"\u25b8 ready ( settings? ): void Declare that a component is prepared to receive messages from the outside world. Grist will not attempt to communicate with it until this method is called.","title":"ready"},{"location":"code/modules/grist_plugin_api/#parameters_12","text":"Name Type settings? ReadyPayload","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_15","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#setcursorpos","text":"\u25b8 setCursorPos ( pos ): Promise < void > Sets the cursor position to a specific row and field. sectionId is ignored. Used for widget linking.","title":"setCursorPos"},{"location":"code/modules/grist_plugin_api/#parameters_13","text":"Name Type pos CursorPos","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_16","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#setoption","text":"\u25b8 setOption ( key , value ): Promise < void > Store single value in the Widget options object (and create it if necessary).","title":"setOption"},{"location":"code/modules/grist_plugin_api/#parameters_14","text":"Name Type key string value any","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_17","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#setoptions","text":"\u25b8 setOptions ( options ): Promise < void > Replaces all options stored by the widget.","title":"setOptions"},{"location":"code/modules/grist_plugin_api/#parameters_15","text":"Name Type options Object","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_18","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#setselectedrows","text":"\u25b8 setSelectedRows ( rowIds ): Promise < void > Set the list of selected rows to be used against any linked widget.","title":"setSelectedRows"},{"location":"code/modules/grist_plugin_api/#parameters_16","text":"Name Type rowIds null | number []","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_19","text":"Promise < void >","title":"Returns"},{"location":"install/audit-log-overview/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Audit log overview # Grist supports real-time monitoring of activity in your installation by streaming logs of audit events to an external security information and event management (SIEM) system like Splunk. What are audit logs? # Audit logs are a record of events triggered by actions performed within your installation that help you answer questions like \u201cwhen was a workspace removed?\u201d or \u201cwho invited a collaborator to a document?\u201d Audit logs can can help maintain compliance and identify misuse of organization resources. About audit log events # Audit log events include the action that occurred, who performed the action, when and where the action occurred, and any additional details about the action in question. For example, the document.create action occurs when a document is created in your installation, and includes details like the ID and name of the created document and its workspace. { \"id\": \"806ed0d9-7d25-4df2-9a6c-f7d2f6b8dba6\", \"action\": \"document.create\", \"actor\": { \"type\": \"user\", \"user\": { \"id\": 146, \"email\": \"flapjack@example.com\", \"name\": \"Flapjack Toasty\" } }, \"context\": { \"ip_address\": \"39.139.42.243\", \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\", \"session_id\": \"ixVo6maPbcgd1vvoj93teT\", \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"timestamp\": \"2024-11-13T06:00:51.518Z\", \"details\": { \"document\": { \"id\": \"4cq1mNTkQmEF5KsUVGiy6H\", \"name\": \"Untitled document\" } } } For a full list of events that may appear, see \u201cAudit log events for your self-managed instance\u201d . Streaming audit log events # Installation admins can configure streaming of audit log events to external SIEM systems from the Admin Panel. For more information, see \u201cAudit log streaming.\u201d","title":"Audit log overview"},{"location":"install/audit-log-overview/#audit-log-overview","text":"Grist supports real-time monitoring of activity in your installation by streaming logs of audit events to an external security information and event management (SIEM) system like Splunk.","title":"Audit log overview"},{"location":"install/audit-log-overview/#what-are-audit-logs","text":"Audit logs are a record of events triggered by actions performed within your installation that help you answer questions like \u201cwhen was a workspace removed?\u201d or \u201cwho invited a collaborator to a document?\u201d Audit logs can can help maintain compliance and identify misuse of organization resources.","title":"What are audit logs?"},{"location":"install/audit-log-overview/#about-audit-log-events","text":"Audit log events include the action that occurred, who performed the action, when and where the action occurred, and any additional details about the action in question. For example, the document.create action occurs when a document is created in your installation, and includes details like the ID and name of the created document and its workspace. { \"id\": \"806ed0d9-7d25-4df2-9a6c-f7d2f6b8dba6\", \"action\": \"document.create\", \"actor\": { \"type\": \"user\", \"user\": { \"id\": 146, \"email\": \"flapjack@example.com\", \"name\": \"Flapjack Toasty\" } }, \"context\": { \"ip_address\": \"39.139.42.243\", \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\", \"session_id\": \"ixVo6maPbcgd1vvoj93teT\", \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"timestamp\": \"2024-11-13T06:00:51.518Z\", \"details\": { \"document\": { \"id\": \"4cq1mNTkQmEF5KsUVGiy6H\", \"name\": \"Untitled document\" } } } For a full list of events that may appear, see \u201cAudit log events for your self-managed instance\u201d .","title":"About audit log events"},{"location":"install/audit-log-overview/#streaming-audit-log-events","text":"Installation admins can configure streaming of audit log events to external SIEM systems from the Admin Panel. For more information, see \u201cAudit log streaming.\u201d","title":"Streaming audit log events"},{"location":"install/audit-log-streaming/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Audit log streaming # Grist can stream audit log events from your installation to an external destination, such as a security information and event management (SIEM) system. You can add, update, or delete a streaming destination at any time, and stream to multiple destinations. Events from all team sites within your installation will be included in the stream. Events are streamed in real-time. Only events that occurred after a streaming destination was added will be sent to that destination. Note: You must be an installation administrator to view or modify streaming destinations. Adding streaming destinations # Grist currently supports streaming to destinations with HTTP Event Collector (HEC) endpoints, such as Splunk, or destinations that can accept structured JSON over HTTP. Follow the instructions for your destination: Splunk (HEC) Other (HTTP) Streaming to Splunk (HEC) # To stream to destinations with HEC endpoints, a format used by Splunk and Splunk-compatible services, you need to set up an HEC endpoint that is reachable from your Grist installation. You can also use a tool like Vector which supports receiving HEC events. See Splunk\u2019s documentation for more information. Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click Start streaming or Add destination . Under \u201cDestination\u201d, click Splunk . Under \u201cURL\u201d, enter the HEC endpoint to send events to. Under \u201cToken\u201d, enter \u201cSplunk \u201d followed by the HEC token (e.g. Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0 ). Click Add destination . Streaming to other destinations (HTTP) # To stream to other HTTP destinations, you need to set up an endpoint that is reachable from your Grist installation and accepts structured JSON with the following format: { \"id\": \"806ed0d9-7d25-4df2-9a6c-f7d2f6b8dba6\", \"action\": \"document.create\", \"actor\": { \"type\": \"user\", \"user\": { \"id\": 146, \"email\": \"flapjack@example.com\", \"name\": \"Flapjack Toasty\" } }, \"context\": { \"ip_address\": \"39.139.42.243\", \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\", \"session_id\": \"ixVo6maPbcgd1vvoj93teT\", \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"timestamp\": \"2024-11-13T06:00:51.518Z\", \"details\": { \"document\": { \"id\": \"4cq1mNTkQmEF5KsUVGiy6H\", \"name\": \"Untitled document\" } } } Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click Start streaming or Add destination . Under \u201cDestination\u201d, click Other . Under \u201cURL\u201d, enter the HTTP endpoint to send events to. Under \u201cToken\u201d, enter the value to include in the Authorization header, if applicable. Click Add destination . Updating streaming destinations # Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click \u2026 for the destination you want to update. Modify the destination, URL, and/or token. Click Save . Deleting streaming destinations # Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click \u2026 for the destination you want to delete. Click Delete . Click Delete again in the confirmation modal that appears.","title":"Audit log streaming"},{"location":"install/audit-log-streaming/#audit-log-streaming","text":"Grist can stream audit log events from your installation to an external destination, such as a security information and event management (SIEM) system. You can add, update, or delete a streaming destination at any time, and stream to multiple destinations. Events from all team sites within your installation will be included in the stream. Events are streamed in real-time. Only events that occurred after a streaming destination was added will be sent to that destination. Note: You must be an installation administrator to view or modify streaming destinations.","title":"Audit log streaming"},{"location":"install/audit-log-streaming/#adding-streaming-destinations","text":"Grist currently supports streaming to destinations with HTTP Event Collector (HEC) endpoints, such as Splunk, or destinations that can accept structured JSON over HTTP. Follow the instructions for your destination: Splunk (HEC) Other (HTTP)","title":"Adding streaming destinations"},{"location":"install/audit-log-streaming/#streaming-to-splunk-hec","text":"To stream to destinations with HEC endpoints, a format used by Splunk and Splunk-compatible services, you need to set up an HEC endpoint that is reachable from your Grist installation. You can also use a tool like Vector which supports receiving HEC events. See Splunk\u2019s documentation for more information. Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click Start streaming or Add destination . Under \u201cDestination\u201d, click Splunk . Under \u201cURL\u201d, enter the HEC endpoint to send events to. Under \u201cToken\u201d, enter \u201cSplunk \u201d followed by the HEC token (e.g. Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0 ). Click Add destination .","title":"Streaming to Splunk (HEC)"},{"location":"install/audit-log-streaming/#streaming-to-other-destinations-http","text":"To stream to other HTTP destinations, you need to set up an endpoint that is reachable from your Grist installation and accepts structured JSON with the following format: { \"id\": \"806ed0d9-7d25-4df2-9a6c-f7d2f6b8dba6\", \"action\": \"document.create\", \"actor\": { \"type\": \"user\", \"user\": { \"id\": 146, \"email\": \"flapjack@example.com\", \"name\": \"Flapjack Toasty\" } }, \"context\": { \"ip_address\": \"39.139.42.243\", \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\", \"session_id\": \"ixVo6maPbcgd1vvoj93teT\", \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"timestamp\": \"2024-11-13T06:00:51.518Z\", \"details\": { \"document\": { \"id\": \"4cq1mNTkQmEF5KsUVGiy6H\", \"name\": \"Untitled document\" } } } Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click Start streaming or Add destination . Under \u201cDestination\u201d, click Other . Under \u201cURL\u201d, enter the HTTP endpoint to send events to. Under \u201cToken\u201d, enter the value to include in the Authorization header, if applicable. Click Add destination .","title":"Streaming to other destinations (HTTP)"},{"location":"install/audit-log-streaming/#updating-streaming-destinations","text":"Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click \u2026 for the destination you want to update. Modify the destination, URL, and/or token. Click Save .","title":"Updating streaming destinations"},{"location":"install/audit-log-streaming/#deleting-streaming-destinations","text":"Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click \u2026 for the destination you want to delete. Click Delete . Click Delete again in the confirmation modal that appears.","title":"Deleting streaming destinations"},{"location":"install/audit-log-events/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Audit log events for your self-managed instance # config # config.create # A configuration item was created. Details # Property Type Description config object The created configuration item. config.id number The configuration item ID. config.key string The configuration item key. config.value any The configuration item value. config.site (optional) object The site this configuration item belongs to. config.site.id number The site ID. config.site.name string The site name. config.site.domain string The site domain. Sample # { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } } config.delete # A configuration item was deleted. Details # Property Type Description config object The deleted configuration item. config.id number The configuration item ID. config.key string The configuration item key. config.value any The configuration item value. config.site (optional) object The site this configuration item belonged to. config.site.id number The site ID. config.site.name string The site name. config.site.domain string The site domain. Sample # { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } } config.update # A configuration item was updated. Details # Property Type Description previous object The previous versions of affected resources. previous.config object The previous configuration item. previous.config.id number The configuration item ID. previous.config.key string The configuration item key. previous.config.value any The configuration item value. previous.config.site (optional) object The site this configuration item belongs to. previous.config.site.id number The site ID. previous.config.site.name string The site name. previous.config.site.domain string The site domain. current object The current versions of affected resources. current.config object The current configuration item. current.config.id number The configuration item ID. current.config.key string The configuration item key. current.config.value any The configuration item value. current.config.site (optional) object The site this configuration item belongs to. current.config.site.id number The site ID. current.config.site.name string The site name. current.config.site.domain string The site domain. Sample # { \"previous\": { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } }, \"current\": { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" }, { \"id\": \"8f421760-14e9-4d11-b10a-f51d82041e0f\", \"name\": \"other\", \"url\": \"https://other.example.com/events\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } } } document # document.change_access # A document\u2019s access was changed. Details # Property Type Description document object The document. document.id string The document ID. document.name string The document name. access_changes object The access changes. access_changes.public_access (optional) string or null The new public access level. access_changes.max_inherited_access (optional) string or null The new maximum access level that can be inherited from the document\u2019s workspace or site. access_changes.users (optional) Array The new access levels of individual users. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" }, \"access_changes\": { \"public_access\": \"viewers\", \"max_inherited_access\": null, \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"owners\" } ] } } document.clear_all_webhook_queues # A document\u2019s webhook queues were cleared. Details # Property Type Description document object The created document. document.id string The document ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } } document.clear_webhook_queue # A document\u2019s webhook queue was cleared. Details # Property Type Description document object The document. document.id string The document ID. webhook object The webhook. webhook.id string The webhook ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"webhook\": { \"id\": \"17f8328e-0523-41fe-89aa-ae180bebb26e\" } } document.create # A document was created. Details # Property Type Description document object The created document. document.id string The document ID. document.name string The document name. document.workspace object The document\u2019s workspace. document.workspace.id number The workspace ID. document.workspace.name string The workspace name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } } document.delete # A document was permanently deleted. Details # Property Type Description document object The deleted document. document.id string The document ID. document.name string The document name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } } document.deliver_webhook_events # A document\u2019s webhook successfully delivered events. Details # Property Type Description document object The document. document.id string The document ID. webhook object The webhook. webhook.id string The webhook ID. webhook.events object The delivered webhook events. webhook.events.delivered_to string Where the webhook events were delivered to. webhook.events.quantity number The number of webhook events that were delivered. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"webhook\": { \"id\": \"17f8328e-0523-41fe-89aa-ae180bebb26e\", \"events\": { \"delivered_to\": \"example.com\", \"quantity\": 3 } } } document.duplicate # A document was duplicated. Details # Property Type Description original object The resources that were duplicated. original.document object The document that was duplicated. original.document.id string The document ID. original.document.name string The document name. duplicate object The newly-duplicated resources. duplicate.document object The newly-duplicated document. duplicate.document.id string The document ID. duplicate.document.name string The document name. duplicate.document.workspace object The document\u2019s workspace. duplicate.document.workspace.id number The workspace ID options object The options used to duplicate the document. options.as_template boolean Include the structure without any data. Sample # { \"original\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }, \"duplicate\": { \"document\": { \"id\": \"fFKKA6qjXJd9sNLhpw6iPn\", \"name\": \"Project Lollipop V2\", \"workspace\": { \"id\": 92 } } }, \"options\": { \"as_template\": false } } document.fork # A document was forked. Details # Property Type Description document object The document that was forked. document.id string The document ID. document.name string The document name. fork object The newly-forked document. fork.id string The fork ID. fork.document_id string The document ID. fork.url_id string The URL ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" }, \"fork\": { \"id\": \"fGGyPYea1ueFiVW382uuAY\", \"document_id\": \"mRM8ydxxLkc6Ewo56jsDGx~fGGyPYea1ueFiVW382uuAY~9\", \"url_id\": \"mRM8ydxxLkc6~fGGyPYea1ueFiVW382uuAY~9\" } } document.move # A document was moved to a different workspace. Details # Property Type Description previous object The previous versions of affected resources. previous.document object The previous document. previous.document.id string The document ID. previous.document.name string The document name. previous.document.workspace object The document\u2019s workspace. previous.document.workspace.id number The workspace ID. previous.document.workspace.name string The workspace name. current object The current versions of affected resources. current.document object The current document. current.document.id string The document ID. current.document.name string The document name. current.document.workspace object The document\u2019s workspace. current.document.workspace.id number The workspace ID. current.document.workspace.name string The workspace name. Sample # { \"previous\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } }, \"current\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 98, \"name\": \"Not So Secret Plans\" } } } } document.move_to_trash # A document was moved to the trash. Details # Property Type Description document object The removed document. document.id string The document ID. document.name string The document name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } } document.open # A document was opened. Details # Property Type Description document object The opened document. document.id string The document ID. document.name string The document name. document.url_id string The URL ID. document.fork_id (optional) string The fork ID. document.snapshot_id (optional) string The snapshot ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"url_id\": \"mRM8ydxxLkc6~fGGyPYea1ueFiVW382uuAY~9\", \"fork_id\": \"fGGyPYea1ueFiVW382uuAY\" } } document.pin # A document was pinned. Details # Property Type Description document object The pinned document. document.id string The document ID. document.name string The document name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } } document.reload # A document was reloaded. Details # Property Type Description document object The reloaded document. document.id string The document ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } } document.rename # A document was renamed. Details # Property Type Description previous object The previous versions of affected resources. previous.document object The previous document. previous.document.id number The document ID. previous.document.name string The document name. current object The current versions of affected resources. current.document object The current document. current.document.id number The document ID. current.document.name string The document name. Sample # { \"previous\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }, \"current\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Competitive Analysis\" } } } document.replace # A document was replaced. Details # Property Type Description document object The document that was replaced. document.id string The document ID. fork (optional) object The fork that the document was replaced with. fork.document_id string The document ID. snapshot (optional) object The snapshot that the document was replaced with. snapshot.id string The snapshot ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"fork\": { \"document_id\": \"mRM8ydxxLkc6Ewo56jsDGx~fGGyPYea1ueFiVW382uuAY~9\" } } document.restore_from_trash # A document was restored from the trash. Details # Property Type Description document object The restored document. document.id string The document ID. document.name string The document name. document.workspace object The document\u2019s workspace. document.workspace.id number The workspace ID. document.workspace.name string The workspace name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } } document.run_sql_query # A SQL query was run against a document. Details # Property Type Description document object The queried document. document.id string The document ID. sql_query object The SQL query. sql_query.statement string The SQL statement. sql_query.arguments (optional) Array The arguments passed to parameters in the SQL statement. options object The options used to query the document. options.timeout_ms (optional) number Timeout in milliseconds after which operations on the document will be interrupted. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"sql_query\": { \"statement\": \"SELECT * FROM Pets WHERE popularity >= ?\", \"arguments\": [ 50 ] }, \"options\": { \"timeout_ms\": 500 } } document.send_to_google_drive # A document was sent to Google Drive. Details # Property Type Description document object The sent document. document.id string The document ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } } document.truncate_history # A document\u2019s history was truncated. Details # Property Type Description document object The document. document.id string The document ID. options object The options used to truncate the document\u2019s history. options.keep_n_most_recent number The number of recent history actions to keep. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"options\": { \"keep_n_most_recent\": 3 } } document.unpin # A document was unpinned. Details # Property Type Description document object The unpinned document. document.id string The document ID. document.name string The document name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } } site # site.change_access # A site\u2019s access was changed. Details # Property Type Description site object The site. site.id number The site ID. site.name string The site name. site.domain string The site domain. access_changes object The access changes. access_changes.users Array The new access levels of individual users. Sample # { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" }, \"access_changes\": { \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"owners\" } ] } } site.create # A site was created. Details # Property Type Description site object The created site. site.id number The site ID. site.name string The site name. site.domain string The site domain. Sample # { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } site.delete # A site was permanently deleted. Details # Property Type Description site object The deleted site. site.id number The site ID. site.name string The site name. site.domain string The site domain. Sample # { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } site.rename # A site was renamed. Details # Property Type Description previous object The previous versions of affected resources. previous.site object The previous site. previous.site.id number The site ID. previous.site.name string The site name. previous.site.domain string The site domain. current object The current versions of affected resources. current.site object The current site. current.site.id number The site ID. current.site.name string The site name. current.site.domain string The site domain. Sample # { \"previous\": { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"current\": { \"site\": { \"id\": 42, \"name\": \"ACME Unlimited\", \"domain\": \"acme\" } } } user # user.change_name # A user\u2019s name was changed. Details # Property Type Description previous object The previous versions of affected resources. previous.user object The previous user. previous.user.id number The user ID. previous.user.name string The user\u2019s name. previous.user.email (optional) string The user\u2019s email. current object The current versions of affected resources. current.user object The current user. current.user.id number The user ID. current.user.name string The user\u2019s name. current.user.email (optional) string The user\u2019s email. Sample # { \"previous\": { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }, \"current\": { \"user\": { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\" } } } user.create_api_key # A user API key was created. Details # Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email. Sample # { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } } user.delete # A user was permanently deleted. Details # Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email. Sample # { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } } user.delete_api_key # A user API key was deleted. Details # Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email. Sample # { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } } workspace # workspace.change_access # A workspace\u2019s access was changed. Details # Property Type Description workspace object The workspace. workspace.id number The workspace ID. workspace.name string The workspace name. access_changes object The access changes. access_changes.max_inherited_access (optional) string or null The new maximum access level that can be inherited from the workspace\u2019s site. access_changes.users (optional) Array The new access levels of individual users. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" }, \"access_changes\": { \"max_inherited_access\": \"editors\", \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"editors\" } ] } } workspace.create # A workspace was created. Details # Property Type Description workspace object The created workspace. workspace.id number The workspace ID. workspace.name string The workspace name. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } workspace.delete # A workspace was permanently deleted. Details # Property Type Description workspace object The deleted workspace. workspace.id number The workspace ID. workspace.name string The workspace name. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } workspace.move_to_trash # A workspace was moved to the trash. Details # Property Type Description workspace object The removed workspace. workspace.id number The workspace ID. workspace.name string The workspace name. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } workspace.rename # A workspace was renamed. Details # Property Type Description previous object The previous versions of affected resources. previous.workspace object The previous workspace. previous.workspace.id number The workspace ID. previous.workspace.name string The workspace name. current object The current versions of affected resources. current.workspace object The current workspace. current.workspace.id number The workspace ID. current.workspace.name string The workspace name. Sample # { \"previous\": { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }, \"current\": { \"workspace\": { \"id\": 97, \"name\": \"Retreat Docs\" } } } workspace.restore_from_trash # A workspace was restored from the trash. Details # Property Type Description workspace object The restored workspace. workspace.id number The workspace ID. workspace.name string The workspace name. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Audit log events"},{"location":"install/audit-log-events/#audit-log-events-for-your-self-managed-instance","text":"","title":"Audit log events for your self-managed instance"},{"location":"install/audit-log-events/#config","text":"","title":"config"},{"location":"install/audit-log-events/#configcreate","text":"A configuration item was created.","title":"config.create"},{"location":"install/audit-log-events/#details","text":"Property Type Description config object The created configuration item. config.id number The configuration item ID. config.key string The configuration item key. config.value any The configuration item value. config.site (optional) object The site this configuration item belongs to. config.site.id number The site ID. config.site.name string The site name. config.site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample","text":"{ \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } }","title":"Sample"},{"location":"install/audit-log-events/#configdelete","text":"A configuration item was deleted.","title":"config.delete"},{"location":"install/audit-log-events/#details_1","text":"Property Type Description config object The deleted configuration item. config.id number The configuration item ID. config.key string The configuration item key. config.value any The configuration item value. config.site (optional) object The site this configuration item belonged to. config.site.id number The site ID. config.site.name string The site name. config.site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_1","text":"{ \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } }","title":"Sample"},{"location":"install/audit-log-events/#configupdate","text":"A configuration item was updated.","title":"config.update"},{"location":"install/audit-log-events/#details_2","text":"Property Type Description previous object The previous versions of affected resources. previous.config object The previous configuration item. previous.config.id number The configuration item ID. previous.config.key string The configuration item key. previous.config.value any The configuration item value. previous.config.site (optional) object The site this configuration item belongs to. previous.config.site.id number The site ID. previous.config.site.name string The site name. previous.config.site.domain string The site domain. current object The current versions of affected resources. current.config object The current configuration item. current.config.id number The configuration item ID. current.config.key string The configuration item key. current.config.value any The configuration item value. current.config.site (optional) object The site this configuration item belongs to. current.config.site.id number The site ID. current.config.site.name string The site name. current.config.site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_2","text":"{ \"previous\": { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } }, \"current\": { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" }, { \"id\": \"8f421760-14e9-4d11-b10a-f51d82041e0f\", \"name\": \"other\", \"url\": \"https://other.example.com/events\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } } }","title":"Sample"},{"location":"install/audit-log-events/#document","text":"","title":"document"},{"location":"install/audit-log-events/#documentchange_access","text":"A document\u2019s access was changed.","title":"document.change_access"},{"location":"install/audit-log-events/#details_3","text":"Property Type Description document object The document. document.id string The document ID. document.name string The document name. access_changes object The access changes. access_changes.public_access (optional) string or null The new public access level. access_changes.max_inherited_access (optional) string or null The new maximum access level that can be inherited from the document\u2019s workspace or site. access_changes.users (optional) Array The new access levels of individual users.","title":"Details"},{"location":"install/audit-log-events/#sample_3","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" }, \"access_changes\": { \"public_access\": \"viewers\", \"max_inherited_access\": null, \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"owners\" } ] } }","title":"Sample"},{"location":"install/audit-log-events/#documentclear_all_webhook_queues","text":"A document\u2019s webhook queues were cleared.","title":"document.clear_all_webhook_queues"},{"location":"install/audit-log-events/#details_4","text":"Property Type Description document object The created document. document.id string The document ID.","title":"Details"},{"location":"install/audit-log-events/#sample_4","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentclear_webhook_queue","text":"A document\u2019s webhook queue was cleared.","title":"document.clear_webhook_queue"},{"location":"install/audit-log-events/#details_5","text":"Property Type Description document object The document. document.id string The document ID. webhook object The webhook. webhook.id string The webhook ID.","title":"Details"},{"location":"install/audit-log-events/#sample_5","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"webhook\": { \"id\": \"17f8328e-0523-41fe-89aa-ae180bebb26e\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentcreate","text":"A document was created.","title":"document.create"},{"location":"install/audit-log-events/#details_6","text":"Property Type Description document object The created document. document.id string The document ID. document.name string The document name. document.workspace object The document\u2019s workspace. document.workspace.id number The workspace ID. document.workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_6","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } }","title":"Sample"},{"location":"install/audit-log-events/#documentdelete","text":"A document was permanently deleted.","title":"document.delete"},{"location":"install/audit-log-events/#details_7","text":"Property Type Description document object The deleted document. document.id string The document ID. document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_7","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentdeliver_webhook_events","text":"A document\u2019s webhook successfully delivered events.","title":"document.deliver_webhook_events"},{"location":"install/audit-log-events/#details_8","text":"Property Type Description document object The document. document.id string The document ID. webhook object The webhook. webhook.id string The webhook ID. webhook.events object The delivered webhook events. webhook.events.delivered_to string Where the webhook events were delivered to. webhook.events.quantity number The number of webhook events that were delivered.","title":"Details"},{"location":"install/audit-log-events/#sample_8","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"webhook\": { \"id\": \"17f8328e-0523-41fe-89aa-ae180bebb26e\", \"events\": { \"delivered_to\": \"example.com\", \"quantity\": 3 } } }","title":"Sample"},{"location":"install/audit-log-events/#documentduplicate","text":"A document was duplicated.","title":"document.duplicate"},{"location":"install/audit-log-events/#details_9","text":"Property Type Description original object The resources that were duplicated. original.document object The document that was duplicated. original.document.id string The document ID. original.document.name string The document name. duplicate object The newly-duplicated resources. duplicate.document object The newly-duplicated document. duplicate.document.id string The document ID. duplicate.document.name string The document name. duplicate.document.workspace object The document\u2019s workspace. duplicate.document.workspace.id number The workspace ID options object The options used to duplicate the document. options.as_template boolean Include the structure without any data.","title":"Details"},{"location":"install/audit-log-events/#sample_9","text":"{ \"original\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }, \"duplicate\": { \"document\": { \"id\": \"fFKKA6qjXJd9sNLhpw6iPn\", \"name\": \"Project Lollipop V2\", \"workspace\": { \"id\": 92 } } }, \"options\": { \"as_template\": false } }","title":"Sample"},{"location":"install/audit-log-events/#documentfork","text":"A document was forked.","title":"document.fork"},{"location":"install/audit-log-events/#details_10","text":"Property Type Description document object The document that was forked. document.id string The document ID. document.name string The document name. fork object The newly-forked document. fork.id string The fork ID. fork.document_id string The document ID. fork.url_id string The URL ID.","title":"Details"},{"location":"install/audit-log-events/#sample_10","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" }, \"fork\": { \"id\": \"fGGyPYea1ueFiVW382uuAY\", \"document_id\": \"mRM8ydxxLkc6Ewo56jsDGx~fGGyPYea1ueFiVW382uuAY~9\", \"url_id\": \"mRM8ydxxLkc6~fGGyPYea1ueFiVW382uuAY~9\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentmove","text":"A document was moved to a different workspace.","title":"document.move"},{"location":"install/audit-log-events/#details_11","text":"Property Type Description previous object The previous versions of affected resources. previous.document object The previous document. previous.document.id string The document ID. previous.document.name string The document name. previous.document.workspace object The document\u2019s workspace. previous.document.workspace.id number The workspace ID. previous.document.workspace.name string The workspace name. current object The current versions of affected resources. current.document object The current document. current.document.id string The document ID. current.document.name string The document name. current.document.workspace object The document\u2019s workspace. current.document.workspace.id number The workspace ID. current.document.workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_11","text":"{ \"previous\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } }, \"current\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 98, \"name\": \"Not So Secret Plans\" } } } }","title":"Sample"},{"location":"install/audit-log-events/#documentmove_to_trash","text":"A document was moved to the trash.","title":"document.move_to_trash"},{"location":"install/audit-log-events/#details_12","text":"Property Type Description document object The removed document. document.id string The document ID. document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_12","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentopen","text":"A document was opened.","title":"document.open"},{"location":"install/audit-log-events/#details_13","text":"Property Type Description document object The opened document. document.id string The document ID. document.name string The document name. document.url_id string The URL ID. document.fork_id (optional) string The fork ID. document.snapshot_id (optional) string The snapshot ID.","title":"Details"},{"location":"install/audit-log-events/#sample_13","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"url_id\": \"mRM8ydxxLkc6~fGGyPYea1ueFiVW382uuAY~9\", \"fork_id\": \"fGGyPYea1ueFiVW382uuAY\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentpin","text":"A document was pinned.","title":"document.pin"},{"location":"install/audit-log-events/#details_14","text":"Property Type Description document object The pinned document. document.id string The document ID. document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_14","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentreload","text":"A document was reloaded.","title":"document.reload"},{"location":"install/audit-log-events/#details_15","text":"Property Type Description document object The reloaded document. document.id string The document ID.","title":"Details"},{"location":"install/audit-log-events/#sample_15","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentrename","text":"A document was renamed.","title":"document.rename"},{"location":"install/audit-log-events/#details_16","text":"Property Type Description previous object The previous versions of affected resources. previous.document object The previous document. previous.document.id number The document ID. previous.document.name string The document name. current object The current versions of affected resources. current.document object The current document. current.document.id number The document ID. current.document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_16","text":"{ \"previous\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }, \"current\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Competitive Analysis\" } } }","title":"Sample"},{"location":"install/audit-log-events/#documentreplace","text":"A document was replaced.","title":"document.replace"},{"location":"install/audit-log-events/#details_17","text":"Property Type Description document object The document that was replaced. document.id string The document ID. fork (optional) object The fork that the document was replaced with. fork.document_id string The document ID. snapshot (optional) object The snapshot that the document was replaced with. snapshot.id string The snapshot ID.","title":"Details"},{"location":"install/audit-log-events/#sample_17","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"fork\": { \"document_id\": \"mRM8ydxxLkc6Ewo56jsDGx~fGGyPYea1ueFiVW382uuAY~9\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentrestore_from_trash","text":"A document was restored from the trash.","title":"document.restore_from_trash"},{"location":"install/audit-log-events/#details_18","text":"Property Type Description document object The restored document. document.id string The document ID. document.name string The document name. document.workspace object The document\u2019s workspace. document.workspace.id number The workspace ID. document.workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_18","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } }","title":"Sample"},{"location":"install/audit-log-events/#documentrun_sql_query","text":"A SQL query was run against a document.","title":"document.run_sql_query"},{"location":"install/audit-log-events/#details_19","text":"Property Type Description document object The queried document. document.id string The document ID. sql_query object The SQL query. sql_query.statement string The SQL statement. sql_query.arguments (optional) Array The arguments passed to parameters in the SQL statement. options object The options used to query the document. options.timeout_ms (optional) number Timeout in milliseconds after which operations on the document will be interrupted.","title":"Details"},{"location":"install/audit-log-events/#sample_19","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"sql_query\": { \"statement\": \"SELECT * FROM Pets WHERE popularity >= ?\", \"arguments\": [ 50 ] }, \"options\": { \"timeout_ms\": 500 } }","title":"Sample"},{"location":"install/audit-log-events/#documentsend_to_google_drive","text":"A document was sent to Google Drive.","title":"document.send_to_google_drive"},{"location":"install/audit-log-events/#details_20","text":"Property Type Description document object The sent document. document.id string The document ID.","title":"Details"},{"location":"install/audit-log-events/#sample_20","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } }","title":"Sample"},{"location":"install/audit-log-events/#documenttruncate_history","text":"A document\u2019s history was truncated.","title":"document.truncate_history"},{"location":"install/audit-log-events/#details_21","text":"Property Type Description document object The document. document.id string The document ID. options object The options used to truncate the document\u2019s history. options.keep_n_most_recent number The number of recent history actions to keep.","title":"Details"},{"location":"install/audit-log-events/#sample_21","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"options\": { \"keep_n_most_recent\": 3 } }","title":"Sample"},{"location":"install/audit-log-events/#documentunpin","text":"A document was unpinned.","title":"document.unpin"},{"location":"install/audit-log-events/#details_22","text":"Property Type Description document object The unpinned document. document.id string The document ID. document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_22","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }","title":"Sample"},{"location":"install/audit-log-events/#site","text":"","title":"site"},{"location":"install/audit-log-events/#sitechange_access","text":"A site\u2019s access was changed.","title":"site.change_access"},{"location":"install/audit-log-events/#details_23","text":"Property Type Description site object The site. site.id number The site ID. site.name string The site name. site.domain string The site domain. access_changes object The access changes. access_changes.users Array The new access levels of individual users.","title":"Details"},{"location":"install/audit-log-events/#sample_23","text":"{ \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" }, \"access_changes\": { \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"owners\" } ] } }","title":"Sample"},{"location":"install/audit-log-events/#sitecreate","text":"A site was created.","title":"site.create"},{"location":"install/audit-log-events/#details_24","text":"Property Type Description site object The created site. site.id number The site ID. site.name string The site name. site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_24","text":"{ \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }","title":"Sample"},{"location":"install/audit-log-events/#sitedelete","text":"A site was permanently deleted.","title":"site.delete"},{"location":"install/audit-log-events/#details_25","text":"Property Type Description site object The deleted site. site.id number The site ID. site.name string The site name. site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_25","text":"{ \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }","title":"Sample"},{"location":"install/audit-log-events/#siterename","text":"A site was renamed.","title":"site.rename"},{"location":"install/audit-log-events/#details_26","text":"Property Type Description previous object The previous versions of affected resources. previous.site object The previous site. previous.site.id number The site ID. previous.site.name string The site name. previous.site.domain string The site domain. current object The current versions of affected resources. current.site object The current site. current.site.id number The site ID. current.site.name string The site name. current.site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_26","text":"{ \"previous\": { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"current\": { \"site\": { \"id\": 42, \"name\": \"ACME Unlimited\", \"domain\": \"acme\" } } }","title":"Sample"},{"location":"install/audit-log-events/#user","text":"","title":"user"},{"location":"install/audit-log-events/#userchange_name","text":"A user\u2019s name was changed.","title":"user.change_name"},{"location":"install/audit-log-events/#details_27","text":"Property Type Description previous object The previous versions of affected resources. previous.user object The previous user. previous.user.id number The user ID. previous.user.name string The user\u2019s name. previous.user.email (optional) string The user\u2019s email. current object The current versions of affected resources. current.user object The current user. current.user.id number The user ID. current.user.name string The user\u2019s name. current.user.email (optional) string The user\u2019s email.","title":"Details"},{"location":"install/audit-log-events/#sample_27","text":"{ \"previous\": { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }, \"current\": { \"user\": { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\" } } }","title":"Sample"},{"location":"install/audit-log-events/#usercreate_api_key","text":"A user API key was created.","title":"user.create_api_key"},{"location":"install/audit-log-events/#details_28","text":"Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email.","title":"Details"},{"location":"install/audit-log-events/#sample_28","text":"{ \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }","title":"Sample"},{"location":"install/audit-log-events/#userdelete","text":"A user was permanently deleted.","title":"user.delete"},{"location":"install/audit-log-events/#details_29","text":"Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email.","title":"Details"},{"location":"install/audit-log-events/#sample_29","text":"{ \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }","title":"Sample"},{"location":"install/audit-log-events/#userdelete_api_key","text":"A user API key was deleted.","title":"user.delete_api_key"},{"location":"install/audit-log-events/#details_30","text":"Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email.","title":"Details"},{"location":"install/audit-log-events/#sample_30","text":"{ \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }","title":"Sample"},{"location":"install/audit-log-events/#workspace","text":"","title":"workspace"},{"location":"install/audit-log-events/#workspacechange_access","text":"A workspace\u2019s access was changed.","title":"workspace.change_access"},{"location":"install/audit-log-events/#details_31","text":"Property Type Description workspace object The workspace. workspace.id number The workspace ID. workspace.name string The workspace name. access_changes object The access changes. access_changes.max_inherited_access (optional) string or null The new maximum access level that can be inherited from the workspace\u2019s site. access_changes.users (optional) Array The new access levels of individual users.","title":"Details"},{"location":"install/audit-log-events/#sample_31","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" }, \"access_changes\": { \"max_inherited_access\": \"editors\", \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"editors\" } ] } }","title":"Sample"},{"location":"install/audit-log-events/#workspacecreate","text":"A workspace was created.","title":"workspace.create"},{"location":"install/audit-log-events/#details_32","text":"Property Type Description workspace object The created workspace. workspace.id number The workspace ID. workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_32","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Sample"},{"location":"install/audit-log-events/#workspacedelete","text":"A workspace was permanently deleted.","title":"workspace.delete"},{"location":"install/audit-log-events/#details_33","text":"Property Type Description workspace object The deleted workspace. workspace.id number The workspace ID. workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_33","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Sample"},{"location":"install/audit-log-events/#workspacemove_to_trash","text":"A workspace was moved to the trash.","title":"workspace.move_to_trash"},{"location":"install/audit-log-events/#details_34","text":"Property Type Description workspace object The removed workspace. workspace.id number The workspace ID. workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_34","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Sample"},{"location":"install/audit-log-events/#workspacerename","text":"A workspace was renamed.","title":"workspace.rename"},{"location":"install/audit-log-events/#details_35","text":"Property Type Description previous object The previous versions of affected resources. previous.workspace object The previous workspace. previous.workspace.id number The workspace ID. previous.workspace.name string The workspace name. current object The current versions of affected resources. current.workspace object The current workspace. current.workspace.id number The workspace ID. current.workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_35","text":"{ \"previous\": { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }, \"current\": { \"workspace\": { \"id\": 97, \"name\": \"Retreat Docs\" } } }","title":"Sample"},{"location":"install/audit-log-events/#workspacerestore_from_trash","text":"A workspace was restored from the trash.","title":"workspace.restore_from_trash"},{"location":"install/audit-log-events/#details_36","text":"Property Type Description workspace object The restored workspace. workspace.id number The workspace ID. workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_36","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Sample"},{"location":"newsletters/2024-10/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . October 2024 Newsletter # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill October 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users. Register for the Grist Paris Summit # As you may have heard, the first official Grist Summit will be held in Paris, France on December 3rd, 2024. If you\u2019re in the area and not yet convinced, seriously take a look at the venue . \ud83e\udd29 See advanced real-world Grist examples, chat with us and other power users, and find out what La Suite Num\u00e9rique \u2013 France\u2019s open source data suite \u2014 is all about. Halloween \ud83c\udf83 # In the spirit of the season, Grist Labs sat down to think of the scariest spreadsheet-related happening. And here it is, a trigger formula that returns #REF! if you don\u2019t use a polite \u201cPlease\u201d. Children may want to avert their eyes: What\u2019s new # Custom widget builder widget # Say that ten times fast! Custom widgets greatly expand what you can do within Grist, but building them doesn\u2019t have to be super complicated. We\u2019ve released a widget that lets you build and test widgets on the fly, inside Grist itself . Now available as a community custom widget. More info in our Community forum . Relational data explainer # One thing we know is that users familiar with relational data tend to get the most out of Grist. If you\u2019re coming from tools where data relationships are somewhat limited, or just need a refresher, check out our 2-minute walkthrough: Team site images # If you\u2019re the Plan Manager of a team site (free or paid), you can now upload a site-specific image by opening the user menu and clicking on \u2018Billing Account\u2019. Other Grist updates # Self-hosters: are your documents getting too big on disk? Now you can choose to store less history to reduce file sizes ( GitHub PR ). Returning lists of records from a formula now does the right thing in more situations ( GitHub issue with example ). New grist-core release v1.2.1 on GitHub . Community highlights # A small but very welcome addition to general spreadsheeting is the new \u201cCopy with headers\u201d option in the context menu. Thanks to rtwfroody for this new feature ! nicobako\u2019s Mermaid charts integration is now a handy custom widget ! And check out Dmitry\u2019s example of how you can use Mermaid to visualize a Grist document\u2019s own schema. \ud83d\udc40 Peter_P_Breithaupt shared a comprehensive guide to dealing with duplicates and special unicode characters (including accents & diacritics). Do you ever want to lock down structure edits from everyone to avoid accidental formula overwrites? David_Hawley shared a way to do it using Special Rules . aude shared some n8n-Grist tutorials to get you started with basic workflows. Check out our profile of Savage Game Design and see how they use Grist at the intersection of relational data and game development, but perhaps not in the way you\u2019d expect. Finally, listen to Grist Labs co-CEO Anais and CTO Paul chat about the business of open source on Emily Omier\u2019s podcast called \u2013 you guessed it \u2013 The Business of Open Source . A topic that we don\u2019t talk about a lot, but one we must think about frequently! Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel ! Learning Grist # Webinar - Grist 101: A New User\u2019s Guide # Join us for an introductory webinar designed to help new users navigate the basics of Grist. This session will provide you with the essential tools and knowledge to get started. We\u2019ll cover key features and best practices to maximize your productivity. Perfect for beginners, this webinar will set you on the path to becoming a Grist pro. Don\u2019t miss out \u2013 reserve your spot today! Thursday November 14 at 3:00pm US Eastern Time. SIGN UP FOR NOVEMBER\u2019S WEBINAR Two-way references # In October, Natalie showed off our newest feature in Grist, two-way references! Link data in both directions, opening up new and powerful ways to leverage relational data. WATCH OCTOBER\u2019S RECORDING Help spread the word # If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius We are here to support you # Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"2024/10"},{"location":"newsletters/2024-10/#october-2024-newsletter","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill October 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users.","title":"October 2024 Newsletter"},{"location":"newsletters/2024-10/#register-for-the-grist-paris-summit","text":"As you may have heard, the first official Grist Summit will be held in Paris, France on December 3rd, 2024. If you\u2019re in the area and not yet convinced, seriously take a look at the venue . \ud83e\udd29 See advanced real-world Grist examples, chat with us and other power users, and find out what La Suite Num\u00e9rique \u2013 France\u2019s open source data suite \u2014 is all about.","title":"Register for the Grist Paris Summit"},{"location":"newsletters/2024-10/#halloween","text":"In the spirit of the season, Grist Labs sat down to think of the scariest spreadsheet-related happening. And here it is, a trigger formula that returns #REF! if you don\u2019t use a polite \u201cPlease\u201d. Children may want to avert their eyes:","title":"Halloween \ud83c\udf83"},{"location":"newsletters/2024-10/#whats-new","text":"","title":"What’s new"},{"location":"newsletters/2024-10/#custom-widget-builder-widget","text":"Say that ten times fast! Custom widgets greatly expand what you can do within Grist, but building them doesn\u2019t have to be super complicated. We\u2019ve released a widget that lets you build and test widgets on the fly, inside Grist itself . Now available as a community custom widget. More info in our Community forum .","title":"Custom widget builder widget"},{"location":"newsletters/2024-10/#relational-data-explainer","text":"One thing we know is that users familiar with relational data tend to get the most out of Grist. If you\u2019re coming from tools where data relationships are somewhat limited, or just need a refresher, check out our 2-minute walkthrough:","title":"Relational data explainer"},{"location":"newsletters/2024-10/#team-site-images","text":"If you\u2019re the Plan Manager of a team site (free or paid), you can now upload a site-specific image by opening the user menu and clicking on \u2018Billing Account\u2019.","title":"Team site images"},{"location":"newsletters/2024-10/#other-grist-updates","text":"Self-hosters: are your documents getting too big on disk? Now you can choose to store less history to reduce file sizes ( GitHub PR ). Returning lists of records from a formula now does the right thing in more situations ( GitHub issue with example ). New grist-core release v1.2.1 on GitHub .","title":"Other Grist updates"},{"location":"newsletters/2024-10/#community-highlights","text":"A small but very welcome addition to general spreadsheeting is the new \u201cCopy with headers\u201d option in the context menu. Thanks to rtwfroody for this new feature ! nicobako\u2019s Mermaid charts integration is now a handy custom widget ! And check out Dmitry\u2019s example of how you can use Mermaid to visualize a Grist document\u2019s own schema. \ud83d\udc40 Peter_P_Breithaupt shared a comprehensive guide to dealing with duplicates and special unicode characters (including accents & diacritics). Do you ever want to lock down structure edits from everyone to avoid accidental formula overwrites? David_Hawley shared a way to do it using Special Rules . aude shared some n8n-Grist tutorials to get you started with basic workflows. Check out our profile of Savage Game Design and see how they use Grist at the intersection of relational data and game development, but perhaps not in the way you\u2019d expect. Finally, listen to Grist Labs co-CEO Anais and CTO Paul chat about the business of open source on Emily Omier\u2019s podcast called \u2013 you guessed it \u2013 The Business of Open Source . A topic that we don\u2019t talk about a lot, but one we must think about frequently! Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel !","title":"Community highlights"},{"location":"newsletters/2024-10/#learning-grist","text":"","title":"Learning Grist"},{"location":"newsletters/2024-10/#webinar-grist-101-a-new-users-guide","text":"Join us for an introductory webinar designed to help new users navigate the basics of Grist. This session will provide you with the essential tools and knowledge to get started. We\u2019ll cover key features and best practices to maximize your productivity. Perfect for beginners, this webinar will set you on the path to becoming a Grist pro. Don\u2019t miss out \u2013 reserve your spot today! Thursday November 14 at 3:00pm US Eastern Time. SIGN UP FOR NOVEMBER\u2019S WEBINAR","title":"Webinar - Grist 101: A New User\u2019s Guide"},{"location":"newsletters/2024-10/#two-way-references","text":"In October, Natalie showed off our newest feature in Grist, two-way references! Link data in both directions, opening up new and powerful ways to leverage relational data. WATCH OCTOBER\u2019S RECORDING","title":"Two-way references"},{"location":"newsletters/2024-10/#help-spread-the-word","text":"If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Help spread the word"},{"location":"newsletters/2024-10/#we-are-here-to-support-you","text":"Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"We are here to support you"},{"location":"newsletters/2024-09/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . September 2024 Newsletter # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill September 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users. What\u2019s new # Two-way references # References now support twice the ways! Two-way references are a powerful tool that we\u2019ve found ourselves using for projects even while in development. As the overly-complex GIF above demonstrates, with the click of a button you can now add a two-way reference to a reference column. And what exactly happens when you add a two-way reference? Get ready for the word \u201creference\u201d a lot\u2026 A new reference column is created in the target table. Essentially, a \u201creverse reference column\u201d. This column is automatically populated with references from the table where the two-way reference was created. Any reference changes between the two columns are automatically synchronized. Once you get a hang of their particularities, two-way references open up a new field of data relations. Learn more about two-way references in the Help Center . Need a primer on what, exactly, references are, and where you might find relationships in your data? Take a look at our new blog post to learn about the Big Four: one-to-one, one-to-many, many-to-one, and last but not least: many-to-many. Grist Desktop 0.3.0 # The summer is over, but the hard work of our summer intern Leslie continues to bear fruit. This release makes Grist Desktop behave more like a desktop app than ever before, as part of our \u201cmake Grist Desktop feel more normal\u201d initiative. How normal you ask? You can open and save files anywhere on the filesystem, for example. That\u2019s extremely normal, and things just get more normal from there\u2026 Check out the latest release on GitHub . Formula Assistant model updates # We\u2019ve updated the model used by the AI Formula Assistant from gpt-3.5-turbo to gpt-4o . Based on our internal testing, we\u2019re seeing a modest increase in assistant accuracy. For self-hosters, the Formula Assistant now functions against any OpenAI chat completion endpoints ending in /v1/chat/completions . We\u2019ve also tested using the Formula Assistant via local models through LM Studio . Community highlights # \ud83d\udd28 Grist hackathon # Longtime Grist partners ANCT and DINUM joined forces with more members of Grist\u2019s French-speaking community to form the French Grist Federation. The new group hosted a hackathon last weekend in Paris as a branch of Code For France , which aims to develop a transparent and participatory digital commons. Read a summary of the hackathon at Open Source Politics , auto-translated from French. Hosting a hackathon of your own? Please let us know! \u267b\ufe0f Grist reusable code repository # Users on Grist\u2019s Community Forum have started collaborating on a shared user code repository , which already hosts cool utilities such as TomNit\u2019s self-sanitizing reference fields . It\u2019s also a great example of how Grist can be extended via Python classes, essentially storing function \u201clibraries\u201d in formula columns. \ud83e\uddb8\u200d\u2640\ufe0f Super dashboards # Do you use lots of charts? We support you and celebrate you. Still, Grist can get a bit cramped with several charts. To work around this, Rogerio has created \u201csuper dashboards\u201d which use the HTML widget and scrollable iframes to go from this: To this: For more heroic uses of the HTML widget, also check out Rogerio\u2019s thread on creating a dynamic risk matrix . \u2705 Change tracking with trigger formulas # We saw above how trigger formulas can help sanitize references, and here\u2019s another handy use case. Rogerio is back with a solution for simply tracking changes made to columns, including timestamps. Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel ! Learning Grist # Webinar: \ud83d\udd04 Two-Way References # They\u2019re heeereee \ud83d\udc7b\u2026 Spooky season comes a bit early with a feature that\u2019s haunted us for a while now: two-way references. Link data in both directions, opening up new and powerful ways to leverage relational data. Now it\u2019s time to be haunted by possibilities. Join us in October to explore how! Thursday October 10 at 3:00pm US Eastern Time. SIGN UP FOR OCTOBER\u2019S WEBINAR \u2728 New Feature Showcase # In September, Natalie caught us up on the latest Grist features that you may have missed, including markdown in cells, cumulative functions, the formula timer, and record cards. Learn how these tools can enhance your existing Grist docs, or give you new ideas for future workflows. WATCH SEPTEMBER\u2019S RECORDING Help spread the word # If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius We are here to support you # Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"2024/09"},{"location":"newsletters/2024-09/#september-2024-newsletter","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill September 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users.","title":"September 2024 Newsletter"},{"location":"newsletters/2024-09/#whats-new","text":"","title":"What’s new"},{"location":"newsletters/2024-09/#two-way-references","text":"References now support twice the ways! Two-way references are a powerful tool that we\u2019ve found ourselves using for projects even while in development. As the overly-complex GIF above demonstrates, with the click of a button you can now add a two-way reference to a reference column. And what exactly happens when you add a two-way reference? Get ready for the word \u201creference\u201d a lot\u2026 A new reference column is created in the target table. Essentially, a \u201creverse reference column\u201d. This column is automatically populated with references from the table where the two-way reference was created. Any reference changes between the two columns are automatically synchronized. Once you get a hang of their particularities, two-way references open up a new field of data relations. Learn more about two-way references in the Help Center . Need a primer on what, exactly, references are, and where you might find relationships in your data? Take a look at our new blog post to learn about the Big Four: one-to-one, one-to-many, many-to-one, and last but not least: many-to-many.","title":"Two-way references"},{"location":"newsletters/2024-09/#grist-desktop-030","text":"The summer is over, but the hard work of our summer intern Leslie continues to bear fruit. This release makes Grist Desktop behave more like a desktop app than ever before, as part of our \u201cmake Grist Desktop feel more normal\u201d initiative. How normal you ask? You can open and save files anywhere on the filesystem, for example. That\u2019s extremely normal, and things just get more normal from there\u2026 Check out the latest release on GitHub .","title":"Grist Desktop 0.3.0"},{"location":"newsletters/2024-09/#formula-assistant-model-updates","text":"We\u2019ve updated the model used by the AI Formula Assistant from gpt-3.5-turbo to gpt-4o . Based on our internal testing, we\u2019re seeing a modest increase in assistant accuracy. For self-hosters, the Formula Assistant now functions against any OpenAI chat completion endpoints ending in /v1/chat/completions . We\u2019ve also tested using the Formula Assistant via local models through LM Studio .","title":"Formula Assistant model updates"},{"location":"newsletters/2024-09/#community-highlights","text":"","title":"Community highlights"},{"location":"newsletters/2024-09/#grist-hackathon","text":"Longtime Grist partners ANCT and DINUM joined forces with more members of Grist\u2019s French-speaking community to form the French Grist Federation. The new group hosted a hackathon last weekend in Paris as a branch of Code For France , which aims to develop a transparent and participatory digital commons. Read a summary of the hackathon at Open Source Politics , auto-translated from French. Hosting a hackathon of your own? Please let us know!","title":"\ud83d\udd28 Grist hackathon"},{"location":"newsletters/2024-09/#grist-reusable-code-repository","text":"Users on Grist\u2019s Community Forum have started collaborating on a shared user code repository , which already hosts cool utilities such as TomNit\u2019s self-sanitizing reference fields . It\u2019s also a great example of how Grist can be extended via Python classes, essentially storing function \u201clibraries\u201d in formula columns.","title":"\u267b\ufe0f Grist reusable code repository"},{"location":"newsletters/2024-09/#super-dashboards","text":"Do you use lots of charts? We support you and celebrate you. Still, Grist can get a bit cramped with several charts. To work around this, Rogerio has created \u201csuper dashboards\u201d which use the HTML widget and scrollable iframes to go from this: To this: For more heroic uses of the HTML widget, also check out Rogerio\u2019s thread on creating a dynamic risk matrix .","title":"\ud83e\uddb8\u200d\u2640\ufe0f Super dashboards"},{"location":"newsletters/2024-09/#change-tracking-with-trigger-formulas","text":"We saw above how trigger formulas can help sanitize references, and here\u2019s another handy use case. Rogerio is back with a solution for simply tracking changes made to columns, including timestamps. Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel !","title":"\u2705 Change tracking with trigger formulas"},{"location":"newsletters/2024-09/#learning-grist","text":"","title":"Learning Grist"},{"location":"newsletters/2024-09/#webinar-two-way-references","text":"They\u2019re heeereee \ud83d\udc7b\u2026 Spooky season comes a bit early with a feature that\u2019s haunted us for a while now: two-way references. Link data in both directions, opening up new and powerful ways to leverage relational data. Now it\u2019s time to be haunted by possibilities. Join us in October to explore how! Thursday October 10 at 3:00pm US Eastern Time. SIGN UP FOR OCTOBER\u2019S WEBINAR","title":"Webinar: \ud83d\udd04 Two-Way References"},{"location":"newsletters/2024-09/#new-feature-showcase","text":"In September, Natalie caught us up on the latest Grist features that you may have missed, including markdown in cells, cumulative functions, the formula timer, and record cards. Learn how these tools can enhance your existing Grist docs, or give you new ideas for future workflows. WATCH SEPTEMBER\u2019S RECORDING","title":"\u2728 New Feature Showcase"},{"location":"newsletters/2024-09/#help-spread-the-word","text":"If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Help spread the word"},{"location":"newsletters/2024-09/#we-are-here-to-support-you","text":"Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"We are here to support you"},{"location":"newsletters/2024-08/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . August 2024 Newsletter # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill August 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users. What\u2019s new # Markdown cell formatting # It\u2019s finally here! Text columns now support Markdown. This means that you can use nearly all Markdown syntax (apart from images and horizontal rules) in any cell \u2013 and even in card widgets! To enable Markdown in any Text column, simply select the option in the \u201cCell Format\u201d dropdown in the Creator Panel: New Custom Widget flow \ud83c\udccf # Adding custom widgets now has a new look! We\u2019ve dropped the dropdown, and embraced a more spacious card-based UX. Retaining the same functionality as before, this new flow also highlights community-developed widgets, making it easier for us to include third-party widgets in the future. For self-hosters, you can also add to this list (or make your own) following these instructions . Webhooks documentation # Webhooks are powerful. So powerful, in fact, that creating proper documentation for them took us over a year. \ud83e\udee0 But your patience is rewarded with thorough documentation by Jordi (our Systems Developer), who used his database of homebrew NES games to get to the bottom of webhooks and their particularities. GitHub contribution templates # To help make contributing to grist-core easier and more consistent, Florent (inspired by PeerTube ) created several templates for bug reporting, upgrade issues and feature requests. Self-hosters: OIDC enhancements # We\u2019ve added some extra security options for OIDC authentication, enabling compatibility with new providers that have specific requirements. GitLocalize translations for Grist documentation # Our friends and contributors at ANCT have enabled GitLocalize for the Grist Help Center . You can see a machine-translated demo of the full docs en Fran\u00e7ais . To contribute, check out Vincent\u2019s how-to post in the Community Forum . For translating Grist\u2019s UI, we still use Weblate \u2013 and are always looking for more help! A hearty thanks to all our contributors who have helped make Grist readable around the world. \ud83c\udf0f Community highlights # PyGrister , the Python client from Riccardo Polignieri mentioned last May, has been updated. It\u2019s now on PyPi , and has thorough documentation to boot. \ud83d\udcdd A new Catalan translation has just kicked off on Weblate, thanks to xmontero! See here for more information on helping translate Grist. Antol Peshkov has created a simple custom dropdown widget that does exactly what it sounds like. Note: if you\u2019re self-hosting, a fix related to this widget is on it\u2019s way to grist-core soon! Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel ! Learning Grist # Webinar: \u2728 New Feature Showcase # In September, catch up on the latest Grist features that you may have missed, including Markdown in cells, cumulative functions, the formula timer, and record cards. Learn how these new tools can enhance your existing Grist docs, or give you new ideas for future workflows. Thursday September 19 at 3:00pm US Eastern Time. SIGN UP FOR SEPTEMBER\u2019S WEBINAR Grist 101 # In August, Natalie hosted an introductory webinar designed to help new users navigate the basics of Grist. This session provided users with the essential tools and knowledge to get started. We covered key features and best practices to maximize your productivity. Perfect for beginners! WATCH AUGUST\u2019S RECORDING Help spread the word # If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius We are here to support you # Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"2024/08"},{"location":"newsletters/2024-08/#august-2024-newsletter","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill August 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users.","title":"August 2024 Newsletter"},{"location":"newsletters/2024-08/#whats-new","text":"","title":"What’s new"},{"location":"newsletters/2024-08/#markdown-cell-formatting","text":"It\u2019s finally here! Text columns now support Markdown. This means that you can use nearly all Markdown syntax (apart from images and horizontal rules) in any cell \u2013 and even in card widgets! To enable Markdown in any Text column, simply select the option in the \u201cCell Format\u201d dropdown in the Creator Panel:","title":"Markdown cell formatting"},{"location":"newsletters/2024-08/#new-custom-widget-flow","text":"Adding custom widgets now has a new look! We\u2019ve dropped the dropdown, and embraced a more spacious card-based UX. Retaining the same functionality as before, this new flow also highlights community-developed widgets, making it easier for us to include third-party widgets in the future. For self-hosters, you can also add to this list (or make your own) following these instructions .","title":"New Custom Widget flow \ud83c\udccf"},{"location":"newsletters/2024-08/#webhooks-documentation","text":"Webhooks are powerful. So powerful, in fact, that creating proper documentation for them took us over a year. \ud83e\udee0 But your patience is rewarded with thorough documentation by Jordi (our Systems Developer), who used his database of homebrew NES games to get to the bottom of webhooks and their particularities.","title":"Webhooks documentation"},{"location":"newsletters/2024-08/#github-contribution-templates","text":"To help make contributing to grist-core easier and more consistent, Florent (inspired by PeerTube ) created several templates for bug reporting, upgrade issues and feature requests.","title":"GitHub contribution templates"},{"location":"newsletters/2024-08/#self-hosters-oidc-enhancements","text":"We\u2019ve added some extra security options for OIDC authentication, enabling compatibility with new providers that have specific requirements.","title":"Self-hosters: OIDC enhancements"},{"location":"newsletters/2024-08/#gitlocalize-translations-for-grist-documentation","text":"Our friends and contributors at ANCT have enabled GitLocalize for the Grist Help Center . You can see a machine-translated demo of the full docs en Fran\u00e7ais . To contribute, check out Vincent\u2019s how-to post in the Community Forum . For translating Grist\u2019s UI, we still use Weblate \u2013 and are always looking for more help! A hearty thanks to all our contributors who have helped make Grist readable around the world. \ud83c\udf0f","title":"GitLocalize translations for Grist documentation"},{"location":"newsletters/2024-08/#community-highlights","text":"PyGrister , the Python client from Riccardo Polignieri mentioned last May, has been updated. It\u2019s now on PyPi , and has thorough documentation to boot. \ud83d\udcdd A new Catalan translation has just kicked off on Weblate, thanks to xmontero! See here for more information on helping translate Grist. Antol Peshkov has created a simple custom dropdown widget that does exactly what it sounds like. Note: if you\u2019re self-hosting, a fix related to this widget is on it\u2019s way to grist-core soon! Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel !","title":"Community highlights"},{"location":"newsletters/2024-08/#learning-grist","text":"","title":"Learning Grist"},{"location":"newsletters/2024-08/#webinar-new-feature-showcase","text":"In September, catch up on the latest Grist features that you may have missed, including Markdown in cells, cumulative functions, the formula timer, and record cards. Learn how these new tools can enhance your existing Grist docs, or give you new ideas for future workflows. Thursday September 19 at 3:00pm US Eastern Time. SIGN UP FOR SEPTEMBER\u2019S WEBINAR","title":"Webinar: \u2728 New Feature Showcase"},{"location":"newsletters/2024-08/#grist-101","text":"In August, Natalie hosted an introductory webinar designed to help new users navigate the basics of Grist. This session provided users with the essential tools and knowledge to get started. We covered key features and best practices to maximize your productivity. Perfect for beginners! WATCH AUGUST\u2019S RECORDING","title":"Grist 101"},{"location":"newsletters/2024-08/#help-spread-the-word","text":"If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Help spread the word"},{"location":"newsletters/2024-08/#we-are-here-to-support-you","text":"Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"We are here to support you"}]} \ No newline at end of file +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bienvenue sur Grist! # Grist est un logiciel permettant d\u2019organiser, d\u2019analyser et de partager des donn\u00e9es. D\u00e9monstration de Grist Grist combine le meilleur des tableurs et des bases de donn\u00e9es. Grist vous permet de travailler avec des grilles et des listes simples, et est \u00e0 son meilleur lorsque les donn\u00e9es deviennent plus complexes. Pour vous inscrire et commencer \u00e0 utiliser Grist, visitez https://docs.getgrist.com . Pour apprendre \u00e0 utiliser Grist, nous vous recommandons de commencer par nos tutoriels pratiques ou nos vid\u00e9os d\u2019introduction. Tutoriels pratiques # Cr\u00e9er un CRM personnalis\u00e9 . En utilisant l\u2019exemple \u201cCRM l\u00e9ger\u201d, apprenez \u00e0 lier des donn\u00e9es et \u00e0 cr\u00e9er des mises en page \u00e0 haute productivit\u00e9. Analyser et visualiser des donn\u00e9es . En utilisant l\u2019exemple \u201cRecherche d\u2019investissement\u201d, apprenez \u00e0 cr\u00e9er des tableaux r\u00e9capitulatifs et des graphiques, et \u00e0 lier les graphiques de mani\u00e8re dynamique. Gestion des donn\u00e9es commerciales . En utilisant l\u2019exemple \u201cProgramme parascolaire\u201d, apprenez \u00e0 mod\u00e9liser des donn\u00e9es commerciales, \u00e0 utiliser des formules et \u00e0 g\u00e9rer la complexit\u00e9. Vid\u00e9os d\u2019introduction # Cr\u00e9er un document Pages & vues Colonnes & types Colonnes de r\u00e9f\u00e9rence Lier les vues Partager un document Raccourcis populaires # Questions fr\u00e9quemment pos\u00e9es R\u00e9f\u00e9rence des fonctions Raccourcis clavier Contactez-nous # Si vous avez des questions non r\u00e9pondues ici, des rapports de probl\u00e8mes ou d\u2019autres commentaires, veuillez nous contacter ! Email: support@getgrist.com","title":"Welcome to Grist"},{"location":"#bienvenue-sur-grist","text":"Grist est un logiciel permettant d\u2019organiser, d\u2019analyser et de partager des donn\u00e9es. D\u00e9monstration de Grist Grist combine le meilleur des tableurs et des bases de donn\u00e9es. Grist vous permet de travailler avec des grilles et des listes simples, et est \u00e0 son meilleur lorsque les donn\u00e9es deviennent plus complexes. Pour vous inscrire et commencer \u00e0 utiliser Grist, visitez https://docs.getgrist.com . Pour apprendre \u00e0 utiliser Grist, nous vous recommandons de commencer par nos tutoriels pratiques ou nos vid\u00e9os d\u2019introduction.","title":""},{"location":"#tutoriels-pratiques","text":"Cr\u00e9er un CRM personnalis\u00e9 . En utilisant l\u2019exemple \u201cCRM l\u00e9ger\u201d, apprenez \u00e0 lier des donn\u00e9es et \u00e0 cr\u00e9er des mises en page \u00e0 haute productivit\u00e9. Analyser et visualiser des donn\u00e9es . En utilisant l\u2019exemple \u201cRecherche d\u2019investissement\u201d, apprenez \u00e0 cr\u00e9er des tableaux r\u00e9capitulatifs et des graphiques, et \u00e0 lier les graphiques de mani\u00e8re dynamique. Gestion des donn\u00e9es commerciales . En utilisant l\u2019exemple \u201cProgramme parascolaire\u201d, apprenez \u00e0 mod\u00e9liser des donn\u00e9es commerciales, \u00e0 utiliser des formules et \u00e0 g\u00e9rer la complexit\u00e9.","title":"Tutoriels pratiques"},{"location":"#videos-dintroduction","text":"Cr\u00e9er un document Pages & vues Colonnes & types Colonnes de r\u00e9f\u00e9rence Lier les vues Partager un document","title":"Vid\u00e9os d’introduction"},{"location":"#raccourcis-populaires","text":"Questions fr\u00e9quemment pos\u00e9es R\u00e9f\u00e9rence des fonctions Raccourcis clavier","title":"Raccourcis populaires"},{"location":"#contactez-nous","text":"Si vous avez des questions non r\u00e9pondues ici, des rapports de probl\u00e8mes ou d\u2019autres commentaires, veuillez nous contacter ! Email: support@getgrist.com","title":"Contactez-nous"},{"location":"FAQ/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Questions Fr\u00e9quemment Pos\u00e9es # Questions Fr\u00e9quemment Pos\u00e9es Comptes Puis-je ajouter plusieurs \u00e9quipes au m\u00eame compte de connexion Grist ? Puis-je ajouter plusieurs comptes de connexion \u00e0 Grist ? Comment puis-je mettre \u00e0 jour les param\u00e8tres de mon profil ? Comment puis-je changer l\u2019adresse e-mail que j\u2019utilise pour Grist ? Comment puis-je supprimer mon compte ? Plans Pourquoi ai-je plusieurs sites ? Comment g\u00e9rer la propri\u00e9t\u00e9 de mon espace d\u2019\u00e9quipe ? Puis-je modifier le nom et le sous-domaine de mon \u00e9quipe ? Documents et donn\u00e9es Puis-je d\u00e9placer des documents entre les sites ? Combien de lignes puis-je avoir ? Grist accepte-t-il les caract\u00e8res non anglais ? Comment puis-je additionner le total d\u2019une colonne ? Partage Quelle est la diff\u00e9rence entre un membre de l\u2019\u00e9quipe et un invit\u00e9 ? Puis-je uniquement partager des documents Grist avec mon \u00e9quipe ? Grist et votre site Web/application Puis-je int\u00e9grer Grist dans mon site Web ? Puis-je utiliser Grist comme backend de mon application Web ? Comptes # Puis-je ajouter plusieurs \u00e9quipes au m\u00eame compte de connexion Grist ? # Oui ! Vous pouvez cr\u00e9er plusieurs espaces d\u2019\u00e9quipe. Chaque espace d\u2019\u00e9quipe peut \u00eatre sur le plan gratuit ou un plan payant. Chaque espace d\u2019\u00e9quipe sur un plan payant est associ\u00e9 \u00e0 son propre abonnement et est factur\u00e9 s\u00e9par\u00e9ment. Nouvel espace d\u2019\u00e9quipe. Si vous souhaitez cr\u00e9er un nouvel espace d\u2019\u00e9quipe, naviguez vers votre espace personnel \u00e0 docs.getgrist.com , puis cliquez sur le nom du site en haut \u00e0 gauche (@votre-nom) pour ouvrir une liste de sites. Cliquez sur \u2018+ Cr\u00e9er un nouvel espace d\u2019\u00e9quipe\u2019. Dans la fen\u00eatre contextuelle, s\u00e9lectionnez le plan \u00e0 utiliser. Ajouter un compte \u00e0 un espace d\u2019\u00e9quipe. Vous pouvez poss\u00e9der ou \u00eatre membre de plusieurs espaces d\u2019\u00e9quipe. Si vous avez plusieurs comptes de connexion Grist, vous pouvez \u00e9galement ajouter votre deuxi\u00e8me compte en tant que membre de l\u2019\u00e9quipe. Lorsque vous \u00eates dans l\u2019espace d\u2019\u00e9quipe que vous poss\u00e9dez, ouvrez le menu utilisateur et cliquez sur \u2018G\u00e9rer les utilisateurs\u2019. Le saviez-vous ? Un seul espace d\u2019\u00e9quipe peut bien fonctionner pour une organisation avec plusieurs \u00e9quipes (ou sous-\u00e9quipes). Vous pouvez utiliser des espaces de travail au sein d\u2019un espace d\u2019\u00e9quipe, et g\u00e9rer l\u2019acc\u00e8s \u00e0 ceux-ci pour cr\u00e9er des zones s\u00e9par\u00e9es pour diff\u00e9rentes \u00e9quipes. Puis-je ajouter plusieurs comptes de connexion \u00e0 Grist ? # Oui ! Pour ajouter plusieurs comptes \u00e0 Grist, ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur. Comment puis-je mettre \u00e0 jour les param\u00e8tres de mon profil ? # Ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis s\u00e9lectionnez \u2018Param\u00e8tres du profil\u2019. \u00c0 partir de l\u00e0, vous pouvez g\u00e9rer le nom associ\u00e9 \u00e0 votre compte, mettre \u00e0 jour le th\u00e8me de Grist en mode clair ou sombre, d\u00e9finir une langue et cr\u00e9er et g\u00e9rer une cl\u00e9 API. Pour en savoir plus sur notre API, consultez Grist API . Souhaitez-vous aider \u00e0 traduire Grist ? Nous utilisons Weblate pour g\u00e9rer les traductions et accueillons les traducteurs b\u00e9n\u00e9voles ! Si vous souhaitez traduire Grist dans une nouvelle langue (merci !), faites-nous savoir quelle langue dans ce fil de discussion de la communaut\u00e9 , et nous ajouterons la langue sur Weblate. Comment puis-je changer l\u2019adresse e-mail que j\u2019utilise pour Grist ? # Il n\u2019est pas possible de changer l\u2019e-mail associ\u00e9 \u00e0 votre compte Grist. Cependant, il est possible de transf\u00e9rer la propri\u00e9t\u00e9 des documents et des espaces d\u2019\u00e9quipe entre deux comptes e-mail Grist que vous poss\u00e9dez. Cela changerait effectivement votre e-mail Grist. Apprenez comment . Il est possible de g\u00e9rer plusieurs comptes dans Grist. Pour ajouter un autre compte, ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur. Comment puis-je supprimer mon compte ? # Vous pouvez supprimer votre compte dans \u2018Param\u00e8tres du profil\u2019 en s\u00e9lectionnant \u2018Supprimer le compte\u2019 sous \u2018Confidentialit\u00e9 & Donn\u00e9es\u2019. Veuillez noter que cette action est permanente. Besoin de supprimer un espace d\u2019\u00e9quipe ? En savoir plus ici . Plans # Pourquoi ai-je plusieurs sites ? # Tous les utilisateurs de Grist ont acc\u00e8s \u00e0 un espace personnel gratuit. L\u2019espace personnel est toujours nomm\u00e9 en commen\u00e7ant par \u2018@\u2019 et est toujours situ\u00e9 \u00e0 docs.getgrist.com . Chaque document dans cet espace peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 deux invit\u00e9s gratuitement. En savoir plus sur les plans gratuits sur notre page de tarification . Les documents partag\u00e9s avec vous depuis d\u2019autres comptes personnels seront affich\u00e9s dans votre espace personnel dans des espaces de travail nomm\u00e9s avec \u2018@Nom\u2019 pour indiquer le propri\u00e9taire de ce document. Vous pouvez naviguer entre votre espace personnel et espaces d\u2019\u00e9quipe en cliquant dans le coin sup\u00e9rieur gauche pour ouvrir un menu d\u00e9roulant des sites auxquels vous avez acc\u00e8s. Comment g\u00e9rer la propri\u00e9t\u00e9 de mon espace d\u2019\u00e9quipe ? # Ajouter un deuxi\u00e8me propri\u00e9taire Ouvrez l\u2019espace d\u2019\u00e9quipe auquel vous souhaitez ajouter un deuxi\u00e8me propri\u00e9taire. Cliquez sur \u2018G\u00e9rer les utilisateurs\u2019 sous le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist. Ajoutez la nouvelle adresse e-mail en tant que Propri\u00e9taire, et cliquez sur Confirmer. Vous pouvez \u00e9galement aller \u00e0 \u2018Compte de facturation\u2019 (\u00e9galement sous le menu utilisateur) et ajouter le nouveau propri\u00e9taire en tant que Gestionnaire de facturation. Transf\u00e9rer la propri\u00e9t\u00e9 Suivez les \u00e9tapes 1 \u00e0 3 ci-dessus pour ajouter un deuxi\u00e8me propri\u00e9taire. Allez \u00e0 \u2018Compte de facturation\u2019 (\u00e9galement sous le menu utilisateur) et ajoutez le nouveau Propri\u00e9taire en tant que Gestionnaire de facturation . Le nouveau Propri\u00e9taire doit se connecter, ouvrir l\u2019espace d\u2019\u00e9quipe, et visiter \u00e0 nouveau les pages \u2018G\u00e9rer les utilisateurs\u2019 et \u2018Compte de facturation\u2019 pour supprimer le propri\u00e9taire d\u2019origine. Cela transf\u00e9rera essentiellement la propri\u00e9t\u00e9 de l\u2019espace d\u2019\u00e9quipe au nouveau compte. Il n\u2019est pas possible d\u2019ajouter un deuxi\u00e8me propri\u00e9taire \u00e0, ou de transf\u00e9rer la propri\u00e9t\u00e9 d\u2019un compte personnel . Le saviez-vous ? Si vous transf\u00e9rez la propri\u00e9t\u00e9 d\u2019un espace d\u2019\u00e9quipe entre deux comptes e-mail Grist que vous poss\u00e9dez, vous pouvez plus facilement transf\u00e9rer la propri\u00e9t\u00e9 en vous connectant avec plusieurs comptes. Pour vous connecter avec un autre compte, ouvrez le menu utilisateur et cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur. Suivez les \u00e9tapes ci-dessus pour transf\u00e9rer la propri\u00e9t\u00e9 d\u2019un compte \u00e0 l\u2019autre. Puis-je modifier le nom et le sous-domaine de mon \u00e9quipe ? # Vous pouvez modifier le nom de votre site et le sous-domaine depuis la page de facturation. Ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Compte de facturation\u2019 . Documents et donn\u00e9es # Puis-je d\u00e9placer des documents entre les sites ? # Oui ! Suivez ces \u00e9tapes pour d\u00e9placer des documents entre les sites. Ouvrez le document que vous souhaitez d\u00e9placer et cliquez sur l\u2019ic\u00f4ne de partage ( ), puis cliquez sur \u2018Dupliquer le document\u2019 dans le menu. S\u00e9lectionnez le site (organisation) vers lequel vous souhaitez transf\u00e9rer le document. Cela cr\u00e9era une copie, vous aurez donc toujours le document original dans votre site d\u2019origine. Vous pouvez toujours le supprimer. En savoir plus sur la copie de documents . Combien de lignes puis-je avoir ? # En r\u00e8gle g\u00e9n\u00e9rale, Grist fonctionne mieux pour les documents de moins de 100 000 lignes. La limite r\u00e9elle d\u00e9pend \u00e9galement du nombre de tables, de colonnes et de la taille moyenne des donn\u00e9es dans chaque cellule. Une fa\u00e7on de l\u2019estimer est de mesurer la taille des donn\u00e9es lorsqu\u2019elles sont au format CSV : la limite est d\u2019environ 20 Mo dans ce format. Par exemple, un document avec 200 000 lignes et 12 colonnes num\u00e9riques atteindrait cette limite. Les pi\u00e8ces jointes sont compt\u00e9es s\u00e9par\u00e9ment. Les pi\u00e8ces jointes plus les donn\u00e9es dans un seul document sont limit\u00e9es \u00e0 1 Go. En savoir plus sur les limites . Grist accepte-t-il les caract\u00e8res non anglais ? # Les caract\u00e8res non anglais sont pris en charge dans les \u00e9tiquettes de colonnes, mais pas dans les identifiants de colonnes, qui sont le nom Python de la colonne utilis\u00e9 dans les formules. Lors de l\u2019importation d\u2019un fichier dans Grist, les caract\u00e8res non anglais sont import\u00e9s en tant que valeurs dans les cellules, mais ne sont pas import\u00e9s dans les \u00e9tiquettes de colonnes (alias en-t\u00eates). Les \u00e9tiquettes de colonnes sont approxim\u00e9es avec des caract\u00e8res anglais. Vous pouvez renommer les \u00e9tiquettes de colonnes pour inclure des caract\u00e8res non anglais apr\u00e8s l\u2019importation. Pour modifier les \u00e9tiquettes et les identifiants de colonnes s\u00e9par\u00e9ment, ouvrez le panneau de cr\u00e9ation et s\u00e9lectionnez le menu de la colonne. Cliquez sur l\u2019ic\u00f4ne de lien qui joint l\u2019\u00e9tiquette \u00e0 l\u2019identifiant pour activer la modification de l\u2019identifiant de la colonne. Bien que les caract\u00e8res non anglais ne soient pas pris en charge, il est possible de modifier les identifiants pour les rendre plus clairs et conviviaux \u00e0 utiliser dans les formules. Comment puis-je additionner le total d\u2019une colonne ? # Pour r\u00e9sumer plusieurs enregistrements, vous avez besoin de tables de synth\u00e8se . La principale diff\u00e9rence entre Grist et les tableurs comme Excel ou Google Sheets est que Grist est une base de donn\u00e9es, donc chaque ligne dans une grille repr\u00e9sente un enregistrement (par exemple, une personne, une transaction bancaire, etc.). Puisqu\u2019une somme sur plusieurs enregistrements n\u2019est pas le m\u00eame type d\u2019enregistrement, Grist propose de r\u00e9sumer les donn\u00e9es sous forme de vue s\u00e9par\u00e9e, qui peut \u00eatre modifi\u00e9e pour calculer des donn\u00e9es de synth\u00e8se encore plus puissantes. Par exemple, supposons que vous ayez une table de commandes de boutique en ligne appel\u00e9e Commandes et que vous souhaitiez additionner les revenus des ventes de toutes les commandes. En haut du menu de gauche, cliquez sur le bouton \u2018Ajouter nouveau\u2019 et s\u00e9lectionnez \u2018Ajouter une page\u2019 ou \u2018Ajouter une vue \u00e0 la page\u2019. Dans le s\u00e9lecteur de vue, s\u00e9lectionnez la table Commandes puis cliquez sur l\u2019ic\u00f4ne de somme ( ) \u00e0 c\u00f4t\u00e9. Ajoutez la page ou la vue \u00e0 votre document. Fait ! Vous avez maintenant cr\u00e9\u00e9 une table de synth\u00e8se qui, par d\u00e9faut, compte tous les enregistrements dans la table Commandes et additionne toutes les colonnes num\u00e9riques et entiers , telles que le montant vendu dans chaque commande. Les tables de synth\u00e8se peuvent faire plus qu\u2019une simple somme des colonnes d\u2019une table. En quelques clics, vous pouvez r\u00e9sumer les commandes par mois pour calculer le nombre de commandes et le revenu total des ventes dans chaque mois pour lequel vous avez des donn\u00e9es. Allez plus loin et supposons que vous ayez plusieurs boutiques en ligne. Avec Grist, vous pouvez enregistrer toutes les commandes de vente de toutes les boutiques et mois dans la m\u00eame table. Ensuite, vous pouvez r\u00e9sumer par mois et par boutique. Lorsque vous ajoutez plus de mois (ou de boutiques !) \u00e0 la table des commandes, la table de synth\u00e8se se mettra automatiquement \u00e0 jour, ce qui est une autre diff\u00e9rence cl\u00e9 avec les tableurs. Dans Excel, vous devriez \u00e9tendre la plage de votre formule, ou ajouter plus de feuilles et modifier les formules chaque fois que vous ajoutez plus de commandes de vente, de mois ou de boutiques. Dans Grist, vous cr\u00e9ez la table de synth\u00e8se une fois, et laissez Grist faire le travail futur pour vous. En plus de notre article sur les tables de synth\u00e8se , nous avons un tutoriel vid\u00e9o et un guide de suivi qui fournit un exemple de cr\u00e9ation d\u2019un tableau de bord avec des tables de synth\u00e8se. Partage # Quelle est la diff\u00e9rence entre un membre de l\u2019\u00e9quipe et un invit\u00e9 ? # Les membres de l\u2019\u00e9quipe ont tous acc\u00e8s \u00e0 un espace d\u2019\u00e9quipe , qui est situ\u00e9 \u00e0 une URL avec un sous-domaine personnalis\u00e9, tel que votre-\u00e9quipe.getgrist.com . Sur les plans payants, le nombre de membres de l\u2019\u00e9quipe d\u00e9termine le prix. Par d\u00e9faut, les documents au sein d\u2019un espace d\u2019\u00e9quipe peuvent \u00eatre accessibles par tous les membres de l\u2019\u00e9quipe. Ce d\u00e9faut peut \u00eatre modifi\u00e9 pour ne partager que certains documents ou certains espaces de travail avec des membres sp\u00e9cifiques de l\u2019\u00e9quipe. Les invit\u00e9s, en revanche, sont invit\u00e9s \u00e0 des documents particuliers, mais ne sont pas ajout\u00e9s \u00e0 votre \u00e9quipe. Tous les documents dans Grist, y compris ceux sur les espaces personnels, sont autoris\u00e9s jusqu\u2019\u00e0 2 invit\u00e9s gratuits, et n\u2019affectent pas le prix du plan. Puis-je uniquement partager des documents Grist avec mon \u00e9quipe ? # Il existe de nombreuses fa\u00e7ons de partager des donn\u00e9es Grist avec des non-membres de l\u2019\u00e9quipe. Invit\u00e9s. Chaque document peut \u00eatre partag\u00e9 avec 2 invit\u00e9s (non-membres de l\u2019\u00e9quipe) sans frais suppl\u00e9mentaires. Partage de lien. Dans les param\u00e8tres de partage, il y a une option pour activer l\u2019acc\u00e8s public . Le r\u00f4le d\u2019acc\u00e8s public peut \u00eatre d\u00e9fini sur visualiseur ou \u00e9diteur. Toute personne ayant un lien peut voir (ou modifier) vos donn\u00e9es. Ces vues ne seraient pas compt\u00e9es dans le nombre d\u2019utilisateurs de votre plan. Le document est visible par toute personne ayant le lien, donc faites preuve de prudence lorsque vous travaillez avec des donn\u00e9es sensibles. Partage de lien en lecture seule restreint. Avec le partage de lien en lecture seule, il est possible de restreindre davantage ce que les gens peuvent voir en utilisant les permissions avanc\u00e9es de Grist pour d\u00e9finir des param\u00e8tres d\u2019URL sp\u00e9cifiques appel\u00e9s cl\u00e9s de lien qui d\u00e9terminent quelles tables, colonnes ou lignes sont affich\u00e9es lorsqu\u2019un lien sp\u00e9cifique est partag\u00e9. Int\u00e9gration en lecture seule. Les pages Grist peuvent \u00eatre int\u00e9gr\u00e9es dans des sites Web dans une iframe. Apprenez comment . Grist et votre site Web/application # Puis-je int\u00e9grer Grist dans mon site Web ? # Oui, il est possible d\u2019int\u00e9grer des pages Grist en tant que donn\u00e9es en lecture seule dans un site Web dans une iframe. Remplacez l\u2019URL \u00e9crite dans le code ci-dessus par l\u2019URL de la page Grist que vous souhaitez int\u00e9grer, suivie de ?embed=true \u00e0 la fin de l\u2019URL. En savoir plus sur l\u2019int\u00e9gration de Grist . Puis-je utiliser Grist comme backend de mon application Web ? # L\u2019utilisation de Grist comme solution backend directement pour un site Web ou une application Web n\u2019est pas encore prise en charge. Nous n\u2019avons pas encore de m\u00e9thode d\u2019authentification pour ce cas d\u2019utilisation. La m\u00e9thode de cl\u00e9 API n\u2019est g\u00e9n\u00e9ralement pas appropri\u00e9e pour une utilisation Web, car la cl\u00e9 serait accessible \u00e0 tout spectateur de la page Web, ce qui est g\u00e9n\u00e9ralement ind\u00e9sirable. Nous sommes int\u00e9ress\u00e9s \u00e0 prendre en charge cela \u00e0 l\u2019avenir et accueillons les id\u00e9es et les commentaires dans notre forum communautaire .","title":"FAQ"},{"location":"FAQ/#questions-frequemment-posees","text":"Questions Fr\u00e9quemment Pos\u00e9es Comptes Puis-je ajouter plusieurs \u00e9quipes au m\u00eame compte de connexion Grist ? Puis-je ajouter plusieurs comptes de connexion \u00e0 Grist ? Comment puis-je mettre \u00e0 jour les param\u00e8tres de mon profil ? Comment puis-je changer l\u2019adresse e-mail que j\u2019utilise pour Grist ? Comment puis-je supprimer mon compte ? Plans Pourquoi ai-je plusieurs sites ? Comment g\u00e9rer la propri\u00e9t\u00e9 de mon espace d\u2019\u00e9quipe ? Puis-je modifier le nom et le sous-domaine de mon \u00e9quipe ? Documents et donn\u00e9es Puis-je d\u00e9placer des documents entre les sites ? Combien de lignes puis-je avoir ? Grist accepte-t-il les caract\u00e8res non anglais ? Comment puis-je additionner le total d\u2019une colonne ? Partage Quelle est la diff\u00e9rence entre un membre de l\u2019\u00e9quipe et un invit\u00e9 ? Puis-je uniquement partager des documents Grist avec mon \u00e9quipe ? Grist et votre site Web/application Puis-je int\u00e9grer Grist dans mon site Web ? Puis-je utiliser Grist comme backend de mon application Web ?","title":"Questions Fr\u00e9quemment Pos\u00e9es"},{"location":"FAQ/#comptes","text":"","title":"Comptes"},{"location":"FAQ/#puis-je-ajouter-plusieurs-equipes-au-meme-compte-de-connexion-grist","text":"Oui ! Vous pouvez cr\u00e9er plusieurs espaces d\u2019\u00e9quipe. Chaque espace d\u2019\u00e9quipe peut \u00eatre sur le plan gratuit ou un plan payant. Chaque espace d\u2019\u00e9quipe sur un plan payant est associ\u00e9 \u00e0 son propre abonnement et est factur\u00e9 s\u00e9par\u00e9ment. Nouvel espace d\u2019\u00e9quipe. Si vous souhaitez cr\u00e9er un nouvel espace d\u2019\u00e9quipe, naviguez vers votre espace personnel \u00e0 docs.getgrist.com , puis cliquez sur le nom du site en haut \u00e0 gauche (@votre-nom) pour ouvrir une liste de sites. Cliquez sur \u2018+ Cr\u00e9er un nouvel espace d\u2019\u00e9quipe\u2019. Dans la fen\u00eatre contextuelle, s\u00e9lectionnez le plan \u00e0 utiliser. Ajouter un compte \u00e0 un espace d\u2019\u00e9quipe. Vous pouvez poss\u00e9der ou \u00eatre membre de plusieurs espaces d\u2019\u00e9quipe. Si vous avez plusieurs comptes de connexion Grist, vous pouvez \u00e9galement ajouter votre deuxi\u00e8me compte en tant que membre de l\u2019\u00e9quipe. Lorsque vous \u00eates dans l\u2019espace d\u2019\u00e9quipe que vous poss\u00e9dez, ouvrez le menu utilisateur et cliquez sur \u2018G\u00e9rer les utilisateurs\u2019. Le saviez-vous ? Un seul espace d\u2019\u00e9quipe peut bien fonctionner pour une organisation avec plusieurs \u00e9quipes (ou sous-\u00e9quipes). Vous pouvez utiliser des espaces de travail au sein d\u2019un espace d\u2019\u00e9quipe, et g\u00e9rer l\u2019acc\u00e8s \u00e0 ceux-ci pour cr\u00e9er des zones s\u00e9par\u00e9es pour diff\u00e9rentes \u00e9quipes.","title":"Puis-je ajouter plusieurs \u00e9quipes au m\u00eame compte de connexion Grist ?"},{"location":"FAQ/#puis-je-ajouter-plusieurs-comptes-de-connexion-a-grist","text":"Oui ! Pour ajouter plusieurs comptes \u00e0 Grist, ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur.","title":"Puis-je ajouter plusieurs comptes de connexion \u00e0 Grist ?"},{"location":"FAQ/#comment-puis-je-mettre-a-jour-les-parametres-de-mon-profil","text":"Ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis s\u00e9lectionnez \u2018Param\u00e8tres du profil\u2019. \u00c0 partir de l\u00e0, vous pouvez g\u00e9rer le nom associ\u00e9 \u00e0 votre compte, mettre \u00e0 jour le th\u00e8me de Grist en mode clair ou sombre, d\u00e9finir une langue et cr\u00e9er et g\u00e9rer une cl\u00e9 API. Pour en savoir plus sur notre API, consultez Grist API . Souhaitez-vous aider \u00e0 traduire Grist ? Nous utilisons Weblate pour g\u00e9rer les traductions et accueillons les traducteurs b\u00e9n\u00e9voles ! Si vous souhaitez traduire Grist dans une nouvelle langue (merci !), faites-nous savoir quelle langue dans ce fil de discussion de la communaut\u00e9 , et nous ajouterons la langue sur Weblate.","title":"Comment puis-je mettre \u00e0 jour les param\u00e8tres de mon profil ?"},{"location":"FAQ/#comment-puis-je-changer-ladresse-e-mail-que-jutilise-pour-grist","text":"Il n\u2019est pas possible de changer l\u2019e-mail associ\u00e9 \u00e0 votre compte Grist. Cependant, il est possible de transf\u00e9rer la propri\u00e9t\u00e9 des documents et des espaces d\u2019\u00e9quipe entre deux comptes e-mail Grist que vous poss\u00e9dez. Cela changerait effectivement votre e-mail Grist. Apprenez comment . Il est possible de g\u00e9rer plusieurs comptes dans Grist. Pour ajouter un autre compte, ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur.","title":"Comment puis-je changer l’adresse e-mail que j’utilise pour Grist ?"},{"location":"FAQ/#comment-puis-je-supprimer-mon-compte","text":"Vous pouvez supprimer votre compte dans \u2018Param\u00e8tres du profil\u2019 en s\u00e9lectionnant \u2018Supprimer le compte\u2019 sous \u2018Confidentialit\u00e9 & Donn\u00e9es\u2019. Veuillez noter que cette action est permanente. Besoin de supprimer un espace d\u2019\u00e9quipe ? En savoir plus ici .","title":"Comment puis-je supprimer mon compte ?"},{"location":"FAQ/#plans","text":"","title":"Plans"},{"location":"FAQ/#pourquoi-ai-je-plusieurs-sites","text":"Tous les utilisateurs de Grist ont acc\u00e8s \u00e0 un espace personnel gratuit. L\u2019espace personnel est toujours nomm\u00e9 en commen\u00e7ant par \u2018@\u2019 et est toujours situ\u00e9 \u00e0 docs.getgrist.com . Chaque document dans cet espace peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 deux invit\u00e9s gratuitement. En savoir plus sur les plans gratuits sur notre page de tarification . Les documents partag\u00e9s avec vous depuis d\u2019autres comptes personnels seront affich\u00e9s dans votre espace personnel dans des espaces de travail nomm\u00e9s avec \u2018@Nom\u2019 pour indiquer le propri\u00e9taire de ce document. Vous pouvez naviguer entre votre espace personnel et espaces d\u2019\u00e9quipe en cliquant dans le coin sup\u00e9rieur gauche pour ouvrir un menu d\u00e9roulant des sites auxquels vous avez acc\u00e8s.","title":"Pourquoi ai-je plusieurs sites ?"},{"location":"FAQ/#comment-gerer-la-propriete-de-mon-espace-dequipe","text":"Ajouter un deuxi\u00e8me propri\u00e9taire Ouvrez l\u2019espace d\u2019\u00e9quipe auquel vous souhaitez ajouter un deuxi\u00e8me propri\u00e9taire. Cliquez sur \u2018G\u00e9rer les utilisateurs\u2019 sous le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist. Ajoutez la nouvelle adresse e-mail en tant que Propri\u00e9taire, et cliquez sur Confirmer. Vous pouvez \u00e9galement aller \u00e0 \u2018Compte de facturation\u2019 (\u00e9galement sous le menu utilisateur) et ajouter le nouveau propri\u00e9taire en tant que Gestionnaire de facturation. Transf\u00e9rer la propri\u00e9t\u00e9 Suivez les \u00e9tapes 1 \u00e0 3 ci-dessus pour ajouter un deuxi\u00e8me propri\u00e9taire. Allez \u00e0 \u2018Compte de facturation\u2019 (\u00e9galement sous le menu utilisateur) et ajoutez le nouveau Propri\u00e9taire en tant que Gestionnaire de facturation . Le nouveau Propri\u00e9taire doit se connecter, ouvrir l\u2019espace d\u2019\u00e9quipe, et visiter \u00e0 nouveau les pages \u2018G\u00e9rer les utilisateurs\u2019 et \u2018Compte de facturation\u2019 pour supprimer le propri\u00e9taire d\u2019origine. Cela transf\u00e9rera essentiellement la propri\u00e9t\u00e9 de l\u2019espace d\u2019\u00e9quipe au nouveau compte. Il n\u2019est pas possible d\u2019ajouter un deuxi\u00e8me propri\u00e9taire \u00e0, ou de transf\u00e9rer la propri\u00e9t\u00e9 d\u2019un compte personnel . Le saviez-vous ? Si vous transf\u00e9rez la propri\u00e9t\u00e9 d\u2019un espace d\u2019\u00e9quipe entre deux comptes e-mail Grist que vous poss\u00e9dez, vous pouvez plus facilement transf\u00e9rer la propri\u00e9t\u00e9 en vous connectant avec plusieurs comptes. Pour vous connecter avec un autre compte, ouvrez le menu utilisateur et cliquez sur \u2018Ajouter un compte\u2019. Vous pouvez maintenant facilement passer d\u2019un compte \u00e0 l\u2019autre, et d\u2019une \u00e9quipe \u00e0 l\u2019autre, depuis le menu utilisateur. Suivez les \u00e9tapes ci-dessus pour transf\u00e9rer la propri\u00e9t\u00e9 d\u2019un compte \u00e0 l\u2019autre.","title":"Comment g\u00e9rer la propri\u00e9t\u00e9 de mon espace d’\u00e9quipe ?"},{"location":"FAQ/#puis-je-modifier-le-nom-et-le-sous-domaine-de-mon-equipe","text":"Vous pouvez modifier le nom de votre site et le sous-domaine depuis la page de facturation. Ouvrez le menu utilisateur en cliquant sur l\u2019ic\u00f4ne de profil en haut \u00e0 droite de Grist, puis cliquez sur \u2018Compte de facturation\u2019 .","title":"Puis-je modifier le nom et le sous-domaine de mon \u00e9quipe ?"},{"location":"FAQ/#documents-et-donnees","text":"","title":"Documents et donn\u00e9es"},{"location":"FAQ/#puis-je-deplacer-des-documents-entre-les-sites","text":"Oui ! Suivez ces \u00e9tapes pour d\u00e9placer des documents entre les sites. Ouvrez le document que vous souhaitez d\u00e9placer et cliquez sur l\u2019ic\u00f4ne de partage ( ), puis cliquez sur \u2018Dupliquer le document\u2019 dans le menu. S\u00e9lectionnez le site (organisation) vers lequel vous souhaitez transf\u00e9rer le document. Cela cr\u00e9era une copie, vous aurez donc toujours le document original dans votre site d\u2019origine. Vous pouvez toujours le supprimer. En savoir plus sur la copie de documents .","title":"Puis-je d\u00e9placer des documents entre les sites ?"},{"location":"FAQ/#combien-de-lignes-puis-je-avoir","text":"En r\u00e8gle g\u00e9n\u00e9rale, Grist fonctionne mieux pour les documents de moins de 100 000 lignes. La limite r\u00e9elle d\u00e9pend \u00e9galement du nombre de tables, de colonnes et de la taille moyenne des donn\u00e9es dans chaque cellule. Une fa\u00e7on de l\u2019estimer est de mesurer la taille des donn\u00e9es lorsqu\u2019elles sont au format CSV : la limite est d\u2019environ 20 Mo dans ce format. Par exemple, un document avec 200 000 lignes et 12 colonnes num\u00e9riques atteindrait cette limite. Les pi\u00e8ces jointes sont compt\u00e9es s\u00e9par\u00e9ment. Les pi\u00e8ces jointes plus les donn\u00e9es dans un seul document sont limit\u00e9es \u00e0 1 Go. En savoir plus sur les limites .","title":"Combien de lignes puis-je avoir ?"},{"location":"FAQ/#grist-accepte-t-il-les-caracteres-non-anglais","text":"Les caract\u00e8res non anglais sont pris en charge dans les \u00e9tiquettes de colonnes, mais pas dans les identifiants de colonnes, qui sont le nom Python de la colonne utilis\u00e9 dans les formules. Lors de l\u2019importation d\u2019un fichier dans Grist, les caract\u00e8res non anglais sont import\u00e9s en tant que valeurs dans les cellules, mais ne sont pas import\u00e9s dans les \u00e9tiquettes de colonnes (alias en-t\u00eates). Les \u00e9tiquettes de colonnes sont approxim\u00e9es avec des caract\u00e8res anglais. Vous pouvez renommer les \u00e9tiquettes de colonnes pour inclure des caract\u00e8res non anglais apr\u00e8s l\u2019importation. Pour modifier les \u00e9tiquettes et les identifiants de colonnes s\u00e9par\u00e9ment, ouvrez le panneau de cr\u00e9ation et s\u00e9lectionnez le menu de la colonne. Cliquez sur l\u2019ic\u00f4ne de lien qui joint l\u2019\u00e9tiquette \u00e0 l\u2019identifiant pour activer la modification de l\u2019identifiant de la colonne. Bien que les caract\u00e8res non anglais ne soient pas pris en charge, il est possible de modifier les identifiants pour les rendre plus clairs et conviviaux \u00e0 utiliser dans les formules.","title":"Grist accepte-t-il les caract\u00e8res non anglais ?"},{"location":"FAQ/#comment-puis-je-additionner-le-total-dune-colonne","text":"Pour r\u00e9sumer plusieurs enregistrements, vous avez besoin de tables de synth\u00e8se . La principale diff\u00e9rence entre Grist et les tableurs comme Excel ou Google Sheets est que Grist est une base de donn\u00e9es, donc chaque ligne dans une grille repr\u00e9sente un enregistrement (par exemple, une personne, une transaction bancaire, etc.). Puisqu\u2019une somme sur plusieurs enregistrements n\u2019est pas le m\u00eame type d\u2019enregistrement, Grist propose de r\u00e9sumer les donn\u00e9es sous forme de vue s\u00e9par\u00e9e, qui peut \u00eatre modifi\u00e9e pour calculer des donn\u00e9es de synth\u00e8se encore plus puissantes. Par exemple, supposons que vous ayez une table de commandes de boutique en ligne appel\u00e9e Commandes et que vous souhaitiez additionner les revenus des ventes de toutes les commandes. En haut du menu de gauche, cliquez sur le bouton \u2018Ajouter nouveau\u2019 et s\u00e9lectionnez \u2018Ajouter une page\u2019 ou \u2018Ajouter une vue \u00e0 la page\u2019. Dans le s\u00e9lecteur de vue, s\u00e9lectionnez la table Commandes puis cliquez sur l\u2019ic\u00f4ne de somme ( ) \u00e0 c\u00f4t\u00e9. Ajoutez la page ou la vue \u00e0 votre document. Fait ! Vous avez maintenant cr\u00e9\u00e9 une table de synth\u00e8se qui, par d\u00e9faut, compte tous les enregistrements dans la table Commandes et additionne toutes les colonnes num\u00e9riques et entiers , telles que le montant vendu dans chaque commande. Les tables de synth\u00e8se peuvent faire plus qu\u2019une simple somme des colonnes d\u2019une table. En quelques clics, vous pouvez r\u00e9sumer les commandes par mois pour calculer le nombre de commandes et le revenu total des ventes dans chaque mois pour lequel vous avez des donn\u00e9es. Allez plus loin et supposons que vous ayez plusieurs boutiques en ligne. Avec Grist, vous pouvez enregistrer toutes les commandes de vente de toutes les boutiques et mois dans la m\u00eame table. Ensuite, vous pouvez r\u00e9sumer par mois et par boutique. Lorsque vous ajoutez plus de mois (ou de boutiques !) \u00e0 la table des commandes, la table de synth\u00e8se se mettra automatiquement \u00e0 jour, ce qui est une autre diff\u00e9rence cl\u00e9 avec les tableurs. Dans Excel, vous devriez \u00e9tendre la plage de votre formule, ou ajouter plus de feuilles et modifier les formules chaque fois que vous ajoutez plus de commandes de vente, de mois ou de boutiques. Dans Grist, vous cr\u00e9ez la table de synth\u00e8se une fois, et laissez Grist faire le travail futur pour vous. En plus de notre article sur les tables de synth\u00e8se , nous avons un tutoriel vid\u00e9o et un guide de suivi qui fournit un exemple de cr\u00e9ation d\u2019un tableau de bord avec des tables de synth\u00e8se.","title":"Comment puis-je additionner le total d’une colonne ?"},{"location":"FAQ/#partage","text":"","title":"Partage"},{"location":"FAQ/#quelle-est-la-difference-entre-un-membre-de-lequipe-et-un-invite","text":"Les membres de l\u2019\u00e9quipe ont tous acc\u00e8s \u00e0 un espace d\u2019\u00e9quipe , qui est situ\u00e9 \u00e0 une URL avec un sous-domaine personnalis\u00e9, tel que votre-\u00e9quipe.getgrist.com . Sur les plans payants, le nombre de membres de l\u2019\u00e9quipe d\u00e9termine le prix. Par d\u00e9faut, les documents au sein d\u2019un espace d\u2019\u00e9quipe peuvent \u00eatre accessibles par tous les membres de l\u2019\u00e9quipe. Ce d\u00e9faut peut \u00eatre modifi\u00e9 pour ne partager que certains documents ou certains espaces de travail avec des membres sp\u00e9cifiques de l\u2019\u00e9quipe. Les invit\u00e9s, en revanche, sont invit\u00e9s \u00e0 des documents particuliers, mais ne sont pas ajout\u00e9s \u00e0 votre \u00e9quipe. Tous les documents dans Grist, y compris ceux sur les espaces personnels, sont autoris\u00e9s jusqu\u2019\u00e0 2 invit\u00e9s gratuits, et n\u2019affectent pas le prix du plan.","title":"Quelle est la diff\u00e9rence entre un membre de l’\u00e9quipe et un invit\u00e9 ?"},{"location":"FAQ/#puis-je-uniquement-partager-des-documents-grist-avec-mon-equipe","text":"Il existe de nombreuses fa\u00e7ons de partager des donn\u00e9es Grist avec des non-membres de l\u2019\u00e9quipe. Invit\u00e9s. Chaque document peut \u00eatre partag\u00e9 avec 2 invit\u00e9s (non-membres de l\u2019\u00e9quipe) sans frais suppl\u00e9mentaires. Partage de lien. Dans les param\u00e8tres de partage, il y a une option pour activer l\u2019acc\u00e8s public . Le r\u00f4le d\u2019acc\u00e8s public peut \u00eatre d\u00e9fini sur visualiseur ou \u00e9diteur. Toute personne ayant un lien peut voir (ou modifier) vos donn\u00e9es. Ces vues ne seraient pas compt\u00e9es dans le nombre d\u2019utilisateurs de votre plan. Le document est visible par toute personne ayant le lien, donc faites preuve de prudence lorsque vous travaillez avec des donn\u00e9es sensibles. Partage de lien en lecture seule restreint. Avec le partage de lien en lecture seule, il est possible de restreindre davantage ce que les gens peuvent voir en utilisant les permissions avanc\u00e9es de Grist pour d\u00e9finir des param\u00e8tres d\u2019URL sp\u00e9cifiques appel\u00e9s cl\u00e9s de lien qui d\u00e9terminent quelles tables, colonnes ou lignes sont affich\u00e9es lorsqu\u2019un lien sp\u00e9cifique est partag\u00e9. Int\u00e9gration en lecture seule. Les pages Grist peuvent \u00eatre int\u00e9gr\u00e9es dans des sites Web dans une iframe. Apprenez comment .","title":"Puis-je uniquement partager des documents Grist avec mon \u00e9quipe ?"},{"location":"FAQ/#grist-et-votre-site-webapplication","text":"","title":"Grist et votre site Web/application"},{"location":"FAQ/#puis-je-integrer-grist-dans-mon-site-web","text":"Oui, il est possible d\u2019int\u00e9grer des pages Grist en tant que donn\u00e9es en lecture seule dans un site Web dans une iframe. Remplacez l\u2019URL \u00e9crite dans le code ci-dessus par l\u2019URL de la page Grist que vous souhaitez int\u00e9grer, suivie de ?embed=true \u00e0 la fin de l\u2019URL. En savoir plus sur l\u2019int\u00e9gration de Grist .","title":"Puis-je int\u00e9grer Grist dans mon site Web ?"},{"location":"FAQ/#puis-je-utiliser-grist-comme-backend-de-mon-application-web","text":"L\u2019utilisation de Grist comme solution backend directement pour un site Web ou une application Web n\u2019est pas encore prise en charge. Nous n\u2019avons pas encore de m\u00e9thode d\u2019authentification pour ce cas d\u2019utilisation. La m\u00e9thode de cl\u00e9 API n\u2019est g\u00e9n\u00e9ralement pas appropri\u00e9e pour une utilisation Web, car la cl\u00e9 serait accessible \u00e0 tout spectateur de la page Web, ce qui est g\u00e9n\u00e9ralement ind\u00e9sirable. Nous sommes int\u00e9ress\u00e9s \u00e0 prendre en charge cela \u00e0 l\u2019avenir et accueillons les id\u00e9es et les commentaires dans notre forum communautaire .","title":"Puis-je utiliser Grist comme backend de mon application Web ?"},{"location":"access-rules/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . R\u00e8gles d\u2019acc\u00e8s # Chaque document Grist peut \u00eatre partag\u00e9 avec d\u2019autres en utilisant l\u2019option G\u00e9rer les utilisateurs dans le menu de partage ( ). Les utilisateurs peuvent \u00eatre invit\u00e9s en tant que Visiteurs, \u00c9diteurs ou Propri\u00e9taires (voir Partage d\u2019un document pour un rappel sur ces r\u00f4les), ou un document peut \u00eatre partag\u00e9 publiquement avec des permissions de lecture ou d\u2019\u00e9dition. Parfois, vous avez besoin de plus de nuances sur qui peut voir ou \u00e9diter des parties individuelles d\u2019un document. Les r\u00e8gles d\u2019acc\u00e8s nous donnent ce pouvoir. Seuls les propri\u00e9taires d\u2019un document peuvent modifier ses r\u00e8gles d\u2019acc\u00e8s. Lorsqu\u2019un document est charg\u00e9, les propri\u00e9taires voient un outil appel\u00e9 R\u00e8gles d\u2019acc\u00e8s dans la barre lat\u00e9rale gauche. Cliquez dessus pour voir et modifier les r\u00e8gles d\u2019acc\u00e8s. Les r\u00e8gles sont \u00e9galement accessibles via l\u2019option G\u00e9rer les utilisateurs du menu de partage avec le bouton Ouvrir les r\u00e8gles d'acc\u00e8s (disponible uniquement pour les Propri\u00e9taires du document). Supposons que nous g\u00e9rons une petite entreprise de sourcing et de livraison d\u2019objets inhabituels, organis\u00e9e \u00e0 l\u2019aide d\u2019un document avec deux tables, Commandes et Finances . Nous prenons maintenant plus d\u2019employ\u00e9s et voulons partager le document avec eux tout en limitant leur acc\u00e8s \u00e0 ce dont ils ont besoin. R\u00e8gles par d\u00e9faut # Pour voir les r\u00e8gles d\u2019acc\u00e8s d\u2019un document, visitez sa page de r\u00e8gles d\u2019acc\u00e8s en cliquant sur R\u00e8gles d\u2019acc\u00e8s dans la barre lat\u00e9rale gauche. Lorsque aucune r\u00e8gle personnalis\u00e9e n\u2019a encore \u00e9t\u00e9 cr\u00e9\u00e9e, la page des r\u00e8gles d\u2019acc\u00e8s contient les R\u00e8gles par d\u00e9faut pour notre document : Ces r\u00e8gles disent, en r\u00e9sum\u00e9, que les Propri\u00e9taires et \u00c9diteurs peuvent faire tout ce qu\u2019ils veulent dans le document, que les Visiteurs ne peuvent que lire le document, et que tout le monde d\u2019autre est interdit d\u2019acc\u00e8s. Ces r\u00e8gles ne peuvent pas \u00eatre modifi\u00e9es, mais elles peuvent \u00eatre remplac\u00e9es. Pour comprendre si un groupe de r\u00e8gles permet une certaines permissions ( Lire, Mettre \u00e0 jour, Cr\u00e9er, Supprimer ou Structure ), lisez les r\u00e8gles de haut en bas, et trouvez la premi\u00e8re r\u00e8gle applicable qui permet (vert) ou refuse (rouge) cette permission. Nous verrons de nombreux exemples au fur et \u00e0 mesure. Verrouiller la structure # Par d\u00e9faut, les Propri\u00e9taires et \u00c9diteurs ont le m\u00eame pouvoir dans un document, avec la capacit\u00e9 de cr\u00e9er ou de supprimer des tables ou des colonnes, d\u2019\u00e9crire des formules, de r\u00e9organiser des pages, et ainsi de suite. Supposons que nous voulons que seuls les Propri\u00e9taires d\u2019origine du document soient autoris\u00e9s \u00e0 modifier sa structure, car nous pr\u00e9voyons d\u2019inviter d\u2019autres collaborateurs sp\u00e9cialis\u00e9s en tant qu\u2019\u00c9diteurs. Pour ce faire, d\u00e9cochez la case de la premi\u00e8re r\u00e8gle list\u00e9e sous \u2018R\u00e8gles avanc\u00e9es\u2019 pour interdire aux \u00e9diteurs de modifier la structure. Une fois que nous avons apport\u00e9 des modifications, le bouton ENREGISTRER devient vert et invitant. Nous cliquons sur ENREGISTRER pour que la r\u00e8gle prenne effet. Important. C\u2019est une premi\u00e8re \u00e9tape importante pour tout document o\u00f9 vous avez l\u2019intention de bloquer tout acc\u00e8s aux \u00c9diteurs. Sans leur refuser la permission de structure ( S ), quiconque ayant acc\u00e8s \u00e0 l\u2019\u00e9dition pourra cr\u00e9er ou modifier des formules. \u00c9tant donn\u00e9 que les calculs de formules ne sont pas limit\u00e9s par les r\u00e8gles de contr\u00f4le d\u2019acc\u00e8s, un utilisateur d\u00e9termin\u00e9 pourrait les utiliser pour r\u00e9cup\u00e9rer des donn\u00e9es de n\u2019importe quel document. Pour se prot\u00e9ger contre cela, refusez la permission de structure aux utilisateurs dont l\u2019acc\u00e8s doit \u00eatre limit\u00e9. Cr\u00e9er une table priv\u00e9e # Pour garantir que seuls les Propri\u00e9taires peuvent acc\u00e9der \u00e0 une table, comme la table Finances dans notre exemple, nous cliquons sur Ajouter des r\u00e8gles de table et s\u00e9lectionnons le nom de la table, Finances . Cela cr\u00e9e un nouveau groupe de r\u00e8gles vide appel\u00e9 R\u00e8gles pour la table Finances . Ensuite, nous ajoutons une condition pour tout utilisateur qui n\u2019est pas un Propri\u00e9taire ( user.Access != OWNER ), avec toutes les permissions refus\u00e9es. S\u00e9lectionner Refuser tout dans le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de R U C D est un moyen rapide de d\u00e9finir toutes les permissions sur refus\u00e9es, ou vous pouvez cliquer sur chaque permission individuellement pour les mettre en rouge. R est Lire, U est Mettre \u00e0 jour, C est Cr\u00e9er, et D est Supprimer (voir Permissions de r\u00e8gle d\u2019acc\u00e8s ). Les permissions de structure ( S ) ne sont pas disponibles au niveau de la table. Une fois que vous avez termin\u00e9, cliquez sur ENREGISTRER . Maintenant, nous pourrions aller de l\u2019avant et partager le document avec un membre de l\u2019\u00e9quipe sp\u00e9cialis\u00e9 dans les livraisons, par exemple. Nous partageons le document avec eux en tant qu\u2019\u00c9diteur afin que les restrictions que nous avons mises en place s\u2019appliquent \u00e0 eux. Ils ne verront pas la table Finances dans la barre lat\u00e9rale gauche, et les tentatives de l\u2019ouvrir seront refus\u00e9es : R\u00e8gles par d\u00e9faut # Lors de l\u2019\u00e9criture des r\u00e8gles d\u2019acc\u00e8s pour des tables sp\u00e9cifiques, il est assez courant de r\u00e9p\u00e9ter la m\u00eame r\u00e8gle dans de nombreuses tables \u2014 par exemple, toujours accorder aux propri\u00e9taires des permissions de lecture et d\u2019\u00e9criture compl\u00e8tes. Pour ajouter automatiquement un ensemble de r\u00e8gles \u00e0 toutes les nouvelles r\u00e8gles de table, vous pouvez \u00e9crire des \u201cr\u00e8gles par d\u00e9faut\u201d. Il y a une case \u00e0 cocher au-dessus des r\u00e8gles par d\u00e9faut qui facilite le cas commun avec un seul clic. Cliquez dessus pour \u00e9crire une r\u00e8gle par d\u00e9faut qui accordera automatiquement aux propri\u00e9taires un acc\u00e8s complet chaque fois que des r\u00e8gles de table sont ajout\u00e9es. Cliquez sur l\u2019ic\u00f4ne > pour d\u00e9plier la table des r\u00e8gles par d\u00e9faut afin de modifier les r\u00e8gles par d\u00e9faut. Restreindre l\u2019acc\u00e8s aux colonnes # Nous pouvons restreindre l\u2019acc\u00e8s d\u2019un collaborateur aux colonnes. Dans notre exemple, nous pourrions souhaiter donner \u00e0 un sp\u00e9cialiste des livraisons un acc\u00e8s plus limit\u00e9 \u00e0 la table Commandes . Peut-\u00eatre qu\u2019ils n\u2019ont pas besoin de voir une colonne Email , ou une colonne Pi\u00e8ce avec des d\u00e9tails sur ce qu\u2019il y a dans le colis. Cliquez sur Ajouter des r\u00e8gles de table et s\u00e9lectionnez Commandes pour cr\u00e9er un groupe de r\u00e8gles pour la table Commandes . Maintenant, dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle de colonne : Dans la zone Colonnes , nous avons un nouveau menu d\u00e9roulant [Ajouter une colonne] pour ajouter toutes les colonnes auxquelles nous voulons que la r\u00e8gle s\u2019applique (dans notre cas Email et Pi\u00e8ce ). Pour la condition, nous pourrions utiliser user.Email == 'kiwi@getgrist.com' . Cela v\u00e9rifie l\u2019adresse e-mail de Kimberly, notre sp\u00e9cialiste des livraisons fictif ; nous pourrions \u00e9galement v\u00e9rifier par nom ou par un ID num\u00e9rique. Nous d\u00e9sactivons toutes les permissions disponibles pour cet utilisateur sur ces colonnes : Maintenant que les r\u00e8gles sont pr\u00eates, cliquez sur Enregistrer . Si nous avons un autre employ\u00e9 qui se sp\u00e9cialise dans le sourcing d\u2019objets, et qui a besoin de voir un ensemble diff\u00e9rent de colonnes, nous pouvons le faire. Par exemple ici, nous ajoutons une r\u00e8gle pour retirer les colonnes Adresse et T\u00e9l\u00e9phone de l\u2019utilisateur Charon : Voir en tant qu\u2019autre utilisateur # Un moyen pratique de v\u00e9rifier si les r\u00e8gles d\u2019acc\u00e8s fonctionnent comme pr\u00e9vu est la fonction Voir en tant que , disponible dans le menu d\u00e9roulant Voir en tant que . Cela permet \u00e0 un Propri\u00e9taire d\u2019ouvrir le document comme s\u2019il \u00e9tait l\u2019une des personnes avec qui il est partag\u00e9, pour voir ce que son coll\u00e8gue verrait. Le Propri\u00e9taire ne \u201cdeviendra\u201d pas ce coll\u00e8gue - tout changement qu\u2019il effectue sera enregistr\u00e9 comme provenant de lui-m\u00eame et non du coll\u00e8gue - mais il voit le document du point de vue du coll\u00e8gue. Dans notre exemple, nous pourrions s\u00e9lectionner Kiwi, et le document se rouvre, avec une grande banni\u00e8re indiquant que nous le visualisons comme Kiwi. Les colonnes Pi\u00e8ce et Email sont manquantes, et la table Finances est supprim\u00e9e : Vous pouvez \u00e9galement v\u00e9rifier dans les Donn\u00e9es sources pour confirmer que seules les tables, colonnes et lignes attendues sont expos\u00e9es. Lorsque vous \u00eates satisfait que tout semble comme pr\u00e9vu, cliquez sur le bouton vert Voir en tant que vous-m\u00eame pour fermer cet aper\u00e7u, et le document se rechargera. Tables d\u2019attributs d\u2019utilisateur # Si nous r\u00e9ussissons et embauchons de nombreuses personnes pour le sourcing et la livraison, ajouter chacune d\u2019elles une par une aux r\u00e8gles serait fastidieux. Une solution est d\u2019utiliser des \u201ctables d\u2019attributs d\u2019utilisateur.\u201d Vous pouvez ajouter une table \u00e0 votre document qui classe les utilisateurs comme vous le souhaitez, puis utiliser ces classes dans vos r\u00e8gles d\u2019acc\u00e8s. Par exemple, nous pouvons cr\u00e9er une table appel\u00e9e \u00c9quipe , et lui donner deux colonnes, Email et R\u00f4le , o\u00f9 R\u00f4le est un choix entre Sourcing et Livraison . Maintenant, nous pouvons dire \u00e0 Grist de rendre les informations de cette table disponibles pour les r\u00e8gles d\u2019acc\u00e8s, en cliquant sur Ajouter des attributs d'utilisateur . Donnez \u00e0 l\u2019attribut n\u2019importe quel nom que vous aimez (c\u2019est ainsi que nous nous y r\u00e9f\u00e9rerons dans les formules), comme \u00c9quipe . Choisissez la table \u00e0 lire ( \u00c9quipe \u00e9galement dans ce cas). Donnez une propri\u00e9t\u00e9 utilisateur \u00e0 comparer avec les lignes de cette table - dans notre cas, nous utiliserons user.Email . Et la colonne \u00e0 comparer, Email . Enregistrez cela. Maintenant, nous pouvons mettre \u00e0 jour nos r\u00e8gles pour \u00eatre plus g\u00e9n\u00e9rales. Nous d\u00e9couvrons avec l\u2019autocompl\u00e9tion que nous avons une nouvelle variable user.Team disponible dans les conditions. Cela rend les colonnes de l\u2019 \u00c9quipe disponibles, comme user.Team.Role . Maintenant, nous pouvons v\u00e9rifier si l\u2019utilisateur a un r\u00f4le particulier et appliquer les permissions qui y sont associ\u00e9es : Super ! En faisant un contr\u00f4le al\u00e9atoire, Charon voit les colonnes attendues pour quelqu\u2019un dans le Sourcing. Et si nous recrutons quelqu\u2019un d\u2019autre pour travailler avec eux, nous pouvons simplement les ajouter dans la table \u00c9quipe , sans besoin de modifier les r\u00e8gles. Contr\u00f4le d\u2019acc\u00e8s au niveau des lignes # Dans notre exemple, \u00e0 mesure que les commandes sont trait\u00e9es, elles passent des phases de sourcing aux phases de livraison. Il n\u2019est donc vraiment pas n\u00e9cessaire que les deux groupes voient toutes les commandes en m\u00eame temps. Ajoutons une colonne appel\u00e9e \u00c9tape qui peut \u00eatre d\u00e9finie sur Sourcing ou Livraison , afin que nous puissions mettre \u00e0 jour les r\u00e8gles d\u2019acc\u00e8s pour ne montrer que les commandes pertinentes. Dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle \u00e0 l'\u00e9chelle de la table pour ajouter une r\u00e8gle qui n\u2019est pas limit\u00e9e \u00e0 des colonnes sp\u00e9cifiques. Commen\u00e7ons par refuser l\u2019acc\u00e8s \u00e0 toutes les lignes pour les non-Propri\u00e9taires, puis ajoutons \u00e0 nouveau celles que nous voulons. Nous pouvons le faire avec la condition user.Access != OWNER avec des permissions Refuser tout . Ensuite, nous ajoutons une autre r\u00e8gle par d\u00e9faut en cliquant sur + , et ajoutons la condition user.Team.Role == rec.Stage . La variable rec nous permet d\u2019exprimer des r\u00e8gles qui d\u00e9pendent du contenu d\u2019un enregistrement particulier. Ici, nous v\u00e9rifions si la colonne \u00c9tape d\u2019un enregistrement correspond au r\u00f4le de l\u2019utilisateur. Si c\u2019est le cas, nous autorisons l\u2019acc\u00e8s R Lecture : Voici \u00e0 quoi ressemble la table maintenant pour Kimberly (effectuant des livraisons) : Et voici \u00e0 quoi ressemble la table pour Charon (effectuant du sourcing) : Kimberly et Charon ont maintenant un acc\u00e8s en lecture seule \u00e0 la table. Les Propri\u00e9taires ont toujours un acc\u00e8s complet en \u00e9criture \u00e0 toutes les lignes et colonnes. Comprendre les colonnes de r\u00e9f\u00e9rence dans les r\u00e8gles d\u2019acc\u00e8s Vous pouvez limiter les donn\u00e9es auxquelles les membres de l\u2019\u00e9quipe ont acc\u00e8s \u00e0 juste les lignes pertinentes pour leur travail. Une fa\u00e7on de le faire est de relier tous les enregistrements dans toutes les tables \u00e0 leurs membres d\u2019\u00e9quipe respectifs. Par exemple, les pistes et les enregistrements de ventes peuvent faire r\u00e9f\u00e9rence au repr\u00e9sentant commercial responsable de ces enregistrements. Cette vid\u00e9o rapide explique comment. V\u00e9rification des nouvelles valeurs # Les r\u00e8gles d\u2019acc\u00e8s peuvent \u00eatre utilis\u00e9es pour permettre uniquement certains changements au document. Supposons que nous voulons que les personnes de Livraison puissent changer \u00c9tape de Livraison \u00e0 Fait , sans leur donner les droits arbitraires d\u2019\u00e9diter cette colonne. Nous pouvons leur accorder ce droit exceptionnel comme suit. Dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle de colonne . R\u00e9glez [Ajouter une colonne] sur \u00c9tape , et marquez la permission U/Mise \u00e0 jour pour \u00eatre accord\u00e9e. Pour la condition, utilisez ceci : (user.Team.Role == 'Livraison' and rec.Stage == 'Livraison' and newRec.Stage == 'Fait') Cela v\u00e9rifie si l\u2019utilisateur a le r\u00f4le de Livraison, que l\u2019enregistrement est \u00e0 l\u2019\u00e9tape de Livraison, et que l\u2019utilisateur essaie de changer l\u2019\u00c9tape en Fait . La variable newRec est une variante de rec disponible lorsque l\u2019utilisateur propose de changer un enregistrement, avec rec contenant son \u00e9tat avant le changement, et newRec son \u00e9tat apr\u00e8s le changement propos\u00e9. Maintenant, si nous voyons la table comme Kiwi, et essayons de changer une \u00c9tape en Sourcing , nous sommes refus\u00e9s : Si nous changeons une \u00c9tape en Fait , cela fonctionne, et l\u2019enregistrement dispara\u00eet de la vue puisqu\u2019il n\u2019est plus dans l\u2019\u00e9tape de Livraison : Cl\u00e9s de lien # Parfois, il est utile de donner acc\u00e8s \u00e0 une petite partie sp\u00e9cifique du document, par exemple une seule ligne d\u2019une table. Grist offre une fonctionnalit\u00e9 appel\u00e9e \u201ccl\u00e9s de lien\u201d qui peut aider avec cela. Tous les param\u00e8tres dans une URL de document Grist qui se terminent par un underscore sont disponibles pour les r\u00e8gles d\u2019acc\u00e8s dans une variable user.LinkKey . Par exemple, si une URL de document se termine par ....?Token_=xx-xx-xx-xx&Flavor_=vanilla , alors user.LinkKey.Token sera d\u00e9fini sur xx-xx-xx-xx et user.LinkKey.Flavor sur vanilla . Voyons un exemple pour voir comment cela peut \u00eatre utile. Supposons que nous avons une table de Commandes et que nous aimerions occasionnellement partager des informations sur une seule commande avec quelqu\u2019un. Pour ce faire avec des cl\u00e9s de lien, nous avons besoin d\u2019un code difficile \u00e0 deviner pour chaque commande, qui peut \u00eatre utilis\u00e9 pour y acc\u00e9der. Grist a une fonction UUID() qui donne un identifiant unique, al\u00e9atoire et difficile \u00e0 deviner, donc ajoutons une colonne UUID avec la formule =UUID() : En fait, nous voulons que UUID() soit appel\u00e9 une seule fois par commande, lorsque nous la cr\u00e9ons, et jamais recalcul\u00e9 (car sinon, elle changerait). Donc dans la barre lat\u00e9rale droite, nous convertissons la colonne de formule en colonne de donn\u00e9es, figeant ses valeurs : Cela convertit notre formule en une formule d\u2019initialisation. Nous d\u00e9finissons la formule pour s\u2019appliquer aux nouveaux enregistrements : \u00c0 ce stade, nous avons un code solide et difficile \u00e0 deviner pour chaque commande dans la colonne UUID , qui sera cr\u00e9\u00e9 \u00e0 mesure que nous ajoutons de nouvelles commandes. Il peut \u00eatre pratique \u00e0 ce stade de construire des liens vers le document avec ce code int\u00e9gr\u00e9. Grist a un helper pour cela appel\u00e9 SELF_HYPERLINK . Pour ajouter une cl\u00e9 de lien appel\u00e9e , utilisez simplement cette fonction avec un argument LinkKey_ . Dans notre cas, nous passons LinkKey_UUID=$UUID pour int\u00e9grer la valeur de la colonne UUID dans l\u2019URL. Nous d\u00e9finissons \u00e9galement label=$Ref pour contr\u00f4ler le texte du lien dans la feuille de calcul. Pour afficher le lien, nous d\u00e9finissons le type de colonne sur Texte et activons l\u2019option HyperLink : Une fois que nous avons ces liens, nous pouvons faire un peu de m\u00e9nage en cachant les colonnes UUID et Ref (voir Op\u00e9rations sur les colonnes pour un rappel sur la fa\u00e7on de le faire) : Les liens ne font encore rien de sp\u00e9cial, mais nous avons maintenant tout ce dont nous avons besoin pour que cela se produise. Voici un exemple de r\u00e8gles d\u2019acc\u00e8s pour permettre \u00e0 quiconque ayant un UUID dans son URL de lire toute commande avec un UUID correspondant (sinon, seuls les propri\u00e9taires peuvent lire les commandes dans ce cas) : Et voici ce qu\u2019un non-propri\u00e9taire voit maintenant, avec l\u2019UUID de la premi\u00e8re commande dans son URL : Ce n\u2019est que le d\u00e9but des possibilit\u00e9s. Les cl\u00e9s de lien peuvent donner acc\u00e8s \u00e0 plusieurs lignes \u00e0 travers de nombreuses tables. Elles peuvent \u00eatre utilis\u00e9es dans Tables d\u2019attributs d\u2019utilisateur . Et les donn\u00e9es auxquelles elles donnent acc\u00e8s peuvent \u00eatre dans des tables, des fiches, des listes de fiches, des graphiques et des widgets personnalis\u00e9s. Consultez un autre exemple pour approfondir votre compr\u00e9hension des cl\u00e9s de lien. Conditions des r\u00e8gles d\u2019acc\u00e8s # Les conditions des r\u00e8gles d\u2019acc\u00e8s contiennent une formule exprimant quand la r\u00e8gle doit s\u2019appliquer. Une condition vide s\u2019appliquera toujours. Lorsqu\u2019une condition s\u2019applique \u00e0 une action, les permissions associ\u00e9es \u00e0 la condition sont d\u00e9finies comme autoris\u00e9es ou refus\u00e9es pour cette action si aucune r\u00e8gle ant\u00e9rieure dans le m\u00eame groupe ne les a encore d\u00e9finies. Lorsqu\u2019une condition ne s\u2019applique pas, aucune permission n\u2019est d\u00e9finie par cette r\u00e8gle, mais d\u2019autres r\u00e8gles pourraient les d\u00e9finir. Les formules sont \u00e9crites dans un sous-ensemble restreint de Python. Les variables qui peuvent \u00eatre disponibles dans les r\u00e8gles d\u2019acc\u00e8s sont user , rec et newRec . La variable user contient les membres suivants : user.Access : l\u2019un de owners , editors ou viewers , indiquant comment le document a \u00e9t\u00e9 partag\u00e9 avec l\u2019utilisateur (voir Partage d\u2019un document ). user.Email : l\u2019adresse e-mail de l\u2019utilisateur (ou anon@getgrist.com pour les utilisateurs qui ne sont pas connect\u00e9s). user.UserID : un ID num\u00e9rique associ\u00e9 \u00e0 l\u2019utilisateur. user.Name : le nom de l\u2019utilisateur (ou Anonyme si indisponible). user.LinkKey : un objet avec tous les param\u00e8tres d\u2019URL de contr\u00f4le d\u2019acc\u00e8s. Les param\u00e8tres d\u2019URL de contr\u00f4le d\u2019acc\u00e8s se terminent par un underscore (qui est ensuite supprim\u00e9). Disponible uniquement dans le client web, pas dans l\u2019API. user.SessionID : une cha\u00eene unique attribu\u00e9e aux utilisateurs anonymes pendant la dur\u00e9e de la session de cet utilisateur. Pour les utilisateurs connect\u00e9s, user.SessionID est toujours \"u\" + l\u2019ID num\u00e9rique de l\u2019utilisateur. Pour un exemple d\u2019utilisation de la variable user , lisez R\u00e8gles par d\u00e9faut . La variable rec contient l\u2019\u00e9tat d\u2019un enregistrement/ligne individuel, pour les conditions qui doivent en tenir compte. Lorsqu\u2019elle est utilis\u00e9e, cette r\u00e8gle devient sp\u00e9cifique \u00e0 la ligne. Cela permet, par exemple, de rendre certaines lignes visibles uniquement pour certains utilisateurs, ou d\u2019interdire la modification de certaines lignes par certains utilisateurs. Pour un exemple d\u2019utilisation de la variable rec , lisez Contr\u00f4le d\u2019acc\u00e8s au niveau des lignes . La variable newRec est disponible pour la cr\u00e9ation et la mise \u00e0 jour d\u2019enregistrements/ligne, et contient l\u2019\u00e9tat d\u2019une ligne apr\u00e8s un changement propos\u00e9, vous permettant d\u2019autoriser ou de refuser s\u00e9lectivement certains changements. Pour un exemple d\u2019utilisation de la variable newRec , lisez V\u00e9rification des nouvelles valeurs . Les op\u00e9rations prises en charge dans les formules de condition sont actuellement : and , or , + , - , * , / , % , == , != , < , <= , > , >= , is , is not , in , not in . Les variables prises en charge sont : user , rec , newRec avec leurs membres accessibles avec . . Les cha\u00eenes, les nombres et les listes sont \u00e9galement pris en charge. Si une op\u00e9ration dont vous avez besoin n\u2019est pas disponible, consid\u00e9rez si vous pouvez faire une partie du travail dans une formule dans la table elle-m\u00eame (voir M\u00e9mos de r\u00e8gle d\u2019acc\u00e8s pour un exemple). Les commentaires sont autoris\u00e9s, en utilisant # ou \"\"\" . S\u2019il y a un commentaire dans une r\u00e8gle, alors le premier commentaire dans une r\u00e8gle qui entra\u00eene un refus d\u2019une action sera signal\u00e9 \u00e0 l\u2019utilisateur comme un conseil sur la raison pour laquelle l\u2019action n\u2019a pas \u00e9t\u00e9 permise. Voir M\u00e9mos de r\u00e8gle d\u2019acc\u00e8s pour un exemple. Permissions des r\u00e8gles d\u2019acc\u00e8s # Une permission contr\u00f4le si un utilisateur peut effectuer un type d\u2019action particulier. Les r\u00e8gles d\u2019acc\u00e8s Grist traitent actuellement 5 types d\u2019actions, qui sont donn\u00e9es par des acronymes \u00e0 une lettre pour plus de commodit\u00e9 : R - permission de lire des cellules. U - permission de mettre \u00e0 jour des cellules. C - permission de cr\u00e9er des lignes. D - permission de supprimer des lignes. S - permission de modifier la structure de la table. La permission de structure S est disponible dans le groupe de r\u00e8gles d\u2019acc\u00e8s par d\u00e9faut. Les r\u00e8gles de colonne n\u2019ont pas les permissions C de cr\u00e9ation et D de suppression, qui doivent \u00eatre g\u00e9r\u00e9es dans les r\u00e8gles de table par d\u00e9faut. Remarque : La permission S est tr\u00e8s puissante. Elle permet d\u2019\u00e9crire des formules, qui peuvent acc\u00e9der \u00e0 toutes les donn\u00e9es dans le document, ind\u00e9pendamment des r\u00e8gles. \u00c9tant donn\u00e9 que la permission S est activ\u00e9e par d\u00e9faut pour les \u00c9diteurs et les Propri\u00e9taires, tout utilisateur de ce type pourrait \u00e9diter une formule et ainsi r\u00e9cup\u00e9rer n\u2019importe quelle donn\u00e9e. En d\u2019autres termes, avoir la permission S rend possible de contourner d\u2019autres r\u00e8gles qui emp\u00eachent l\u2019acc\u00e8s aux donn\u00e9es. Pour cette raison, la d\u00e9sactiver \u2013 comme d\u00e9crit ci-dessus dans Verrouiller la structure \u2013 est une premi\u00e8re \u00e9tape importante pour limiter l\u2019acc\u00e8s aux donn\u00e9es. M\u00e9mos des r\u00e8gles d\u2019acc\u00e8s # Lorsqu\u2019un utilisateur re\u00e7oit un message d\u2019erreur lui refusant l\u2019acc\u00e8s en raison d\u2019une r\u00e8gle, il peut \u00eatre utile de donner des d\u00e9tails sp\u00e9cifiques qui l\u2019aideront \u00e0 comprendre le probl\u00e8me. Vous pouvez le faire en ajoutant un m\u00e9mo pour la condition. Tout d\u2019abord, cliquez sur l\u2019ic\u00f4ne de m\u00e9mo \u00e0 droite de votre condition. Tapez le message d\u2019erreur que vous souhaitez afficher dans la zone de saisie. Assurez-vous d\u2019enregistrer vos modifications. Lorsque la r\u00e8gle bloque un utilisateur d\u2019effectuer une action, le m\u00e9mo appara\u00eetra comme une notification. Pour une explication de la fa\u00e7on dont cette r\u00e8gle d\u2019acc\u00e8s particuli\u00e8re fonctionne, voir R\u00e8gles d\u2019acc\u00e8s pour restreindre les enregistrements en double Exemples de r\u00e8gles d\u2019acc\u00e8s # Avec l\u2019exemple \u00e9tendu d\u2019utilisation des r\u00e8gles d\u2019acc\u00e8s dans cette section, nous allons collecter des exemples complets de mod\u00e8les de r\u00e8gles d\u2019acc\u00e8s et de guides ici. Listes de leads : Une liste tr\u00e8s simple de leads, assign\u00e9s \u00e0 des individus pour un suivi, avec le contr\u00f4le des attributions r\u00e9serv\u00e9 aux propri\u00e9taires du document. \u00c9quipe de vente bas\u00e9e sur les comptes : CRM de vente avec des affaires et des contacts assign\u00e9s \u00e0 des repr\u00e9sentants commerciaux. Les repr\u00e9sentants ne peuvent voir que leurs propres contacts et affaires, mais les managers peuvent tout voir. Tirage au sort public : Un organisateur de tirage au sort public qui utilise des r\u00e8gles d\u2019acc\u00e8s pour faire respecter les r\u00e8gles du tirage au sort sans exiger que les demandeurs se connectent \u00e0 Grist. Sondage simple : Un sondage simple g\u00e9r\u00e9 dans Grist avec des r\u00e8gles d\u2019acc\u00e8s pour limiter une r\u00e9ponse par visiteur. Liste crowdsourc\u00e9e : Liste crowdsourc\u00e9e publique avec des r\u00e8gles d\u2019acc\u00e8s pour permettre aux mod\u00e9rateurs de modifier presque tout, mais limiter les visiteurs \u00e0 ne faire et modifier que leurs propres contributions. Feuilles de temps : Mod\u00e8le pour capturer les feuilles de temps des entrepreneurs. Les r\u00e8gles d\u2019acc\u00e8s permettent aux entrepreneurs de voir uniquement leurs feuilles de temps historiques et de modifier uniquement le mois actif. Gestion de projet : Suivre les t\u00e2ches par \u00e9v\u00e9nement et signaler les t\u00e2ches \u00e0 risque. Les r\u00e8gles d\u2019acc\u00e8s limitent les permissions par d\u00e9partement et \u00e9largissent les permissions des managers.","title":"Intro to access rules"},{"location":"access-rules/#regles-dacces","text":"Chaque document Grist peut \u00eatre partag\u00e9 avec d\u2019autres en utilisant l\u2019option G\u00e9rer les utilisateurs dans le menu de partage ( ). Les utilisateurs peuvent \u00eatre invit\u00e9s en tant que Visiteurs, \u00c9diteurs ou Propri\u00e9taires (voir Partage d\u2019un document pour un rappel sur ces r\u00f4les), ou un document peut \u00eatre partag\u00e9 publiquement avec des permissions de lecture ou d\u2019\u00e9dition. Parfois, vous avez besoin de plus de nuances sur qui peut voir ou \u00e9diter des parties individuelles d\u2019un document. Les r\u00e8gles d\u2019acc\u00e8s nous donnent ce pouvoir. Seuls les propri\u00e9taires d\u2019un document peuvent modifier ses r\u00e8gles d\u2019acc\u00e8s. Lorsqu\u2019un document est charg\u00e9, les propri\u00e9taires voient un outil appel\u00e9 R\u00e8gles d\u2019acc\u00e8s dans la barre lat\u00e9rale gauche. Cliquez dessus pour voir et modifier les r\u00e8gles d\u2019acc\u00e8s. Les r\u00e8gles sont \u00e9galement accessibles via l\u2019option G\u00e9rer les utilisateurs du menu de partage avec le bouton Ouvrir les r\u00e8gles d'acc\u00e8s (disponible uniquement pour les Propri\u00e9taires du document). Supposons que nous g\u00e9rons une petite entreprise de sourcing et de livraison d\u2019objets inhabituels, organis\u00e9e \u00e0 l\u2019aide d\u2019un document avec deux tables, Commandes et Finances . Nous prenons maintenant plus d\u2019employ\u00e9s et voulons partager le document avec eux tout en limitant leur acc\u00e8s \u00e0 ce dont ils ont besoin.","title":"R\u00e8gles d’acc\u00e8s"},{"location":"access-rules/#regles-par-defaut","text":"Pour voir les r\u00e8gles d\u2019acc\u00e8s d\u2019un document, visitez sa page de r\u00e8gles d\u2019acc\u00e8s en cliquant sur R\u00e8gles d\u2019acc\u00e8s dans la barre lat\u00e9rale gauche. Lorsque aucune r\u00e8gle personnalis\u00e9e n\u2019a encore \u00e9t\u00e9 cr\u00e9\u00e9e, la page des r\u00e8gles d\u2019acc\u00e8s contient les R\u00e8gles par d\u00e9faut pour notre document : Ces r\u00e8gles disent, en r\u00e9sum\u00e9, que les Propri\u00e9taires et \u00c9diteurs peuvent faire tout ce qu\u2019ils veulent dans le document, que les Visiteurs ne peuvent que lire le document, et que tout le monde d\u2019autre est interdit d\u2019acc\u00e8s. Ces r\u00e8gles ne peuvent pas \u00eatre modifi\u00e9es, mais elles peuvent \u00eatre remplac\u00e9es. Pour comprendre si un groupe de r\u00e8gles permet une certaines permissions ( Lire, Mettre \u00e0 jour, Cr\u00e9er, Supprimer ou Structure ), lisez les r\u00e8gles de haut en bas, et trouvez la premi\u00e8re r\u00e8gle applicable qui permet (vert) ou refuse (rouge) cette permission. Nous verrons de nombreux exemples au fur et \u00e0 mesure.","title":"R\u00e8gles par d\u00e9faut"},{"location":"access-rules/#verrouiller-la-structure","text":"Par d\u00e9faut, les Propri\u00e9taires et \u00c9diteurs ont le m\u00eame pouvoir dans un document, avec la capacit\u00e9 de cr\u00e9er ou de supprimer des tables ou des colonnes, d\u2019\u00e9crire des formules, de r\u00e9organiser des pages, et ainsi de suite. Supposons que nous voulons que seuls les Propri\u00e9taires d\u2019origine du document soient autoris\u00e9s \u00e0 modifier sa structure, car nous pr\u00e9voyons d\u2019inviter d\u2019autres collaborateurs sp\u00e9cialis\u00e9s en tant qu\u2019\u00c9diteurs. Pour ce faire, d\u00e9cochez la case de la premi\u00e8re r\u00e8gle list\u00e9e sous \u2018R\u00e8gles avanc\u00e9es\u2019 pour interdire aux \u00e9diteurs de modifier la structure. Une fois que nous avons apport\u00e9 des modifications, le bouton ENREGISTRER devient vert et invitant. Nous cliquons sur ENREGISTRER pour que la r\u00e8gle prenne effet. Important. C\u2019est une premi\u00e8re \u00e9tape importante pour tout document o\u00f9 vous avez l\u2019intention de bloquer tout acc\u00e8s aux \u00c9diteurs. Sans leur refuser la permission de structure ( S ), quiconque ayant acc\u00e8s \u00e0 l\u2019\u00e9dition pourra cr\u00e9er ou modifier des formules. \u00c9tant donn\u00e9 que les calculs de formules ne sont pas limit\u00e9s par les r\u00e8gles de contr\u00f4le d\u2019acc\u00e8s, un utilisateur d\u00e9termin\u00e9 pourrait les utiliser pour r\u00e9cup\u00e9rer des donn\u00e9es de n\u2019importe quel document. Pour se prot\u00e9ger contre cela, refusez la permission de structure aux utilisateurs dont l\u2019acc\u00e8s doit \u00eatre limit\u00e9.","title":"Verrouiller la structure"},{"location":"access-rules/#creer-une-table-privee","text":"Pour garantir que seuls les Propri\u00e9taires peuvent acc\u00e9der \u00e0 une table, comme la table Finances dans notre exemple, nous cliquons sur Ajouter des r\u00e8gles de table et s\u00e9lectionnons le nom de la table, Finances . Cela cr\u00e9e un nouveau groupe de r\u00e8gles vide appel\u00e9 R\u00e8gles pour la table Finances . Ensuite, nous ajoutons une condition pour tout utilisateur qui n\u2019est pas un Propri\u00e9taire ( user.Access != OWNER ), avec toutes les permissions refus\u00e9es. S\u00e9lectionner Refuser tout dans le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de R U C D est un moyen rapide de d\u00e9finir toutes les permissions sur refus\u00e9es, ou vous pouvez cliquer sur chaque permission individuellement pour les mettre en rouge. R est Lire, U est Mettre \u00e0 jour, C est Cr\u00e9er, et D est Supprimer (voir Permissions de r\u00e8gle d\u2019acc\u00e8s ). Les permissions de structure ( S ) ne sont pas disponibles au niveau de la table. Une fois que vous avez termin\u00e9, cliquez sur ENREGISTRER . Maintenant, nous pourrions aller de l\u2019avant et partager le document avec un membre de l\u2019\u00e9quipe sp\u00e9cialis\u00e9 dans les livraisons, par exemple. Nous partageons le document avec eux en tant qu\u2019\u00c9diteur afin que les restrictions que nous avons mises en place s\u2019appliquent \u00e0 eux. Ils ne verront pas la table Finances dans la barre lat\u00e9rale gauche, et les tentatives de l\u2019ouvrir seront refus\u00e9es :","title":"Cr\u00e9er une table priv\u00e9e"},{"location":"access-rules/#regles-par-defaut_1","text":"Lors de l\u2019\u00e9criture des r\u00e8gles d\u2019acc\u00e8s pour des tables sp\u00e9cifiques, il est assez courant de r\u00e9p\u00e9ter la m\u00eame r\u00e8gle dans de nombreuses tables \u2014 par exemple, toujours accorder aux propri\u00e9taires des permissions de lecture et d\u2019\u00e9criture compl\u00e8tes. Pour ajouter automatiquement un ensemble de r\u00e8gles \u00e0 toutes les nouvelles r\u00e8gles de table, vous pouvez \u00e9crire des \u201cr\u00e8gles par d\u00e9faut\u201d. Il y a une case \u00e0 cocher au-dessus des r\u00e8gles par d\u00e9faut qui facilite le cas commun avec un seul clic. Cliquez dessus pour \u00e9crire une r\u00e8gle par d\u00e9faut qui accordera automatiquement aux propri\u00e9taires un acc\u00e8s complet chaque fois que des r\u00e8gles de table sont ajout\u00e9es. Cliquez sur l\u2019ic\u00f4ne > pour d\u00e9plier la table des r\u00e8gles par d\u00e9faut afin de modifier les r\u00e8gles par d\u00e9faut.","title":"R\u00e8gles par d\u00e9faut"},{"location":"access-rules/#restreindre-lacces-aux-colonnes","text":"Nous pouvons restreindre l\u2019acc\u00e8s d\u2019un collaborateur aux colonnes. Dans notre exemple, nous pourrions souhaiter donner \u00e0 un sp\u00e9cialiste des livraisons un acc\u00e8s plus limit\u00e9 \u00e0 la table Commandes . Peut-\u00eatre qu\u2019ils n\u2019ont pas besoin de voir une colonne Email , ou une colonne Pi\u00e8ce avec des d\u00e9tails sur ce qu\u2019il y a dans le colis. Cliquez sur Ajouter des r\u00e8gles de table et s\u00e9lectionnez Commandes pour cr\u00e9er un groupe de r\u00e8gles pour la table Commandes . Maintenant, dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle de colonne : Dans la zone Colonnes , nous avons un nouveau menu d\u00e9roulant [Ajouter une colonne] pour ajouter toutes les colonnes auxquelles nous voulons que la r\u00e8gle s\u2019applique (dans notre cas Email et Pi\u00e8ce ). Pour la condition, nous pourrions utiliser user.Email == 'kiwi@getgrist.com' . Cela v\u00e9rifie l\u2019adresse e-mail de Kimberly, notre sp\u00e9cialiste des livraisons fictif ; nous pourrions \u00e9galement v\u00e9rifier par nom ou par un ID num\u00e9rique. Nous d\u00e9sactivons toutes les permissions disponibles pour cet utilisateur sur ces colonnes : Maintenant que les r\u00e8gles sont pr\u00eates, cliquez sur Enregistrer . Si nous avons un autre employ\u00e9 qui se sp\u00e9cialise dans le sourcing d\u2019objets, et qui a besoin de voir un ensemble diff\u00e9rent de colonnes, nous pouvons le faire. Par exemple ici, nous ajoutons une r\u00e8gle pour retirer les colonnes Adresse et T\u00e9l\u00e9phone de l\u2019utilisateur Charon :","title":"Restreindre l’acc\u00e8s aux colonnes"},{"location":"access-rules/#voir-en-tant-quautre-utilisateur","text":"Un moyen pratique de v\u00e9rifier si les r\u00e8gles d\u2019acc\u00e8s fonctionnent comme pr\u00e9vu est la fonction Voir en tant que , disponible dans le menu d\u00e9roulant Voir en tant que . Cela permet \u00e0 un Propri\u00e9taire d\u2019ouvrir le document comme s\u2019il \u00e9tait l\u2019une des personnes avec qui il est partag\u00e9, pour voir ce que son coll\u00e8gue verrait. Le Propri\u00e9taire ne \u201cdeviendra\u201d pas ce coll\u00e8gue - tout changement qu\u2019il effectue sera enregistr\u00e9 comme provenant de lui-m\u00eame et non du coll\u00e8gue - mais il voit le document du point de vue du coll\u00e8gue. Dans notre exemple, nous pourrions s\u00e9lectionner Kiwi, et le document se rouvre, avec une grande banni\u00e8re indiquant que nous le visualisons comme Kiwi. Les colonnes Pi\u00e8ce et Email sont manquantes, et la table Finances est supprim\u00e9e : Vous pouvez \u00e9galement v\u00e9rifier dans les Donn\u00e9es sources pour confirmer que seules les tables, colonnes et lignes attendues sont expos\u00e9es. Lorsque vous \u00eates satisfait que tout semble comme pr\u00e9vu, cliquez sur le bouton vert Voir en tant que vous-m\u00eame pour fermer cet aper\u00e7u, et le document se rechargera.","title":"Voir en tant qu’autre utilisateur"},{"location":"access-rules/#tables-dattributs-dutilisateur","text":"Si nous r\u00e9ussissons et embauchons de nombreuses personnes pour le sourcing et la livraison, ajouter chacune d\u2019elles une par une aux r\u00e8gles serait fastidieux. Une solution est d\u2019utiliser des \u201ctables d\u2019attributs d\u2019utilisateur.\u201d Vous pouvez ajouter une table \u00e0 votre document qui classe les utilisateurs comme vous le souhaitez, puis utiliser ces classes dans vos r\u00e8gles d\u2019acc\u00e8s. Par exemple, nous pouvons cr\u00e9er une table appel\u00e9e \u00c9quipe , et lui donner deux colonnes, Email et R\u00f4le , o\u00f9 R\u00f4le est un choix entre Sourcing et Livraison . Maintenant, nous pouvons dire \u00e0 Grist de rendre les informations de cette table disponibles pour les r\u00e8gles d\u2019acc\u00e8s, en cliquant sur Ajouter des attributs d'utilisateur . Donnez \u00e0 l\u2019attribut n\u2019importe quel nom que vous aimez (c\u2019est ainsi que nous nous y r\u00e9f\u00e9rerons dans les formules), comme \u00c9quipe . Choisissez la table \u00e0 lire ( \u00c9quipe \u00e9galement dans ce cas). Donnez une propri\u00e9t\u00e9 utilisateur \u00e0 comparer avec les lignes de cette table - dans notre cas, nous utiliserons user.Email . Et la colonne \u00e0 comparer, Email . Enregistrez cela. Maintenant, nous pouvons mettre \u00e0 jour nos r\u00e8gles pour \u00eatre plus g\u00e9n\u00e9rales. Nous d\u00e9couvrons avec l\u2019autocompl\u00e9tion que nous avons une nouvelle variable user.Team disponible dans les conditions. Cela rend les colonnes de l\u2019 \u00c9quipe disponibles, comme user.Team.Role . Maintenant, nous pouvons v\u00e9rifier si l\u2019utilisateur a un r\u00f4le particulier et appliquer les permissions qui y sont associ\u00e9es : Super ! En faisant un contr\u00f4le al\u00e9atoire, Charon voit les colonnes attendues pour quelqu\u2019un dans le Sourcing. Et si nous recrutons quelqu\u2019un d\u2019autre pour travailler avec eux, nous pouvons simplement les ajouter dans la table \u00c9quipe , sans besoin de modifier les r\u00e8gles.","title":"Tables d’attributs d’utilisateur"},{"location":"access-rules/#controle-dacces-au-niveau-des-lignes","text":"Dans notre exemple, \u00e0 mesure que les commandes sont trait\u00e9es, elles passent des phases de sourcing aux phases de livraison. Il n\u2019est donc vraiment pas n\u00e9cessaire que les deux groupes voient toutes les commandes en m\u00eame temps. Ajoutons une colonne appel\u00e9e \u00c9tape qui peut \u00eatre d\u00e9finie sur Sourcing ou Livraison , afin que nous puissions mettre \u00e0 jour les r\u00e8gles d\u2019acc\u00e8s pour ne montrer que les commandes pertinentes. Dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle \u00e0 l'\u00e9chelle de la table pour ajouter une r\u00e8gle qui n\u2019est pas limit\u00e9e \u00e0 des colonnes sp\u00e9cifiques. Commen\u00e7ons par refuser l\u2019acc\u00e8s \u00e0 toutes les lignes pour les non-Propri\u00e9taires, puis ajoutons \u00e0 nouveau celles que nous voulons. Nous pouvons le faire avec la condition user.Access != OWNER avec des permissions Refuser tout . Ensuite, nous ajoutons une autre r\u00e8gle par d\u00e9faut en cliquant sur + , et ajoutons la condition user.Team.Role == rec.Stage . La variable rec nous permet d\u2019exprimer des r\u00e8gles qui d\u00e9pendent du contenu d\u2019un enregistrement particulier. Ici, nous v\u00e9rifions si la colonne \u00c9tape d\u2019un enregistrement correspond au r\u00f4le de l\u2019utilisateur. Si c\u2019est le cas, nous autorisons l\u2019acc\u00e8s R Lecture : Voici \u00e0 quoi ressemble la table maintenant pour Kimberly (effectuant des livraisons) : Et voici \u00e0 quoi ressemble la table pour Charon (effectuant du sourcing) : Kimberly et Charon ont maintenant un acc\u00e8s en lecture seule \u00e0 la table. Les Propri\u00e9taires ont toujours un acc\u00e8s complet en \u00e9criture \u00e0 toutes les lignes et colonnes. Comprendre les colonnes de r\u00e9f\u00e9rence dans les r\u00e8gles d\u2019acc\u00e8s Vous pouvez limiter les donn\u00e9es auxquelles les membres de l\u2019\u00e9quipe ont acc\u00e8s \u00e0 juste les lignes pertinentes pour leur travail. Une fa\u00e7on de le faire est de relier tous les enregistrements dans toutes les tables \u00e0 leurs membres d\u2019\u00e9quipe respectifs. Par exemple, les pistes et les enregistrements de ventes peuvent faire r\u00e9f\u00e9rence au repr\u00e9sentant commercial responsable de ces enregistrements. Cette vid\u00e9o rapide explique comment.","title":"Contr\u00f4le d’acc\u00e8s au niveau des lignes"},{"location":"access-rules/#verification-des-nouvelles-valeurs","text":"Les r\u00e8gles d\u2019acc\u00e8s peuvent \u00eatre utilis\u00e9es pour permettre uniquement certains changements au document. Supposons que nous voulons que les personnes de Livraison puissent changer \u00c9tape de Livraison \u00e0 Fait , sans leur donner les droits arbitraires d\u2019\u00e9diter cette colonne. Nous pouvons leur accorder ce droit exceptionnel comme suit. Dans le groupe R\u00e8gles pour la table Commandes , cliquez sur l\u2019ic\u00f4ne \u00e0 trois points (\u2026), et s\u00e9lectionnez Ajouter une r\u00e8gle de colonne . R\u00e9glez [Ajouter une colonne] sur \u00c9tape , et marquez la permission U/Mise \u00e0 jour pour \u00eatre accord\u00e9e. Pour la condition, utilisez ceci : (user.Team.Role == 'Livraison' and rec.Stage == 'Livraison' and newRec.Stage == 'Fait') Cela v\u00e9rifie si l\u2019utilisateur a le r\u00f4le de Livraison, que l\u2019enregistrement est \u00e0 l\u2019\u00e9tape de Livraison, et que l\u2019utilisateur essaie de changer l\u2019\u00c9tape en Fait . La variable newRec est une variante de rec disponible lorsque l\u2019utilisateur propose de changer un enregistrement, avec rec contenant son \u00e9tat avant le changement, et newRec son \u00e9tat apr\u00e8s le changement propos\u00e9. Maintenant, si nous voyons la table comme Kiwi, et essayons de changer une \u00c9tape en Sourcing , nous sommes refus\u00e9s : Si nous changeons une \u00c9tape en Fait , cela fonctionne, et l\u2019enregistrement dispara\u00eet de la vue puisqu\u2019il n\u2019est plus dans l\u2019\u00e9tape de Livraison :","title":"V\u00e9rification des nouvelles valeurs"},{"location":"access-rules/#cles-de-lien","text":"Parfois, il est utile de donner acc\u00e8s \u00e0 une petite partie sp\u00e9cifique du document, par exemple une seule ligne d\u2019une table. Grist offre une fonctionnalit\u00e9 appel\u00e9e \u201ccl\u00e9s de lien\u201d qui peut aider avec cela. Tous les param\u00e8tres dans une URL de document Grist qui se terminent par un underscore sont disponibles pour les r\u00e8gles d\u2019acc\u00e8s dans une variable user.LinkKey . Par exemple, si une URL de document se termine par ....?Token_=xx-xx-xx-xx&Flavor_=vanilla , alors user.LinkKey.Token sera d\u00e9fini sur xx-xx-xx-xx et user.LinkKey.Flavor sur vanilla . Voyons un exemple pour voir comment cela peut \u00eatre utile. Supposons que nous avons une table de Commandes et que nous aimerions occasionnellement partager des informations sur une seule commande avec quelqu\u2019un. Pour ce faire avec des cl\u00e9s de lien, nous avons besoin d\u2019un code difficile \u00e0 deviner pour chaque commande, qui peut \u00eatre utilis\u00e9 pour y acc\u00e9der. Grist a une fonction UUID() qui donne un identifiant unique, al\u00e9atoire et difficile \u00e0 deviner, donc ajoutons une colonne UUID avec la formule =UUID() : En fait, nous voulons que UUID() soit appel\u00e9 une seule fois par commande, lorsque nous la cr\u00e9ons, et jamais recalcul\u00e9 (car sinon, elle changerait). Donc dans la barre lat\u00e9rale droite, nous convertissons la colonne de formule en colonne de donn\u00e9es, figeant ses valeurs : Cela convertit notre formule en une formule d\u2019initialisation. Nous d\u00e9finissons la formule pour s\u2019appliquer aux nouveaux enregistrements : \u00c0 ce stade, nous avons un code solide et difficile \u00e0 deviner pour chaque commande dans la colonne UUID , qui sera cr\u00e9\u00e9 \u00e0 mesure que nous ajoutons de nouvelles commandes. Il peut \u00eatre pratique \u00e0 ce stade de construire des liens vers le document avec ce code int\u00e9gr\u00e9. Grist a un helper pour cela appel\u00e9 SELF_HYPERLINK . Pour ajouter une cl\u00e9 de lien appel\u00e9e , utilisez simplement cette fonction avec un argument LinkKey_ . Dans notre cas, nous passons LinkKey_UUID=$UUID pour int\u00e9grer la valeur de la colonne UUID dans l\u2019URL. Nous d\u00e9finissons \u00e9galement label=$Ref pour contr\u00f4ler le texte du lien dans la feuille de calcul. Pour afficher le lien, nous d\u00e9finissons le type de colonne sur Texte et activons l\u2019option HyperLink : Une fois que nous avons ces liens, nous pouvons faire un peu de m\u00e9nage en cachant les colonnes UUID et Ref (voir Op\u00e9rations sur les colonnes pour un rappel sur la fa\u00e7on de le faire) : Les liens ne font encore rien de sp\u00e9cial, mais nous avons maintenant tout ce dont nous avons besoin pour que cela se produise. Voici un exemple de r\u00e8gles d\u2019acc\u00e8s pour permettre \u00e0 quiconque ayant un UUID dans son URL de lire toute commande avec un UUID correspondant (sinon, seuls les propri\u00e9taires peuvent lire les commandes dans ce cas) : Et voici ce qu\u2019un non-propri\u00e9taire voit maintenant, avec l\u2019UUID de la premi\u00e8re commande dans son URL : Ce n\u2019est que le d\u00e9but des possibilit\u00e9s. Les cl\u00e9s de lien peuvent donner acc\u00e8s \u00e0 plusieurs lignes \u00e0 travers de nombreuses tables. Elles peuvent \u00eatre utilis\u00e9es dans Tables d\u2019attributs d\u2019utilisateur . Et les donn\u00e9es auxquelles elles donnent acc\u00e8s peuvent \u00eatre dans des tables, des fiches, des listes de fiches, des graphiques et des widgets personnalis\u00e9s. Consultez un autre exemple pour approfondir votre compr\u00e9hension des cl\u00e9s de lien.","title":"Cl\u00e9s de lien"},{"location":"access-rules/#conditions-des-regles-dacces","text":"Les conditions des r\u00e8gles d\u2019acc\u00e8s contiennent une formule exprimant quand la r\u00e8gle doit s\u2019appliquer. Une condition vide s\u2019appliquera toujours. Lorsqu\u2019une condition s\u2019applique \u00e0 une action, les permissions associ\u00e9es \u00e0 la condition sont d\u00e9finies comme autoris\u00e9es ou refus\u00e9es pour cette action si aucune r\u00e8gle ant\u00e9rieure dans le m\u00eame groupe ne les a encore d\u00e9finies. Lorsqu\u2019une condition ne s\u2019applique pas, aucune permission n\u2019est d\u00e9finie par cette r\u00e8gle, mais d\u2019autres r\u00e8gles pourraient les d\u00e9finir. Les formules sont \u00e9crites dans un sous-ensemble restreint de Python. Les variables qui peuvent \u00eatre disponibles dans les r\u00e8gles d\u2019acc\u00e8s sont user , rec et newRec . La variable user contient les membres suivants : user.Access : l\u2019un de owners , editors ou viewers , indiquant comment le document a \u00e9t\u00e9 partag\u00e9 avec l\u2019utilisateur (voir Partage d\u2019un document ). user.Email : l\u2019adresse e-mail de l\u2019utilisateur (ou anon@getgrist.com pour les utilisateurs qui ne sont pas connect\u00e9s). user.UserID : un ID num\u00e9rique associ\u00e9 \u00e0 l\u2019utilisateur. user.Name : le nom de l\u2019utilisateur (ou Anonyme si indisponible). user.LinkKey : un objet avec tous les param\u00e8tres d\u2019URL de contr\u00f4le d\u2019acc\u00e8s. Les param\u00e8tres d\u2019URL de contr\u00f4le d\u2019acc\u00e8s se terminent par un underscore (qui est ensuite supprim\u00e9). Disponible uniquement dans le client web, pas dans l\u2019API. user.SessionID : une cha\u00eene unique attribu\u00e9e aux utilisateurs anonymes pendant la dur\u00e9e de la session de cet utilisateur. Pour les utilisateurs connect\u00e9s, user.SessionID est toujours \"u\" + l\u2019ID num\u00e9rique de l\u2019utilisateur. Pour un exemple d\u2019utilisation de la variable user , lisez R\u00e8gles par d\u00e9faut . La variable rec contient l\u2019\u00e9tat d\u2019un enregistrement/ligne individuel, pour les conditions qui doivent en tenir compte. Lorsqu\u2019elle est utilis\u00e9e, cette r\u00e8gle devient sp\u00e9cifique \u00e0 la ligne. Cela permet, par exemple, de rendre certaines lignes visibles uniquement pour certains utilisateurs, ou d\u2019interdire la modification de certaines lignes par certains utilisateurs. Pour un exemple d\u2019utilisation de la variable rec , lisez Contr\u00f4le d\u2019acc\u00e8s au niveau des lignes . La variable newRec est disponible pour la cr\u00e9ation et la mise \u00e0 jour d\u2019enregistrements/ligne, et contient l\u2019\u00e9tat d\u2019une ligne apr\u00e8s un changement propos\u00e9, vous permettant d\u2019autoriser ou de refuser s\u00e9lectivement certains changements. Pour un exemple d\u2019utilisation de la variable newRec , lisez V\u00e9rification des nouvelles valeurs . Les op\u00e9rations prises en charge dans les formules de condition sont actuellement : and , or , + , - , * , / , % , == , != , < , <= , > , >= , is , is not , in , not in . Les variables prises en charge sont : user , rec , newRec avec leurs membres accessibles avec . . Les cha\u00eenes, les nombres et les listes sont \u00e9galement pris en charge. Si une op\u00e9ration dont vous avez besoin n\u2019est pas disponible, consid\u00e9rez si vous pouvez faire une partie du travail dans une formule dans la table elle-m\u00eame (voir M\u00e9mos de r\u00e8gle d\u2019acc\u00e8s pour un exemple). Les commentaires sont autoris\u00e9s, en utilisant # ou \"\"\" . S\u2019il y a un commentaire dans une r\u00e8gle, alors le premier commentaire dans une r\u00e8gle qui entra\u00eene un refus d\u2019une action sera signal\u00e9 \u00e0 l\u2019utilisateur comme un conseil sur la raison pour laquelle l\u2019action n\u2019a pas \u00e9t\u00e9 permise. Voir M\u00e9mos de r\u00e8gle d\u2019acc\u00e8s pour un exemple.","title":"Conditions des r\u00e8gles d’acc\u00e8s"},{"location":"access-rules/#permissions-des-regles-dacces","text":"Une permission contr\u00f4le si un utilisateur peut effectuer un type d\u2019action particulier. Les r\u00e8gles d\u2019acc\u00e8s Grist traitent actuellement 5 types d\u2019actions, qui sont donn\u00e9es par des acronymes \u00e0 une lettre pour plus de commodit\u00e9 : R - permission de lire des cellules. U - permission de mettre \u00e0 jour des cellules. C - permission de cr\u00e9er des lignes. D - permission de supprimer des lignes. S - permission de modifier la structure de la table. La permission de structure S est disponible dans le groupe de r\u00e8gles d\u2019acc\u00e8s par d\u00e9faut. Les r\u00e8gles de colonne n\u2019ont pas les permissions C de cr\u00e9ation et D de suppression, qui doivent \u00eatre g\u00e9r\u00e9es dans les r\u00e8gles de table par d\u00e9faut. Remarque : La permission S est tr\u00e8s puissante. Elle permet d\u2019\u00e9crire des formules, qui peuvent acc\u00e9der \u00e0 toutes les donn\u00e9es dans le document, ind\u00e9pendamment des r\u00e8gles. \u00c9tant donn\u00e9 que la permission S est activ\u00e9e par d\u00e9faut pour les \u00c9diteurs et les Propri\u00e9taires, tout utilisateur de ce type pourrait \u00e9diter une formule et ainsi r\u00e9cup\u00e9rer n\u2019importe quelle donn\u00e9e. En d\u2019autres termes, avoir la permission S rend possible de contourner d\u2019autres r\u00e8gles qui emp\u00eachent l\u2019acc\u00e8s aux donn\u00e9es. Pour cette raison, la d\u00e9sactiver \u2013 comme d\u00e9crit ci-dessus dans Verrouiller la structure \u2013 est une premi\u00e8re \u00e9tape importante pour limiter l\u2019acc\u00e8s aux donn\u00e9es.","title":"Permissions des r\u00e8gles d’acc\u00e8s"},{"location":"access-rules/#memos-des-regles-dacces","text":"Lorsqu\u2019un utilisateur re\u00e7oit un message d\u2019erreur lui refusant l\u2019acc\u00e8s en raison d\u2019une r\u00e8gle, il peut \u00eatre utile de donner des d\u00e9tails sp\u00e9cifiques qui l\u2019aideront \u00e0 comprendre le probl\u00e8me. Vous pouvez le faire en ajoutant un m\u00e9mo pour la condition. Tout d\u2019abord, cliquez sur l\u2019ic\u00f4ne de m\u00e9mo \u00e0 droite de votre condition. Tapez le message d\u2019erreur que vous souhaitez afficher dans la zone de saisie. Assurez-vous d\u2019enregistrer vos modifications. Lorsque la r\u00e8gle bloque un utilisateur d\u2019effectuer une action, le m\u00e9mo appara\u00eetra comme une notification. Pour une explication de la fa\u00e7on dont cette r\u00e8gle d\u2019acc\u00e8s particuli\u00e8re fonctionne, voir R\u00e8gles d\u2019acc\u00e8s pour restreindre les enregistrements en double","title":"M\u00e9mos des r\u00e8gles d’acc\u00e8s"},{"location":"access-rules/#exemples-de-regles-dacces","text":"Avec l\u2019exemple \u00e9tendu d\u2019utilisation des r\u00e8gles d\u2019acc\u00e8s dans cette section, nous allons collecter des exemples complets de mod\u00e8les de r\u00e8gles d\u2019acc\u00e8s et de guides ici. Listes de leads : Une liste tr\u00e8s simple de leads, assign\u00e9s \u00e0 des individus pour un suivi, avec le contr\u00f4le des attributions r\u00e9serv\u00e9 aux propri\u00e9taires du document. \u00c9quipe de vente bas\u00e9e sur les comptes : CRM de vente avec des affaires et des contacts assign\u00e9s \u00e0 des repr\u00e9sentants commerciaux. Les repr\u00e9sentants ne peuvent voir que leurs propres contacts et affaires, mais les managers peuvent tout voir. Tirage au sort public : Un organisateur de tirage au sort public qui utilise des r\u00e8gles d\u2019acc\u00e8s pour faire respecter les r\u00e8gles du tirage au sort sans exiger que les demandeurs se connectent \u00e0 Grist. Sondage simple : Un sondage simple g\u00e9r\u00e9 dans Grist avec des r\u00e8gles d\u2019acc\u00e8s pour limiter une r\u00e9ponse par visiteur. Liste crowdsourc\u00e9e : Liste crowdsourc\u00e9e publique avec des r\u00e8gles d\u2019acc\u00e8s pour permettre aux mod\u00e9rateurs de modifier presque tout, mais limiter les visiteurs \u00e0 ne faire et modifier que leurs propres contributions. Feuilles de temps : Mod\u00e8le pour capturer les feuilles de temps des entrepreneurs. Les r\u00e8gles d\u2019acc\u00e8s permettent aux entrepreneurs de voir uniquement leurs feuilles de temps historiques et de modifier uniquement le mois actif. Gestion de projet : Suivre les t\u00e2ches par \u00e9v\u00e9nement et signaler les t\u00e2ches \u00e0 risque. Les r\u00e8gles d\u2019acc\u00e8s limitent les permissions par d\u00e9partement et \u00e9largissent les permissions des managers.","title":"Exemples de r\u00e8gles d’acc\u00e8s"},{"location":"afterschool-program/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Comment g\u00e9rer les donn\u00e9es commerciales # Grist brille lorsque vos donn\u00e9es commerciales pr\u00e9sentent une certaine complexit\u00e9. Dans cet exemple, nous allons examiner une organisation qui propose des activit\u00e9s p\u00e9riscolaires pour les enfants. N\u2019h\u00e9sitez pas \u00e0 consulter le document Inscription en classe , que vous trouverez sur notre page Exemples et mod\u00e8les . Dans cet exercice, nous allons montrer comment planifier, concevoir et cr\u00e9er un tel document. Planification # Un peu de planification \u00e0 l\u2019avance vous aidera \u00e0 obtenir une solution plus rapidement. Pensez aux types de donn\u00e9es avec lesquels vous travaillez et aux types de flux de travail dont vous aurez besoin. Vous n\u2019avez pas besoin d\u2019anticiper tout d\u00e8s le d\u00e9part. Vous pouvez facilement ajouter de la complexit\u00e9 plus tard, comme vous le verrez ci-dessous. Notre organisation propose plusieurs cours pour les enfants. Chaque cours a un instructeur et plusieurs \u00e9tudiants. Les \u00e9tudiants peuvent s\u2019inscrire \u00e0 plusieurs cours et peuvent revenir ann\u00e9e apr\u00e8s ann\u00e9e. Pour chaque cours, nous souhaitons voir la liste des \u00e9tudiants inscrits et s\u2019il reste des places disponibles. Lorsque qu\u2019un parent appelle, nous voulons un moyen pratique d\u2019inscrire un nouvel \u00e9tudiant ou de modifier ou annuler l\u2019inscription d\u2019un \u00e9tudiant. Si cela ressemble \u00e0 la construction d\u2019une application, c\u2019est exactement ce que nous faisons. Cependant, comme vous le verrez, ce n\u2019est pas plus difficile que de cr\u00e9er une feuille de calcul. Mod\u00e9lisation des donn\u00e9es # Plus vous mod\u00e9lisez bien vos donn\u00e9es commerciales, plus votre travail sera facile. D\u2019une certaine mani\u00e8re, vous faites \u00e0 la fois la conception de base de donn\u00e9es et la construction d\u2019une application personnalis\u00e9e. Grist rend simplement cela plus facile. Commen\u00e7ons par les cours et leurs instructeurs. Nous avons besoin d\u2019une liste de cours et d\u2019instructeurs. Le m\u00eame instructeur peut enseigner diff\u00e9rents cours, donc les instructeurs et les cours vivront dans des tables diff\u00e9rentes. Appelons-les \u201cCours\u201d et \u201cPersonnel\u201d. Chaque cours a un seul instructeur, donc l\u2019une des propri\u00e9t\u00e9s d\u2019un cours sera l\u2019instructeur de ce cours. Cours et Instructeurs # En partant de z\u00e9ro, vous allez cr\u00e9er un nouveau document vide (voir Cr\u00e9er un document ), renommer la table vide initiale \u201cTable1\u201d en \u201cCours\u201d, ajouter les colonnes n\u00e9cessaires et saisir quelques cours. Pour suivre les \u00e9tapes de ce tutoriel, vous pouvez plut\u00f4t importer Classes.csv (ou simplement vous r\u00e9f\u00e9rer au document exemple \u201cProgramme p\u00e9riscolaire\u201d). Pour la table Personnel, cliquez sur le bouton \u201cAjouter nouveau\u201d et s\u00e9lectionnez \u201cAjouter une table vide\u201d. Renommez-la en \u201cPersonnel\u201d, cr\u00e9ez quelques colonnes et saisissez des donn\u00e9es sur les instructeurs. Ou importez Staff.csv pour utiliser des donn\u00e9es d\u2019exemple et gagner quelques \u00e9tapes. Nous voulons que la colonne Instructeur dans la table Cours soit une r\u00e9f\u00e9rence \u00e0 la table Personnel . Actuellement, la table Personnel n\u2019a pas de colonne qui identifie de mani\u00e8re unique chaque enregistrement. Pour configurer des r\u00e9f\u00e9rences, il est judicieux d\u2019en ajouter une. Dans ce cas, nous allons ajouter une colonne \u201cNom Complet\u201d \u00e0 la table Personnel . Formules # Cliquez sur la page \u201cPersonnel\u201d et ajoutez une colonne \u201cNom Complet\u201d en utilisant le menu des colonnes ou le raccourci Alt + = , puis tapez \u201cNom Complet\u201d dans l\u2019en-t\u00eate de la nouvelle colonne. Cr\u00e9ez une formule en saisissant une valeur dans n\u2019importe quelle cellule de la nouvelle colonne, en commen\u00e7ant par le signe \u00e9gal (\u201c=\u201d). Entrez la formule comme $Last_Name + \", \" + $First_Name . Vous pouvez utiliser une syntaxe similaire \u00e0 Excel pour le m\u00eame effet : CONCAT($Last_Name, \", \", $First_Name) . Dans Grist, une formule s\u2019applique toujours \u00e0 chaque enregistrement de la table. Grist prend en charge Python dans les formules, ainsi que la plupart des fonctions Excel, qui ont des noms en majuscules. Comme les formules s\u2019appliquent \u00e0 chaque ligne, vous devriez voir la colonne Nom Complet remplie automatiquement. R\u00e9f\u00e9rences # Cliquez \u00e0 nouveau sur la page \u201cCours\u201d et ouvrez \u201cOptions de colonne\u201d pour la colonne Instructeur . Nous allons la transformer en r\u00e9f\u00e9rence \u00e0 Personnel . Dans le panneau de droite, d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d (en termes de base de donn\u00e9es, cela est connu sous le nom de \u201ccl\u00e9 \u00e9trang\u00e8re\u201d), et d\u00e9finissez la table r\u00e9f\u00e9renc\u00e9e sur \u201cPersonnel\u201d. Pour le menu d\u00e9roulant \u201cAFFICHER LA COLONNE\u201d, s\u00e9lectionnez \u201cNom Complet\u201d, qui est la nouvelle colonne que nous venons d\u2019ajouter. Cliquez sur le bouton \u201cAppliquer\u201d pour finaliser ce changement de type de colonne (si la colonne est vide, il n\u2019y a pas d\u2019\u00e9tape de confirmation). Vous pouvez maintenant attribuer un instructeur \u00e0 n\u2019importe quel cours. Cliquez sur une cellule dans la colonne Instructeur . Vous pouvez appuyer sur Entr\u00e9e et choisir parmi les instructeurs disponibles dans la table Personnel , ou commencer \u00e0 taper pour utiliser l\u2019auto-compl\u00e9tion. Ensuite, nous allons continuer avec les \u00e9tudiants et leurs inscriptions. \u00c9tudiants # Chaque cours a un certain nombre d\u2019\u00e9tudiants. Nous aurons donc besoin d\u2019une table d\u2019\u00e9tudiants. Encore une fois, ajoutez une nouvelle table vide, renommez-la en \u201c\u00c9tudiants\u201d et remplissez-la avec les noms des \u00e9tudiants, les niveaux de classe, etc. Ou importez Students.csv pour utiliser des donn\u00e9es d\u2019exemple et gagner quelques \u00e9tapes. Ajoutons ici une colonne de formule \u201cNom Complet\u201d, tout comme dans la table Personnel . Cela sera utile. Relations plusieurs-\u00e0-plusieurs # Un \u00e9tudiant peut suivre plus d\u2019un cours. Rappelons \u00e9galement qu\u2019il y a des cours pass\u00e9s et futurs, et qu\u2019il est pr\u00e9cieux de conserver ces donn\u00e9es historiques. Donc, pour chaque \u00e9tudiant, il peut y avoir plusieurs cours, et dans chaque cours, il y a plusieurs \u00e9tudiants. Une bonne fa\u00e7on de mod\u00e9liser une telle relation est d\u2019ajouter le concept d\u2019une \u201cinscription\u201d et une nouvelle table Inscriptions . Une \u201cinscription\u201d repr\u00e9sente un \u00e9tudiant inscrit dans un cours. Elle a quelques propri\u00e9t\u00e9s utiles \u00e0 elle : le statut de l\u2019inscription (Confirm\u00e9, En attente ou Annul\u00e9), si l\u2019\u00e9tudiant a pay\u00e9 pour le cours, et peut-\u00eatre plus. Dans la conception de bases de donn\u00e9es, cela est connu sous le nom de relation \u201cplusieurs-\u00e0-plusieurs\u201d. La table suppl\u00e9mentaire est connue sous le nom de table de \u201cjointure\u201d. Essentiellement, elle ajoute un enregistrement pour chaque connexion \u00e9tudiant-cours, et transforme la relation \u201cplusieurs-\u00e0-plusieurs\u201d en deux relations \u201cun-\u00e0-plusieurs\u201d. Cette relation : deviendra ceci : Alors, ajoutons une nouvelle table, nommons-la \u201cInscriptions\u201d, et ajoutons les colonnes dont nous avons besoin. Ici aussi, pour suivre, vous pouvez importer des donn\u00e9es d\u2019exemple \u00e0 partir de Enrollments.csv . Dans les Options de colonne pour la colonne \u00c9tudiant , d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d, d\u00e9finissez la table r\u00e9f\u00e9renc\u00e9e sur \u00c9tudiants , et s\u00e9lectionnez \u201cNom Complet\u201d comme colonne \u00e0 afficher. Pour la colonne Cours , d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d, la table r\u00e9f\u00e9renc\u00e9e sur Cours , et s\u00e9lectionnez \u201cCode de Cours\u201d comme colonne \u00e0 afficher. Il est possible d\u2019entrer des donn\u00e9es d\u2019inscription en ajoutant des enregistrements \u00e0 cette table et en utilisant l\u2019auto-compl\u00e9tion dans les colonnes \u00c9tudiant et Cours . Ci-dessous, nous allons mettre en place un moyen beaucoup plus pratique d\u2019inscrire les \u00e9tudiants. Vue des Cours # Un de nos objectifs dans la phase de planification \u00e9tait de voir une liste des \u00e9tudiants inscrits pour chaque cours. Maintenant que les tables de donn\u00e9es sont en place, nous pouvons cr\u00e9er une page qui le fait. Cliquez sur \u201cAjouter Nouveau\u201d, puis \u201cAjouter Page\u201d pour ouvrir le s\u00e9lecteur de widget. S\u00e9lectionnez pour afficher une table de Cours , et cliquez sur \u201cAjouter Page\u201d. La nouvelle page affiche une liste de cours. Renommons cette page \u201cVue des Cours\u201d. Ensuite, ajoutez la table Inscriptions li\u00e9e \u00e0 la table des cours. Cliquez \u00e0 nouveau sur \u201cAjouter Nouveau\u201d, puis \u201cAjouter Widget \u00e0 la Page\u201d. Dans le s\u00e9lecteur de widget, s\u00e9lectionnez pour afficher une table de Inscriptions . Pour \u201cS\u00c9LECTIONNER PAR\u201d, choisissez \u201cCOURS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Nous avons deux tables c\u00f4te \u00e0 c\u00f4te. S\u00e9lectionner un cours affiche toutes les inscriptions dans ce cours, chacune d\u2019elles faisant r\u00e9f\u00e9rence \u00e0 un \u00e9tudiant particulier et incluant d\u2019autres informations d\u2019inscription. Nous pouvons aller un peu plus loin pour rendre cette vue pratique pour nous. Ajoutons une carte de Cours \u00e0 cette vue. Cliquez sur \u201cAjouter Nouveau\u201d et \u201cAjouter Widget \u00e0 la Page\u201d. Dans le s\u00e9lecteur de widget, s\u00e9lectionnez le widget \u201cCarte\u201d pour les donn\u00e9es Cours . Pour \u201cS\u00c9LECTIONNER PAR\u201d, choisissez \u00e0 nouveau \u201cCOURS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Nous pouvons \u00e9galement ajouter une carte pour l\u2019instructeur qui dirige ce cours. Encore une fois, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d, et s\u00e9lectionnez \u201cCarte\u201d pour les donn\u00e9es Personnel . Pour \u201cS\u00c9LECTIONNER PAR\u201d, vous pouvez maintenant choisir \u201cCOURS \u2022 Instructeur\u201d. Vous pouvez changer l\u2019apparence des nouvelles cartes. Cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la carte que vous souhaitez modifier, et choisissez \u201cOptions de Widget\u201d. Trouvez le menu d\u00e9roulant \u201cTh\u00e8me\u201d dans le panneau de droite, et s\u00e9lectionnez \u201cCompact\u201d. Voici ce que nous avons maintenant dans la page Vue des Cours : C\u2019est le bon moment pour nettoyer cette page en masquant les colonnes et les champs qui sont dupliqu\u00e9s ou distrayants. Consultez Configurer les listes de champs pour une m\u00e9thode efficace de s\u00e9lection des champs \u00e0 afficher, et Mises en page personnalis\u00e9es pour r\u00e9organiser les widgets sur la page. Vue des Inscriptions # Notre autre objectif d\u00e9clar\u00e9 \u00e9tait de disposer d\u2019un moyen pratique d\u2019inscrire un \u00e9tudiant et de voir ou d\u2019ajuster les inscriptions d\u2019un \u00e9tudiant donn\u00e9. Ajoutons une page pour cela. Cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Page\u201d, et s\u00e9lectionnez une table de \u00c9tudiants . Nous renommerons la nouvelle page en \u201cVue des Inscriptions\u201d. Lorsque nous s\u00e9lectionnons un \u00e9tudiant ici, nous aimerions voir toutes les inscriptions de cet \u00e9tudiant. Donc, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d, et ajoutez une table de Inscriptions . Pour lier le nouveau widget au widget \u00c9tudiants dans la page, d\u00e9finissez le menu d\u00e9roulant \u201cS\u00c9LECTIONNER PAR\u201d sur \u201c\u00c9TUDIANTS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Maintenant, vous pouvez cliquer sur le nom d\u2019un \u00e9tudiant \u00e0 gauche et voir les cours auxquels cet \u00e9tudiant est inscrit \u00e0 droite. Vous pouvez inscrire l\u2019\u00e9tudiant s\u00e9lectionn\u00e9 dans un cours en saisissant simplement un code de cours dans la ligne vide sp\u00e9ciale en bas de la liste des inscriptions. Comme d\u2019habitude, la colonne de r\u00e9f\u00e9rence Cours propose l\u2019auto-compl\u00e9tion. Vous pouvez masquer la colonne \u201c\u00c9tudiant\u201d dans la table \u201cINSCRIPTIONS\u201d, car elle affichera toujours l\u2019\u00e9tudiant s\u00e9lectionn\u00e9 de toute fa\u00e7on. Si vous souhaitez inclure plus d\u2019informations sur les cours dans la table Inscriptions, s\u00e9lectionnez les Options de colonne pour la colonne Cours , et cliquez sur \u201c+ Ajouter une colonne\u201d dans le panneau lat\u00e9ral. Tous les champs associ\u00e9s \u00e0 un cours sont disponibles. Si vous examinez les colonnes que vous ajoutez de cette mani\u00e8re, vous verrez qu\u2019elles sont simplement des formules de la forme $Class.Times . Ajout de Couches # Si vous travaillez avec des enfants, vous parlez \u00e0 leurs parents. Vous devrez avoir les noms et les coordonn\u00e9es des parents, que vous pouvez ajouter en tant que colonnes dans la table des \u00e9tudiants. Vous constaterez probablement que certains parents ont plusieurs enfants qui s\u2019inscrivent ensemble \u00e0 des cours. Reconna\u00eetre la relation parent-enfant dans votre base de donn\u00e9es peut sembler une \u00e9tape complexe, mais cela simplifiera probablement votre flux de travail quotidien. Alors, ajoutons une table de plus : Familles . Nous inclurons le nom et les coordonn\u00e9es des parents, et lierons chaque enfant \u00e0 un enregistrement ici. Vous pouvez importer des donn\u00e9es d\u2019exemple \u00e0 partir de Families.csv . Notez que nous avons ajout\u00e9 une colonne Nom Complet ici comme pour d\u2019autres tables qui listent des personnes. Dans la table des \u00c9tudiants, nous allons ajouter une colonne nomm\u00e9e \u201cFamille\u201d, et en faire une R\u00e9f\u00e9rence \u00e0 Familles . Les donn\u00e9es d\u2019exemple ont d\u00e9j\u00e0 des familles remplies, et la conversion en r\u00e9f\u00e9rence recherche le texte pour d\u00e9finir les r\u00e9f\u00e9rences correctes. Si vous saisissiez de nouvelles donn\u00e9es, vous pourriez lier les \u00e9tudiants aux familles en utilisant l\u2019auto-compl\u00e9tion comme avec d\u2019autres colonnes de r\u00e9f\u00e9rence. Changeons notre \u201cVue des Inscriptions\u201d pour lister les familles en premier. De cette fa\u00e7on, lorsque qu\u2019un parent appelle, vous pouvez choisir le bon enregistrement et voir tous leurs enfants et les inscriptions pour chaque enfant. Dans la page \u201cVue des Inscriptions\u201d, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d. S\u00e9lectionnez pour afficher une table de Familles . R\u00e9organisez les widgets pour avoir les Familles \u00e0 gauche, et les \u00c9tudiants et Inscriptions \u00e0 droite. Maintenant, liez les \u00e9tudiants aux Familles : cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la table \u00c9TUDIANTS, et choisissez \u201cS\u00e9lection de donn\u00e9es\u201d. Dans le panneau lat\u00e9ral, vous pouvez d\u00e9finir le widget \u201cS\u00c9LECTIONNER PAR\u201d sur \u201cFAMILLES\u201d. Enfin, vous pouvez ajouter des widgets de carte pour les d\u00e9tails de la famille s\u00e9lectionn\u00e9e et de l\u2019\u00e9tudiant s\u00e9lectionn\u00e9, et r\u00e9organiser les widgets sur la page pour cr\u00e9er une mise en page parfaite pour parler \u00e0 un parent. Vous s\u00e9lectionnez un parent, voyez leurs enfants, puis s\u00e9lectionnez un enfant pour voir ses inscriptions. Il est facile d\u2019ajouter un enregistrement d\u2019inscription pour un nouveau cours, ou de modifier un enregistrement (par exemple, le marquer comme \u201cannul\u00e9\u201d), d\u2019ajouter un autre enfant ou d\u2019ajouter une nouvelle famille. Document Exemple # Le document exemple \u201cProgramme p\u00e9riscolaire\u201d comprend tout ce qui est d\u00e9crit ci-dessus et un peu plus. En particulier, il ajoute un champ Nombre aux Cours pour calculer le nombre d\u2019\u00e9tudiants inscrits, et un champ Places Disponibles pour montrer le nombre de places restantes, en comparant Nombre \u00e0 Max_Students : La formule pour Nombre est len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) . La formule pour Places Disponibles est max($Max_Students - $Count, 0) or \"Complet\" . Cela rend la page Vue des Cours plus utile, o\u00f9 il est maintenant facile de voir d\u2019un coup d\u2019\u0153il quels cours ont des places restantes.","title":"Manage business data"},{"location":"afterschool-program/#comment-gerer-les-donnees-commerciales","text":"Grist brille lorsque vos donn\u00e9es commerciales pr\u00e9sentent une certaine complexit\u00e9. Dans cet exemple, nous allons examiner une organisation qui propose des activit\u00e9s p\u00e9riscolaires pour les enfants. N\u2019h\u00e9sitez pas \u00e0 consulter le document Inscription en classe , que vous trouverez sur notre page Exemples et mod\u00e8les . Dans cet exercice, nous allons montrer comment planifier, concevoir et cr\u00e9er un tel document.","title":"Intro"},{"location":"afterschool-program/#planification","text":"Un peu de planification \u00e0 l\u2019avance vous aidera \u00e0 obtenir une solution plus rapidement. Pensez aux types de donn\u00e9es avec lesquels vous travaillez et aux types de flux de travail dont vous aurez besoin. Vous n\u2019avez pas besoin d\u2019anticiper tout d\u00e8s le d\u00e9part. Vous pouvez facilement ajouter de la complexit\u00e9 plus tard, comme vous le verrez ci-dessous. Notre organisation propose plusieurs cours pour les enfants. Chaque cours a un instructeur et plusieurs \u00e9tudiants. Les \u00e9tudiants peuvent s\u2019inscrire \u00e0 plusieurs cours et peuvent revenir ann\u00e9e apr\u00e8s ann\u00e9e. Pour chaque cours, nous souhaitons voir la liste des \u00e9tudiants inscrits et s\u2019il reste des places disponibles. Lorsque qu\u2019un parent appelle, nous voulons un moyen pratique d\u2019inscrire un nouvel \u00e9tudiant ou de modifier ou annuler l\u2019inscription d\u2019un \u00e9tudiant. Si cela ressemble \u00e0 la construction d\u2019une application, c\u2019est exactement ce que nous faisons. Cependant, comme vous le verrez, ce n\u2019est pas plus difficile que de cr\u00e9er une feuille de calcul.","title":"Planification"},{"location":"afterschool-program/#modelisation-des-donnees","text":"Plus vous mod\u00e9lisez bien vos donn\u00e9es commerciales, plus votre travail sera facile. D\u2019une certaine mani\u00e8re, vous faites \u00e0 la fois la conception de base de donn\u00e9es et la construction d\u2019une application personnalis\u00e9e. Grist rend simplement cela plus facile. Commen\u00e7ons par les cours et leurs instructeurs. Nous avons besoin d\u2019une liste de cours et d\u2019instructeurs. Le m\u00eame instructeur peut enseigner diff\u00e9rents cours, donc les instructeurs et les cours vivront dans des tables diff\u00e9rentes. Appelons-les \u201cCours\u201d et \u201cPersonnel\u201d. Chaque cours a un seul instructeur, donc l\u2019une des propri\u00e9t\u00e9s d\u2019un cours sera l\u2019instructeur de ce cours.","title":"Mod\u00e9lisation des donn\u00e9es"},{"location":"afterschool-program/#cours-et-instructeurs","text":"En partant de z\u00e9ro, vous allez cr\u00e9er un nouveau document vide (voir Cr\u00e9er un document ), renommer la table vide initiale \u201cTable1\u201d en \u201cCours\u201d, ajouter les colonnes n\u00e9cessaires et saisir quelques cours. Pour suivre les \u00e9tapes de ce tutoriel, vous pouvez plut\u00f4t importer Classes.csv (ou simplement vous r\u00e9f\u00e9rer au document exemple \u201cProgramme p\u00e9riscolaire\u201d). Pour la table Personnel, cliquez sur le bouton \u201cAjouter nouveau\u201d et s\u00e9lectionnez \u201cAjouter une table vide\u201d. Renommez-la en \u201cPersonnel\u201d, cr\u00e9ez quelques colonnes et saisissez des donn\u00e9es sur les instructeurs. Ou importez Staff.csv pour utiliser des donn\u00e9es d\u2019exemple et gagner quelques \u00e9tapes. Nous voulons que la colonne Instructeur dans la table Cours soit une r\u00e9f\u00e9rence \u00e0 la table Personnel . Actuellement, la table Personnel n\u2019a pas de colonne qui identifie de mani\u00e8re unique chaque enregistrement. Pour configurer des r\u00e9f\u00e9rences, il est judicieux d\u2019en ajouter une. Dans ce cas, nous allons ajouter une colonne \u201cNom Complet\u201d \u00e0 la table Personnel .","title":"Cours et Instructeurs"},{"location":"afterschool-program/#formules","text":"Cliquez sur la page \u201cPersonnel\u201d et ajoutez une colonne \u201cNom Complet\u201d en utilisant le menu des colonnes ou le raccourci Alt + = , puis tapez \u201cNom Complet\u201d dans l\u2019en-t\u00eate de la nouvelle colonne. Cr\u00e9ez une formule en saisissant une valeur dans n\u2019importe quelle cellule de la nouvelle colonne, en commen\u00e7ant par le signe \u00e9gal (\u201c=\u201d). Entrez la formule comme $Last_Name + \", \" + $First_Name . Vous pouvez utiliser une syntaxe similaire \u00e0 Excel pour le m\u00eame effet : CONCAT($Last_Name, \", \", $First_Name) . Dans Grist, une formule s\u2019applique toujours \u00e0 chaque enregistrement de la table. Grist prend en charge Python dans les formules, ainsi que la plupart des fonctions Excel, qui ont des noms en majuscules. Comme les formules s\u2019appliquent \u00e0 chaque ligne, vous devriez voir la colonne Nom Complet remplie automatiquement.","title":"Formules"},{"location":"afterschool-program/#references","text":"Cliquez \u00e0 nouveau sur la page \u201cCours\u201d et ouvrez \u201cOptions de colonne\u201d pour la colonne Instructeur . Nous allons la transformer en r\u00e9f\u00e9rence \u00e0 Personnel . Dans le panneau de droite, d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d (en termes de base de donn\u00e9es, cela est connu sous le nom de \u201ccl\u00e9 \u00e9trang\u00e8re\u201d), et d\u00e9finissez la table r\u00e9f\u00e9renc\u00e9e sur \u201cPersonnel\u201d. Pour le menu d\u00e9roulant \u201cAFFICHER LA COLONNE\u201d, s\u00e9lectionnez \u201cNom Complet\u201d, qui est la nouvelle colonne que nous venons d\u2019ajouter. Cliquez sur le bouton \u201cAppliquer\u201d pour finaliser ce changement de type de colonne (si la colonne est vide, il n\u2019y a pas d\u2019\u00e9tape de confirmation). Vous pouvez maintenant attribuer un instructeur \u00e0 n\u2019importe quel cours. Cliquez sur une cellule dans la colonne Instructeur . Vous pouvez appuyer sur Entr\u00e9e et choisir parmi les instructeurs disponibles dans la table Personnel , ou commencer \u00e0 taper pour utiliser l\u2019auto-compl\u00e9tion. Ensuite, nous allons continuer avec les \u00e9tudiants et leurs inscriptions.","title":"R\u00e9f\u00e9rences"},{"location":"afterschool-program/#etudiants","text":"Chaque cours a un certain nombre d\u2019\u00e9tudiants. Nous aurons donc besoin d\u2019une table d\u2019\u00e9tudiants. Encore une fois, ajoutez une nouvelle table vide, renommez-la en \u201c\u00c9tudiants\u201d et remplissez-la avec les noms des \u00e9tudiants, les niveaux de classe, etc. Ou importez Students.csv pour utiliser des donn\u00e9es d\u2019exemple et gagner quelques \u00e9tapes. Ajoutons ici une colonne de formule \u201cNom Complet\u201d, tout comme dans la table Personnel . Cela sera utile.","title":"\u00c9tudiants"},{"location":"afterschool-program/#relations-plusieurs-a-plusieurs","text":"Un \u00e9tudiant peut suivre plus d\u2019un cours. Rappelons \u00e9galement qu\u2019il y a des cours pass\u00e9s et futurs, et qu\u2019il est pr\u00e9cieux de conserver ces donn\u00e9es historiques. Donc, pour chaque \u00e9tudiant, il peut y avoir plusieurs cours, et dans chaque cours, il y a plusieurs \u00e9tudiants. Une bonne fa\u00e7on de mod\u00e9liser une telle relation est d\u2019ajouter le concept d\u2019une \u201cinscription\u201d et une nouvelle table Inscriptions . Une \u201cinscription\u201d repr\u00e9sente un \u00e9tudiant inscrit dans un cours. Elle a quelques propri\u00e9t\u00e9s utiles \u00e0 elle : le statut de l\u2019inscription (Confirm\u00e9, En attente ou Annul\u00e9), si l\u2019\u00e9tudiant a pay\u00e9 pour le cours, et peut-\u00eatre plus. Dans la conception de bases de donn\u00e9es, cela est connu sous le nom de relation \u201cplusieurs-\u00e0-plusieurs\u201d. La table suppl\u00e9mentaire est connue sous le nom de table de \u201cjointure\u201d. Essentiellement, elle ajoute un enregistrement pour chaque connexion \u00e9tudiant-cours, et transforme la relation \u201cplusieurs-\u00e0-plusieurs\u201d en deux relations \u201cun-\u00e0-plusieurs\u201d. Cette relation : deviendra ceci : Alors, ajoutons une nouvelle table, nommons-la \u201cInscriptions\u201d, et ajoutons les colonnes dont nous avons besoin. Ici aussi, pour suivre, vous pouvez importer des donn\u00e9es d\u2019exemple \u00e0 partir de Enrollments.csv . Dans les Options de colonne pour la colonne \u00c9tudiant , d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d, d\u00e9finissez la table r\u00e9f\u00e9renc\u00e9e sur \u00c9tudiants , et s\u00e9lectionnez \u201cNom Complet\u201d comme colonne \u00e0 afficher. Pour la colonne Cours , d\u00e9finissez le type de colonne sur \u201cR\u00e9f\u00e9rence\u201d, la table r\u00e9f\u00e9renc\u00e9e sur Cours , et s\u00e9lectionnez \u201cCode de Cours\u201d comme colonne \u00e0 afficher. Il est possible d\u2019entrer des donn\u00e9es d\u2019inscription en ajoutant des enregistrements \u00e0 cette table et en utilisant l\u2019auto-compl\u00e9tion dans les colonnes \u00c9tudiant et Cours . Ci-dessous, nous allons mettre en place un moyen beaucoup plus pratique d\u2019inscrire les \u00e9tudiants.","title":"Relations plusieurs-\u00e0-plusieurs"},{"location":"afterschool-program/#vue-des-cours","text":"Un de nos objectifs dans la phase de planification \u00e9tait de voir une liste des \u00e9tudiants inscrits pour chaque cours. Maintenant que les tables de donn\u00e9es sont en place, nous pouvons cr\u00e9er une page qui le fait. Cliquez sur \u201cAjouter Nouveau\u201d, puis \u201cAjouter Page\u201d pour ouvrir le s\u00e9lecteur de widget. S\u00e9lectionnez pour afficher une table de Cours , et cliquez sur \u201cAjouter Page\u201d. La nouvelle page affiche une liste de cours. Renommons cette page \u201cVue des Cours\u201d. Ensuite, ajoutez la table Inscriptions li\u00e9e \u00e0 la table des cours. Cliquez \u00e0 nouveau sur \u201cAjouter Nouveau\u201d, puis \u201cAjouter Widget \u00e0 la Page\u201d. Dans le s\u00e9lecteur de widget, s\u00e9lectionnez pour afficher une table de Inscriptions . Pour \u201cS\u00c9LECTIONNER PAR\u201d, choisissez \u201cCOURS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Nous avons deux tables c\u00f4te \u00e0 c\u00f4te. S\u00e9lectionner un cours affiche toutes les inscriptions dans ce cours, chacune d\u2019elles faisant r\u00e9f\u00e9rence \u00e0 un \u00e9tudiant particulier et incluant d\u2019autres informations d\u2019inscription. Nous pouvons aller un peu plus loin pour rendre cette vue pratique pour nous. Ajoutons une carte de Cours \u00e0 cette vue. Cliquez sur \u201cAjouter Nouveau\u201d et \u201cAjouter Widget \u00e0 la Page\u201d. Dans le s\u00e9lecteur de widget, s\u00e9lectionnez le widget \u201cCarte\u201d pour les donn\u00e9es Cours . Pour \u201cS\u00c9LECTIONNER PAR\u201d, choisissez \u00e0 nouveau \u201cCOURS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Nous pouvons \u00e9galement ajouter une carte pour l\u2019instructeur qui dirige ce cours. Encore une fois, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d, et s\u00e9lectionnez \u201cCarte\u201d pour les donn\u00e9es Personnel . Pour \u201cS\u00c9LECTIONNER PAR\u201d, vous pouvez maintenant choisir \u201cCOURS \u2022 Instructeur\u201d. Vous pouvez changer l\u2019apparence des nouvelles cartes. Cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la carte que vous souhaitez modifier, et choisissez \u201cOptions de Widget\u201d. Trouvez le menu d\u00e9roulant \u201cTh\u00e8me\u201d dans le panneau de droite, et s\u00e9lectionnez \u201cCompact\u201d. Voici ce que nous avons maintenant dans la page Vue des Cours : C\u2019est le bon moment pour nettoyer cette page en masquant les colonnes et les champs qui sont dupliqu\u00e9s ou distrayants. Consultez Configurer les listes de champs pour une m\u00e9thode efficace de s\u00e9lection des champs \u00e0 afficher, et Mises en page personnalis\u00e9es pour r\u00e9organiser les widgets sur la page.","title":"Vue des Cours"},{"location":"afterschool-program/#vue-des-inscriptions","text":"Notre autre objectif d\u00e9clar\u00e9 \u00e9tait de disposer d\u2019un moyen pratique d\u2019inscrire un \u00e9tudiant et de voir ou d\u2019ajuster les inscriptions d\u2019un \u00e9tudiant donn\u00e9. Ajoutons une page pour cela. Cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Page\u201d, et s\u00e9lectionnez une table de \u00c9tudiants . Nous renommerons la nouvelle page en \u201cVue des Inscriptions\u201d. Lorsque nous s\u00e9lectionnons un \u00e9tudiant ici, nous aimerions voir toutes les inscriptions de cet \u00e9tudiant. Donc, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d, et ajoutez une table de Inscriptions . Pour lier le nouveau widget au widget \u00c9tudiants dans la page, d\u00e9finissez le menu d\u00e9roulant \u201cS\u00c9LECTIONNER PAR\u201d sur \u201c\u00c9TUDIANTS\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Maintenant, vous pouvez cliquer sur le nom d\u2019un \u00e9tudiant \u00e0 gauche et voir les cours auxquels cet \u00e9tudiant est inscrit \u00e0 droite. Vous pouvez inscrire l\u2019\u00e9tudiant s\u00e9lectionn\u00e9 dans un cours en saisissant simplement un code de cours dans la ligne vide sp\u00e9ciale en bas de la liste des inscriptions. Comme d\u2019habitude, la colonne de r\u00e9f\u00e9rence Cours propose l\u2019auto-compl\u00e9tion. Vous pouvez masquer la colonne \u201c\u00c9tudiant\u201d dans la table \u201cINSCRIPTIONS\u201d, car elle affichera toujours l\u2019\u00e9tudiant s\u00e9lectionn\u00e9 de toute fa\u00e7on. Si vous souhaitez inclure plus d\u2019informations sur les cours dans la table Inscriptions, s\u00e9lectionnez les Options de colonne pour la colonne Cours , et cliquez sur \u201c+ Ajouter une colonne\u201d dans le panneau lat\u00e9ral. Tous les champs associ\u00e9s \u00e0 un cours sont disponibles. Si vous examinez les colonnes que vous ajoutez de cette mani\u00e8re, vous verrez qu\u2019elles sont simplement des formules de la forme $Class.Times .","title":"Vue des Inscriptions"},{"location":"afterschool-program/#ajout-de-couches","text":"Si vous travaillez avec des enfants, vous parlez \u00e0 leurs parents. Vous devrez avoir les noms et les coordonn\u00e9es des parents, que vous pouvez ajouter en tant que colonnes dans la table des \u00e9tudiants. Vous constaterez probablement que certains parents ont plusieurs enfants qui s\u2019inscrivent ensemble \u00e0 des cours. Reconna\u00eetre la relation parent-enfant dans votre base de donn\u00e9es peut sembler une \u00e9tape complexe, mais cela simplifiera probablement votre flux de travail quotidien. Alors, ajoutons une table de plus : Familles . Nous inclurons le nom et les coordonn\u00e9es des parents, et lierons chaque enfant \u00e0 un enregistrement ici. Vous pouvez importer des donn\u00e9es d\u2019exemple \u00e0 partir de Families.csv . Notez que nous avons ajout\u00e9 une colonne Nom Complet ici comme pour d\u2019autres tables qui listent des personnes. Dans la table des \u00c9tudiants, nous allons ajouter une colonne nomm\u00e9e \u201cFamille\u201d, et en faire une R\u00e9f\u00e9rence \u00e0 Familles . Les donn\u00e9es d\u2019exemple ont d\u00e9j\u00e0 des familles remplies, et la conversion en r\u00e9f\u00e9rence recherche le texte pour d\u00e9finir les r\u00e9f\u00e9rences correctes. Si vous saisissiez de nouvelles donn\u00e9es, vous pourriez lier les \u00e9tudiants aux familles en utilisant l\u2019auto-compl\u00e9tion comme avec d\u2019autres colonnes de r\u00e9f\u00e9rence. Changeons notre \u201cVue des Inscriptions\u201d pour lister les familles en premier. De cette fa\u00e7on, lorsque qu\u2019un parent appelle, vous pouvez choisir le bon enregistrement et voir tous leurs enfants et les inscriptions pour chaque enfant. Dans la page \u201cVue des Inscriptions\u201d, cliquez sur \u201cAjouter Nouveau\u201d > \u201cAjouter Widget \u00e0 la Page\u201d. S\u00e9lectionnez pour afficher une table de Familles . R\u00e9organisez les widgets pour avoir les Familles \u00e0 gauche, et les \u00c9tudiants et Inscriptions \u00e0 droite. Maintenant, liez les \u00e9tudiants aux Familles : cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la table \u00c9TUDIANTS, et choisissez \u201cS\u00e9lection de donn\u00e9es\u201d. Dans le panneau lat\u00e9ral, vous pouvez d\u00e9finir le widget \u201cS\u00c9LECTIONNER PAR\u201d sur \u201cFAMILLES\u201d. Enfin, vous pouvez ajouter des widgets de carte pour les d\u00e9tails de la famille s\u00e9lectionn\u00e9e et de l\u2019\u00e9tudiant s\u00e9lectionn\u00e9, et r\u00e9organiser les widgets sur la page pour cr\u00e9er une mise en page parfaite pour parler \u00e0 un parent. Vous s\u00e9lectionnez un parent, voyez leurs enfants, puis s\u00e9lectionnez un enfant pour voir ses inscriptions. Il est facile d\u2019ajouter un enregistrement d\u2019inscription pour un nouveau cours, ou de modifier un enregistrement (par exemple, le marquer comme \u201cannul\u00e9\u201d), d\u2019ajouter un autre enfant ou d\u2019ajouter une nouvelle famille.","title":"Ajout de Couches"},{"location":"afterschool-program/#document-exemple","text":"Le document exemple \u201cProgramme p\u00e9riscolaire\u201d comprend tout ce qui est d\u00e9crit ci-dessus et un peu plus. En particulier, il ajoute un champ Nombre aux Cours pour calculer le nombre d\u2019\u00e9tudiants inscrits, et un champ Places Disponibles pour montrer le nombre de places restantes, en comparant Nombre \u00e0 Max_Students : La formule pour Nombre est len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) . La formule pour Places Disponibles est max($Max_Students - $Count, 0) or \"Complet\" . Cela rend la page Vue des Cours plus utile, o\u00f9 il est maintenant facile de voir d\u2019un coup d\u2019\u0153il quels cours ont des places restantes.","title":"Document Exemple"},{"location":"ai-assistant/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Assistant de Formule AI # L\u2019Assistant de Formule AI de Grist simplifie la partie la plus difficile des feuilles de calcul \u2014 les formules. L\u2019assistant ne fait qu\u2019une seule chose, \u00e9crire des formules en r\u00e9ponse \u00e0 des requ\u00eates en langage clair. Lorsque vous posez une question \u00e0 l\u2019assistant, il n\u2019est pas n\u00e9cessaire de sp\u00e9cifier les IDs des colonnes ou d\u2019expliquer la structure de vos donn\u00e9es. Lorsque vous soumettez une question \u00e0 l\u2019assistant, Grist envoie votre question et le sch\u00e9ma de vos donn\u00e9es (en partie ou en totalit\u00e9) \u00e0 OpenAI afin que l\u2019assistant puisse mieux comprendre votre document. Vous pouvez consulter le sch\u00e9ma de vos donn\u00e9es dans la vue code. Aucune donn\u00e9e n\u2019est partag\u00e9e avec OpenAI \u00e0 moins qu\u2019un utilisateur ne soumette une question \u00e0 l\u2019assistant. En savoir plus sur l\u2019utilisation des donn\u00e9es . Comment Utiliser l\u2019Assistant AI # Cr\u00e9ez une colonne de formule et cliquez soit sur l\u2019ic\u00f4ne d\u2019agrandissement, soit sur le lien texte \u201cutiliser l\u2019Assistant AI\u201d dans la cellule. Cela ouvrira un \u00e9diteur de formule \u00e9tendu avec le chat de l\u2019Assistant AI en dessous. D\u00e9crivez simplement ce que vous voulez que la formule fasse. Voici quelques conseils. Lorsque vous appliquez une formule sugg\u00e9r\u00e9e, vous verrez la formule pr\u00e9visualis\u00e9e dans la colonne. Si vous \u00eates satisfait de la formule, cliquez sur \u201cEnregistrer\u201d. Sinon, cliquez sur \u201cAnnuler\u201d pour annuler les modifications apport\u00e9es \u00e0 la formule. Assistant AI pour les Auto-h\u00e9bergeurs # Pour les auto-h\u00e9bergeurs souhaitant connecter leur instance Grist, d\u00e9finissez les variables d\u2019environnement li\u00e9es \u00e0 l\u2019Assistant AI . Les variables ci-dessus permettent \u00e9galement l\u2019utilisation de la famille de mod\u00e8les auto-h\u00e9bergeables LLaMA via llama2-cpp-python . En savoir plus sur la gestion autonome de Grist . Tarification de l\u2019Assistant AI # Les plans personnels gratuits et les plans d\u2019\u00e9quipe gratuits disposent de 100 cr\u00e9dits d\u2019Assistant AI (ou requ\u00eates). Pour les espaces d\u2019\u00e9quipe gratuits, cela s\u2019applique \u00e0 toute l\u2019\u00e9quipe. Les plans Pro incluent 100 cr\u00e9dits d\u2019Assistant AI par mois. Les cr\u00e9dits se rechargent automatiquement \u00e0 100 \u00e0 chaque cycle de facturation. Les cr\u00e9dits s\u2019appliquent \u00e0 toute l\u2019\u00e9quipe. Chaque message de chat envoy\u00e9 co\u00fbte un cr\u00e9dit. Si vous avez besoin de plus de cr\u00e9dits, il existe deux options de mise \u00e0 niveau : 500 cr\u00e9dits mensuels pour 10 $ par mois (par \u00e9quipe, non par personne) 2 000 cr\u00e9dits mensuels pour 29 $ par mois (par \u00e9quipe, non par personne) Bonnes Pratiques # Il est utile de comprendre comment les formules fonctionnent dans Grist, surtout par rapport aux feuilles de calcul traditionnelles. Dans Grist, une seule formule s\u2019applique \u00e0 toute une colonne. Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec des feuilles de calcul, vous pourriez \u00eatre surpris de ne pas avoir \u00e0 sp\u00e9cifier les num\u00e9ros de ligne, comme B1 * C1 . Si vous \u00eates nouveau sur Grist, vous pourriez essayer quelque chose de simple sans l\u2019assistant pour voir comment les formules se comportent, par exemple $Prix * $Taxe . D\u00e9finir un en-t\u00eate de colonne avant de soumettre une question am\u00e9liore les r\u00e9sultats. Par exemple, \u201cB\u00e9n\u00e9fice Net\u201d fournit plus de contexte qu\u2019une colonne \u00e9tiquet\u00e9e \u201cD\u201d. D\u00e9finissez le type de colonne de la colonne de formule avant de demander de l\u2019aide \u00e0 l\u2019assistant. Cela aide l\u2019assistant \u00e0 deviner quel type de valeurs vous souhaitez obtenir. Pensez au type de valeur que vous vous attendez \u00e0 voir dans la formule, et formulez la question en cons\u00e9quence. Par exemple, si vous voulez une formule qui renvoie Vrai ou Faux dans une colonne de bascule , posez une question oui-ou-non. Sinon, l\u2019assistant pourrait sugg\u00e9rer une formule qui liste toutes les lignes o\u00f9 quelque chose est vrai (et est techniquement correct), mais vous esp\u00e9riez une simple valeur vraie ou fausse par ligne. L\u2019assistant est conversationnel. Si vous n\u2019\u00eates pas satisfait d\u2019une formule sugg\u00e9r\u00e9e, expliquez \u00e0 l\u2019assistant o\u00f9 la formule a \u00e9chou\u00e9 et demandez-lui de faire un changement. Parfois, l\u2019assistant s\u2019ent\u00eate sur une mauvaise id\u00e9e. S\u2019il insiste sur une m\u00e9thode de formule particuli\u00e8re, envisagez de supprimer la conversation et de recommencer. Cliquez sur le menu \u00e0 trois points dans l\u2019en-t\u00eate de l\u2019Assistant AI pour effacer une conversation. Rappelez-vous que les formules Grist s\u2019appliquent \u00e0 toute la colonne. Si vous voulez des sommes de lignes, vous avez besoin d\u2019une table de r\u00e9sum\u00e9 . Vous pouvez ajouter plus de formules aux tables de r\u00e9sum\u00e9 et demander \u00e0 l\u2019assistant de vous aider. Politique d\u2019Utilisation des Donn\u00e9es # Votre requ\u00eate et le sch\u00e9ma de votre document sont envoy\u00e9s \u00e0 OpenAI . L\u2019Assistant de Formule AI de Grist utilise le mod\u00e8le gpt-3.5-turbo, alias ChatGPT. La Politique de Confidentialit\u00e9 d\u2019OpenAI d\u00e9crit comment OpenAI g\u00e8re vos donn\u00e9es. La Politique de Contenu , les Politiques d\u2019Utilisation et la Politique de Partage et de Publication d\u2019OpenAI d\u00e9crivent comment l\u2019Assistant AI de Grist et ses r\u00e9sultats peuvent \u00eatre utilis\u00e9s et partag\u00e9s. Ceux qui violent les politiques d\u2019OpenAI peuvent perdre l\u2019acc\u00e8s \u00e0 l\u2019assistant AI de Grist. Certains employ\u00e9s de Grist Labs peuvent \u00e9galement examiner les journaux des requ\u00eates de l\u2019assistant (questions et sch\u00e9ma de document) pour comprendre ce qui fonctionne et ce qui ne fonctionne pas, afin de fournir un meilleur service.","title":"AI Formula Assistant"},{"location":"ai-assistant/#assistant-de-formule-ai","text":"L\u2019Assistant de Formule AI de Grist simplifie la partie la plus difficile des feuilles de calcul \u2014 les formules. L\u2019assistant ne fait qu\u2019une seule chose, \u00e9crire des formules en r\u00e9ponse \u00e0 des requ\u00eates en langage clair. Lorsque vous posez une question \u00e0 l\u2019assistant, il n\u2019est pas n\u00e9cessaire de sp\u00e9cifier les IDs des colonnes ou d\u2019expliquer la structure de vos donn\u00e9es. Lorsque vous soumettez une question \u00e0 l\u2019assistant, Grist envoie votre question et le sch\u00e9ma de vos donn\u00e9es (en partie ou en totalit\u00e9) \u00e0 OpenAI afin que l\u2019assistant puisse mieux comprendre votre document. Vous pouvez consulter le sch\u00e9ma de vos donn\u00e9es dans la vue code. Aucune donn\u00e9e n\u2019est partag\u00e9e avec OpenAI \u00e0 moins qu\u2019un utilisateur ne soumette une question \u00e0 l\u2019assistant. En savoir plus sur l\u2019utilisation des donn\u00e9es .","title":"Assistant de Formule AI"},{"location":"ai-assistant/#comment-utiliser-lassistant-ai","text":"Cr\u00e9ez une colonne de formule et cliquez soit sur l\u2019ic\u00f4ne d\u2019agrandissement, soit sur le lien texte \u201cutiliser l\u2019Assistant AI\u201d dans la cellule. Cela ouvrira un \u00e9diteur de formule \u00e9tendu avec le chat de l\u2019Assistant AI en dessous. D\u00e9crivez simplement ce que vous voulez que la formule fasse. Voici quelques conseils. Lorsque vous appliquez une formule sugg\u00e9r\u00e9e, vous verrez la formule pr\u00e9visualis\u00e9e dans la colonne. Si vous \u00eates satisfait de la formule, cliquez sur \u201cEnregistrer\u201d. Sinon, cliquez sur \u201cAnnuler\u201d pour annuler les modifications apport\u00e9es \u00e0 la formule.","title":"Comment Utiliser l’Assistant AI"},{"location":"ai-assistant/#assistant-ai-pour-les-auto-hebergeurs","text":"Pour les auto-h\u00e9bergeurs souhaitant connecter leur instance Grist, d\u00e9finissez les variables d\u2019environnement li\u00e9es \u00e0 l\u2019Assistant AI . Les variables ci-dessus permettent \u00e9galement l\u2019utilisation de la famille de mod\u00e8les auto-h\u00e9bergeables LLaMA via llama2-cpp-python . En savoir plus sur la gestion autonome de Grist .","title":"Assistant AI pour les Auto-h\u00e9bergeurs"},{"location":"ai-assistant/#tarification-de-lassistant-ai","text":"Les plans personnels gratuits et les plans d\u2019\u00e9quipe gratuits disposent de 100 cr\u00e9dits d\u2019Assistant AI (ou requ\u00eates). Pour les espaces d\u2019\u00e9quipe gratuits, cela s\u2019applique \u00e0 toute l\u2019\u00e9quipe. Les plans Pro incluent 100 cr\u00e9dits d\u2019Assistant AI par mois. Les cr\u00e9dits se rechargent automatiquement \u00e0 100 \u00e0 chaque cycle de facturation. Les cr\u00e9dits s\u2019appliquent \u00e0 toute l\u2019\u00e9quipe. Chaque message de chat envoy\u00e9 co\u00fbte un cr\u00e9dit. Si vous avez besoin de plus de cr\u00e9dits, il existe deux options de mise \u00e0 niveau : 500 cr\u00e9dits mensuels pour 10 $ par mois (par \u00e9quipe, non par personne) 2 000 cr\u00e9dits mensuels pour 29 $ par mois (par \u00e9quipe, non par personne)","title":"Tarification de l’Assistant AI"},{"location":"ai-assistant/#bonnes-pratiques","text":"Il est utile de comprendre comment les formules fonctionnent dans Grist, surtout par rapport aux feuilles de calcul traditionnelles. Dans Grist, une seule formule s\u2019applique \u00e0 toute une colonne. Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec des feuilles de calcul, vous pourriez \u00eatre surpris de ne pas avoir \u00e0 sp\u00e9cifier les num\u00e9ros de ligne, comme B1 * C1 . Si vous \u00eates nouveau sur Grist, vous pourriez essayer quelque chose de simple sans l\u2019assistant pour voir comment les formules se comportent, par exemple $Prix * $Taxe . D\u00e9finir un en-t\u00eate de colonne avant de soumettre une question am\u00e9liore les r\u00e9sultats. Par exemple, \u201cB\u00e9n\u00e9fice Net\u201d fournit plus de contexte qu\u2019une colonne \u00e9tiquet\u00e9e \u201cD\u201d. D\u00e9finissez le type de colonne de la colonne de formule avant de demander de l\u2019aide \u00e0 l\u2019assistant. Cela aide l\u2019assistant \u00e0 deviner quel type de valeurs vous souhaitez obtenir. Pensez au type de valeur que vous vous attendez \u00e0 voir dans la formule, et formulez la question en cons\u00e9quence. Par exemple, si vous voulez une formule qui renvoie Vrai ou Faux dans une colonne de bascule , posez une question oui-ou-non. Sinon, l\u2019assistant pourrait sugg\u00e9rer une formule qui liste toutes les lignes o\u00f9 quelque chose est vrai (et est techniquement correct), mais vous esp\u00e9riez une simple valeur vraie ou fausse par ligne. L\u2019assistant est conversationnel. Si vous n\u2019\u00eates pas satisfait d\u2019une formule sugg\u00e9r\u00e9e, expliquez \u00e0 l\u2019assistant o\u00f9 la formule a \u00e9chou\u00e9 et demandez-lui de faire un changement. Parfois, l\u2019assistant s\u2019ent\u00eate sur une mauvaise id\u00e9e. S\u2019il insiste sur une m\u00e9thode de formule particuli\u00e8re, envisagez de supprimer la conversation et de recommencer. Cliquez sur le menu \u00e0 trois points dans l\u2019en-t\u00eate de l\u2019Assistant AI pour effacer une conversation. Rappelez-vous que les formules Grist s\u2019appliquent \u00e0 toute la colonne. Si vous voulez des sommes de lignes, vous avez besoin d\u2019une table de r\u00e9sum\u00e9 . Vous pouvez ajouter plus de formules aux tables de r\u00e9sum\u00e9 et demander \u00e0 l\u2019assistant de vous aider.","title":"Bonnes Pratiques"},{"location":"ai-assistant/#politique-dutilisation-des-donnees","text":"Votre requ\u00eate et le sch\u00e9ma de votre document sont envoy\u00e9s \u00e0 OpenAI . L\u2019Assistant de Formule AI de Grist utilise le mod\u00e8le gpt-3.5-turbo, alias ChatGPT. La Politique de Confidentialit\u00e9 d\u2019OpenAI d\u00e9crit comment OpenAI g\u00e8re vos donn\u00e9es. La Politique de Contenu , les Politiques d\u2019Utilisation et la Politique de Partage et de Publication d\u2019OpenAI d\u00e9crivent comment l\u2019Assistant AI de Grist et ses r\u00e9sultats peuvent \u00eatre utilis\u00e9s et partag\u00e9s. Ceux qui violent les politiques d\u2019OpenAI peuvent perdre l\u2019acc\u00e8s \u00e0 l\u2019assistant AI de Grist. Certains employ\u00e9s de Grist Labs peuvent \u00e9galement examiner les journaux des requ\u00eates de l\u2019assistant (questions et sch\u00e9ma de document) pour comprendre ce qui fonctionne et ce qui ne fonctionne pas, afin de fournir un meilleur service.","title":"Politique d’Utilisation des Donn\u00e9es"},{"location":"authorship/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Colonnes d\u2019auteur # Parfois, il est utile d\u2019avoir des colonnes qui enregistrent qui a cr\u00e9\u00e9 des enregistrements individuels et qui les a mis \u00e0 jour en dernier. Grist vous permet de cr\u00e9er facilement de telles colonnes. Il suit \u00e9galement automatiquement les modifications du document dans l\u2019onglet Activit\u00e9 de l\u2019Historique du document, mais il est n\u00e9anmoins pratique d\u2019avoir ces informations sous forme tabulaire disponibles pour les formules et les filtres, et les colonnes d\u2019auteur vous permettent de le faire. Une colonne \u201cCr\u00e9\u00e9 par\u201d # Supposons que nous voulions remplir automatiquement une colonne avec le nom du cr\u00e9ateur de chaque enregistrement au fur et \u00e0 mesure qu\u2019ils sont ajout\u00e9s. Comme premi\u00e8re \u00e9tape, ajoutez une colonne appel\u00e9e (par exemple) Cr\u00e9\u00e9 par . Dans les options de colonne dans le panneau lat\u00e9ral (voir Colonnes pour un rappel), cliquez sur l\u2019action D\u00e9finir une formule de d\u00e9clenchement . D\u00e9finissez user.Name comme formule de la colonne. Il existe d\u2019autres possibilit\u00e9s, telles que user.Email , un user.UserID unique, et ainsi de suite. Les informations utilisateur disponibles sont les m\u00eames que celles des conditions de r\u00e8gles d\u2019acc\u00e8s . Les informations temporelles sont \u00e9galement disponibles (voir Colonnes de timestamp ). Mais restons-en \u00e0 user.Name pour l\u2019instant. Maintenant, pour d\u00e9finir la colonne chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9, assurez-vous que l\u2019option Appliquer aux nouveaux enregistrements est coch\u00e9e. Et c\u2019est tout ! Maintenant, chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9, la colonne Cr\u00e9\u00e9 le sera d\u00e9finie avec le nom de l\u2019utilisateur qui le cr\u00e9e : Une colonne \u201cMis \u00e0 jour par\u201d # Si nous voulons une colonne qui enregistre qui a modifi\u00e9 un enregistrement en dernier (par opposition \u00e0 son cr\u00e9ateur), la proc\u00e9dure est similaire \u00e0 celle d\u2019une colonne \u201cCr\u00e9\u00e9 par\u201d , mais au lieu de Appliquer aux nouveaux enregistrements , s\u00e9lectionnez Appliquer aux modifications des enregistrements . Ensuite, s\u00e9lectionnez N'importe quel champ (en supposant que vous voulez que toute modification d\u2019un enregistrement soit consid\u00e9r\u00e9e comme une mise \u00e0 jour) et appuyez sur OK . Vous pouvez alternativement choisir quelles colonnes, lorsqu\u2019elles sont mises \u00e0 jour, d\u00e9clencheront la formule. Voici un exemple de la nouvelle colonne en action - lorsque Cotton Candy v Candy Floss est mis \u00e0 jour, un nom d\u2019utilisateur appara\u00eet pour cet enregistrement : Il est toujours possible pour un utilisateur de modifier manuellement les cellules dans les colonnes Cr\u00e9\u00e9 par et Mis \u00e0 jour par . Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire.","title":"Authorship columns"},{"location":"authorship/#colonnes-dauteur","text":"Parfois, il est utile d\u2019avoir des colonnes qui enregistrent qui a cr\u00e9\u00e9 des enregistrements individuels et qui les a mis \u00e0 jour en dernier. Grist vous permet de cr\u00e9er facilement de telles colonnes. Il suit \u00e9galement automatiquement les modifications du document dans l\u2019onglet Activit\u00e9 de l\u2019Historique du document, mais il est n\u00e9anmoins pratique d\u2019avoir ces informations sous forme tabulaire disponibles pour les formules et les filtres, et les colonnes d\u2019auteur vous permettent de le faire.","title":"Colonnes d’auteur"},{"location":"authorship/#une-colonne-cree-par","text":"Supposons que nous voulions remplir automatiquement une colonne avec le nom du cr\u00e9ateur de chaque enregistrement au fur et \u00e0 mesure qu\u2019ils sont ajout\u00e9s. Comme premi\u00e8re \u00e9tape, ajoutez une colonne appel\u00e9e (par exemple) Cr\u00e9\u00e9 par . Dans les options de colonne dans le panneau lat\u00e9ral (voir Colonnes pour un rappel), cliquez sur l\u2019action D\u00e9finir une formule de d\u00e9clenchement . D\u00e9finissez user.Name comme formule de la colonne. Il existe d\u2019autres possibilit\u00e9s, telles que user.Email , un user.UserID unique, et ainsi de suite. Les informations utilisateur disponibles sont les m\u00eames que celles des conditions de r\u00e8gles d\u2019acc\u00e8s . Les informations temporelles sont \u00e9galement disponibles (voir Colonnes de timestamp ). Mais restons-en \u00e0 user.Name pour l\u2019instant. Maintenant, pour d\u00e9finir la colonne chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9, assurez-vous que l\u2019option Appliquer aux nouveaux enregistrements est coch\u00e9e. Et c\u2019est tout ! Maintenant, chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9, la colonne Cr\u00e9\u00e9 le sera d\u00e9finie avec le nom de l\u2019utilisateur qui le cr\u00e9e :","title":"Une colonne “Cr\u00e9\u00e9 par”"},{"location":"authorship/#une-colonne-mis-a-jour-par","text":"Si nous voulons une colonne qui enregistre qui a modifi\u00e9 un enregistrement en dernier (par opposition \u00e0 son cr\u00e9ateur), la proc\u00e9dure est similaire \u00e0 celle d\u2019une colonne \u201cCr\u00e9\u00e9 par\u201d , mais au lieu de Appliquer aux nouveaux enregistrements , s\u00e9lectionnez Appliquer aux modifications des enregistrements . Ensuite, s\u00e9lectionnez N'importe quel champ (en supposant que vous voulez que toute modification d\u2019un enregistrement soit consid\u00e9r\u00e9e comme une mise \u00e0 jour) et appuyez sur OK . Vous pouvez alternativement choisir quelles colonnes, lorsqu\u2019elles sont mises \u00e0 jour, d\u00e9clencheront la formule. Voici un exemple de la nouvelle colonne en action - lorsque Cotton Candy v Candy Floss est mis \u00e0 jour, un nom d\u2019utilisateur appara\u00eet pour cet enregistrement : Il est toujours possible pour un utilisateur de modifier manuellement les cellules dans les colonnes Cr\u00e9\u00e9 par et Mis \u00e0 jour par . Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire.","title":"Une colonne “Mis \u00e0 jour par”"},{"location":"automatic-backups/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Sauvegardes Automatiques # Grist enregistre automatiquement des sauvegardes de vos documents pendant que vous travaillez dessus. Ces sauvegardes \u2013 ou instantan\u00e9s \u2013 du document peuvent \u00eatre examin\u00e9es \u00e0 tout moment. Grist conserve des instantan\u00e9s plus fr\u00e9quents des modifications r\u00e9centes, et des instantan\u00e9s moins fr\u00e9quents au fur et \u00e0 mesure que vous remontez dans le temps. Par exemple, des instantan\u00e9s horaires sont conserv\u00e9s pendant environ une journ\u00e9e, mais des instantan\u00e9s mensuels sont conserv\u00e9s pendant plus d\u2019un an. Examiner les Sauvegardes # Pour voir la liste des sauvegardes, cliquez sur \u201cHistorique du Document\u201d dans le panneau de gauche, puis cliquez sur l\u2019onglet \u201cInstantan\u00e9s\u201d dans le panneau qui s\u2019ouvre \u00e0 droite : Vous pouvez ouvrir n\u2019importe lequel des instantan\u00e9s list\u00e9s pour voir le document tel qu\u2019il existait \u00e0 ce moment-l\u00e0. Restaurer une Version Ant\u00e9rieure # Lors de l\u2019examen d\u2019un instantan\u00e9, le menu \u201cPartager\u201d propose des options suppl\u00e9mentaires ; Utilisez l\u2019option \u201cRemplacer la Version Actuelle\u201d pour revenir \u00e0 la version du document que vous consultez. Vous pouvez \u00e9galement enregistrer l\u2019instantan\u00e9 comme un nouveau document en utilisant l\u2019option \u201cEnregistrer une Copie\u201d. Documents Supprim\u00e9s # Lorsque vous supprimez un document, son historique de sauvegardes est supprim\u00e9 avec lui. Tant que le document est dans la Corbeille, vous pouvez encore le restaurer pendant 30 jours. Si vous le faites, vous retrouverez tous les instantan\u00e9s historiques. Si vous choisissez \u201cSupprimer D\u00e9finitivement\u201d pour un document dans la Corbeille, ou lorsque un document dans la Corbeille est automatiquement purg\u00e9 apr\u00e8s 30 jours, les sauvegardes seront supprim\u00e9es d\u00e9finitivement avec lui.","title":"Automatic backups"},{"location":"automatic-backups/#sauvegardes-automatiques","text":"Grist enregistre automatiquement des sauvegardes de vos documents pendant que vous travaillez dessus. Ces sauvegardes \u2013 ou instantan\u00e9s \u2013 du document peuvent \u00eatre examin\u00e9es \u00e0 tout moment. Grist conserve des instantan\u00e9s plus fr\u00e9quents des modifications r\u00e9centes, et des instantan\u00e9s moins fr\u00e9quents au fur et \u00e0 mesure que vous remontez dans le temps. Par exemple, des instantan\u00e9s horaires sont conserv\u00e9s pendant environ une journ\u00e9e, mais des instantan\u00e9s mensuels sont conserv\u00e9s pendant plus d\u2019un an.","title":"Sauvegardes Automatiques"},{"location":"automatic-backups/#examiner-les-sauvegardes","text":"Pour voir la liste des sauvegardes, cliquez sur \u201cHistorique du Document\u201d dans le panneau de gauche, puis cliquez sur l\u2019onglet \u201cInstantan\u00e9s\u201d dans le panneau qui s\u2019ouvre \u00e0 droite : Vous pouvez ouvrir n\u2019importe lequel des instantan\u00e9s list\u00e9s pour voir le document tel qu\u2019il existait \u00e0 ce moment-l\u00e0.","title":"Examiner les Sauvegardes"},{"location":"automatic-backups/#restaurer-une-version-anterieure","text":"Lors de l\u2019examen d\u2019un instantan\u00e9, le menu \u201cPartager\u201d propose des options suppl\u00e9mentaires ; Utilisez l\u2019option \u201cRemplacer la Version Actuelle\u201d pour revenir \u00e0 la version du document que vous consultez. Vous pouvez \u00e9galement enregistrer l\u2019instantan\u00e9 comme un nouveau document en utilisant l\u2019option \u201cEnregistrer une Copie\u201d.","title":"Restaurer une Version Ant\u00e9rieure"},{"location":"automatic-backups/#documents-supprimes","text":"Lorsque vous supprimez un document, son historique de sauvegardes est supprim\u00e9 avec lui. Tant que le document est dans la Corbeille, vous pouvez encore le restaurer pendant 30 jours. Si vous le faites, vous retrouverez tous les instantan\u00e9s historiques. Si vous choisissez \u201cSupprimer D\u00e9finitivement\u201d pour un document dans la Corbeille, ou lorsque un document dans la Corbeille est automatiquement purg\u00e9 apr\u00e8s 30 jours, les sauvegardes seront supprim\u00e9es d\u00e9finitivement avec lui.","title":"Documents Supprim\u00e9s"},{"location":"browser-support/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Support des Navigateurs # Grist est officiellement pris en charge et r\u00e9guli\u00e8rement test\u00e9 sur les navigateurs modernes Firefox et Google Chrome sur toutes les plateformes de bureau. Ils sont disponibles ici : T\u00e9l\u00e9charger Firefox T\u00e9l\u00e9charger Chrome D\u2019autres navigateurs modernes fonctionneront dans la mesure o\u00f9 ils sont conformes aux normes. En particulier, il est rapport\u00e9 que Grist fonctionne sur Safari et Microsoft Edge modernes. Si vous rencontrez des erreurs ou un comportement inattendu sur ces navigateurs, nous vous encourageons \u00e0 nous les signaler en nous envoyant un email \u00e0 support@getgrist.com . Support Mobile # Vous pouvez utiliser Grist de mani\u00e8re assez confortable dans les navigateurs mobiles tels que Chrome, Safari et Firefox. Sur les petits \u00e9crans, vous pouvez trouver la liste des pages \u00e0 partir du bouton dans la barre inf\u00e9rieure. Pour les pages avec plusieurs vues, seule la vue active est d\u00e9velopp\u00e9e. Les autres vues sont r\u00e9duites jusqu\u2019\u00e0 ce que vous touchiez pour les d\u00e9velopper. Pour \u00e9diter une cellule, il suffit de la toucher deux fois. Le support mobile est encore en cours de d\u00e9veloppement. Pour revenir \u00e0 la version bureau sur un appareil mobile, ouvrez le menu de votre compte et s\u00e9lectionnez l\u2019option \u00ab Basculer en mode mobile \u00bb :","title":"Browser support"},{"location":"browser-support/#support-des-navigateurs","text":"Grist est officiellement pris en charge et r\u00e9guli\u00e8rement test\u00e9 sur les navigateurs modernes Firefox et Google Chrome sur toutes les plateformes de bureau. Ils sont disponibles ici : T\u00e9l\u00e9charger Firefox T\u00e9l\u00e9charger Chrome D\u2019autres navigateurs modernes fonctionneront dans la mesure o\u00f9 ils sont conformes aux normes. En particulier, il est rapport\u00e9 que Grist fonctionne sur Safari et Microsoft Edge modernes. Si vous rencontrez des erreurs ou un comportement inattendu sur ces navigateurs, nous vous encourageons \u00e0 nous les signaler en nous envoyant un email \u00e0 support@getgrist.com .","title":"Support des Navigateurs"},{"location":"browser-support/#support-mobile","text":"Vous pouvez utiliser Grist de mani\u00e8re assez confortable dans les navigateurs mobiles tels que Chrome, Safari et Firefox. Sur les petits \u00e9crans, vous pouvez trouver la liste des pages \u00e0 partir du bouton dans la barre inf\u00e9rieure. Pour les pages avec plusieurs vues, seule la vue active est d\u00e9velopp\u00e9e. Les autres vues sont r\u00e9duites jusqu\u2019\u00e0 ce que vous touchiez pour les d\u00e9velopper. Pour \u00e9diter une cellule, il suffit de la toucher deux fois. Le support mobile est encore en cours de d\u00e9veloppement. Pour revenir \u00e0 la version bureau sur un appareil mobile, ouvrez le menu de votre compte et s\u00e9lectionnez l\u2019option \u00ab Basculer en mode mobile \u00bb :","title":"Support Mobile"},{"location":"col-refs/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . R\u00e9f\u00e9rence et Listes de R\u00e9f\u00e9rences # Vue d\u2019ensemble # Les colonnes R\u00e9f\u00e9rence et Liste de R\u00e9f\u00e9rences dans Grist permettent \u00e0 une table de cr\u00e9er une r\u00e9f\u00e9rence explicite \u00e0 une autre. Dans le monde des bases de donn\u00e9es, cela est similaire \u00e0 une cl\u00e9 \u00e9trang\u00e8re. Dans le monde des tableurs, cela est similaire \u00e0 un VLOOKUP , mais beaucoup plus puissant et plus facile \u00e0 utiliser. Dans ce guide, nous utiliserons le terme table sous-jacente pour la table qui liste toutes les valeurs disponibles, et table de r\u00e9f\u00e9rence pour la table qui utilise ces valeurs. Cr\u00e9er une nouvelle colonne de R\u00e9f\u00e9rence # Supposons que nous ayons un document avec deux tables, Clients et Projets. La table Clients liste nos clients - noms, contacts, dates de signature - et la table Projets liste les projets que nous r\u00e9alisons pour les clients. Il y a toutes sortes de choses que Grist peut faire pour nous si nous lui indiquons que la colonne Client dans la table Projets fait r\u00e9f\u00e9rence aux clients list\u00e9s dans la table Clients. Nous pouvons le faire en convertissant la colonne Client en une \u201ccolonne de r\u00e9f\u00e9rence\u201d. Ouvrez le panneau lat\u00e9ral des Options de Colonne (voir Sp\u00e9cifier un type ) et d\u00e9finissez le \u201cType de Colonne\u201d sur \u201cR\u00e9f\u00e9rence\u201d. Ajustez l\u2019option \u201cDonn\u00e9es de la Table\u201d pour \u00eatre la table correcte que vous souhaitez croiser, et l\u2019option \u201cAfficher la Colonne\u201d pour correspondre \u00e0 la colonne de cette table que vous souhaitez afficher. Ensuite, cliquez sur \u201cAppliquer\u201d lorsque vous \u00eates satisfait du r\u00e9sultat. Comprendre la r\u00e9f\u00e9rence La valeur de la colonne fait toujours r\u00e9f\u00e9rence \u00e0 l\u2019ensemble du record dans la table sous-jacente. La valeur affich\u00e9e peut \u00eatre n\u2019importe quelle colonne de ce record, comme s\u00e9lectionn\u00e9 dans Afficher la Colonne . Vous pouvez \u00e9galement inclure des colonnes suppl\u00e9mentaires \u00e0 afficher comme expliqu\u00e9 plus tard. Dans notre exemple, vous pouvez voir des petites ic\u00f4nes de lien appara\u00eetre dans les cellules de la colonne Client, montrant qu\u2019elles ont \u00e9t\u00e9 correctement crois\u00e9es avec la table Clients. Une fois le type de colonne d\u00e9fini, vous pouvez commencer \u00e0 taper dedans ou double-cliquer pour voir une liste d\u00e9roulante de toutes les valeurs disponibles. Notez que la table Clients et la colonne Client sont li\u00e9es par le type de colonne plut\u00f4t que par le nom. Elles peuvent \u00eatre nomm\u00e9es comme vous le souhaitez. Rep\u00e9rer les colonnes de r\u00e9f\u00e9rence Vous pouvez dire que les valeurs dans une colonne repr\u00e9sentent une r\u00e9f\u00e9rence par l\u2019ic\u00f4ne de lien qui appara\u00eet \u00e0 c\u00f4t\u00e9 des valeurs. Si vous tapez accidentellement une valeur qui n\u2019est pas pr\u00e9sente dans la table Clients , sa valeur sera mise en \u00e9vidence comme invalide : Ajouter des valeurs \u00e0 une colonne de R\u00e9f\u00e9rence # Parfois, il est utile d\u2019ajouter une nouvelle valeur \u00e0 la liste d\u00e9roulante sans avoir \u00e0 passer \u00e0 la table sous-jacente. Les colonnes de r\u00e9f\u00e9rence rendent cela facile ! Il suffit de taper la valeur que vous souhaitez ajouter et de s\u00e9lectionner la valeur + dans la liste d\u00e9roulante. Grist ajoutera automatiquement un nouveau record contenant cette valeur \u00e0 la table sous-jacente et ins\u00e9rera la r\u00e9f\u00e9rence appropri\u00e9e : Convertir une colonne de Texte en R\u00e9f\u00e9rence # Lorsque vous travaillez avec des donn\u00e9es existantes, il est courant d\u2019avoir des valeurs textuelles existantes qui devraient vraiment \u00eatre des valeurs de r\u00e9f\u00e9rence. Ne vous inqui\u00e9tez pas, la conversion est simple ! Il suffit de changer le type de colonne en R\u00e9f\u00e9rence et Grist trouvera et substituera automatiquement les valeurs correspondantes par des r\u00e9f\u00e9rences. Si certaines valeurs ne sont pas trouv\u00e9es, elles seront affich\u00e9es comme invalides. Vous pouvez alors soit les ajouter \u00e0 la table sous-jacente, soit s\u00e9lectionner les valeurs appropri\u00e9es pour elles. Dans cet exemple, les trois premi\u00e8res valeurs correspondent parfaitement, mais Forest Labs est invalide car il n\u2019existe pas dans la table Clients : Inclure # plusieurs champs d\u2019une r\u00e9f\u00e9rence # Un grand avantage des colonnes de r\u00e9f\u00e9rence est qu\u2019elles vous permettent d\u2019int\u00e9grer facilement plusieurs colonnes de la table sous-jacente. Dans notre exemple, si vous souhaitez int\u00e9grer $Client.Contact \u00e0 la table Projets , vous pouvez simplement s\u00e9lectionner la colonne Contact dans la section Ajouter des Colonnes R\u00e9f\u00e9renc\u00e9es et elle sera automatiquement ajout\u00e9e \u00e0 la table Projets : Si vous \u00eates \u00e0 l\u2019aise avec les formules, vous pouvez voir que la colonne ajout\u00e9e est simplement la formule =$Client.Contact . Si vous le souhaitez, vous pouvez obtenir le m\u00eame r\u00e9sultat en ajoutant manuellement la colonne de formule. Vous pouvez \u00e9galement utiliser d\u2019autres champs de la table Clients en r\u00e9f\u00e9rant \u00e0 $Client dans les formules de la table Projets . Notez que dans les formules, nous utilisons le nom de la colonne de r\u00e9f\u00e9rence ( $Client ) pour faire r\u00e9f\u00e9rence \u00e0 un record li\u00e9, et non le nom de la table (qui est Clients ici). Ne laissez pas la similarit\u00e9 des noms dans cet exemple vous confondre. Utiliser des r\u00e9f\u00e9rences dans les formules Vous avez peut-\u00eatre remarqu\u00e9 que la table sous-jacente est Clients (pluriel) mais que la formule est $Client.Contact (singulier). C\u2019est parce que la formule se r\u00e9f\u00e8re \u00e0 la colonne de r\u00e9f\u00e9rence, pas \u00e0 la table sous-jacente. Dans notre exemple, la colonne de r\u00e9f\u00e9rence est Client . Cr\u00e9er une nouvelle colonne de Liste de R\u00e9f\u00e9rences # Jusqu\u2019\u00e0 pr\u00e9sent, notre exemple ne traitait que des projets ayant un seul client. Supposons que nous ayons \u00e9galement des projets avec plusieurs clients, et que nous souhaitions maintenir des r\u00e9f\u00e9rences \u00e0 tous depuis la colonne Client de la table Projets . Nous pouvons indiquer \u00e0 Grist que la colonne Client contient plusieurs r\u00e9f\u00e9rences en changeant son type en \u201cListe de R\u00e9f\u00e9rences\u201d. Ce type de colonne peut r\u00e9f\u00e9rencer plusieurs records, et peut \u00e9galement \u00eatre consid\u00e9r\u00e9 comme une s\u00e9lection multiple. Ouvrez le panneau lat\u00e9ral des Options de Colonne (voir Sp\u00e9cifier un type ) et d\u00e9finissez le \u201cType de Colonne\u201d de Client sur \u201cListe de R\u00e9f\u00e9rences\u201d. Grist convertira automatiquement toutes vos r\u00e9f\u00e9rences existantes en listes de r\u00e9f\u00e9rences. Une fois que vous \u00eates satisfait du r\u00e9sultat, cliquez simplement sur \u201cAppliquer\u201d et la colonne Client sera pr\u00eate \u00e0 accepter autant de clients que vos projets en ont besoin. Modifier les valeurs dans une colonne de Liste de R\u00e9f\u00e9rences # Pour apporter des modifications \u00e0 une cellule de Liste de R\u00e9f\u00e9rences, double-cliquez simplement sur la cellule ou appuyez sur la touche Entr\u00e9e apr\u00e8s avoir s\u00e9lectionn\u00e9 la cellule que vous souhaitez modifier. Vous pouvez \u00e9galement commencer \u00e0 taper apr\u00e8s avoir s\u00e9lectionn\u00e9 une cellule si vous souhaitez \u00e9craser tout contenu existant. Cela ouvrira un \u00e9diteur comme celui de l\u2019exemple ci-dessous. Comme avec les colonnes de R\u00e9f\u00e9rence, le menu de saisie semi-automatique se remplira de suggestions au fur et \u00e0 mesure que vous tapez. Si vous tapez une valeur qui n\u2019est pas pr\u00e9sente dans la table r\u00e9f\u00e9renc\u00e9e, vous pouvez s\u00e9lectionner la valeur + pour ajouter une nouvelle ligne \u00e0 la table r\u00e9f\u00e9renc\u00e9e avec votre valeur. Pour supprimer des r\u00e9f\u00e9rences existantes, appuyez simplement sur la touche Retour arri\u00e8re , ou d\u00e9placez votre curseur sur une r\u00e9f\u00e9rence et cliquez sur l\u2019ic\u00f4ne X . Vous pouvez \u00e9galement r\u00e9organiser les r\u00e9f\u00e9rences dans l\u2019\u00e9diteur en les faisant glisser avec votre souris. Pour enregistrer vos modifications et fermer l\u2019\u00e9diteur, appuyez sur Entr\u00e9e ou Tabulation , ou cliquez n\u2019importe o\u00f9 en dehors de l\u2019\u00e9diteur. Pour fermer l\u2019\u00e9diteur et annuler toutes les modifications que vous avez apport\u00e9es, appuyez sur \u00c9chap . Comprendre les colonnes de r\u00e9f\u00e9rence # Les cellules dans une colonne de r\u00e9f\u00e9rence identifient toujours un record entier dans la table r\u00e9f\u00e9renc\u00e9e. Pour plus de commodit\u00e9, vous pouvez s\u00e9lectionner quelle colonne de ce record afficher en d\u00e9finissant \u201cAFFICHER LA COLONNE\u201d. Cependant, la valeur de la cellule est toujours l\u2019ID unique d\u2019un record. De m\u00eame, les Listes de R\u00e9f\u00e9rences stockent une liste d\u2019IDs de records. Qu\u2019est-ce que cela signifie vraiment ? Jetons un coup d\u2019\u0153il au mod\u00e8le Inscription aux Cours . Dans la table Classes, la colonne Instructeur est une colonne de r\u00e9f\u00e9rence qui fait r\u00e9f\u00e9rence aux donn\u00e9es de la table Staff. Le Nom Complet est s\u00e9lectionn\u00e9 sous \u2018Afficher la Colonne\u2019 et est utilis\u00e9 comme \u00e9tiquette pour repr\u00e9senter le record de la table Staff qui est r\u00e9f\u00e9renc\u00e9 ici. Nous pouvons changer cette \u00e9tiquette pour n\u2019importe quelle autre valeur contenue dans le record. Changeons-la en \u2018ID de Ligne\u2019. L\u2019ID de ligne est ce qui est r\u00e9ellement stock\u00e9 dans la colonne de R\u00e9f\u00e9rence ou de Liste de R\u00e9f\u00e9rences. Avec cet ID, nous pouvons r\u00e9cup\u00e9rer toutes les donn\u00e9es associ\u00e9es \u00e0 ce record. Dans la premi\u00e8re ligne de la table Classes, nous voyons Staff[2] comme valeur dans la colonne Instructeur. Cela repr\u00e9sente le record dans la table Staff avec l\u2019ID de Ligne = 2 . Nous pouvons naviguer vers la table Staff et voir quel record est assign\u00e9 \u00e0 l\u2019ID de Ligne = 2 . Pour voir l\u2019ID unique d\u2019un record, ajoutez une nouvelle colonne avec la formule = $id . Nous pouvons voir que la valeur dans la colonne Nom Complet pour le record avec l\u2019ID de Ligne = 2 est Dowbakin, Daniella . Si nous revenons \u00e0 nos param\u00e8tres d\u2019origine pour la colonne Instructeur de la table Classes, o\u00f9 Nom Complet \u00e9tait s\u00e9lectionn\u00e9 sous Afficher la Colonne, nous voyons que la valeur de Nom Complet associ\u00e9e \u00e0 Staff[2] est Dowbakin, Daniella . Filtrer les choix de R\u00e9f\u00e9rence dans la liste d\u00e9roulante # Lors de la saisie de donn\u00e9es dans une colonne de r\u00e9f\u00e9rence, vous verrez une liste d\u00e9roulante de toutes les valeurs disponibles \u00e0 choisir. Parfois, la liste peut devenir longue et, dans certains cas, confuse. Par exemple, disons que vous suivez les changements de population dans les 1 000 villes les plus peupl\u00e9es du monde. Lors de la saisie d\u2019une ville dans la colonne de r\u00e9f\u00e9rence pour la s\u00e9lection de la ville, la liste d\u00e9roulante affiche toutes les 1 000 villes. Il serait utile que la liste d\u00e9roulante des choix de villes soit filtr\u00e9e en fonction du pays s\u00e9lectionn\u00e9 dans la colonne Pays . Pour filtrer la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence, s\u00e9lectionnez la colonne de r\u00e9f\u00e9rence puis d\u00e9finissez une \u201cCondition de Liste D\u00e9roulante\u201d dans le Panneau de Cr\u00e9ation sous l\u2019onglet \u201cColonne\u201d. Vous pouvez filtrer le choix de la liste d\u00e9roulante en \u00e9crivant une condition sous forme de formule. L\u2019attribut choice fait r\u00e9f\u00e9rence aux choix dans la liste d\u00e9roulante. Dans ce cas, la formule est choice.Country == $Country . Pourquoi cela a-t-il fonctionn\u00e9 ? La colonne de ville est une colonne de r\u00e9f\u00e9rence pointant vers une table Cities qui correspond aux pays et aux villes. Cette table ressemble \u00e0 ceci. La condition de formule choice.Country == $Country recherche le pays de chaque choix dans la table Cities en utilisant un lookup de r\u00e9f\u00e9rence , puis compare ces pays \u00e0 la valeur entr\u00e9e dans la colonne Country de la table Population Rankings . La liste d\u00e9roulante affiche maintenant uniquement les choix (c\u2019est-\u00e0-dire les villes) dont le pays est \u00e9gal au pays entr\u00e9 dans la colonne Country . L\u2019attribut choice peut \u00e9galement \u00eatre utilis\u00e9 lors de la d\u00e9finition des conditions de filtre de liste d\u00e9roulante pour les colonnes Choice et Choice List . Notez que parce que le filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence est \u00e9crit sous forme de formules, le filtrage peut \u00eatre tr\u00e8s flexible et granulaire. Les utilisateurs exp\u00e9riment\u00e9s avec les permissions avanc\u00e9es peuvent remarquer des similitudes dans la fa\u00e7on de penser \u00e0 l\u2019\u00e9criture de ces formules.","title":"Reference columns"},{"location":"col-refs/#reference-et-listes-de-references","text":"","title":"R\u00e9f\u00e9rence et Listes de R\u00e9f\u00e9rences"},{"location":"col-refs/#vue-densemble","text":"Les colonnes R\u00e9f\u00e9rence et Liste de R\u00e9f\u00e9rences dans Grist permettent \u00e0 une table de cr\u00e9er une r\u00e9f\u00e9rence explicite \u00e0 une autre. Dans le monde des bases de donn\u00e9es, cela est similaire \u00e0 une cl\u00e9 \u00e9trang\u00e8re. Dans le monde des tableurs, cela est similaire \u00e0 un VLOOKUP , mais beaucoup plus puissant et plus facile \u00e0 utiliser. Dans ce guide, nous utiliserons le terme table sous-jacente pour la table qui liste toutes les valeurs disponibles, et table de r\u00e9f\u00e9rence pour la table qui utilise ces valeurs.","title":"Vue d’ensemble"},{"location":"col-refs/#creer-une-nouvelle-colonne-de-reference","text":"Supposons que nous ayons un document avec deux tables, Clients et Projets. La table Clients liste nos clients - noms, contacts, dates de signature - et la table Projets liste les projets que nous r\u00e9alisons pour les clients. Il y a toutes sortes de choses que Grist peut faire pour nous si nous lui indiquons que la colonne Client dans la table Projets fait r\u00e9f\u00e9rence aux clients list\u00e9s dans la table Clients. Nous pouvons le faire en convertissant la colonne Client en une \u201ccolonne de r\u00e9f\u00e9rence\u201d. Ouvrez le panneau lat\u00e9ral des Options de Colonne (voir Sp\u00e9cifier un type ) et d\u00e9finissez le \u201cType de Colonne\u201d sur \u201cR\u00e9f\u00e9rence\u201d. Ajustez l\u2019option \u201cDonn\u00e9es de la Table\u201d pour \u00eatre la table correcte que vous souhaitez croiser, et l\u2019option \u201cAfficher la Colonne\u201d pour correspondre \u00e0 la colonne de cette table que vous souhaitez afficher. Ensuite, cliquez sur \u201cAppliquer\u201d lorsque vous \u00eates satisfait du r\u00e9sultat. Comprendre la r\u00e9f\u00e9rence La valeur de la colonne fait toujours r\u00e9f\u00e9rence \u00e0 l\u2019ensemble du record dans la table sous-jacente. La valeur affich\u00e9e peut \u00eatre n\u2019importe quelle colonne de ce record, comme s\u00e9lectionn\u00e9 dans Afficher la Colonne . Vous pouvez \u00e9galement inclure des colonnes suppl\u00e9mentaires \u00e0 afficher comme expliqu\u00e9 plus tard. Dans notre exemple, vous pouvez voir des petites ic\u00f4nes de lien appara\u00eetre dans les cellules de la colonne Client, montrant qu\u2019elles ont \u00e9t\u00e9 correctement crois\u00e9es avec la table Clients. Une fois le type de colonne d\u00e9fini, vous pouvez commencer \u00e0 taper dedans ou double-cliquer pour voir une liste d\u00e9roulante de toutes les valeurs disponibles. Notez que la table Clients et la colonne Client sont li\u00e9es par le type de colonne plut\u00f4t que par le nom. Elles peuvent \u00eatre nomm\u00e9es comme vous le souhaitez. Rep\u00e9rer les colonnes de r\u00e9f\u00e9rence Vous pouvez dire que les valeurs dans une colonne repr\u00e9sentent une r\u00e9f\u00e9rence par l\u2019ic\u00f4ne de lien qui appara\u00eet \u00e0 c\u00f4t\u00e9 des valeurs. Si vous tapez accidentellement une valeur qui n\u2019est pas pr\u00e9sente dans la table Clients , sa valeur sera mise en \u00e9vidence comme invalide :","title":"Cr\u00e9er une nouvelle colonne de R\u00e9f\u00e9rence"},{"location":"col-refs/#ajouter-des-valeurs-a-une-colonne-de-reference","text":"Parfois, il est utile d\u2019ajouter une nouvelle valeur \u00e0 la liste d\u00e9roulante sans avoir \u00e0 passer \u00e0 la table sous-jacente. Les colonnes de r\u00e9f\u00e9rence rendent cela facile ! Il suffit de taper la valeur que vous souhaitez ajouter et de s\u00e9lectionner la valeur + dans la liste d\u00e9roulante. Grist ajoutera automatiquement un nouveau record contenant cette valeur \u00e0 la table sous-jacente et ins\u00e9rera la r\u00e9f\u00e9rence appropri\u00e9e :","title":"Ajouter des valeurs \u00e0 une colonne de R\u00e9f\u00e9rence"},{"location":"col-refs/#convertir-une-colonne-de-texte-en-reference","text":"Lorsque vous travaillez avec des donn\u00e9es existantes, il est courant d\u2019avoir des valeurs textuelles existantes qui devraient vraiment \u00eatre des valeurs de r\u00e9f\u00e9rence. Ne vous inqui\u00e9tez pas, la conversion est simple ! Il suffit de changer le type de colonne en R\u00e9f\u00e9rence et Grist trouvera et substituera automatiquement les valeurs correspondantes par des r\u00e9f\u00e9rences. Si certaines valeurs ne sont pas trouv\u00e9es, elles seront affich\u00e9es comme invalides. Vous pouvez alors soit les ajouter \u00e0 la table sous-jacente, soit s\u00e9lectionner les valeurs appropri\u00e9es pour elles. Dans cet exemple, les trois premi\u00e8res valeurs correspondent parfaitement, mais Forest Labs est invalide car il n\u2019existe pas dans la table Clients :","title":"Convertir une colonne de Texte en R\u00e9f\u00e9rence"},{"location":"col-refs/#inclure","text":"","title":"Inclure"},{"location":"col-refs/#plusieurs-champs-dune-reference","text":"Un grand avantage des colonnes de r\u00e9f\u00e9rence est qu\u2019elles vous permettent d\u2019int\u00e9grer facilement plusieurs colonnes de la table sous-jacente. Dans notre exemple, si vous souhaitez int\u00e9grer $Client.Contact \u00e0 la table Projets , vous pouvez simplement s\u00e9lectionner la colonne Contact dans la section Ajouter des Colonnes R\u00e9f\u00e9renc\u00e9es et elle sera automatiquement ajout\u00e9e \u00e0 la table Projets : Si vous \u00eates \u00e0 l\u2019aise avec les formules, vous pouvez voir que la colonne ajout\u00e9e est simplement la formule =$Client.Contact . Si vous le souhaitez, vous pouvez obtenir le m\u00eame r\u00e9sultat en ajoutant manuellement la colonne de formule. Vous pouvez \u00e9galement utiliser d\u2019autres champs de la table Clients en r\u00e9f\u00e9rant \u00e0 $Client dans les formules de la table Projets . Notez que dans les formules, nous utilisons le nom de la colonne de r\u00e9f\u00e9rence ( $Client ) pour faire r\u00e9f\u00e9rence \u00e0 un record li\u00e9, et non le nom de la table (qui est Clients ici). Ne laissez pas la similarit\u00e9 des noms dans cet exemple vous confondre. Utiliser des r\u00e9f\u00e9rences dans les formules Vous avez peut-\u00eatre remarqu\u00e9 que la table sous-jacente est Clients (pluriel) mais que la formule est $Client.Contact (singulier). C\u2019est parce que la formule se r\u00e9f\u00e8re \u00e0 la colonne de r\u00e9f\u00e9rence, pas \u00e0 la table sous-jacente. Dans notre exemple, la colonne de r\u00e9f\u00e9rence est Client .","title":"plusieurs champs d’une r\u00e9f\u00e9rence"},{"location":"col-refs/#creer-une-nouvelle-colonne-de-liste-de-references","text":"Jusqu\u2019\u00e0 pr\u00e9sent, notre exemple ne traitait que des projets ayant un seul client. Supposons que nous ayons \u00e9galement des projets avec plusieurs clients, et que nous souhaitions maintenir des r\u00e9f\u00e9rences \u00e0 tous depuis la colonne Client de la table Projets . Nous pouvons indiquer \u00e0 Grist que la colonne Client contient plusieurs r\u00e9f\u00e9rences en changeant son type en \u201cListe de R\u00e9f\u00e9rences\u201d. Ce type de colonne peut r\u00e9f\u00e9rencer plusieurs records, et peut \u00e9galement \u00eatre consid\u00e9r\u00e9 comme une s\u00e9lection multiple. Ouvrez le panneau lat\u00e9ral des Options de Colonne (voir Sp\u00e9cifier un type ) et d\u00e9finissez le \u201cType de Colonne\u201d de Client sur \u201cListe de R\u00e9f\u00e9rences\u201d. Grist convertira automatiquement toutes vos r\u00e9f\u00e9rences existantes en listes de r\u00e9f\u00e9rences. Une fois que vous \u00eates satisfait du r\u00e9sultat, cliquez simplement sur \u201cAppliquer\u201d et la colonne Client sera pr\u00eate \u00e0 accepter autant de clients que vos projets en ont besoin.","title":"Cr\u00e9er une nouvelle colonne de Liste de R\u00e9f\u00e9rences"},{"location":"col-refs/#modifier-les-valeurs-dans-une-colonne-de-liste-de-references","text":"Pour apporter des modifications \u00e0 une cellule de Liste de R\u00e9f\u00e9rences, double-cliquez simplement sur la cellule ou appuyez sur la touche Entr\u00e9e apr\u00e8s avoir s\u00e9lectionn\u00e9 la cellule que vous souhaitez modifier. Vous pouvez \u00e9galement commencer \u00e0 taper apr\u00e8s avoir s\u00e9lectionn\u00e9 une cellule si vous souhaitez \u00e9craser tout contenu existant. Cela ouvrira un \u00e9diteur comme celui de l\u2019exemple ci-dessous. Comme avec les colonnes de R\u00e9f\u00e9rence, le menu de saisie semi-automatique se remplira de suggestions au fur et \u00e0 mesure que vous tapez. Si vous tapez une valeur qui n\u2019est pas pr\u00e9sente dans la table r\u00e9f\u00e9renc\u00e9e, vous pouvez s\u00e9lectionner la valeur + pour ajouter une nouvelle ligne \u00e0 la table r\u00e9f\u00e9renc\u00e9e avec votre valeur. Pour supprimer des r\u00e9f\u00e9rences existantes, appuyez simplement sur la touche Retour arri\u00e8re , ou d\u00e9placez votre curseur sur une r\u00e9f\u00e9rence et cliquez sur l\u2019ic\u00f4ne X . Vous pouvez \u00e9galement r\u00e9organiser les r\u00e9f\u00e9rences dans l\u2019\u00e9diteur en les faisant glisser avec votre souris. Pour enregistrer vos modifications et fermer l\u2019\u00e9diteur, appuyez sur Entr\u00e9e ou Tabulation , ou cliquez n\u2019importe o\u00f9 en dehors de l\u2019\u00e9diteur. Pour fermer l\u2019\u00e9diteur et annuler toutes les modifications que vous avez apport\u00e9es, appuyez sur \u00c9chap .","title":"Modifier les valeurs dans une colonne de Liste de R\u00e9f\u00e9rences"},{"location":"col-refs/#comprendre-les-colonnes-de-reference","text":"Les cellules dans une colonne de r\u00e9f\u00e9rence identifient toujours un record entier dans la table r\u00e9f\u00e9renc\u00e9e. Pour plus de commodit\u00e9, vous pouvez s\u00e9lectionner quelle colonne de ce record afficher en d\u00e9finissant \u201cAFFICHER LA COLONNE\u201d. Cependant, la valeur de la cellule est toujours l\u2019ID unique d\u2019un record. De m\u00eame, les Listes de R\u00e9f\u00e9rences stockent une liste d\u2019IDs de records. Qu\u2019est-ce que cela signifie vraiment ? Jetons un coup d\u2019\u0153il au mod\u00e8le Inscription aux Cours . Dans la table Classes, la colonne Instructeur est une colonne de r\u00e9f\u00e9rence qui fait r\u00e9f\u00e9rence aux donn\u00e9es de la table Staff. Le Nom Complet est s\u00e9lectionn\u00e9 sous \u2018Afficher la Colonne\u2019 et est utilis\u00e9 comme \u00e9tiquette pour repr\u00e9senter le record de la table Staff qui est r\u00e9f\u00e9renc\u00e9 ici. Nous pouvons changer cette \u00e9tiquette pour n\u2019importe quelle autre valeur contenue dans le record. Changeons-la en \u2018ID de Ligne\u2019. L\u2019ID de ligne est ce qui est r\u00e9ellement stock\u00e9 dans la colonne de R\u00e9f\u00e9rence ou de Liste de R\u00e9f\u00e9rences. Avec cet ID, nous pouvons r\u00e9cup\u00e9rer toutes les donn\u00e9es associ\u00e9es \u00e0 ce record. Dans la premi\u00e8re ligne de la table Classes, nous voyons Staff[2] comme valeur dans la colonne Instructeur. Cela repr\u00e9sente le record dans la table Staff avec l\u2019ID de Ligne = 2 . Nous pouvons naviguer vers la table Staff et voir quel record est assign\u00e9 \u00e0 l\u2019ID de Ligne = 2 . Pour voir l\u2019ID unique d\u2019un record, ajoutez une nouvelle colonne avec la formule = $id . Nous pouvons voir que la valeur dans la colonne Nom Complet pour le record avec l\u2019ID de Ligne = 2 est Dowbakin, Daniella . Si nous revenons \u00e0 nos param\u00e8tres d\u2019origine pour la colonne Instructeur de la table Classes, o\u00f9 Nom Complet \u00e9tait s\u00e9lectionn\u00e9 sous Afficher la Colonne, nous voyons que la valeur de Nom Complet associ\u00e9e \u00e0 Staff[2] est Dowbakin, Daniella .","title":"Comprendre les colonnes de r\u00e9f\u00e9rence"},{"location":"col-refs/#filtrer-les-choix-de-reference-dans-la-liste-deroulante","text":"Lors de la saisie de donn\u00e9es dans une colonne de r\u00e9f\u00e9rence, vous verrez une liste d\u00e9roulante de toutes les valeurs disponibles \u00e0 choisir. Parfois, la liste peut devenir longue et, dans certains cas, confuse. Par exemple, disons que vous suivez les changements de population dans les 1 000 villes les plus peupl\u00e9es du monde. Lors de la saisie d\u2019une ville dans la colonne de r\u00e9f\u00e9rence pour la s\u00e9lection de la ville, la liste d\u00e9roulante affiche toutes les 1 000 villes. Il serait utile que la liste d\u00e9roulante des choix de villes soit filtr\u00e9e en fonction du pays s\u00e9lectionn\u00e9 dans la colonne Pays . Pour filtrer la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence, s\u00e9lectionnez la colonne de r\u00e9f\u00e9rence puis d\u00e9finissez une \u201cCondition de Liste D\u00e9roulante\u201d dans le Panneau de Cr\u00e9ation sous l\u2019onglet \u201cColonne\u201d. Vous pouvez filtrer le choix de la liste d\u00e9roulante en \u00e9crivant une condition sous forme de formule. L\u2019attribut choice fait r\u00e9f\u00e9rence aux choix dans la liste d\u00e9roulante. Dans ce cas, la formule est choice.Country == $Country . Pourquoi cela a-t-il fonctionn\u00e9 ? La colonne de ville est une colonne de r\u00e9f\u00e9rence pointant vers une table Cities qui correspond aux pays et aux villes. Cette table ressemble \u00e0 ceci. La condition de formule choice.Country == $Country recherche le pays de chaque choix dans la table Cities en utilisant un lookup de r\u00e9f\u00e9rence , puis compare ces pays \u00e0 la valeur entr\u00e9e dans la colonne Country de la table Population Rankings . La liste d\u00e9roulante affiche maintenant uniquement les choix (c\u2019est-\u00e0-dire les villes) dont le pays est \u00e9gal au pays entr\u00e9 dans la colonne Country . L\u2019attribut choice peut \u00e9galement \u00eatre utilis\u00e9 lors de la d\u00e9finition des conditions de filtre de liste d\u00e9roulante pour les colonnes Choice et Choice List . Notez que parce que le filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence est \u00e9crit sous forme de formules, le filtrage peut \u00eatre tr\u00e8s flexible et granulaire. Les utilisateurs exp\u00e9riment\u00e9s avec les permissions avanc\u00e9es peuvent remarquer des similitudes dans la fa\u00e7on de penser \u00e0 l\u2019\u00e9criture de ces formules.","title":"Filtrer les choix de R\u00e9f\u00e9rence dans la liste d\u00e9roulante"},{"location":"col-transform/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Transformations de Colonne # Grist offre deux fa\u00e7ons de transformer toutes les valeurs d\u2019une colonne. L\u2019une consiste \u00e0 changer le type de la colonne, et l\u2019autre \u00e0 appliquer une transformation bas\u00e9e sur une formule. Conversions de type # Lors de la conversion entre diff\u00e9rents types de colonnes, Grist adopte un comportement par d\u00e9faut raisonnable, mais rend ce comportement facile \u00e0 r\u00e9viser. Par exemple, supposons que vous ayez une colonne d\u2019entiers. Pour convertir cette colonne en texte, ouvrez les options de la colonne comme d\u00e9crit dans Sp\u00e9cifier un type , et trouvez la section de type de colonne. Changez le type de colonne en texte dans le menu d\u00e9roulant. Vous remarquerez qu\u2019une bo\u00eete de dialogue \u201cannuler/r\u00e9viser/appliquer\u201d s\u2019ouvre \u00e0 c\u00f4t\u00e9 du menu d\u00e9roulant. Pour changer la fa\u00e7on dont la conversion est effectu\u00e9e, cliquez sur R\u00e9viser . Vous verrez une bo\u00eete de formule avec la m\u00e9thode de conversion par d\u00e9faut, grist.Text.typeConvert($tally) . Cela signifie \u201cfaire la conversion par d\u00e9faut en texte pour la colonne tally \u201d. Vous pouvez remplacer cela par n\u2019importe quelle formule de votre choix. Par exemple : Le code pour convertir en lignes unicode est laiss\u00e9 comme exercice au lecteur. Pour pr\u00e9visualiser les r\u00e9sultats de la conversion, cliquez sur \u201cpr\u00e9visualiser\u201d. Lorsque vous \u00eates satisfait de la conversion, cliquez sur \u201cappliquer\u201d. Pour abandonner la conversion, cliquez sur \u201cannuler\u201d. Transformations bas\u00e9es sur des formules # Les tableurs sont des outils pratiques pour nettoyer les donn\u00e9es en utilisant des formules . Par exemple, imaginez que vous ayez des codes postaux qui ont perdu leurs z\u00e9ros initiaux - vous pouvez facilement les reformater avec une formule rapide : Nous pourrions maintenant figer les r\u00e9sultats et supprimer les donn\u00e9es originales si nous n\u2019en avons plus besoin. Si vous savez que vous allez jeter les donn\u00e9es originales comme cela, Grist offre des transformations de colonne comme un moyen plus rapide de modifier syst\u00e9matiquement toutes les cellules d\u2019une colonne. Trouvez la section \u201cTransformer\u201d en bas du panneau lat\u00e9ral des options de colonne (voir Colonnes pour savoir comment ouvrir ce panneau). Lorsque vous cliquez sur le bouton orange \u201c\u00e9clair\u201d, Grist vous propose une formule, return $zip dans ce cas. Vous pouvez modifier cette formule pour apporter un changement \u00e0 la colonne s\u00e9lectionn\u00e9e. Par exemple, return $zip + 1 ajouterait un au code postal. Vous pouvez pr\u00e9visualiser l\u2019effet de votre formule, et lorsque vous \u00eates satisfait, appuyez sur \u201cAppliquer\u201d. Dans notre cas, o\u00f9 nous voulons ajouter des z\u00e9ros initiaux, nous devons d\u2019abord changer notre type de colonne en Texte (en supposant qu\u2019il soit actuellement Entier - s\u2019il est Num\u00e9rique , convertissez-le d\u2019abord en Entier puis en Texte pour \u00e9viter les points d\u00e9cimaux). Une fois cela fait, nous pouvons utiliser notre formule pour ajouter des z\u00e9ros initiaux : Lorsque vous \u00eates satisfait, appuyez sur \u201cAppliquer\u201d pour remplacer les valeurs des cellules par leurs nouvelles versions. De m\u00eame, la colonne response pourrait \u00eatre transform\u00e9e avec la formule en valeurs vrai/faux avec $response[0] == 'y' , puis d\u00e9finie comme une colonne \u00e0 bascule .","title":"Transformations"},{"location":"col-transform/#transformations-de-colonne","text":"Grist offre deux fa\u00e7ons de transformer toutes les valeurs d\u2019une colonne. L\u2019une consiste \u00e0 changer le type de la colonne, et l\u2019autre \u00e0 appliquer une transformation bas\u00e9e sur une formule.","title":""},{"location":"col-transform/#conversions-de-type","text":"Lors de la conversion entre diff\u00e9rents types de colonnes, Grist adopte un comportement par d\u00e9faut raisonnable, mais rend ce comportement facile \u00e0 r\u00e9viser. Par exemple, supposons que vous ayez une colonne d\u2019entiers. Pour convertir cette colonne en texte, ouvrez les options de la colonne comme d\u00e9crit dans Sp\u00e9cifier un type , et trouvez la section de type de colonne. Changez le type de colonne en texte dans le menu d\u00e9roulant. Vous remarquerez qu\u2019une bo\u00eete de dialogue \u201cannuler/r\u00e9viser/appliquer\u201d s\u2019ouvre \u00e0 c\u00f4t\u00e9 du menu d\u00e9roulant. Pour changer la fa\u00e7on dont la conversion est effectu\u00e9e, cliquez sur R\u00e9viser . Vous verrez une bo\u00eete de formule avec la m\u00e9thode de conversion par d\u00e9faut, grist.Text.typeConvert($tally) . Cela signifie \u201cfaire la conversion par d\u00e9faut en texte pour la colonne tally \u201d. Vous pouvez remplacer cela par n\u2019importe quelle formule de votre choix. Par exemple : Le code pour convertir en lignes unicode est laiss\u00e9 comme exercice au lecteur. Pour pr\u00e9visualiser les r\u00e9sultats de la conversion, cliquez sur \u201cpr\u00e9visualiser\u201d. Lorsque vous \u00eates satisfait de la conversion, cliquez sur \u201cappliquer\u201d. Pour abandonner la conversion, cliquez sur \u201cannuler\u201d.","title":"Conversions de type"},{"location":"col-transform/#transformations-basees-sur-des-formules","text":"Les tableurs sont des outils pratiques pour nettoyer les donn\u00e9es en utilisant des formules . Par exemple, imaginez que vous ayez des codes postaux qui ont perdu leurs z\u00e9ros initiaux - vous pouvez facilement les reformater avec une formule rapide : Nous pourrions maintenant figer les r\u00e9sultats et supprimer les donn\u00e9es originales si nous n\u2019en avons plus besoin. Si vous savez que vous allez jeter les donn\u00e9es originales comme cela, Grist offre des transformations de colonne comme un moyen plus rapide de modifier syst\u00e9matiquement toutes les cellules d\u2019une colonne. Trouvez la section \u201cTransformer\u201d en bas du panneau lat\u00e9ral des options de colonne (voir Colonnes pour savoir comment ouvrir ce panneau). Lorsque vous cliquez sur le bouton orange \u201c\u00e9clair\u201d, Grist vous propose une formule, return $zip dans ce cas. Vous pouvez modifier cette formule pour apporter un changement \u00e0 la colonne s\u00e9lectionn\u00e9e. Par exemple, return $zip + 1 ajouterait un au code postal. Vous pouvez pr\u00e9visualiser l\u2019effet de votre formule, et lorsque vous \u00eates satisfait, appuyez sur \u201cAppliquer\u201d. Dans notre cas, o\u00f9 nous voulons ajouter des z\u00e9ros initiaux, nous devons d\u2019abord changer notre type de colonne en Texte (en supposant qu\u2019il soit actuellement Entier - s\u2019il est Num\u00e9rique , convertissez-le d\u2019abord en Entier puis en Texte pour \u00e9viter les points d\u00e9cimaux). Une fois cela fait, nous pouvons utiliser notre formule pour ajouter des z\u00e9ros initiaux : Lorsque vous \u00eates satisfait, appuyez sur \u201cAppliquer\u201d pour remplacer les valeurs des cellules par leurs nouvelles versions. De m\u00eame, la colonne response pourrait \u00eatre transform\u00e9e avec la formule en valeurs vrai/faux avec $response[0] == 'y' , puis d\u00e9finie comme une colonne \u00e0 bascule .","title":"Transformations bas\u00e9es sur des formules"},{"location":"col-types/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Colonnes et types de donn\u00e9es # Ajouter et supprimer des colonnes # Chaque table Grist, lorsqu\u2019elle est cr\u00e9\u00e9e pour la premi\u00e8re fois, a trois colonnes appel\u00e9es A, B et C. Pour renommer une colonne, survolez l\u2019en-t\u00eate de la colonne, cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cRenommer la colonne\u201d (vous pouvez \u00e9galement cliquer deux fois sur l\u2019en-t\u00eate de la colonne). Pour supprimer une colonne, survolez l\u2019en-t\u00eate de la colonne, cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cSupprimer la colonne\u201d. Pour ajouter une colonne, cliquez sur le symbole \u201c+\u201d dans la ligne d\u2019en-t\u00eate pour ouvrir le menu \u201cAjouter une colonne\u201d. La premi\u00e8re option dans le menu, \u201cAjouter une colonne\u201d, ajoutera une nouvelle colonne de donn\u00e9es vide \u00e0 votre table. Si vous savez quel type de colonne vous avez besoin, l\u2019option suivante vous permet d\u2019assigner un type \u00e0 votre nouvelle colonne. S\u00e9lectionnez un type de colonne dans le menu d\u00e9roulant. La troisi\u00e8me option, \u201cAjouter une colonne de formule\u201d, ajoutera une nouvelle colonne de formule avec la bo\u00eete d\u2019entr\u00e9e de formule imm\u00e9diatement ouverte afin que vous puissiez commencer \u00e0 entrer votre formule sans clics suppl\u00e9mentaires. \u201cColonnes cach\u00e9es\u201d s\u2019agrandit pour montrer une liste de colonnes cach\u00e9es de cette vue qui peuvent \u00eatre rapidement ajout\u00e9es \u00e0 nouveau. \u201cAppariements\u201d vous permet d\u2019ajouter des colonnes de donn\u00e9es provenant de tables li\u00e9es. Vous pouvez utiliser des colonnes de r\u00e9f\u00e9rence pour relier des donn\u00e9es dans diff\u00e9rentes tables. En savoir plus sur R\u00e9f\u00e9rences et Appariements . \u201cRaccourcis\u201d r\u00e9pertorie les fonctions de formule d\u2019initialisation les plus fr\u00e9quemment utilis\u00e9es. En savoir plus sur chaque option de raccourci aux liens ci-dessous : Horodatage Autorit\u00e9 D\u00e9tecter les doublons dans\u2026 UUID R\u00e9organiser les colonnes # Pour r\u00e9organiser une colonne, s\u00e9lectionnez d\u2019abord la colonne si elle n\u2019est pas d\u00e9j\u00e0 s\u00e9lectionn\u00e9e, en cliquant sur l\u2019en-t\u00eate de la colonne. Ensuite, cliquez et maintenez l\u2019en-t\u00eate de la colonne. Apr\u00e8s une seconde ou deux, vous pourrez faire glisser l\u2019ensemble de la colonne vers son nouvel emplacement. Une autre fa\u00e7on de r\u00e9organiser les colonnes est via les options de vue : Dans la section des colonnes visibles, les colonnes peuvent \u00eatre d\u00e9plac\u00e9es librement pour les r\u00e9organiser. Vous pouvez \u00e9galement cacher des colonnes ici. Renommer les colonnes # Vous pouvez renommer les colonnes de plusieurs mani\u00e8res. Une fa\u00e7on est de double-cliquer sur un en-t\u00eate de colonne. Ensuite, vous pouvez renommer la colonne ou ajouter une description de colonne. Vous pouvez \u00e9galement survoler l\u2019en-t\u00eate de la colonne, cliquer sur le menu d\u00e9roulant, puis s\u00e9lectionner \u201cRenommer la colonne\u201d. Cela ouvre la m\u00eame fen\u00eatre contextuelle que celle vue ci-dessus. S\u00e9lectionner \u201cOptions de colonne\u201d dans le m\u00eame menu d\u00e9roulant ouvre le panneau de cr\u00e9ation. \u00c0 partir de l\u00e0, vous pouvez modifier l\u2019\u00e9tiquette de la colonne, affich\u00e9e en haut ou ajouter une description. Un avantage de cette m\u00e9thode est que vous pouvez \u00e9galement contr\u00f4ler l\u2019identifiant donn\u00e9 \u00e0 la colonne dans les formules. Par d\u00e9faut, cela est bas\u00e9 sur le nom du champ, avec tous les caract\u00e8res que Python n\u2019aime pas remplac\u00e9s par \u201c_\u201c, et un num\u00e9ro ajout\u00e9 si n\u00e9cessaire pour garder le nom unique dans votre table. Si vous n\u2019aimez pas cet identifiant, vous pouvez le changer, bien qu\u2019il doive toujours \u00eatre compatible avec Python. Cliquez sur l\u2019ic\u00f4ne de lien pour rendre le champ ID modifiable, puis entrez le nouvel ID de colonne. Mise en forme des colonnes # Les styles d\u2019en-t\u00eate et de cellule peuvent \u00eatre modifi\u00e9s sous l\u2019onglet Colonne du panneau de cr\u00e9ation. Lorsque vous ouvrez le menu de style, vous avez la possibilit\u00e9 d\u2019appliquer un formatage de texte ainsi que des couleurs de texte et de remplissage. Si vous souhaitez plus d\u2019options de couleur, cliquez sur la bo\u00eete de couleur de remplissage puis trouvez la teinte que vous souhaitez. Si vous avez une couleur sp\u00e9cifique que vous souhaitez utiliser, vous pouvez entrer le code hexad\u00e9cimal, les valeurs RGB ou HSL. Le style de cellule peut \u00e9galement \u00eatre modifi\u00e9 en fonction de r\u00e8gles conditionnelles. En savoir plus sur Mise en forme conditionnelle . Sp\u00e9cifier un type # Les colonnes Grist ont des types, similaires \u00e0 d\u2019autres feuilles de calcul ou bases de donn\u00e9es. Le type d\u2019une colonne contr\u00f4le son apparence et l\u2019aide que Grist vous offrira lors de l\u2019\u00e9dition des cellules. Lorsque vous cr\u00e9ez une nouvelle colonne, elle a initialement le type Any . Lorsque vous entrez dans la premi\u00e8re cellule de la colonne, Grist essaie de restreindre ce type. Si vous entrez un nombre, la colonne sera chang\u00e9e en type Numeric , qui est align\u00e9 \u00e0 droite par d\u00e9faut. Si vous entrez quelque chose qui ne ressemble pas \u00e0 un nombre, la colonne sera chang\u00e9e en type Text , qui est align\u00e9 \u00e0 gauche par d\u00e9faut. Pour inspecter le type d\u2019une colonne, survolez l\u2019en-t\u00eate de la colonne, puis cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cOptions de colonne\u201d. La section \u201cType de colonne\u201d est ce que vous recherchez. Vous voudrez souvent contr\u00f4ler le type de colonne manuellement. Vous pouvez le changer dans la section \u201cType de colonne\u201d. Par exemple, ici nous d\u00e9finissons une colonne pleine de r\u00e9ponses \u201coui\u201d et \u201cnon\u201d comme \u00e9tant de type Toggle : Un avantage de faire cela est que Grist peut maintenant vous offrir des moyens de visualiser la colonne qui sont sp\u00e9cialis\u00e9s pour les valeurs de type on/off. Chaque type de colonne a diff\u00e9rentes options dans la section \u201cFormat de cellule\u201d du panneau lat\u00e9ral : Quel que soit le type de colonne, vous pouvez entrer n\u2019importe quelle valeur dans les cellules. Si une valeur entr\u00e9e est incompatible avec le type d\u00e9fini, la cellule sera mise en surbrillance avec une erreur (et les colonnes r\u00e9f\u00e9renc\u00e9es par la valeur invalide afficheront \u00e9galement une erreur) : Types pris en charge # Grist prend en charge les types suivants : Type Description Texte ( Par d\u00e9faut ) Toute cha\u00eene de texte. Num\u00e9rique Nombres \u00e0 virgule flottante. Entier Entiers (nombres entiers). Basculer Bool\u00e9en (Vrai / Faux) Date Date valide (sans composant horaire). DateHeure Date + heure valide. Choix Valeur unique d\u2019une liste de valeurs valides pr\u00e9d\u00e9finies. Liste de choix Plusieurs valeurs d\u2019une liste de valeurs valides pr\u00e9d\u00e9finies. R\u00e9f\u00e9rence Une colonne de r\u00e9f\u00e9rence vers une autre table. Liste de r\u00e9f\u00e9rences Une liste de r\u00e9f\u00e9rences vers une autre table. Pi\u00e8ce jointe Cellules o\u00f9 vous pouvez placer des fichiers ou des images. Colonnes de texte # Vous pouvez mettre n\u2019importe quel texte que vous aimez dans ce type de colonne. Pour la mise en forme, vous pouvez contr\u00f4ler l\u2019alignement et le retour \u00e0 la ligne, la couleur du texte et la couleur de fond. Si la colonne est utilis\u00e9e pour stocker des liens web, vous pouvez activer le formatage \u201cHyperLink\u201d pour rendre les liens plus jolis et inclure une ic\u00f4ne de lien cliquable. Hyperliens # Lorsque une colonne de texte utilise le formatage \u201cHyperLink\u201d, les valeurs sont format\u00e9es comme suit : https://getgrist.com affichera https://getgrist.com . Grist Labs https://getgrist.com affichera Grist Labs (liant \u00e0 \u201chttps://getgrist.com\u201d avec \u201cGrist Labs\u201d comme texte). Email Help mailto:support@getgrist.com affichera Email Help , un lien qui ouvrirait un programme de messagerie pour composer un email \u00e0 support@getgrist.com. En g\u00e9n\u00e9ral, la valeur jusqu\u2019au dernier espace est utilis\u00e9e comme texte du lien, tandis que le dernier mot est utilis\u00e9 comme destination du lien. Le formatage des liens est particuli\u00e8rement utile lorsque les liens sont g\u00e9n\u00e9r\u00e9s \u00e0 l\u2019aide d\u2019une formule telle que : $Company + \" \" + $Website Colonnes num\u00e9riques # Ce type est pour les nombres, y compris les nombres \u00e0 virgule flottante. En plus de contr\u00f4ler l\u2019alignement et la couleur, vous pouvez choisir le format de nombre, et le nombre minimum et maximum de chiffres \u00e0 afficher apr\u00e8s la virgule. Choisir l\u2019option \u201cSpinner\u201d pour le FORMAT DE CELLULE affichera des fl\u00e8ches dans chaque cellule pour augmenter/diminuer le nombre. Les options sous FORMAT DE NOMBRE incluent : $ : Format pour les montants en devise, tels que les dollars ou les euros. S\u00e9lectionner le $ ajoutera un pr\u00e9fixe de devise, des s\u00e9parateurs de milliers, et par d\u00e9faut \u00e0 2 chiffres apr\u00e8s la virgule. Cela ouvrira \u00e9galement un s\u00e9lecteur de devise pour les devises internationales. D\u00e9finir la devise par d\u00e9faut Vous pouvez d\u00e9finir le fuseau horaire, la locale et la devise par d\u00e9faut d\u2019un document dans Param\u00e8tres du document . , : Activer l\u2019affichage des s\u00e9parateurs de milliers. % : Afficher les nombres en pourcentages. Par exemple, \u201c0.5\u201d s\u2019afficherait comme \u201c50%\u201d. Exp : Afficher les nombres en notation exponentielle (ou scientifique). Par exemple, \u201c1234\u201d serait affich\u00e9 comme \u201c1.234E3\u201d. (-) : Afficher les nombres n\u00e9gatifs entre parenth\u00e8ses, sans signe moins devant. Ceci est couramment utilis\u00e9 en comptabilit\u00e9, et g\u00e9n\u00e9ralement combin\u00e9 avec les formats $ ou , . Colonnes enti\u00e8res # Ce type est strictement pour les nombres entiers. Il a les m\u00eames options que le type num\u00e9rique. Colonnes basculantes # Ce type est pour stocker des valeurs vrai/faux. Les valeurs peuvent \u00eatre affich\u00e9es sous forme de texte, de cases \u00e0 cocher ou de commutateurs. Voir \u00e9galement l\u2019exemple dans Sp\u00e9cifier un type . Colonnes de date # Ce type est pour stocker des dates de calendrier (sans composant horaire). Plus de d\u00e9tails dans Travailler avec des dates . Vous pouvez choisir le format des dates, voir la r\u00e9f\u00e9rence de formatage des dates . Colonnes DateHeure # Ce type est pour stocker des dates de calendrier plus l\u2019heure de la journ\u00e9e. Plus de d\u00e9tails dans Travailler avec des dates . Vous pouvez choisir le format des dates, voir la r\u00e9f\u00e9rence de formatage des dates et heures . Vous pouvez \u00e9galement sp\u00e9cifier le fuseau horaire \u00e0 afficher. Si vous souhaitez d\u00e9finir un fuseau horaire par d\u00e9faut pour votre document, vous pouvez le faire dans Param\u00e8tres du document . Colonnes de choix # Ce type est pour stocker une valeur parmi un ensemble de valeurs valides, o\u00f9 vous pouvez sp\u00e9cifier les valeurs disponibles. Il y a un exemple d\u2019utilisation de ce type de colonne dans l\u2019 exemple de CRM l\u00e9ger . Si vous commencez avec une colonne de texte peupl\u00e9e, Grist prendra toutes les valeurs uniques de cette colonne comme choix valides. Vous pouvez ajouter ou supprimer des choix en cliquant soit sur Modifier soit sur la bo\u00eete de choix. Pour ajouter un choix, tapez sa valeur dans le champ de texte en dessous des autres choix et appuyez sur Entr\u00e9e . Pour supprimer un choix, cliquez sur l\u2019ic\u00f4ne de suppression \u00e0 droite du choix ou s\u00e9lectionnez le choix en cliquant dessus, puis appuyez sur Retour arri\u00e8re / Supprimer . Pour appliquer/enregistrer vos modifications, vous pouvez soit cliquer sur le bouton Enregistrer , soit appuyer sur Entr\u00e9e . Pour annuler vos modifications, vous pouvez soit cliquer sur le bouton Annuler , soit appuyer sur \u00c9chap . Cliquer sur le menu d\u00e9roulant de couleur \u00e0 gauche d\u2019un choix ouvrira un s\u00e9lecteur de couleur pour personnaliser la couleur de remplissage et de texte d\u2019un choix. Les modifications de couleurs sont refl\u00e9t\u00e9es dans les cellules et dans le reste de votre document une fois que vous avez enregistr\u00e9 vos modifications. Les choix peuvent \u00eatre r\u00e9organis\u00e9s en cliquant et en les faisant glisser, ce qui d\u00e9termine l\u2019ordre dans lequel ils apparaissent lors de la saisie dans une cellule. Vous pouvez \u00e9galement renommer un choix en cliquant dessus et en tapant un nouveau nom. Renommer un choix renomme \u00e9galement toutes les valeurs utilis\u00e9es dans votre document. L\u2019\u00e9diteur de configuration prend en charge de nombreux raccourcis clavier pratiques. Vous pouvez appuyer sur les touches Fl\u00e8che haut et Fl\u00e8che bas pour naviguer entre les choix s\u00e9lectionn\u00e9s ; maintenir la touche Maj pour s\u00e9lectionner plusieurs choix adjacents tout en cliquant ou en utilisant les touches fl\u00e9ch\u00e9es ; et maintenir la touche Commande / Contr\u00f4le pour s\u00e9lectionner plusieurs choix tout en cliquant. Pour s\u00e9lectionner tous les choix, vous pouvez appuyer sur Commande / Contr\u00f4le + A . L\u2019annulation et la r\u00e9tablissement sont \u00e9galement pris en charge dans l\u2019\u00e9diteur de configuration. Lorsque votre curseur est focalis\u00e9 sur le champ de texte de l\u2019\u00e9diteur, vous pouvez appuyer sur Commande / Contr\u00f4le + Z pour annuler votre derni\u00e8re modification, et Commande / Contr\u00f4le + Maj + Z pour la r\u00e9tablir. L\u2019\u00e9diteur de configuration prend \u00e9galement en charge le copier-coller. Pour copier, s\u00e9lectionnez les choix que vous souhaitez copier et appuyez sur Commande / Contr\u00f4le + C . Pour coller, concentrez-vous sur le champ de texte et appuyez sur Commande / Contr\u00f4le + V . Les choix sont coll\u00e9s en bloc si le presse-papiers contient plusieurs lignes de texte. Les choix peuvent \u00e9galement \u00eatre copi\u00e9s \u00e0 partir de l\u2019\u00e9diteur de configuration d\u2019une colonne et coll\u00e9s dans une autre, ce qui copiera \u00e0 la fois les valeurs et leurs couleurs configur\u00e9es. Lors de la saisie dans une cellule de colonne de choix, vos choix configur\u00e9s seront affich\u00e9s dans un menu de saisie semi-automatique. Vous pouvez soit cliquer sur un choix, soit utiliser les touches fl\u00e9ch\u00e9es et Entr\u00e9e pour ajouter un choix \u00e0 une cellule. Si votre saisie n\u2019est pas l\u2019un des choix valides, Grist affichera une option de menu pour l\u2019ajouter facilement comme choix valide et dans la cellule en une seule \u00e9tape. Colonnes de liste de choix # Ce type est pour stocker plusieurs valeurs d\u2019un ensemble de valeurs valides, o\u00f9 vous pouvez sp\u00e9cifier les valeurs disponibles. Si vous commencez avec une colonne de texte peupl\u00e9e, Grist prendra toutes les valeurs uniques de cette colonne comme choix valides. Les colonnes de liste de choix sont configur\u00e9es de la m\u00eame mani\u00e8re que les colonnes de Choix , et prennent en charge le m\u00eame niveau de personnalisation et de raccourcis clavier. Elles diff\u00e8rent par le nombre de choix qu\u2019elles permettent d\u2019entrer dans chaque cellule. Alors que les colonnes de choix ne permettent qu\u2019une seule valeur au maximum dans une cellule, les colonnes de liste de choix en permettent plusieurs. Comme avec les colonnes de choix, lors de la saisie dans une cellule de colonne de liste de choix, les choix valides seront affich\u00e9s dans un menu de saisie semi-automatique. Une fois que vous avez s\u00e9lectionn\u00e9 une valeur, vous pouvez continuer \u00e0 ajouter des choix \u00e0 la m\u00eame cellule. Les choix peuvent \u00eatre r\u00e9organis\u00e9s \u00e0 l\u2019int\u00e9rieur de leurs cellules en cliquant et en les faisant glisser pendant que la cellule est en cours d\u2019\u00e9dition. Vous pouvez \u00e9galement utiliser les touches fl\u00e9ch\u00e9es et la touche Supprimer pour naviguer et supprimer des choix, ou simplement cliquer sur l\u2019ic\u00f4ne de suppression lorsque vous survolez un choix. Filtrer les listes d\u00e9roulantes des colonnes de choix et de liste de choix Lors de la saisie de donn\u00e9es dans une colonne de choix ou de liste de choix, vous verrez une liste d\u00e9roulante de tous les choix disponibles. Parfois, il serait utile de filtrer la liste d\u00e9roulante en fonction d\u2019une condition, comme la valeur dans une autre cellule. \u00c9crire des conditions pour filtrer les listes d\u00e9roulantes de choix est similaire \u00e0 filtrer les listes d\u00e9roulantes des colonnes de r\u00e9f\u00e9rence . Colonnes de r\u00e9f\u00e9rence # Ceci \u00e9tablit une r\u00e9f\u00e9rence crois\u00e9e \u00e0 une autre table. Vous pouvez sp\u00e9cifier la table \u00e0 r\u00e9f\u00e9rencer, et une colonne au sein de cette table \u00e0 afficher. Il y a beaucoup de choses que vous pouvez faire avec ce type de colonne, voir Colonnes de r\u00e9f\u00e9rence pour plus de d\u00e9tails. Colonnes de liste de r\u00e9f\u00e9rences # Comme les Colonnes de r\u00e9f\u00e9rence , mais peuvent stocker plusieurs r\u00e9f\u00e9rences dans une seule cellule. Il y a beaucoup de choses que vous pouvez faire avec ce type de colonne, voir Colonnes de r\u00e9f\u00e9rence pour plus de d\u00e9tails. Colonnes de pi\u00e8ces jointes # Ce type de colonne vous permet d\u2019ins\u00e9rer des fichiers et des images entiers dans des cellules. Lorsque des images sont ajout\u00e9es dans des cellules, une miniature d\u2019aper\u00e7u est affich\u00e9e dans la cellule. La barre \u201cTaille\u201d permet de contr\u00f4ler l\u2019\u00e9chelle de cette miniature. Lorsque vous cr\u00e9ez une colonne de pi\u00e8ces jointes, les cellules de cette colonne auront une ic\u00f4ne de trombone : Lorsque vous cliquez sur une ic\u00f4ne de trombone, vous pouvez s\u00e9lectionner un fichier \u00e0 joindre. Si c\u2019est une image, vous verrez une miniature dans la cellule. Si vous survolez l\u2019image, vous verrez \u00e0 nouveau une ic\u00f4ne de trombone, que vous pouvez utiliser pour ajouter d\u2019autres fichiers dans la m\u00eame cellule. Vous verrez \u00e9galement une ic\u00f4ne \u201c\u0153il ouvert\u201d, qui, lorsqu\u2019elle est cliqu\u00e9e, affiche une vue agrandie de toutes les pi\u00e8ces jointes de la cellule, et vous donne un moyen de les renommer, de les t\u00e9l\u00e9charger ou de les supprimer.","title":"Columns & types"},{"location":"col-types/#colonnes-et-types-de-donnees","text":"","title":"Colonnes et types de donn\u00e9es"},{"location":"col-types/#ajouter-et-supprimer-des-colonnes","text":"Chaque table Grist, lorsqu\u2019elle est cr\u00e9\u00e9e pour la premi\u00e8re fois, a trois colonnes appel\u00e9es A, B et C. Pour renommer une colonne, survolez l\u2019en-t\u00eate de la colonne, cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cRenommer la colonne\u201d (vous pouvez \u00e9galement cliquer deux fois sur l\u2019en-t\u00eate de la colonne). Pour supprimer une colonne, survolez l\u2019en-t\u00eate de la colonne, cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cSupprimer la colonne\u201d. Pour ajouter une colonne, cliquez sur le symbole \u201c+\u201d dans la ligne d\u2019en-t\u00eate pour ouvrir le menu \u201cAjouter une colonne\u201d. La premi\u00e8re option dans le menu, \u201cAjouter une colonne\u201d, ajoutera une nouvelle colonne de donn\u00e9es vide \u00e0 votre table. Si vous savez quel type de colonne vous avez besoin, l\u2019option suivante vous permet d\u2019assigner un type \u00e0 votre nouvelle colonne. S\u00e9lectionnez un type de colonne dans le menu d\u00e9roulant. La troisi\u00e8me option, \u201cAjouter une colonne de formule\u201d, ajoutera une nouvelle colonne de formule avec la bo\u00eete d\u2019entr\u00e9e de formule imm\u00e9diatement ouverte afin que vous puissiez commencer \u00e0 entrer votre formule sans clics suppl\u00e9mentaires. \u201cColonnes cach\u00e9es\u201d s\u2019agrandit pour montrer une liste de colonnes cach\u00e9es de cette vue qui peuvent \u00eatre rapidement ajout\u00e9es \u00e0 nouveau. \u201cAppariements\u201d vous permet d\u2019ajouter des colonnes de donn\u00e9es provenant de tables li\u00e9es. Vous pouvez utiliser des colonnes de r\u00e9f\u00e9rence pour relier des donn\u00e9es dans diff\u00e9rentes tables. En savoir plus sur R\u00e9f\u00e9rences et Appariements . \u201cRaccourcis\u201d r\u00e9pertorie les fonctions de formule d\u2019initialisation les plus fr\u00e9quemment utilis\u00e9es. En savoir plus sur chaque option de raccourci aux liens ci-dessous : Horodatage Autorit\u00e9 D\u00e9tecter les doublons dans\u2026 UUID","title":"Ajouter et supprimer des colonnes"},{"location":"col-types/#reorganiser-les-colonnes","text":"Pour r\u00e9organiser une colonne, s\u00e9lectionnez d\u2019abord la colonne si elle n\u2019est pas d\u00e9j\u00e0 s\u00e9lectionn\u00e9e, en cliquant sur l\u2019en-t\u00eate de la colonne. Ensuite, cliquez et maintenez l\u2019en-t\u00eate de la colonne. Apr\u00e8s une seconde ou deux, vous pourrez faire glisser l\u2019ensemble de la colonne vers son nouvel emplacement. Une autre fa\u00e7on de r\u00e9organiser les colonnes est via les options de vue : Dans la section des colonnes visibles, les colonnes peuvent \u00eatre d\u00e9plac\u00e9es librement pour les r\u00e9organiser. Vous pouvez \u00e9galement cacher des colonnes ici.","title":"R\u00e9organiser les colonnes"},{"location":"col-types/#renommer-les-colonnes","text":"Vous pouvez renommer les colonnes de plusieurs mani\u00e8res. Une fa\u00e7on est de double-cliquer sur un en-t\u00eate de colonne. Ensuite, vous pouvez renommer la colonne ou ajouter une description de colonne. Vous pouvez \u00e9galement survoler l\u2019en-t\u00eate de la colonne, cliquer sur le menu d\u00e9roulant, puis s\u00e9lectionner \u201cRenommer la colonne\u201d. Cela ouvre la m\u00eame fen\u00eatre contextuelle que celle vue ci-dessus. S\u00e9lectionner \u201cOptions de colonne\u201d dans le m\u00eame menu d\u00e9roulant ouvre le panneau de cr\u00e9ation. \u00c0 partir de l\u00e0, vous pouvez modifier l\u2019\u00e9tiquette de la colonne, affich\u00e9e en haut ou ajouter une description. Un avantage de cette m\u00e9thode est que vous pouvez \u00e9galement contr\u00f4ler l\u2019identifiant donn\u00e9 \u00e0 la colonne dans les formules. Par d\u00e9faut, cela est bas\u00e9 sur le nom du champ, avec tous les caract\u00e8res que Python n\u2019aime pas remplac\u00e9s par \u201c_\u201c, et un num\u00e9ro ajout\u00e9 si n\u00e9cessaire pour garder le nom unique dans votre table. Si vous n\u2019aimez pas cet identifiant, vous pouvez le changer, bien qu\u2019il doive toujours \u00eatre compatible avec Python. Cliquez sur l\u2019ic\u00f4ne de lien pour rendre le champ ID modifiable, puis entrez le nouvel ID de colonne.","title":"Renommer les colonnes"},{"location":"col-types/#mise-en-forme-des-colonnes","text":"Les styles d\u2019en-t\u00eate et de cellule peuvent \u00eatre modifi\u00e9s sous l\u2019onglet Colonne du panneau de cr\u00e9ation. Lorsque vous ouvrez le menu de style, vous avez la possibilit\u00e9 d\u2019appliquer un formatage de texte ainsi que des couleurs de texte et de remplissage. Si vous souhaitez plus d\u2019options de couleur, cliquez sur la bo\u00eete de couleur de remplissage puis trouvez la teinte que vous souhaitez. Si vous avez une couleur sp\u00e9cifique que vous souhaitez utiliser, vous pouvez entrer le code hexad\u00e9cimal, les valeurs RGB ou HSL. Le style de cellule peut \u00e9galement \u00eatre modifi\u00e9 en fonction de r\u00e8gles conditionnelles. En savoir plus sur Mise en forme conditionnelle .","title":"Mise en forme des colonnes"},{"location":"col-types/#specifier-un-type","text":"Les colonnes Grist ont des types, similaires \u00e0 d\u2019autres feuilles de calcul ou bases de donn\u00e9es. Le type d\u2019une colonne contr\u00f4le son apparence et l\u2019aide que Grist vous offrira lors de l\u2019\u00e9dition des cellules. Lorsque vous cr\u00e9ez une nouvelle colonne, elle a initialement le type Any . Lorsque vous entrez dans la premi\u00e8re cellule de la colonne, Grist essaie de restreindre ce type. Si vous entrez un nombre, la colonne sera chang\u00e9e en type Numeric , qui est align\u00e9 \u00e0 droite par d\u00e9faut. Si vous entrez quelque chose qui ne ressemble pas \u00e0 un nombre, la colonne sera chang\u00e9e en type Text , qui est align\u00e9 \u00e0 gauche par d\u00e9faut. Pour inspecter le type d\u2019une colonne, survolez l\u2019en-t\u00eate de la colonne, puis cliquez sur le menu d\u00e9roulant, puis s\u00e9lectionnez \u201cOptions de colonne\u201d. La section \u201cType de colonne\u201d est ce que vous recherchez. Vous voudrez souvent contr\u00f4ler le type de colonne manuellement. Vous pouvez le changer dans la section \u201cType de colonne\u201d. Par exemple, ici nous d\u00e9finissons une colonne pleine de r\u00e9ponses \u201coui\u201d et \u201cnon\u201d comme \u00e9tant de type Toggle : Un avantage de faire cela est que Grist peut maintenant vous offrir des moyens de visualiser la colonne qui sont sp\u00e9cialis\u00e9s pour les valeurs de type on/off. Chaque type de colonne a diff\u00e9rentes options dans la section \u201cFormat de cellule\u201d du panneau lat\u00e9ral : Quel que soit le type de colonne, vous pouvez entrer n\u2019importe quelle valeur dans les cellules. Si une valeur entr\u00e9e est incompatible avec le type d\u00e9fini, la cellule sera mise en surbrillance avec une erreur (et les colonnes r\u00e9f\u00e9renc\u00e9es par la valeur invalide afficheront \u00e9galement une erreur) :","title":"Sp\u00e9cifier un type"},{"location":"col-types/#types-pris-en-charge","text":"Grist prend en charge les types suivants : Type Description Texte ( Par d\u00e9faut ) Toute cha\u00eene de texte. Num\u00e9rique Nombres \u00e0 virgule flottante. Entier Entiers (nombres entiers). Basculer Bool\u00e9en (Vrai / Faux) Date Date valide (sans composant horaire). DateHeure Date + heure valide. Choix Valeur unique d\u2019une liste de valeurs valides pr\u00e9d\u00e9finies. Liste de choix Plusieurs valeurs d\u2019une liste de valeurs valides pr\u00e9d\u00e9finies. R\u00e9f\u00e9rence Une colonne de r\u00e9f\u00e9rence vers une autre table. Liste de r\u00e9f\u00e9rences Une liste de r\u00e9f\u00e9rences vers une autre table. Pi\u00e8ce jointe Cellules o\u00f9 vous pouvez placer des fichiers ou des images.","title":"Types pris en charge"},{"location":"col-types/#colonnes-de-texte","text":"Vous pouvez mettre n\u2019importe quel texte que vous aimez dans ce type de colonne. Pour la mise en forme, vous pouvez contr\u00f4ler l\u2019alignement et le retour \u00e0 la ligne, la couleur du texte et la couleur de fond. Si la colonne est utilis\u00e9e pour stocker des liens web, vous pouvez activer le formatage \u201cHyperLink\u201d pour rendre les liens plus jolis et inclure une ic\u00f4ne de lien cliquable.","title":"Colonnes de texte"},{"location":"col-types/#hyperliens","text":"Lorsque une colonne de texte utilise le formatage \u201cHyperLink\u201d, les valeurs sont format\u00e9es comme suit : https://getgrist.com affichera https://getgrist.com . Grist Labs https://getgrist.com affichera Grist Labs (liant \u00e0 \u201chttps://getgrist.com\u201d avec \u201cGrist Labs\u201d comme texte). Email Help mailto:support@getgrist.com affichera Email Help , un lien qui ouvrirait un programme de messagerie pour composer un email \u00e0 support@getgrist.com. En g\u00e9n\u00e9ral, la valeur jusqu\u2019au dernier espace est utilis\u00e9e comme texte du lien, tandis que le dernier mot est utilis\u00e9 comme destination du lien. Le formatage des liens est particuli\u00e8rement utile lorsque les liens sont g\u00e9n\u00e9r\u00e9s \u00e0 l\u2019aide d\u2019une formule telle que : $Company + \" \" + $Website","title":"Hyperliens"},{"location":"col-types/#colonnes-numeriques","text":"Ce type est pour les nombres, y compris les nombres \u00e0 virgule flottante. En plus de contr\u00f4ler l\u2019alignement et la couleur, vous pouvez choisir le format de nombre, et le nombre minimum et maximum de chiffres \u00e0 afficher apr\u00e8s la virgule. Choisir l\u2019option \u201cSpinner\u201d pour le FORMAT DE CELLULE affichera des fl\u00e8ches dans chaque cellule pour augmenter/diminuer le nombre. Les options sous FORMAT DE NOMBRE incluent : $ : Format pour les montants en devise, tels que les dollars ou les euros. S\u00e9lectionner le $ ajoutera un pr\u00e9fixe de devise, des s\u00e9parateurs de milliers, et par d\u00e9faut \u00e0 2 chiffres apr\u00e8s la virgule. Cela ouvrira \u00e9galement un s\u00e9lecteur de devise pour les devises internationales. D\u00e9finir la devise par d\u00e9faut Vous pouvez d\u00e9finir le fuseau horaire, la locale et la devise par d\u00e9faut d\u2019un document dans Param\u00e8tres du document . , : Activer l\u2019affichage des s\u00e9parateurs de milliers. % : Afficher les nombres en pourcentages. Par exemple, \u201c0.5\u201d s\u2019afficherait comme \u201c50%\u201d. Exp : Afficher les nombres en notation exponentielle (ou scientifique). Par exemple, \u201c1234\u201d serait affich\u00e9 comme \u201c1.234E3\u201d. (-) : Afficher les nombres n\u00e9gatifs entre parenth\u00e8ses, sans signe moins devant. Ceci est couramment utilis\u00e9 en comptabilit\u00e9, et g\u00e9n\u00e9ralement combin\u00e9 avec les formats $ ou , .","title":"Colonnes num\u00e9riques"},{"location":"col-types/#colonnes-entieres","text":"Ce type est strictement pour les nombres entiers. Il a les m\u00eames options que le type num\u00e9rique.","title":"Colonnes enti\u00e8res"},{"location":"col-types/#colonnes-basculantes","text":"Ce type est pour stocker des valeurs vrai/faux. Les valeurs peuvent \u00eatre affich\u00e9es sous forme de texte, de cases \u00e0 cocher ou de commutateurs. Voir \u00e9galement l\u2019exemple dans Sp\u00e9cifier un type .","title":"Colonnes basculantes"},{"location":"col-types/#colonnes-de-date","text":"Ce type est pour stocker des dates de calendrier (sans composant horaire). Plus de d\u00e9tails dans Travailler avec des dates . Vous pouvez choisir le format des dates, voir la r\u00e9f\u00e9rence de formatage des dates .","title":"Colonnes de date"},{"location":"col-types/#colonnes-dateheure","text":"Ce type est pour stocker des dates de calendrier plus l\u2019heure de la journ\u00e9e. Plus de d\u00e9tails dans Travailler avec des dates . Vous pouvez choisir le format des dates, voir la r\u00e9f\u00e9rence de formatage des dates et heures . Vous pouvez \u00e9galement sp\u00e9cifier le fuseau horaire \u00e0 afficher. Si vous souhaitez d\u00e9finir un fuseau horaire par d\u00e9faut pour votre document, vous pouvez le faire dans Param\u00e8tres du document .","title":"Colonnes DateHeure"},{"location":"col-types/#colonnes-de-choix","text":"Ce type est pour stocker une valeur parmi un ensemble de valeurs valides, o\u00f9 vous pouvez sp\u00e9cifier les valeurs disponibles. Il y a un exemple d\u2019utilisation de ce type de colonne dans l\u2019 exemple de CRM l\u00e9ger . Si vous commencez avec une colonne de texte peupl\u00e9e, Grist prendra toutes les valeurs uniques de cette colonne comme choix valides. Vous pouvez ajouter ou supprimer des choix en cliquant soit sur Modifier soit sur la bo\u00eete de choix. Pour ajouter un choix, tapez sa valeur dans le champ de texte en dessous des autres choix et appuyez sur Entr\u00e9e . Pour supprimer un choix, cliquez sur l\u2019ic\u00f4ne de suppression \u00e0 droite du choix ou s\u00e9lectionnez le choix en cliquant dessus, puis appuyez sur Retour arri\u00e8re / Supprimer . Pour appliquer/enregistrer vos modifications, vous pouvez soit cliquer sur le bouton Enregistrer , soit appuyer sur Entr\u00e9e . Pour annuler vos modifications, vous pouvez soit cliquer sur le bouton Annuler , soit appuyer sur \u00c9chap . Cliquer sur le menu d\u00e9roulant de couleur \u00e0 gauche d\u2019un choix ouvrira un s\u00e9lecteur de couleur pour personnaliser la couleur de remplissage et de texte d\u2019un choix. Les modifications de couleurs sont refl\u00e9t\u00e9es dans les cellules et dans le reste de votre document une fois que vous avez enregistr\u00e9 vos modifications. Les choix peuvent \u00eatre r\u00e9organis\u00e9s en cliquant et en les faisant glisser, ce qui d\u00e9termine l\u2019ordre dans lequel ils apparaissent lors de la saisie dans une cellule. Vous pouvez \u00e9galement renommer un choix en cliquant dessus et en tapant un nouveau nom. Renommer un choix renomme \u00e9galement toutes les valeurs utilis\u00e9es dans votre document. L\u2019\u00e9diteur de configuration prend en charge de nombreux raccourcis clavier pratiques. Vous pouvez appuyer sur les touches Fl\u00e8che haut et Fl\u00e8che bas pour naviguer entre les choix s\u00e9lectionn\u00e9s ; maintenir la touche Maj pour s\u00e9lectionner plusieurs choix adjacents tout en cliquant ou en utilisant les touches fl\u00e9ch\u00e9es ; et maintenir la touche Commande / Contr\u00f4le pour s\u00e9lectionner plusieurs choix tout en cliquant. Pour s\u00e9lectionner tous les choix, vous pouvez appuyer sur Commande / Contr\u00f4le + A . L\u2019annulation et la r\u00e9tablissement sont \u00e9galement pris en charge dans l\u2019\u00e9diteur de configuration. Lorsque votre curseur est focalis\u00e9 sur le champ de texte de l\u2019\u00e9diteur, vous pouvez appuyer sur Commande / Contr\u00f4le + Z pour annuler votre derni\u00e8re modification, et Commande / Contr\u00f4le + Maj + Z pour la r\u00e9tablir. L\u2019\u00e9diteur de configuration prend \u00e9galement en charge le copier-coller. Pour copier, s\u00e9lectionnez les choix que vous souhaitez copier et appuyez sur Commande / Contr\u00f4le + C . Pour coller, concentrez-vous sur le champ de texte et appuyez sur Commande / Contr\u00f4le + V . Les choix sont coll\u00e9s en bloc si le presse-papiers contient plusieurs lignes de texte. Les choix peuvent \u00e9galement \u00eatre copi\u00e9s \u00e0 partir de l\u2019\u00e9diteur de configuration d\u2019une colonne et coll\u00e9s dans une autre, ce qui copiera \u00e0 la fois les valeurs et leurs couleurs configur\u00e9es. Lors de la saisie dans une cellule de colonne de choix, vos choix configur\u00e9s seront affich\u00e9s dans un menu de saisie semi-automatique. Vous pouvez soit cliquer sur un choix, soit utiliser les touches fl\u00e9ch\u00e9es et Entr\u00e9e pour ajouter un choix \u00e0 une cellule. Si votre saisie n\u2019est pas l\u2019un des choix valides, Grist affichera une option de menu pour l\u2019ajouter facilement comme choix valide et dans la cellule en une seule \u00e9tape.","title":"Colonnes de choix"},{"location":"col-types/#colonnes-de-liste-de-choix","text":"Ce type est pour stocker plusieurs valeurs d\u2019un ensemble de valeurs valides, o\u00f9 vous pouvez sp\u00e9cifier les valeurs disponibles. Si vous commencez avec une colonne de texte peupl\u00e9e, Grist prendra toutes les valeurs uniques de cette colonne comme choix valides. Les colonnes de liste de choix sont configur\u00e9es de la m\u00eame mani\u00e8re que les colonnes de Choix , et prennent en charge le m\u00eame niveau de personnalisation et de raccourcis clavier. Elles diff\u00e8rent par le nombre de choix qu\u2019elles permettent d\u2019entrer dans chaque cellule. Alors que les colonnes de choix ne permettent qu\u2019une seule valeur au maximum dans une cellule, les colonnes de liste de choix en permettent plusieurs. Comme avec les colonnes de choix, lors de la saisie dans une cellule de colonne de liste de choix, les choix valides seront affich\u00e9s dans un menu de saisie semi-automatique. Une fois que vous avez s\u00e9lectionn\u00e9 une valeur, vous pouvez continuer \u00e0 ajouter des choix \u00e0 la m\u00eame cellule. Les choix peuvent \u00eatre r\u00e9organis\u00e9s \u00e0 l\u2019int\u00e9rieur de leurs cellules en cliquant et en les faisant glisser pendant que la cellule est en cours d\u2019\u00e9dition. Vous pouvez \u00e9galement utiliser les touches fl\u00e9ch\u00e9es et la touche Supprimer pour naviguer et supprimer des choix, ou simplement cliquer sur l\u2019ic\u00f4ne de suppression lorsque vous survolez un choix. Filtrer les listes d\u00e9roulantes des colonnes de choix et de liste de choix Lors de la saisie de donn\u00e9es dans une colonne de choix ou de liste de choix, vous verrez une liste d\u00e9roulante de tous les choix disponibles. Parfois, il serait utile de filtrer la liste d\u00e9roulante en fonction d\u2019une condition, comme la valeur dans une autre cellule. \u00c9crire des conditions pour filtrer les listes d\u00e9roulantes de choix est similaire \u00e0 filtrer les listes d\u00e9roulantes des colonnes de r\u00e9f\u00e9rence .","title":"Colonnes de liste de choix"},{"location":"col-types/#colonnes-de-reference","text":"Ceci \u00e9tablit une r\u00e9f\u00e9rence crois\u00e9e \u00e0 une autre table. Vous pouvez sp\u00e9cifier la table \u00e0 r\u00e9f\u00e9rencer, et une colonne au sein de cette table \u00e0 afficher. Il y a beaucoup de choses que vous pouvez faire avec ce type de colonne, voir Colonnes de r\u00e9f\u00e9rence pour plus de d\u00e9tails.","title":"Colonnes de r\u00e9f\u00e9rence"},{"location":"col-types/#colonnes-de-liste-de-references","text":"Comme les Colonnes de r\u00e9f\u00e9rence , mais peuvent stocker plusieurs r\u00e9f\u00e9rences dans une seule cellule. Il y a beaucoup de choses que vous pouvez faire avec ce type de colonne, voir Colonnes de r\u00e9f\u00e9rence pour plus de d\u00e9tails.","title":"Colonnes de liste de r\u00e9f\u00e9rences"},{"location":"col-types/#colonnes-de-pieces-jointes","text":"Ce type de colonne vous permet d\u2019ins\u00e9rer des fichiers et des images entiers dans des cellules. Lorsque des images sont ajout\u00e9es dans des cellules, une miniature d\u2019aper\u00e7u est affich\u00e9e dans la cellule. La barre \u201cTaille\u201d permet de contr\u00f4ler l\u2019\u00e9chelle de cette miniature. Lorsque vous cr\u00e9ez une colonne de pi\u00e8ces jointes, les cellules de cette colonne auront une ic\u00f4ne de trombone : Lorsque vous cliquez sur une ic\u00f4ne de trombone, vous pouvez s\u00e9lectionner un fichier \u00e0 joindre. Si c\u2019est une image, vous verrez une miniature dans la cellule. Si vous survolez l\u2019image, vous verrez \u00e0 nouveau une ic\u00f4ne de trombone, que vous pouvez utiliser pour ajouter d\u2019autres fichiers dans la m\u00eame cellule. Vous verrez \u00e9galement une ic\u00f4ne \u201c\u0153il ouvert\u201d, qui, lorsqu\u2019elle est cliqu\u00e9e, affiche une vue agrandie de toutes les pi\u00e8ces jointes de la cellule, et vous donne un moyen de les renommer, de les t\u00e9l\u00e9charger ou de les supprimer.","title":"Colonnes de pi\u00e8ces jointes"},{"location":"conditional-formatting/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Mise en forme conditionnelle # Le style des cellules peut changer en fonction des r\u00e8gles conditionnelles. Les r\u00e8gles conditionnelles sont \u00e9crites sous forme de formules. La mise en forme conditionnelle peut s\u2019appliquer \u00e0 une ligne enti\u00e8re ou aux cellules d\u2019une colonne. Pour ajouter une mise en forme conditionnelle \u00e0 une colonne particuli\u00e8re, s\u00e9lectionnez la colonne, allez \u00e0 la section STYLE DE CELLULE du panneau de cr\u00e9ation sous l\u2019onglet Colonne , et cliquez sur Ajouter un style conditionnel . Dans cet exemple, nous avons une liste d\u2019\u00e9leveurs de chiens qui ont \u00e9lev\u00e9 des pur-sang champions. Appliquons une mise en forme conditionnelle \u00e0 la colonne \u00c9leveur en fonction du nombre de chiens champions. Nous aimerions mettre en surbrillance en or les \u00e9leveurs ayant plus de 2 champions. Ici, la formule conditionnelle est $Number_of_Champions > 2 . Nous aimerions \u00e9galement mettre en surbrillance les \u00e9leveurs ayant 1 ou 2 chiens champions en bleu, et ceux ayant 0 chien champion en marron. Cliquez sur Ajouter une autre r\u00e8gle pour ajouter plus de styles conditionnels. Pour ajouter une mise en forme conditionnelle aux lignes, allez \u00e0 la section STYLE DE LIGNE du panneau de cr\u00e9ation sous l\u2019onglet Table > Vue , et cliquez sur Ajouter un style conditionnel . Ordre des r\u00e8gles # Notez que Grist applique les r\u00e8gles dans l\u2019ordre. Les styles appliqu\u00e9s par des r\u00e8gles ult\u00e9rieures remplaceront ceux appliqu\u00e9s par des r\u00e8gles ant\u00e9rieures. Que se passerait-il si nous \u00e9changions les deux derni\u00e8res r\u00e8gles dans l\u2019exemple ci-dessus ? Remarquez que Gen Hamamoto, qui a 0 chien champion, n\u2019est pas mis en surbrillance en marron. C\u2019est parce qu\u2019apr\u00e8s avoir appliqu\u00e9 le deuxi\u00e8me style conditionnel, $Number_of_Champions == 0 , Grist a appliqu\u00e9 le troisi\u00e8me, $Number_of_Champions <= 2 , qui s\u2019applique \u00e9galement \u00e0 Gen Hamamoto et le colore en bleu.","title":"Conditional formatting"},{"location":"conditional-formatting/#mise-en-forme-conditionnelle","text":"Le style des cellules peut changer en fonction des r\u00e8gles conditionnelles. Les r\u00e8gles conditionnelles sont \u00e9crites sous forme de formules. La mise en forme conditionnelle peut s\u2019appliquer \u00e0 une ligne enti\u00e8re ou aux cellules d\u2019une colonne. Pour ajouter une mise en forme conditionnelle \u00e0 une colonne particuli\u00e8re, s\u00e9lectionnez la colonne, allez \u00e0 la section STYLE DE CELLULE du panneau de cr\u00e9ation sous l\u2019onglet Colonne , et cliquez sur Ajouter un style conditionnel . Dans cet exemple, nous avons une liste d\u2019\u00e9leveurs de chiens qui ont \u00e9lev\u00e9 des pur-sang champions. Appliquons une mise en forme conditionnelle \u00e0 la colonne \u00c9leveur en fonction du nombre de chiens champions. Nous aimerions mettre en surbrillance en or les \u00e9leveurs ayant plus de 2 champions. Ici, la formule conditionnelle est $Number_of_Champions > 2 . Nous aimerions \u00e9galement mettre en surbrillance les \u00e9leveurs ayant 1 ou 2 chiens champions en bleu, et ceux ayant 0 chien champion en marron. Cliquez sur Ajouter une autre r\u00e8gle pour ajouter plus de styles conditionnels. Pour ajouter une mise en forme conditionnelle aux lignes, allez \u00e0 la section STYLE DE LIGNE du panneau de cr\u00e9ation sous l\u2019onglet Table > Vue , et cliquez sur Ajouter un style conditionnel .","title":"Mise en forme conditionnelle"},{"location":"conditional-formatting/#ordre-des-regles","text":"Notez que Grist applique les r\u00e8gles dans l\u2019ordre. Les styles appliqu\u00e9s par des r\u00e8gles ult\u00e9rieures remplaceront ceux appliqu\u00e9s par des r\u00e8gles ant\u00e9rieures. Que se passerait-il si nous \u00e9changions les deux derni\u00e8res r\u00e8gles dans l\u2019exemple ci-dessus ? Remarquez que Gen Hamamoto, qui a 0 chien champion, n\u2019est pas mis en surbrillance en marron. C\u2019est parce qu\u2019apr\u00e8s avoir appliqu\u00e9 le deuxi\u00e8me style conditionnel, $Number_of_Champions == 0 , Grist a appliqu\u00e9 le troisi\u00e8me, $Number_of_Champions <= 2 , qui s\u2019applique \u00e9galement \u00e0 Gen Hamamoto et le colore en bleu.","title":"Ordre des r\u00e8gles"},{"location":"copying-docs/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Copier des Documents # Il est parfois utile de faire une copie, ou un clone, d\u2019un document Grist. Quelques sc\u00e9narios sont d\u00e9crits ci-dessous. Dans tous les cas, vous commencerez par le menu \u201cPartager\u201d disponible dans la barre sup\u00e9rieure d\u2019un document ouvert : Essayer des Modifications # \u00c0 mesure que votre document prend de l\u2019importance, il devient plus risqu\u00e9 de modifier sa structure ou sa logique. C\u2019est une bonne raison de tester ces modifications sur une copie du document, sans craindre d\u2019affecter l\u2019original. Ouvrez le menu Partager et cliquez sur l\u2019option \u201cTravailler sur une copie\u201d. Vous obtiendrez une copie non enregistr\u00e9e de votre document. Cette copie est sp\u00e9ciale car elle sait de quel document original elle provient (vous pouvez voir l\u2019ID du document original inclus dans son URL). Vous pouvez exp\u00e9rimenter sur cette copie, en faisant des modifications grandes ou petites, une ou plusieurs. Pour ceux qui sont familiers avec le d\u00e9veloppement logiciel, cette option est similaire \u00e0 une branche ou un fork comme utilis\u00e9 dans les syst\u00e8mes de contr\u00f4le de version tels que Git . Lorsque vous travaillez sur une copie, le menu Partager propose de nouvelles options. Par exemple, vous pouvez visualiser les diff\u00e9rences entre la copie du document et l\u2019original, en utilisant l\u2019\u00e9l\u00e9ment de menu \u201cComparer \u00e0 l\u2019original\u201d : Les nouvelles modifications seront surlign\u00e9es en vert, et les anciennes en rouge. Une fois satisfait de vos modifications, cliquez sur l\u2019option \u201cRemplacer l\u2019original\u201d. Votre copie remplacera le document original. Grist vous avertira si le remplacement risque d\u2019\u00e9craser des modifications r\u00e9centes dans l\u2019original. Pour abandonner vos modifications, revenez simplement au document original en utilisant l\u2019option \u201cRetourner \u00e0 l\u2019original\u201d (ou le bouton Retour de votre navigateur). Ne vous inqui\u00e9tez pas de nettoyer votre copie. Elle ne compte pas dans les limites de documents et sera automatiquement nettoy\u00e9e si elle n\u2019a pas \u00e9t\u00e9 utilis\u00e9e pendant un certain temps. Vous pouvez \u00e9galement enregistrer votre copie sous un nouveau nom en utilisant l\u2019option \u201cEnregistrer une copie\u201d. Acc\u00e8s aux Copies Non Enregistr\u00e9es # Lorsque vous cr\u00e9ez une copie exp\u00e9rimentale comme d\u00e9crit ci-dessus, elle obtient un lien unique. La copie n\u2019est list\u00e9e nulle part, donc les autres ne la trouveront pas \u00e0 moins que vous ne partagiez ce lien. Toute personne ayant un lien vers votre copie et ayant acc\u00e8s au document original est autoris\u00e9e \u00e0 voir la copie, mais vous \u00eates le seul utilisateur autoris\u00e9 \u00e0 la modifier. Cela signifie que vous pouvez partager un lien vers votre copie avec d\u2019autres, qui peuvent examiner vos modifications. Cela signifie \u00e9galement que vous pouvez essayer des modifications m\u00eame si vous ne pouvez pas modifier l\u2019original ! Vous pouvez ensuite partager un lien vers votre copie avec un collaborateur qui a un acc\u00e8s de modification, qui pourra examiner vos modifications et les appliquer au document original. Dupliquer des Documents # Vous pouvez enregistrer votre document sous un nouveau nom en utilisant l\u2019option \u201cDupliquer le document\u201d dans le menu Partager. En cliquant dessus, une bo\u00eete de dialogue s\u2019ouvre : Tapez le nouveau nom. Si vous avez acc\u00e8s \u00e0 un ou plusieurs comptes d\u2019\u00e9quipe, vous pouvez avoir le choix d\u2019une \u00e9quipe de destination et d\u2019un dossier de destination o\u00f9 enregistrer la copie. Notez que sur un espace d\u2019\u00e9quipe, vous ne pourrez pas enregistrer le document en dehors de l\u2019espace d\u2019\u00e9quipe \u00e0 moins d\u2019avoir un acc\u00e8s de niveau propri\u00e9taire au document. Copier comme Mod\u00e8le # Si vous cochez la case \u201cComme mod\u00e8le\u201d lors de l\u2019enregistrement d\u2019une copie, vous obtiendrez un document qui a toute la structure, les formules et les mises en page de l\u2019original, mais aucune des donn\u00e9es. Cela facilite l\u2019utilisation de la structure existante pour un nouvel ensemble de donn\u00e9es. Copier \u00e0 des Fins de Sauvegarde # Vous pouvez utiliser l\u2019option \u201cDupliquer le document\u201d pour enregistrer la version actuelle du document comme sauvegarde, en ajoutant peut-\u00eatre la date d\u2019aujourd\u2019hui au nom de la copie. Cela dit, Grist effectue d\u00e9j\u00e0 des sauvegardes automatiques r\u00e9guli\u00e8rement, ce qui peut \u00eatre suffisant pour la plupart des besoins de sauvegarde. Voir Sauvegardes Automatiques . Copier des Exemples Publics # Lorsque vous ouvrez un exemple public depuis la page Exemples & Mod\u00e8les , il ouvrira l\u2019exemple en mode sandbox . Le mode sandbox est similaire \u00e0 travailler sur une copie, comme d\u00e9crit ci-dessus dans Essayer des Modifications . Vous pouvez apporter des modifications, mais elles restent priv\u00e9es. Vous pouvez enregistrer une copie de l\u2019exemple sous un nouveau nom en utilisant le bouton ou l\u2019option de menu \u201cEnregistrer une copie\u201d. Vous pouvez utiliser la case \u00e0 cocher \u201cComme mod\u00e8le\u201d pour supprimer les donn\u00e9es de l\u2019exemple, en conservant uniquement sa structure. Cela facilite son utilisation pour vos propres donn\u00e9es.","title":"Copying documents"},{"location":"copying-docs/#copier-des-documents","text":"Il est parfois utile de faire une copie, ou un clone, d\u2019un document Grist. Quelques sc\u00e9narios sont d\u00e9crits ci-dessous. Dans tous les cas, vous commencerez par le menu \u201cPartager\u201d disponible dans la barre sup\u00e9rieure d\u2019un document ouvert :","title":"Copier des Documents"},{"location":"copying-docs/#essayer-des-modifications","text":"\u00c0 mesure que votre document prend de l\u2019importance, il devient plus risqu\u00e9 de modifier sa structure ou sa logique. C\u2019est une bonne raison de tester ces modifications sur une copie du document, sans craindre d\u2019affecter l\u2019original. Ouvrez le menu Partager et cliquez sur l\u2019option \u201cTravailler sur une copie\u201d. Vous obtiendrez une copie non enregistr\u00e9e de votre document. Cette copie est sp\u00e9ciale car elle sait de quel document original elle provient (vous pouvez voir l\u2019ID du document original inclus dans son URL). Vous pouvez exp\u00e9rimenter sur cette copie, en faisant des modifications grandes ou petites, une ou plusieurs. Pour ceux qui sont familiers avec le d\u00e9veloppement logiciel, cette option est similaire \u00e0 une branche ou un fork comme utilis\u00e9 dans les syst\u00e8mes de contr\u00f4le de version tels que Git . Lorsque vous travaillez sur une copie, le menu Partager propose de nouvelles options. Par exemple, vous pouvez visualiser les diff\u00e9rences entre la copie du document et l\u2019original, en utilisant l\u2019\u00e9l\u00e9ment de menu \u201cComparer \u00e0 l\u2019original\u201d : Les nouvelles modifications seront surlign\u00e9es en vert, et les anciennes en rouge. Une fois satisfait de vos modifications, cliquez sur l\u2019option \u201cRemplacer l\u2019original\u201d. Votre copie remplacera le document original. Grist vous avertira si le remplacement risque d\u2019\u00e9craser des modifications r\u00e9centes dans l\u2019original. Pour abandonner vos modifications, revenez simplement au document original en utilisant l\u2019option \u201cRetourner \u00e0 l\u2019original\u201d (ou le bouton Retour de votre navigateur). Ne vous inqui\u00e9tez pas de nettoyer votre copie. Elle ne compte pas dans les limites de documents et sera automatiquement nettoy\u00e9e si elle n\u2019a pas \u00e9t\u00e9 utilis\u00e9e pendant un certain temps. Vous pouvez \u00e9galement enregistrer votre copie sous un nouveau nom en utilisant l\u2019option \u201cEnregistrer une copie\u201d.","title":"Essayer des Modifications"},{"location":"copying-docs/#acces-aux-copies-non-enregistrees","text":"Lorsque vous cr\u00e9ez une copie exp\u00e9rimentale comme d\u00e9crit ci-dessus, elle obtient un lien unique. La copie n\u2019est list\u00e9e nulle part, donc les autres ne la trouveront pas \u00e0 moins que vous ne partagiez ce lien. Toute personne ayant un lien vers votre copie et ayant acc\u00e8s au document original est autoris\u00e9e \u00e0 voir la copie, mais vous \u00eates le seul utilisateur autoris\u00e9 \u00e0 la modifier. Cela signifie que vous pouvez partager un lien vers votre copie avec d\u2019autres, qui peuvent examiner vos modifications. Cela signifie \u00e9galement que vous pouvez essayer des modifications m\u00eame si vous ne pouvez pas modifier l\u2019original ! Vous pouvez ensuite partager un lien vers votre copie avec un collaborateur qui a un acc\u00e8s de modification, qui pourra examiner vos modifications et les appliquer au document original.","title":"Acc\u00e8s aux Copies Non Enregistr\u00e9es"},{"location":"copying-docs/#dupliquer-des-documents","text":"Vous pouvez enregistrer votre document sous un nouveau nom en utilisant l\u2019option \u201cDupliquer le document\u201d dans le menu Partager. En cliquant dessus, une bo\u00eete de dialogue s\u2019ouvre : Tapez le nouveau nom. Si vous avez acc\u00e8s \u00e0 un ou plusieurs comptes d\u2019\u00e9quipe, vous pouvez avoir le choix d\u2019une \u00e9quipe de destination et d\u2019un dossier de destination o\u00f9 enregistrer la copie. Notez que sur un espace d\u2019\u00e9quipe, vous ne pourrez pas enregistrer le document en dehors de l\u2019espace d\u2019\u00e9quipe \u00e0 moins d\u2019avoir un acc\u00e8s de niveau propri\u00e9taire au document.","title":"Dupliquer des Documents"},{"location":"copying-docs/#copier-comme-modele","text":"Si vous cochez la case \u201cComme mod\u00e8le\u201d lors de l\u2019enregistrement d\u2019une copie, vous obtiendrez un document qui a toute la structure, les formules et les mises en page de l\u2019original, mais aucune des donn\u00e9es. Cela facilite l\u2019utilisation de la structure existante pour un nouvel ensemble de donn\u00e9es.","title":"Copier comme Mod\u00e8le"},{"location":"copying-docs/#copier-a-des-fins-de-sauvegarde","text":"Vous pouvez utiliser l\u2019option \u201cDupliquer le document\u201d pour enregistrer la version actuelle du document comme sauvegarde, en ajoutant peut-\u00eatre la date d\u2019aujourd\u2019hui au nom de la copie. Cela dit, Grist effectue d\u00e9j\u00e0 des sauvegardes automatiques r\u00e9guli\u00e8rement, ce qui peut \u00eatre suffisant pour la plupart des besoins de sauvegarde. Voir Sauvegardes Automatiques .","title":"Copier \u00e0 des Fins de Sauvegarde"},{"location":"copying-docs/#copier-des-exemples-publics","text":"Lorsque vous ouvrez un exemple public depuis la page Exemples & Mod\u00e8les , il ouvrira l\u2019exemple en mode sandbox . Le mode sandbox est similaire \u00e0 travailler sur une copie, comme d\u00e9crit ci-dessus dans Essayer des Modifications . Vous pouvez apporter des modifications, mais elles restent priv\u00e9es. Vous pouvez enregistrer une copie de l\u2019exemple sous un nouveau nom en utilisant le bouton ou l\u2019option de menu \u201cEnregistrer une copie\u201d. Vous pouvez utiliser la case \u00e0 cocher \u201cComme mod\u00e8le\u201d pour supprimer les donn\u00e9es de l\u2019exemple, en conservant uniquement sa structure. Cela facilite son utilisation pour vos propres donn\u00e9es.","title":"Copier des Exemples Publics"},{"location":"creating-doc/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Cr\u00e9er un document # Pour commencer avec Grist, vous devez d\u2019abord cr\u00e9er un document. Chaque document peut stocker diff\u00e9rents types de donn\u00e9es, alors pensez-y comme \u00e0 une collection de donn\u00e9es li\u00e9es . Vous pouvez commencer de z\u00e9ro ou importer des donn\u00e9es existantes. Cliquez sur le bouton \u201cAjouter Nouveau\u201d sur l\u2019\u00e9cran d\u2019accueil et choisissez soit \u201cCr\u00e9er un document vide\u201d soit \u201cImporter un document\u201d. Vous pouvez importer des feuilles de calcul au format Excel, ainsi que des fichiers de valeurs s\u00e9par\u00e9es par des virgules ou CSV. Si vous importez une feuille de calcul qui comporte plusieurs onglets, chaque onglet deviendra une table s\u00e9par\u00e9e dans Grist. Exemples et mod\u00e8les # La liste \u201cExemples & Mod\u00e8les\u201d sur la page d\u2019accueil de Grist comprend un certain nombre de documents Grist qui d\u00e9montrent les fonctionnalit\u00e9s et les cas d\u2019utilisation de Grist. Ceux-ci sont toujours accessibles via un lien en bas \u00e0 gauche de la page d\u2019accueil. Pour chaque exemple, il existe un tutoriel correspondant dans le Centre d\u2019aide Grist, qui d\u00e9crit comment l\u2019utiliser ou comment cr\u00e9er un tel document \u00e0 partir de z\u00e9ro. Lorsque vous ouvrez un exemple, vous pouvez y apporter des modifications. Vous \u00e9ditez une copie, et vos modifications sont priv\u00e9es. Vous pouvez enregistrer vos modifications en cliquant sur le bouton \u201cEnregistrer une copie\u201d en haut de la page. Vous pouvez \u00e9galement utiliser l\u2019un des exemples comme mod\u00e8le pour un nouveau document, ce qui inclura la structure, la mise en page et les formules de l\u2019exemple, mais aucune des donn\u00e9es d\u2019exemple. Il suffit d\u2019utiliser le bouton \u201cEnregistrer une copie\u201d et de cocher la case \u201cComme mod\u00e8le\u201d dans la bo\u00eete de dialogue qui s\u2019ouvre. Importer plus de donn\u00e9es # Une fois que vous avez cr\u00e9\u00e9 un document, vous pouvez y importer plus de donn\u00e9es en ouvrant le document et en s\u00e9lectionnant \u201cAjouter Nouveau\u201d puis l\u2019une des options d\u2019importation. Vous pouvez en savoir plus sur l\u2019importation de donn\u00e9es \u00e0 Importer plus de donn\u00e9es . Param\u00e8tres du document # Lorsque le document est ouvert, vous pouvez acc\u00e9der aux param\u00e8tres du document depuis le menu utilisateur ou depuis le menu Outils dans le panneau de navigation de gauche. L\u00e0, vous pouvez trouver l\u2019ID du document pour une utilisation API, ainsi que d\u00e9finir le fuseau horaire par d\u00e9faut, la langue et la devise pour le document.","title":"Creating a document"},{"location":"creating-doc/#creer-un-document","text":"Pour commencer avec Grist, vous devez d\u2019abord cr\u00e9er un document. Chaque document peut stocker diff\u00e9rents types de donn\u00e9es, alors pensez-y comme \u00e0 une collection de donn\u00e9es li\u00e9es . Vous pouvez commencer de z\u00e9ro ou importer des donn\u00e9es existantes. Cliquez sur le bouton \u201cAjouter Nouveau\u201d sur l\u2019\u00e9cran d\u2019accueil et choisissez soit \u201cCr\u00e9er un document vide\u201d soit \u201cImporter un document\u201d. Vous pouvez importer des feuilles de calcul au format Excel, ainsi que des fichiers de valeurs s\u00e9par\u00e9es par des virgules ou CSV. Si vous importez une feuille de calcul qui comporte plusieurs onglets, chaque onglet deviendra une table s\u00e9par\u00e9e dans Grist.","title":"Cr\u00e9er un document"},{"location":"creating-doc/#exemples-et-modeles","text":"La liste \u201cExemples & Mod\u00e8les\u201d sur la page d\u2019accueil de Grist comprend un certain nombre de documents Grist qui d\u00e9montrent les fonctionnalit\u00e9s et les cas d\u2019utilisation de Grist. Ceux-ci sont toujours accessibles via un lien en bas \u00e0 gauche de la page d\u2019accueil. Pour chaque exemple, il existe un tutoriel correspondant dans le Centre d\u2019aide Grist, qui d\u00e9crit comment l\u2019utiliser ou comment cr\u00e9er un tel document \u00e0 partir de z\u00e9ro. Lorsque vous ouvrez un exemple, vous pouvez y apporter des modifications. Vous \u00e9ditez une copie, et vos modifications sont priv\u00e9es. Vous pouvez enregistrer vos modifications en cliquant sur le bouton \u201cEnregistrer une copie\u201d en haut de la page. Vous pouvez \u00e9galement utiliser l\u2019un des exemples comme mod\u00e8le pour un nouveau document, ce qui inclura la structure, la mise en page et les formules de l\u2019exemple, mais aucune des donn\u00e9es d\u2019exemple. Il suffit d\u2019utiliser le bouton \u201cEnregistrer une copie\u201d et de cocher la case \u201cComme mod\u00e8le\u201d dans la bo\u00eete de dialogue qui s\u2019ouvre.","title":"Exemples et mod\u00e8les"},{"location":"creating-doc/#importer-plus-de-donnees","text":"Une fois que vous avez cr\u00e9\u00e9 un document, vous pouvez y importer plus de donn\u00e9es en ouvrant le document et en s\u00e9lectionnant \u201cAjouter Nouveau\u201d puis l\u2019une des options d\u2019importation. Vous pouvez en savoir plus sur l\u2019importation de donn\u00e9es \u00e0 Importer plus de donn\u00e9es .","title":"Importer plus de donn\u00e9es"},{"location":"creating-doc/#parametres-du-document","text":"Lorsque le document est ouvert, vous pouvez acc\u00e9der aux param\u00e8tres du document depuis le menu utilisateur ou depuis le menu Outils dans le panneau de navigation de gauche. L\u00e0, vous pouvez trouver l\u2019ID du document pour une utilisation API, ainsi que d\u00e9finir le fuseau horaire par d\u00e9faut, la langue et la devise pour le document.","title":"Param\u00e8tres du document"},{"location":"custom-layouts/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Dispositions Personnalis\u00e9es # Vous pouvez facilement ajouter plusieurs vues \u00e0 une page, comme d\u00e9crit dans Vues de page , et les lier comme d\u00e9crit dans Lier les vues . Il est \u00e9galement facile de personnaliser leur agencement. D\u00e9placez le curseur de la souris sur le titre de la vue. Une petite ic\u00f4ne de glissement appara\u00eetra \u00e0 gauche du titre. Lorsque vous appuyez sur cette ic\u00f4ne, vous pouvez faire glisser l\u2019ensemble de la vue vers un autre endroit de l\u2019\u00e9cran. Lorsque vous la d\u00e9placez pr\u00e8s du bord de l\u2019\u00e9cran ou du bord d\u2019une autre vue, vous verrez un contour en pointill\u00e9s - parfois plus d\u2019un - o\u00f9 la vue peut \u00eatre d\u00e9pos\u00e9e. Rel\u00e2chez la souris pour repositionner cette vue. Pour redimensionner les vues, d\u00e9placez le curseur de la souris entre deux vues jusqu\u2019\u00e0 ce qu\u2019une ligne en pointill\u00e9s apparaisse. Faites glisser cette ligne en pointill\u00e9s pour redimensionner. Pour agrandir une vue, cliquez sur l\u2019ic\u00f4ne d\u2019agrandissement en haut \u00e0 droite de la vue. Cela ouvrira une vue en pleine page de la vue. Pour r\u00e9duire une vue, cliquez et faites glisser une vue vers le plateau de vues en haut de la page. Lorsque vous cliquez sur une vue r\u00e9duite, elle s\u2019ouvre en vue pleine page. Pour la restaurer \u00e0 la page principale, il suffit de faire glisser la vue r\u00e9duite \u00e0 l\u2019emplacement souhait\u00e9. Recommandations de Disposition # Bien qu\u2019il n\u2019y ait pas de limite \u00e0 la complexit\u00e9 d\u2019une disposition que vous pouvez cr\u00e9er, vous devriez viser des dispositions simples qui seront faciles \u00e0 utiliser pour vos utilisateurs (m\u00eame lorsque vous \u00eates le seul utilisateur !). Une r\u00e8gle de base est qu\u2019une vue contr\u00f4l\u00e9e par une autre vue \u201cs\u00e9lecteur\u201d (voir Lier les vues ) devrait \u00eatre \u00e0 droite ou en dessous de celle-ci. Voici quelques dispositions courantes. Disposition : Liste et D\u00e9tail # La plus courante est d\u2019avoir une liste d\u2019\u00e9l\u00e9ments \u00e0 gauche, avec une ou plusieurs vues \u00e0 droite fournissant plus d\u2019informations. Par exemple, l\u2019exemple de CRM L\u00e9ger inclut une liste de personnes \u00e0 gauche, avec une fiche de personne et une table d\u2019interactions li\u00e9es \u00e0 droite de la liste. Dans cette utilisation, vous pourriez vouloir inclure dans la liste uniquement les informations minimales dont vous avez besoin, peut-\u00eatre seulement le nom d\u2019un contact. Si votre table a de nombreuses colonnes, un moyen rapide de n\u2019en laisser que quelques-unes est via les options de vue dans le panneau de droite. Dans la vue de table, cliquez sur le menu \u00e0 trois points en haut \u00e0 droite et s\u00e9lectionnez \u201cOptions de vue\u201d. Vous verrez une liste de \u201cColonnes visibles\u201d. Cliquez sur le lien \u201cS\u00e9lectionner tout\u201d en haut de cette liste : Maintenant, d\u00e9cochez les quelques champs que vous souhaitez conserver et cliquez sur \u201cMasquer les colonnes\u201d pour masquer le reste. Disposition : Tableur Plus # Parfois, un large tableur avec de nombreuses colonnes est pratique. Si vous souhaitez voir plus d\u2019informations associ\u00e9es aux lignes de ce tableur, vous pouvez ajouter des vues en dessous. Celles-ci pourraient \u00eatre des d\u00e9tails li\u00e9s au tableur, ou des tables de synth\u00e8se qui montrent des totaux ou d\u2019autres informations globales. Par exemple, voici une disposition possible bas\u00e9e sur l\u2019exemple de CRM L\u00e9ger. Elle montre les contacts sous forme de large tableur, et en dessous inclut des sections avec un r\u00e9sum\u00e9 global et des interactions pour le contact s\u00e9lectionn\u00e9. Disposition : R\u00e9sum\u00e9 et D\u00e9tails # Parfois, il est utile de diviser un grand ensemble de donn\u00e9es en sous-ensembles. Par exemple, vous pourriez avoir des transactions par carte de cr\u00e9dit et vouloir un moyen de les visualiser un mois \u00e0 la fois. Pour ce faire, vous utiliserez une colonne \u201cMois\u201d, en cr\u00e9ant une avec une formule si n\u00e9cessaire. Ensuite, cr\u00e9ez une table de synth\u00e8se group\u00e9e par \u201cMois\u201d (voir Tables de synth\u00e8se ), et liez la table des transactions \u00e0 celle-ci. Nous pouvons alors s\u00e9lectionner un mois et voir un tableur des seules transactions de ce mois. Disposition : Tableau de Bord de Graphiques # Si vous avez de nombreux graphiques, vous pouvez simplement les disposer en grille pour cr\u00e9er un tableau de bord de haut niveau. Pour les graphiques dynamiques dans lesquels les donn\u00e9es sont s\u00e9lectionn\u00e9es par une autre table, une disposition comme Liste et D\u00e9tail ci-dessus fonctionnerait bien. Un conseil est d\u2019inclure \u00e0 la fois une vue de Table et une vue de Graphique, configur\u00e9es et li\u00e9es de la m\u00eame mani\u00e8re, et ne diff\u00e9rant que par le type de vue : Avoir une table \u00e0 c\u00f4t\u00e9 du graphique peut \u00eatre une r\u00e9f\u00e9rence utile, ainsi que fournir plus de contexte \u00e0 ce qui est visible dans le graphique.","title":"Custom layouts"},{"location":"custom-layouts/#dispositions-personnalisees","text":"Vous pouvez facilement ajouter plusieurs vues \u00e0 une page, comme d\u00e9crit dans Vues de page , et les lier comme d\u00e9crit dans Lier les vues . Il est \u00e9galement facile de personnaliser leur agencement. D\u00e9placez le curseur de la souris sur le titre de la vue. Une petite ic\u00f4ne de glissement appara\u00eetra \u00e0 gauche du titre. Lorsque vous appuyez sur cette ic\u00f4ne, vous pouvez faire glisser l\u2019ensemble de la vue vers un autre endroit de l\u2019\u00e9cran. Lorsque vous la d\u00e9placez pr\u00e8s du bord de l\u2019\u00e9cran ou du bord d\u2019une autre vue, vous verrez un contour en pointill\u00e9s - parfois plus d\u2019un - o\u00f9 la vue peut \u00eatre d\u00e9pos\u00e9e. Rel\u00e2chez la souris pour repositionner cette vue. Pour redimensionner les vues, d\u00e9placez le curseur de la souris entre deux vues jusqu\u2019\u00e0 ce qu\u2019une ligne en pointill\u00e9s apparaisse. Faites glisser cette ligne en pointill\u00e9s pour redimensionner. Pour agrandir une vue, cliquez sur l\u2019ic\u00f4ne d\u2019agrandissement en haut \u00e0 droite de la vue. Cela ouvrira une vue en pleine page de la vue. Pour r\u00e9duire une vue, cliquez et faites glisser une vue vers le plateau de vues en haut de la page. Lorsque vous cliquez sur une vue r\u00e9duite, elle s\u2019ouvre en vue pleine page. Pour la restaurer \u00e0 la page principale, il suffit de faire glisser la vue r\u00e9duite \u00e0 l\u2019emplacement souhait\u00e9.","title":"Dispositions Personnalis\u00e9es"},{"location":"custom-layouts/#recommandations-de-disposition","text":"Bien qu\u2019il n\u2019y ait pas de limite \u00e0 la complexit\u00e9 d\u2019une disposition que vous pouvez cr\u00e9er, vous devriez viser des dispositions simples qui seront faciles \u00e0 utiliser pour vos utilisateurs (m\u00eame lorsque vous \u00eates le seul utilisateur !). Une r\u00e8gle de base est qu\u2019une vue contr\u00f4l\u00e9e par une autre vue \u201cs\u00e9lecteur\u201d (voir Lier les vues ) devrait \u00eatre \u00e0 droite ou en dessous de celle-ci. Voici quelques dispositions courantes.","title":"Recommandations de Disposition"},{"location":"custom-layouts/#disposition-liste-et-detail","text":"La plus courante est d\u2019avoir une liste d\u2019\u00e9l\u00e9ments \u00e0 gauche, avec une ou plusieurs vues \u00e0 droite fournissant plus d\u2019informations. Par exemple, l\u2019exemple de CRM L\u00e9ger inclut une liste de personnes \u00e0 gauche, avec une fiche de personne et une table d\u2019interactions li\u00e9es \u00e0 droite de la liste. Dans cette utilisation, vous pourriez vouloir inclure dans la liste uniquement les informations minimales dont vous avez besoin, peut-\u00eatre seulement le nom d\u2019un contact. Si votre table a de nombreuses colonnes, un moyen rapide de n\u2019en laisser que quelques-unes est via les options de vue dans le panneau de droite. Dans la vue de table, cliquez sur le menu \u00e0 trois points en haut \u00e0 droite et s\u00e9lectionnez \u201cOptions de vue\u201d. Vous verrez une liste de \u201cColonnes visibles\u201d. Cliquez sur le lien \u201cS\u00e9lectionner tout\u201d en haut de cette liste : Maintenant, d\u00e9cochez les quelques champs que vous souhaitez conserver et cliquez sur \u201cMasquer les colonnes\u201d pour masquer le reste.","title":"Disposition : Liste et D\u00e9tail"},{"location":"custom-layouts/#disposition-tableur-plus","text":"Parfois, un large tableur avec de nombreuses colonnes est pratique. Si vous souhaitez voir plus d\u2019informations associ\u00e9es aux lignes de ce tableur, vous pouvez ajouter des vues en dessous. Celles-ci pourraient \u00eatre des d\u00e9tails li\u00e9s au tableur, ou des tables de synth\u00e8se qui montrent des totaux ou d\u2019autres informations globales. Par exemple, voici une disposition possible bas\u00e9e sur l\u2019exemple de CRM L\u00e9ger. Elle montre les contacts sous forme de large tableur, et en dessous inclut des sections avec un r\u00e9sum\u00e9 global et des interactions pour le contact s\u00e9lectionn\u00e9.","title":"Disposition : Tableur Plus"},{"location":"custom-layouts/#disposition-resume-et-details","text":"Parfois, il est utile de diviser un grand ensemble de donn\u00e9es en sous-ensembles. Par exemple, vous pourriez avoir des transactions par carte de cr\u00e9dit et vouloir un moyen de les visualiser un mois \u00e0 la fois. Pour ce faire, vous utiliserez une colonne \u201cMois\u201d, en cr\u00e9ant une avec une formule si n\u00e9cessaire. Ensuite, cr\u00e9ez une table de synth\u00e8se group\u00e9e par \u201cMois\u201d (voir Tables de synth\u00e8se ), et liez la table des transactions \u00e0 celle-ci. Nous pouvons alors s\u00e9lectionner un mois et voir un tableur des seules transactions de ce mois.","title":"Disposition : R\u00e9sum\u00e9 et D\u00e9tails"},{"location":"custom-layouts/#disposition-tableau-de-bord-de-graphiques","text":"Si vous avez de nombreux graphiques, vous pouvez simplement les disposer en grille pour cr\u00e9er un tableau de bord de haut niveau. Pour les graphiques dynamiques dans lesquels les donn\u00e9es sont s\u00e9lectionn\u00e9es par une autre table, une disposition comme Liste et D\u00e9tail ci-dessus fonctionnerait bien. Un conseil est d\u2019inclure \u00e0 la fois une vue de Table et une vue de Graphique, configur\u00e9es et li\u00e9es de la m\u00eame mani\u00e8re, et ne diff\u00e9rant que par le type de vue : Avoir une table \u00e0 c\u00f4t\u00e9 du graphique peut \u00eatre une r\u00e9f\u00e9rence utile, ainsi que fournir plus de contexte \u00e0 ce qui est visible dans le graphique.","title":"Disposition : Tableau de Bord de Graphiques"},{"location":"data-security/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . S\u00e9curit\u00e9 des Donn\u00e9es # Grist est disponible en tant que service h\u00e9berg\u00e9 (\u201cGrist SaaS\u201d) fonctionnant sur une infrastructure g\u00e9r\u00e9e par Grist Labs. Il peut \u00e9galement \u00eatre install\u00e9 sur votre propre infrastructure (\u201cGrist Auto-G\u00e9r\u00e9\u201d). Dans les deux cas, nous prenons des mesures pour s\u00e9curiser vos donn\u00e9es que vous devez conna\u00eetre. Grist SaaS # Notre politique g\u00e9n\u00e9rale de confidentialit\u00e9 et nos conditions sont disponibles sur https://www.getgrist.com/privacy et https://www.getgrist.com/terms . De plus, voici un r\u00e9sum\u00e9 des mesures sp\u00e9cifiques qui concernent les documents Grist que nous h\u00e9bergeons pour vous : Les serveurs Grist fonctionnent sur l\u2019infrastructure cloud d\u2019Amazon Web Services (AWS), aux \u00c9tats-Unis. AWS S3 est utilis\u00e9 pour le stockage \u00e0 long terme, et stocke les documents sous forme crypt\u00e9e. Les donn\u00e9es sont stock\u00e9es aux \u00c9tats-Unis. Les employ\u00e9s de Grist ne regardent jamais vos donn\u00e9es et ne peuvent pas ouvrir vos documents. La seule exception est si vous choisissez de partager un document avec le support client afin d\u2019obtenir de l\u2019aide pour un probl\u00e8me. Lorsqu\u2019elles sont trait\u00e9es, vos donn\u00e9es existeront par n\u00e9cessit\u00e9 sous forme non crypt\u00e9e dans certains des syst\u00e8mes internes de Grist. Seuls certains employ\u00e9s cl\u00e9s ont un acc\u00e8s complet \u00e0 ces syst\u00e8mes, et la politique leur interdit de regarder \u00e0 l\u2019int\u00e9rieur des documents. Le HTTPS s\u00e9curis\u00e9 est utilis\u00e9 pour tout acc\u00e8s \u00e0 Grist via Internet public (\u00e0 la fois pour le site web et les appels API). Des sauvegardes r\u00e9guli\u00e8res des documents Grist sont effectu\u00e9es et sont stock\u00e9es sous forme crypt\u00e9e. Grist conserve des instantan\u00e9s plus fr\u00e9quents des changements r\u00e9cents, et des instantan\u00e9s moins fr\u00e9quents au fur et \u00e0 mesure que vous remontez dans le temps. Si vous supprimez un document, il restera pendant 30 jours dans un dossier Corbeille sous votre contr\u00f4le. \u00c0 tout moment, une option \u201cSupprimer d\u00e9finitivement\u201d peut \u00eatre utilis\u00e9e pour purger imm\u00e9diatement un document dans ce dossier. Toutes les sauvegardes automatiques sont purg\u00e9es avec le document. Le produit Grist h\u00e9berg\u00e9 n\u2019a pas encore \u00e9t\u00e9 certifi\u00e9 ou audit\u00e9 pour la conformit\u00e9 SOC 2, ISO 27001, HIPAA ou RGPD. Si vous avez besoin de documentation sp\u00e9cifique, veuillez contacter le support client. Vous pouvez \u00e9galement nous encourager \u00e0 prioriser la certification par rapport au d\u00e9veloppement de fonctionnalit\u00e9s sur ce probl\u00e8me . Grist Auto-G\u00e9r\u00e9 # Pour Grist Auto-G\u00e9r\u00e9, vous avez un contr\u00f4le total sur l\u2019emplacement des serveurs et le lieu de stockage des donn\u00e9es. Voici quelques consid\u00e9rations de s\u00e9curit\u00e9 \u00e0 garder \u00e0 l\u2019esprit : Le logiciel Grist est distribu\u00e9 via l\u2019organisation gristlabs sur github et docker hub . Veuillez faire preuve de diligence si vous acc\u00e9dez au logiciel ailleurs, car le logiciel que vous installez aura un acc\u00e8s complet \u00e0 vos donn\u00e9es. Les documents Grist prennent en charge des formules Python puissantes. Veuillez pr\u00eater attention aux instructions pour configurer le sandboxing si votre \u00e9quipe peut travailler avec des documents non fiables. Par d\u00e9faut, Grist est accueillant pour les utilisateurs anonymes, leur permettant de cr\u00e9er et de modifier leurs propres documents. Vous pouvez souhaiter configurer une disposition plus stricte . Grist ne rend pas les services externes obligatoires, car cela introduirait des obstacles inutiles dans certains sc\u00e9narios. Par exemple, une personne \u00e9ditant un document Grist hors ligne sur son propre bureau ne devrait pas avoir besoin d\u2019installer une base de donn\u00e9es PostgreSQL d\u2019abord. Mais il est important d\u2019\u00e9valuer ce dont vous avez besoin dans votre situation plut\u00f4t que de simplement vous en tenir aux param\u00e8tres par d\u00e9faut. Veuillez lire \u00e0 propos des donn\u00e9es que Grist stocke et de vos options pour savoir o\u00f9 les stocker. Il est important de garder votre installation Grist \u00e0 jour .","title":"Data security"},{"location":"data-security/#securite-des-donnees","text":"Grist est disponible en tant que service h\u00e9berg\u00e9 (\u201cGrist SaaS\u201d) fonctionnant sur une infrastructure g\u00e9r\u00e9e par Grist Labs. Il peut \u00e9galement \u00eatre install\u00e9 sur votre propre infrastructure (\u201cGrist Auto-G\u00e9r\u00e9\u201d). Dans les deux cas, nous prenons des mesures pour s\u00e9curiser vos donn\u00e9es que vous devez conna\u00eetre.","title":"S\u00e9curit\u00e9 des Donn\u00e9es"},{"location":"data-security/#grist-saas","text":"Notre politique g\u00e9n\u00e9rale de confidentialit\u00e9 et nos conditions sont disponibles sur https://www.getgrist.com/privacy et https://www.getgrist.com/terms . De plus, voici un r\u00e9sum\u00e9 des mesures sp\u00e9cifiques qui concernent les documents Grist que nous h\u00e9bergeons pour vous : Les serveurs Grist fonctionnent sur l\u2019infrastructure cloud d\u2019Amazon Web Services (AWS), aux \u00c9tats-Unis. AWS S3 est utilis\u00e9 pour le stockage \u00e0 long terme, et stocke les documents sous forme crypt\u00e9e. Les donn\u00e9es sont stock\u00e9es aux \u00c9tats-Unis. Les employ\u00e9s de Grist ne regardent jamais vos donn\u00e9es et ne peuvent pas ouvrir vos documents. La seule exception est si vous choisissez de partager un document avec le support client afin d\u2019obtenir de l\u2019aide pour un probl\u00e8me. Lorsqu\u2019elles sont trait\u00e9es, vos donn\u00e9es existeront par n\u00e9cessit\u00e9 sous forme non crypt\u00e9e dans certains des syst\u00e8mes internes de Grist. Seuls certains employ\u00e9s cl\u00e9s ont un acc\u00e8s complet \u00e0 ces syst\u00e8mes, et la politique leur interdit de regarder \u00e0 l\u2019int\u00e9rieur des documents. Le HTTPS s\u00e9curis\u00e9 est utilis\u00e9 pour tout acc\u00e8s \u00e0 Grist via Internet public (\u00e0 la fois pour le site web et les appels API). Des sauvegardes r\u00e9guli\u00e8res des documents Grist sont effectu\u00e9es et sont stock\u00e9es sous forme crypt\u00e9e. Grist conserve des instantan\u00e9s plus fr\u00e9quents des changements r\u00e9cents, et des instantan\u00e9s moins fr\u00e9quents au fur et \u00e0 mesure que vous remontez dans le temps. Si vous supprimez un document, il restera pendant 30 jours dans un dossier Corbeille sous votre contr\u00f4le. \u00c0 tout moment, une option \u201cSupprimer d\u00e9finitivement\u201d peut \u00eatre utilis\u00e9e pour purger imm\u00e9diatement un document dans ce dossier. Toutes les sauvegardes automatiques sont purg\u00e9es avec le document. Le produit Grist h\u00e9berg\u00e9 n\u2019a pas encore \u00e9t\u00e9 certifi\u00e9 ou audit\u00e9 pour la conformit\u00e9 SOC 2, ISO 27001, HIPAA ou RGPD. Si vous avez besoin de documentation sp\u00e9cifique, veuillez contacter le support client. Vous pouvez \u00e9galement nous encourager \u00e0 prioriser la certification par rapport au d\u00e9veloppement de fonctionnalit\u00e9s sur ce probl\u00e8me .","title":"Grist SaaS"},{"location":"data-security/#grist-auto-gere","text":"Pour Grist Auto-G\u00e9r\u00e9, vous avez un contr\u00f4le total sur l\u2019emplacement des serveurs et le lieu de stockage des donn\u00e9es. Voici quelques consid\u00e9rations de s\u00e9curit\u00e9 \u00e0 garder \u00e0 l\u2019esprit : Le logiciel Grist est distribu\u00e9 via l\u2019organisation gristlabs sur github et docker hub . Veuillez faire preuve de diligence si vous acc\u00e9dez au logiciel ailleurs, car le logiciel que vous installez aura un acc\u00e8s complet \u00e0 vos donn\u00e9es. Les documents Grist prennent en charge des formules Python puissantes. Veuillez pr\u00eater attention aux instructions pour configurer le sandboxing si votre \u00e9quipe peut travailler avec des documents non fiables. Par d\u00e9faut, Grist est accueillant pour les utilisateurs anonymes, leur permettant de cr\u00e9er et de modifier leurs propres documents. Vous pouvez souhaiter configurer une disposition plus stricte . Grist ne rend pas les services externes obligatoires, car cela introduirait des obstacles inutiles dans certains sc\u00e9narios. Par exemple, une personne \u00e9ditant un document Grist hors ligne sur son propre bureau ne devrait pas avoir besoin d\u2019installer une base de donn\u00e9es PostgreSQL d\u2019abord. Mais il est important d\u2019\u00e9valuer ce dont vous avez besoin dans votre situation plut\u00f4t que de simplement vous en tenir aux param\u00e8tres par d\u00e9faut. Veuillez lire \u00e0 propos des donn\u00e9es que Grist stocke et de vos options pour savoir o\u00f9 les stocker. Il est important de garder votre installation Grist \u00e0 jour .","title":"Grist Auto-G\u00e9r\u00e9"},{"location":"dates/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue d\u2019ensemble # Grist exprime les dates et les heures de deux mani\u00e8res. La premi\u00e8re est le type de colonne Date , qui repr\u00e9sente une date de calendrier, sans heure de la journ\u00e9e, et non associ\u00e9e \u00e0 un fuseau horaire particulier. La seconde est le type de colonne DateTime , qui repr\u00e9sente une date de calendrier avec une heure de la journ\u00e9e pouvant \u00eatre li\u00e9e \u00e0 un fuseau horaire. Les types de colonnes Date et DateTime prennent en charge diff\u00e9rentes options de formatage. Lorsqu\u2019une colonne est d\u00e9finie comme Date ou DateTime , un widget de s\u00e9lection de date vous permet de choisir la date sur un calendrier lors de l\u2019\u00e9dition d\u2019une cellule. Lorsque vous travaillez avec des dates dans des formules, les dates sont des objets datetime Python. Cela vous permet de faire des choses puissantes, mais peut \u00eatre inattendu si vous n\u2019\u00eates pas familier avec eux. Cr\u00e9ation d\u2019une colonne date/heure # Pour une introduction g\u00e9n\u00e9rale \u00e0 la d\u00e9finition du type de colonnes, consultez Colonnes et types de donn\u00e9es . Pour indiquer \u00e0 Grist que vous avez l\u2019intention de saisir uniquement des dates/heures dans une colonne, allez dans l\u2019en-t\u00eate de la colonne, trouvez le menu d\u00e9roulant et s\u00e9lectionnez \u201cOptions de colonne\u201d. Ensuite, dans le panneau lat\u00e9ral qui s\u2019ouvre \u00e0 droite, choisissez \u201cDate\u201d dans le menu d\u00e9roulant \u201cType de colonne\u201d. Ou, si vous voulez des dates avec des heures, choisissez \u201cDateTime\u201d. Ensuite, vous pouvez choisir votre format de date/heure pr\u00e9f\u00e9r\u00e9. Pour le type \u201cDateTime\u201d, vous pouvez \u00e9galement choisir le fuseau horaire. Lorsque vous convertissez une colonne d\u2019un autre type, tel que \u201cTexte\u201d, vous verrez un aper\u00e7u des r\u00e9sultats de la conversion et devrez cliquer sur \u201cAppliquer\u201d pour terminer la conversion. Vous pouvez revenir et modifier les param\u00e8tres \u00e0 tout moment. Maintenant, lorsque vous \u00e9ditez une cellule dans cette colonne, vous aurez de l\u2019aide pour s\u00e9lectionner les dates et les heures. Insertion de la date actuelle # Vous pouvez ins\u00e9rer la date actuelle dans une cellule en utilisant \u2318 + ; (point-virgule) (Mac) ou Ctrl + ; (Windows). Vous pouvez ins\u00e9rer la date et l\u2019heure actuelles en utilisant \u2318 + Shift + ; (Mac) ou Ctrl + Shift + ; (Windows). Lors de l\u2019\u00e9dition d\u2019une cellule de date, le widget de saisie de date dispose d\u2019un bouton \u201caujourd\u2019hui\u201d pour la date du jour. Analyse des dates \u00e0 partir de cha\u00eenes # La fonction DATEVALUE convertit une cha\u00eene qui repr\u00e9sente une date en un objet datetime . Elle est simple \u00e0 utiliser et d\u00e9tectera automatiquement diff\u00e9rents formats de date : Vous pouvez \u00e9galement utiliser la biblioth\u00e8que datetime de Python, qui fournit deux fonctions utiles : strptime() et strftime() . Par exemple, disons que vous avez une table de suites de films et leurs dates de sortie (en tant que cha\u00eenes). Vous souhaitez analyser la date r\u00e9elle pour pouvoir trier correctement la table. Voici comment vous feriez cela : La premi\u00e8re ligne importe la biblioth\u00e8que datetime La deuxi\u00e8me ligne divise la cha\u00eene en deux parties et renvoie la deuxi\u00e8me partie (les tableaux Python sont bas\u00e9s sur z\u00e9ro). La troisi\u00e8me ligne utilise la fonction strptime de Python pour analyser la date (par exemple, \u201c19 mai 1999\u201d) en un objet datetime. Le premier param\u00e8tre de la fonction est la cha\u00eene \u00e0 analyser, le deuxi\u00e8me param\u00e8tre est le format de date dans lequel se trouve la cha\u00eene. Consultez les options de format pour voir si la cha\u00eene de format d\u2019exemple %B %d, %Y a du sens. (Remarque : Vous auriez \u00e9galement pu utiliser DATEVALUE(d) pour obtenir le m\u00eame r\u00e9sultat.) Le r\u00e9sultat a une v\u00e9ritable colonne de date et peut maintenant \u00eatre tri\u00e9 correctement par ordre chronologique, avec \u201cUn nouvel espoir\u201d en haut. Pour des raisons historiques, le premier film Star Wars est consid\u00e9r\u00e9 comme l\u2019\u00e9pisode 4. Et, parce que le type de colonne est s\u00e9lectionn\u00e9 comme une date, vous pouvez utiliser le \u201cFormat de date\u201d dans \u201cOptions de colonne\u201d pour s\u00e9lectionner le format dans lequel afficher la date. Pour certaines situations, vous pouvez souhaiter utiliser la biblioth\u00e8que python dateutil . Par exemple, si vous vivez dans une r\u00e9gion o\u00f9 les dates commencent g\u00e9n\u00e9ralement par le jour puis le mois, vous pouvez utiliser cette formule : import dateutil dateutil.parser.parse($date_text, dayfirst=True) Calculs de dates # Une fois que vous avez une colonne de date correcte, vous voudrez souvent effectuer des calculs de dates, comme calculer la diff\u00e9rence entre deux dates. La mani\u00e8re la plus simple de le faire est d\u2019utiliser la fonction DATEDIF qui prend deux dates et l\u2019unit\u00e9 d\u2019information \u00e0 retourner (Jours, Mois ou Ann\u00e9es). Vous pouvez \u00e9galement utiliser le signe moins pour soustraire deux dates, mais vous pourriez \u00eatre surpris par le r\u00e9sultat : Cela se produit parce que la soustraction de deux objets datetime comme nous l\u2019avons fait dans l\u2019exemple ci-dessus, donne un objet datetime.timedelta qui repr\u00e9sente \u201cUne dur\u00e9e exprimant la diff\u00e9rence entre deux instances de date, heure ou datetime \u00e0 une r\u00e9solution de microseconde.\u201d Dans Grist (et Python), vous devez \u00eatre plus pr\u00e9cis sur la fa\u00e7on dont vous souhaitez afficher la diff\u00e9rence de date. Par exemple, pour obtenir le nombre de jours \u00e0 partir de l\u2019objet timedelta retourn\u00e9, utilisez sa propri\u00e9t\u00e9 .days : Si vous voulez des semaines ou des ann\u00e9es, divisez simplement par 7 ou par 365. (Divisez par 7.0 ou 365.0 pour inclure une partie fractionnaire dans le r\u00e9sultat.) Si vous voulez des heures, multipliez par 24. Vous pouvez \u00e9galement utiliser des fonctions sp\u00e9cifiques pour obtenir ce que vous voulez. Par exemple, DAYS est une fonction courante dans les applications de tableur qui renvoie la diff\u00e9rence entre deux dates : DAYS($Last_day, $First_day) Formules Excel/Sheets Grist prend en charge de nombreuses autres fonctions courantes d\u2019autres applications de tableur, y compris DATEADD , DATEDIF , DATEVALUE , MONTH , HOUR , et bien d\u2019autres . Obtenir une partie de la date # Vous avez vu comment analyser la date, l\u2019afficher dans diff\u00e9rents formats et effectuer des calculs de dates. Mais que faire si vous voulez obtenir plus d\u2019informations sur une date sp\u00e9cifique, comme obtenir son jour de la semaine ? Une option est d\u2019utiliser la fonction WEEKDAY , qui se comporte comme dans Excel, renvoyant 1-7 pour dimanche-samedi. Alternativement, nous pouvons utiliser la fonction strftime : Une autre option serait de reformater la date en utilisant le format de date dans les options de colonne (voir la r\u00e9f\u00e9rence de formatage de date ). Fuseaux horaires # Les valeurs dans les colonnes DateTime repr\u00e9sentent des moments dans le temps. Le m\u00eame moment appara\u00eetra diff\u00e9remment dans diff\u00e9rents fuseaux horaires. Dans Grist, le fuseau horaire est d\u00e9fini sur chaque colonne DateTime . Par exemple, si le fuseau horaire est d\u00e9fini sur \u201cAmerica/New_York\u201d, il affichera les valeurs dans le fuseau horaire de New York aux collaborateurs du monde entier. Un document Grist a un param\u00e8tre de fuseau horaire global, qui sert de fuseau horaire par d\u00e9faut lorsque vous cr\u00e9ez une nouvelle colonne de type DateTime . Ce fuseau horaire global est d\u00e9fini sur votre fuseau horaire local lorsque vous cr\u00e9ez un document pour la premi\u00e8re fois. Vous pouvez le voir ou le modifier en cliquant sur votre photo de profil ou ic\u00f4ne, et en s\u00e9lectionnant \u201cParam\u00e8tres du document\u201d. Si vous ins\u00e9rez la date et l\u2019heure actuelles en utilisant \u2318 + Shift + ; (Mac) ou Ctrl + Shift + ; (Windows) dans une colonne DateTime , elle sera ins\u00e9r\u00e9e comme un v\u00e9ritable horodatage conscient du fuseau horaire, et affich\u00e9e avec le fuseau horaire d\u00e9fini pour cette colonne. Si vous faites de m\u00eame dans une colonne Texte , la date/heure sera ins\u00e9r\u00e9e comme le texte appropri\u00e9 pour le param\u00e8tre de fuseau horaire global du document. De m\u00eame, ins\u00e9rer la date actuelle dans une colonne Date produira la date actuelle selon le fuseau horaire du document. Ressources suppl\u00e9mentaires # Cheatsheet Python pour strftime , \u00e0 utiliser avec strftime() et strptime() dans les formules. Cheatsheet de formatage de date , pour sp\u00e9cifier le format date/heure dans les param\u00e8tres de colonne. Biblioth\u00e8que dateutil , extensions au module standard datetime de Python.","title":"Working with dates"},{"location":"dates/#vue-densemble","text":"Grist exprime les dates et les heures de deux mani\u00e8res. La premi\u00e8re est le type de colonne Date , qui repr\u00e9sente une date de calendrier, sans heure de la journ\u00e9e, et non associ\u00e9e \u00e0 un fuseau horaire particulier. La seconde est le type de colonne DateTime , qui repr\u00e9sente une date de calendrier avec une heure de la journ\u00e9e pouvant \u00eatre li\u00e9e \u00e0 un fuseau horaire. Les types de colonnes Date et DateTime prennent en charge diff\u00e9rentes options de formatage. Lorsqu\u2019une colonne est d\u00e9finie comme Date ou DateTime , un widget de s\u00e9lection de date vous permet de choisir la date sur un calendrier lors de l\u2019\u00e9dition d\u2019une cellule. Lorsque vous travaillez avec des dates dans des formules, les dates sont des objets datetime Python. Cela vous permet de faire des choses puissantes, mais peut \u00eatre inattendu si vous n\u2019\u00eates pas familier avec eux.","title":"Vue d’ensemble"},{"location":"dates/#creation-dune-colonne-dateheure","text":"Pour une introduction g\u00e9n\u00e9rale \u00e0 la d\u00e9finition du type de colonnes, consultez Colonnes et types de donn\u00e9es . Pour indiquer \u00e0 Grist que vous avez l\u2019intention de saisir uniquement des dates/heures dans une colonne, allez dans l\u2019en-t\u00eate de la colonne, trouvez le menu d\u00e9roulant et s\u00e9lectionnez \u201cOptions de colonne\u201d. Ensuite, dans le panneau lat\u00e9ral qui s\u2019ouvre \u00e0 droite, choisissez \u201cDate\u201d dans le menu d\u00e9roulant \u201cType de colonne\u201d. Ou, si vous voulez des dates avec des heures, choisissez \u201cDateTime\u201d. Ensuite, vous pouvez choisir votre format de date/heure pr\u00e9f\u00e9r\u00e9. Pour le type \u201cDateTime\u201d, vous pouvez \u00e9galement choisir le fuseau horaire. Lorsque vous convertissez une colonne d\u2019un autre type, tel que \u201cTexte\u201d, vous verrez un aper\u00e7u des r\u00e9sultats de la conversion et devrez cliquer sur \u201cAppliquer\u201d pour terminer la conversion. Vous pouvez revenir et modifier les param\u00e8tres \u00e0 tout moment. Maintenant, lorsque vous \u00e9ditez une cellule dans cette colonne, vous aurez de l\u2019aide pour s\u00e9lectionner les dates et les heures.","title":"Cr\u00e9ation d’une colonne date/heure"},{"location":"dates/#insertion-de-la-date-actuelle","text":"Vous pouvez ins\u00e9rer la date actuelle dans une cellule en utilisant \u2318 + ; (point-virgule) (Mac) ou Ctrl + ; (Windows). Vous pouvez ins\u00e9rer la date et l\u2019heure actuelles en utilisant \u2318 + Shift + ; (Mac) ou Ctrl + Shift + ; (Windows). Lors de l\u2019\u00e9dition d\u2019une cellule de date, le widget de saisie de date dispose d\u2019un bouton \u201caujourd\u2019hui\u201d pour la date du jour.","title":"Insertion de la date actuelle"},{"location":"dates/#analyse-des-dates-a-partir-de-chaines","text":"La fonction DATEVALUE convertit une cha\u00eene qui repr\u00e9sente une date en un objet datetime . Elle est simple \u00e0 utiliser et d\u00e9tectera automatiquement diff\u00e9rents formats de date : Vous pouvez \u00e9galement utiliser la biblioth\u00e8que datetime de Python, qui fournit deux fonctions utiles : strptime() et strftime() . Par exemple, disons que vous avez une table de suites de films et leurs dates de sortie (en tant que cha\u00eenes). Vous souhaitez analyser la date r\u00e9elle pour pouvoir trier correctement la table. Voici comment vous feriez cela : La premi\u00e8re ligne importe la biblioth\u00e8que datetime La deuxi\u00e8me ligne divise la cha\u00eene en deux parties et renvoie la deuxi\u00e8me partie (les tableaux Python sont bas\u00e9s sur z\u00e9ro). La troisi\u00e8me ligne utilise la fonction strptime de Python pour analyser la date (par exemple, \u201c19 mai 1999\u201d) en un objet datetime. Le premier param\u00e8tre de la fonction est la cha\u00eene \u00e0 analyser, le deuxi\u00e8me param\u00e8tre est le format de date dans lequel se trouve la cha\u00eene. Consultez les options de format pour voir si la cha\u00eene de format d\u2019exemple %B %d, %Y a du sens. (Remarque : Vous auriez \u00e9galement pu utiliser DATEVALUE(d) pour obtenir le m\u00eame r\u00e9sultat.) Le r\u00e9sultat a une v\u00e9ritable colonne de date et peut maintenant \u00eatre tri\u00e9 correctement par ordre chronologique, avec \u201cUn nouvel espoir\u201d en haut. Pour des raisons historiques, le premier film Star Wars est consid\u00e9r\u00e9 comme l\u2019\u00e9pisode 4. Et, parce que le type de colonne est s\u00e9lectionn\u00e9 comme une date, vous pouvez utiliser le \u201cFormat de date\u201d dans \u201cOptions de colonne\u201d pour s\u00e9lectionner le format dans lequel afficher la date. Pour certaines situations, vous pouvez souhaiter utiliser la biblioth\u00e8que python dateutil . Par exemple, si vous vivez dans une r\u00e9gion o\u00f9 les dates commencent g\u00e9n\u00e9ralement par le jour puis le mois, vous pouvez utiliser cette formule : import dateutil dateutil.parser.parse($date_text, dayfirst=True)","title":"Analyse des dates \u00e0 partir de cha\u00eenes"},{"location":"dates/#calculs-de-dates","text":"Une fois que vous avez une colonne de date correcte, vous voudrez souvent effectuer des calculs de dates, comme calculer la diff\u00e9rence entre deux dates. La mani\u00e8re la plus simple de le faire est d\u2019utiliser la fonction DATEDIF qui prend deux dates et l\u2019unit\u00e9 d\u2019information \u00e0 retourner (Jours, Mois ou Ann\u00e9es). Vous pouvez \u00e9galement utiliser le signe moins pour soustraire deux dates, mais vous pourriez \u00eatre surpris par le r\u00e9sultat : Cela se produit parce que la soustraction de deux objets datetime comme nous l\u2019avons fait dans l\u2019exemple ci-dessus, donne un objet datetime.timedelta qui repr\u00e9sente \u201cUne dur\u00e9e exprimant la diff\u00e9rence entre deux instances de date, heure ou datetime \u00e0 une r\u00e9solution de microseconde.\u201d Dans Grist (et Python), vous devez \u00eatre plus pr\u00e9cis sur la fa\u00e7on dont vous souhaitez afficher la diff\u00e9rence de date. Par exemple, pour obtenir le nombre de jours \u00e0 partir de l\u2019objet timedelta retourn\u00e9, utilisez sa propri\u00e9t\u00e9 .days : Si vous voulez des semaines ou des ann\u00e9es, divisez simplement par 7 ou par 365. (Divisez par 7.0 ou 365.0 pour inclure une partie fractionnaire dans le r\u00e9sultat.) Si vous voulez des heures, multipliez par 24. Vous pouvez \u00e9galement utiliser des fonctions sp\u00e9cifiques pour obtenir ce que vous voulez. Par exemple, DAYS est une fonction courante dans les applications de tableur qui renvoie la diff\u00e9rence entre deux dates : DAYS($Last_day, $First_day) Formules Excel/Sheets Grist prend en charge de nombreuses autres fonctions courantes d\u2019autres applications de tableur, y compris DATEADD , DATEDIF , DATEVALUE , MONTH , HOUR , et bien d\u2019autres .","title":"Calculs de dates"},{"location":"dates/#obtenir-une-partie-de-la-date","text":"Vous avez vu comment analyser la date, l\u2019afficher dans diff\u00e9rents formats et effectuer des calculs de dates. Mais que faire si vous voulez obtenir plus d\u2019informations sur une date sp\u00e9cifique, comme obtenir son jour de la semaine ? Une option est d\u2019utiliser la fonction WEEKDAY , qui se comporte comme dans Excel, renvoyant 1-7 pour dimanche-samedi. Alternativement, nous pouvons utiliser la fonction strftime : Une autre option serait de reformater la date en utilisant le format de date dans les options de colonne (voir la r\u00e9f\u00e9rence de formatage de date ).","title":"Obtenir une partie de la date"},{"location":"dates/#fuseaux-horaires","text":"Les valeurs dans les colonnes DateTime repr\u00e9sentent des moments dans le temps. Le m\u00eame moment appara\u00eetra diff\u00e9remment dans diff\u00e9rents fuseaux horaires. Dans Grist, le fuseau horaire est d\u00e9fini sur chaque colonne DateTime . Par exemple, si le fuseau horaire est d\u00e9fini sur \u201cAmerica/New_York\u201d, il affichera les valeurs dans le fuseau horaire de New York aux collaborateurs du monde entier. Un document Grist a un param\u00e8tre de fuseau horaire global, qui sert de fuseau horaire par d\u00e9faut lorsque vous cr\u00e9ez une nouvelle colonne de type DateTime . Ce fuseau horaire global est d\u00e9fini sur votre fuseau horaire local lorsque vous cr\u00e9ez un document pour la premi\u00e8re fois. Vous pouvez le voir ou le modifier en cliquant sur votre photo de profil ou ic\u00f4ne, et en s\u00e9lectionnant \u201cParam\u00e8tres du document\u201d. Si vous ins\u00e9rez la date et l\u2019heure actuelles en utilisant \u2318 + Shift + ; (Mac) ou Ctrl + Shift + ; (Windows) dans une colonne DateTime , elle sera ins\u00e9r\u00e9e comme un v\u00e9ritable horodatage conscient du fuseau horaire, et affich\u00e9e avec le fuseau horaire d\u00e9fini pour cette colonne. Si vous faites de m\u00eame dans une colonne Texte , la date/heure sera ins\u00e9r\u00e9e comme le texte appropri\u00e9 pour le param\u00e8tre de fuseau horaire global du document. De m\u00eame, ins\u00e9rer la date actuelle dans une colonne Date produira la date actuelle selon le fuseau horaire du document.","title":"Fuseaux horaires"},{"location":"dates/#ressources-supplementaires","text":"Cheatsheet Python pour strftime , \u00e0 utiliser avec strftime() et strptime() dans les formules. Cheatsheet de formatage de date , pour sp\u00e9cifier le format date/heure dans les param\u00e8tres de colonne. Biblioth\u00e8que dateutil , extensions au module standard datetime de Python.","title":"Ressources suppl\u00e9mentaires"},{"location":"document-history/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Historique du document # Pour acc\u00e9der aux informations sur l\u2019historique d\u2019un document, cliquez sur \u201cHistorique du document\u201d dans le panneau de gauche. Le panneau de droite proposera alors deux onglets, \u201cActivit\u00e9\u201d et \u201cInstantan\u00e9s\u201d. Instantan\u00e9s # Grist enregistre automatiquement des sauvegardes compl\u00e8tes de vos documents au fur et \u00e0 mesure que vous travaillez dessus, les rendant disponibles dans l\u2019onglet Instantan\u00e9s. Lisez Sauvegardes automatiques pour plus de d\u00e9tails sur l\u2019utilisation de cet onglet pour examiner, comparer et restaurer des versions ant\u00e9rieures d\u2019un document. Activit\u00e9 # L\u2019onglet Activit\u00e9 r\u00e9pertorie tous les changements r\u00e9cents pour la table associ\u00e9e \u00e0 la vue que vous consultez actuellement. Cochez la case \u201cToutes les tables\u201d pour voir les changements r\u00e9cents dans le document, quelle que soit la table. Les changements sont affich\u00e9s sous forme de petits extraits de table. Les cellules sont cliquables et vous am\u00e8nent \u00e0 la version actuelle de la cellule (si elle existe encore) dans la vue \u201cprincipale\u201d pour la table la contenant (il s\u2019agit g\u00e9n\u00e9ralement de la premi\u00e8re vue cr\u00e9\u00e9e montrant la table).","title":"Document history"},{"location":"document-history/#historique-du-document","text":"Pour acc\u00e9der aux informations sur l\u2019historique d\u2019un document, cliquez sur \u201cHistorique du document\u201d dans le panneau de gauche. Le panneau de droite proposera alors deux onglets, \u201cActivit\u00e9\u201d et \u201cInstantan\u00e9s\u201d.","title":"Historique du document"},{"location":"document-history/#instantanes","text":"Grist enregistre automatiquement des sauvegardes compl\u00e8tes de vos documents au fur et \u00e0 mesure que vous travaillez dessus, les rendant disponibles dans l\u2019onglet Instantan\u00e9s. Lisez Sauvegardes automatiques pour plus de d\u00e9tails sur l\u2019utilisation de cet onglet pour examiner, comparer et restaurer des versions ant\u00e9rieures d\u2019un document.","title":"Instantan\u00e9s"},{"location":"document-history/#activite","text":"L\u2019onglet Activit\u00e9 r\u00e9pertorie tous les changements r\u00e9cents pour la table associ\u00e9e \u00e0 la vue que vous consultez actuellement. Cochez la case \u201cToutes les tables\u201d pour voir les changements r\u00e9cents dans le document, quelle que soit la table. Les changements sont affich\u00e9s sous forme de petits extraits de table. Les cellules sont cliquables et vous am\u00e8nent \u00e0 la version actuelle de la cellule (si elle existe encore) dans la vue \u201cprincipale\u201d pour la table la contenant (il s\u2019agit g\u00e9n\u00e9ralement de la premi\u00e8re vue cr\u00e9\u00e9e montrant la table).","title":"Activit\u00e9"},{"location":"embedding/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Int\u00e9grer Grist # Peut-\u00eatre souhaitez-vous lister vos produits, prix et quantit\u00e9s sur votre site web, ou vous voulez afficher un graphique en camembert des r\u00e9sultats de vote qui se met \u00e0 jour en direct. Avec l\u2019acc\u00e8s public activ\u00e9, vous pouvez int\u00e9grer votre document Grist sur votre propre site. Pour ce faire, vous devez d\u2019abord le rendre public et avoir acc\u00e8s au code de votre site web afin de placer du code HTML \u00e0 l\u2019emplacement souhait\u00e9. Si votre site est h\u00e9berg\u00e9 sur une plateforme CMS cloud populaire (comme Blogger ou WordPress), vous pouvez trouver des blocs de code HTML dans l\u2019\u00e9diteur de th\u00e8me, ou vous devrez peut-\u00eatre utiliser un plugin pour acc\u00e9der au code de votre site. Si vous avez des probl\u00e8mes pour modifier votre site, n\u2019h\u00e9sitez pas \u00e0 nous demander ou \u00e0 poser une question sur notre Forum Communautaire . Une fois que vous avez d\u00e9cid\u00e9 o\u00f9 int\u00e9grer votre document, collez cet extrait de code dans votre fichier HTML : L\u2019attribut src pointe vers l\u2019URL de la page que vous souhaitez int\u00e9grer. Pour obtenir l\u2019 URL de votre document, naviguez simplement vers la page que vous souhaitez partager et copiez l\u2019URL depuis la barre d\u2019adresse du navigateur. Ajouter le param\u00e8tre ?embed=true \u00e0 la fin indique \u00e0 Grist qu\u2019il doit afficher uniquement le contenu de votre page, en supprimant tous les \u00e9l\u00e9ments qui ne sont pas n\u00e9cessaires pour la version int\u00e9gr\u00e9e. Vous pouvez ajuster les attributs height et width pour am\u00e9liorer l\u2019apparence sur votre site. Puisque ce document du Centre d\u2019Aide est un fichier HTML ordinaire, nous pouvons l\u2019essayer tout de suite ! Vous devriez voir ci-dessous une table en direct int\u00e9gr\u00e9e (et non une capture d\u2019\u00e9cran) provenant de l\u2019un de nos exemples : Ceci est une vue en direct et en lecture seule de la page Grist et elle se met \u00e0 jour d\u00e8s que quelqu\u2019un la modifie. Vous pouvez, bien s\u00fbr, int\u00e9grer n\u2019importe quelle page que vous souhaitez, y compris la vue fiche, les graphiques et toute page avec plusieurs sections. Voici deux autres exemples avec un graphique et une vue liste de fiches : Param\u00e8tres # Lecture seule vs. \u00c9ditable # Ajouter ?embed=true \u00e0 une URL partage la page en lecture seule tandis que ?style=singlePage peut \u00eatre \u00e9dit\u00e9e et suit les permissions avanc\u00e9es . Partager une Vue Int\u00e9gr\u00e9e Ajouter ?embed=true ou ?style=singlePage \u00e0 la fin de l\u2019URL d\u2019une page de document rend le document sans la barre d\u2019outils en haut, le menu de page \u00e0 gauche ou le panneau de cr\u00e9ateur \u00e0 droite. Pour en savoir plus sur le partage de lien, consultez Acc\u00e8s public et partage de lien . Apparence # Contr\u00f4lez l\u2019apparence d\u2019un iframe int\u00e9gr\u00e9 en assignant une apparence de th\u00e8me en ajoutant ?themeAppearance=light pour le mode clair ou ?themeAppearance=dark pour le mode sombre \u00e0 votre URL. Vous pouvez \u00e9galement remplacer le param\u00e8tre par d\u00e9faut du syst\u00e8me d\u2019exploitation en utilisant ?themeSyncWithOs=false . Cha\u00eenage des Param\u00e8tres Lors de l\u2019ajout de param\u00e8tres \u00e0 la fin de votre URL, le premier commence toujours par ? . Tous les param\u00e8tres suppl\u00e9mentaires commencent par & . Par exemple, https://templates.getgrist.com/6D8E2h2DQNwS/Task-Management/p/6?embed=true&themeAppearance=dark&themeSyncWithOs=false cr\u00e9e une vue int\u00e9gr\u00e9e, en lecture seule et force le mode sombre, ind\u00e9pendamment des param\u00e8tres de votre syst\u00e8me d\u2019exploitation.","title":"Embedding"},{"location":"embedding/#integrer-grist","text":"Peut-\u00eatre souhaitez-vous lister vos produits, prix et quantit\u00e9s sur votre site web, ou vous voulez afficher un graphique en camembert des r\u00e9sultats de vote qui se met \u00e0 jour en direct. Avec l\u2019acc\u00e8s public activ\u00e9, vous pouvez int\u00e9grer votre document Grist sur votre propre site. Pour ce faire, vous devez d\u2019abord le rendre public et avoir acc\u00e8s au code de votre site web afin de placer du code HTML \u00e0 l\u2019emplacement souhait\u00e9. Si votre site est h\u00e9berg\u00e9 sur une plateforme CMS cloud populaire (comme Blogger ou WordPress), vous pouvez trouver des blocs de code HTML dans l\u2019\u00e9diteur de th\u00e8me, ou vous devrez peut-\u00eatre utiliser un plugin pour acc\u00e9der au code de votre site. Si vous avez des probl\u00e8mes pour modifier votre site, n\u2019h\u00e9sitez pas \u00e0 nous demander ou \u00e0 poser une question sur notre Forum Communautaire . Une fois que vous avez d\u00e9cid\u00e9 o\u00f9 int\u00e9grer votre document, collez cet extrait de code dans votre fichier HTML : L\u2019attribut src pointe vers l\u2019URL de la page que vous souhaitez int\u00e9grer. Pour obtenir l\u2019 URL de votre document, naviguez simplement vers la page que vous souhaitez partager et copiez l\u2019URL depuis la barre d\u2019adresse du navigateur. Ajouter le param\u00e8tre ?embed=true \u00e0 la fin indique \u00e0 Grist qu\u2019il doit afficher uniquement le contenu de votre page, en supprimant tous les \u00e9l\u00e9ments qui ne sont pas n\u00e9cessaires pour la version int\u00e9gr\u00e9e. Vous pouvez ajuster les attributs height et width pour am\u00e9liorer l\u2019apparence sur votre site. Puisque ce document du Centre d\u2019Aide est un fichier HTML ordinaire, nous pouvons l\u2019essayer tout de suite ! Vous devriez voir ci-dessous une table en direct int\u00e9gr\u00e9e (et non une capture d\u2019\u00e9cran) provenant de l\u2019un de nos exemples : Ceci est une vue en direct et en lecture seule de la page Grist et elle se met \u00e0 jour d\u00e8s que quelqu\u2019un la modifie. Vous pouvez, bien s\u00fbr, int\u00e9grer n\u2019importe quelle page que vous souhaitez, y compris la vue fiche, les graphiques et toute page avec plusieurs sections. Voici deux autres exemples avec un graphique et une vue liste de fiches :","title":"Int\u00e9grer Grist"},{"location":"embedding/#parametres","text":"","title":"Param\u00e8tres"},{"location":"embedding/#lecture-seule-vs-editable","text":"Ajouter ?embed=true \u00e0 une URL partage la page en lecture seule tandis que ?style=singlePage peut \u00eatre \u00e9dit\u00e9e et suit les permissions avanc\u00e9es . Partager une Vue Int\u00e9gr\u00e9e Ajouter ?embed=true ou ?style=singlePage \u00e0 la fin de l\u2019URL d\u2019une page de document rend le document sans la barre d\u2019outils en haut, le menu de page \u00e0 gauche ou le panneau de cr\u00e9ateur \u00e0 droite. Pour en savoir plus sur le partage de lien, consultez Acc\u00e8s public et partage de lien .","title":"Lecture seule vs. \u00c9ditable"},{"location":"embedding/#apparence","text":"Contr\u00f4lez l\u2019apparence d\u2019un iframe int\u00e9gr\u00e9 en assignant une apparence de th\u00e8me en ajoutant ?themeAppearance=light pour le mode clair ou ?themeAppearance=dark pour le mode sombre \u00e0 votre URL. Vous pouvez \u00e9galement remplacer le param\u00e8tre par d\u00e9faut du syst\u00e8me d\u2019exploitation en utilisant ?themeSyncWithOs=false . Cha\u00eenage des Param\u00e8tres Lors de l\u2019ajout de param\u00e8tres \u00e0 la fin de votre URL, le premier commence toujours par ? . Tous les param\u00e8tres suppl\u00e9mentaires commencent par & . Par exemple, https://templates.getgrist.com/6D8E2h2DQNwS/Task-Management/p/6?embed=true&themeAppearance=dark&themeSyncWithOs=false cr\u00e9e une vue int\u00e9gr\u00e9e, en lecture seule et force le mode sombre, ind\u00e9pendamment des param\u00e8tres de votre syst\u00e8me d\u2019exploitation.","title":"Apparence"},{"location":"enter-data/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Saisie de donn\u00e9es # Une grille de type tableur est un excellent moyen de visualiser les donn\u00e9es. Dans Grist, c\u2019est la vue offerte par le widget de page par d\u00e9faut appel\u00e9 \u201cTable\u201d. Comme dans un tableur, vous pouvez utiliser la souris ou les touches fl\u00e9ch\u00e9es pour vous d\u00e9placer dans les cellules d\u2019une table. Pour commencer \u00e0 saisir des donn\u00e9es dans une cellule s\u00e9lectionn\u00e9e, commencez \u00e0 taper, appuyez sur Entr\u00e9e , ou double-cliquez sur la cellule. \u00c9dition des cellules # Lors de l\u2019\u00e9dition d\u2019une cellule, plusieurs touches sont sp\u00e9ciales : \u00c9chap annule l\u2019op\u00e9ration et restaure la valeur pr\u00e9c\u00e9dente dans la cellule. Tab , Maj + Tab enregistre votre entr\u00e9e et d\u00e9place votre curseur vers la cellule suivante ou pr\u00e9c\u00e9dente. Entr\u00e9e enregistre votre entr\u00e9e et d\u00e9place votre curseur vers la ligne suivante. Maj + Entr\u00e9e ajoute une nouvelle ligne dans votre cellule. Copier et coller # Vous pouvez copier des donn\u00e9es depuis Grist ou y coller des donn\u00e9es. Si l\u2019intervalle coll\u00e9 est plus long que les enregistrements disponibles, de nouveaux enregistrements seront ajout\u00e9s. Notez que Grist ne cr\u00e9e pas automatiquement de nouvelles colonnes. Si les donn\u00e9es coll\u00e9es ont plus de colonnes que celles affich\u00e9es par la grille, les colonnes suppl\u00e9mentaires seront omises. Widgets de saisie de donn\u00e9es # Dans Grist, les colonnes ont des types. En plus de taper des valeurs, de nombreux types de colonnes offrent des widgets sp\u00e9cialis\u00e9s pour saisir des donn\u00e9es plus facilement. Voici quelques-uns des plus utiles : Basculer . Une colonne \u201cBasculer\u201d affiche des valeurs Vrai/Faux et peut les afficher sous forme de \u201cCase \u00e0 cocher\u201d ou de \u201cCommutateur\u201d, que vous pouvez s\u00e9lectionner dans les options de la colonne. Vous pouvez basculer une valeur dans une telle cellule en cliquant sur la case \u00e0 cocher ou le commutateur, ou en appuyant sur Espace . Date et DateHeure . Appuyer sur Entr\u00e9e dans une telle cellule ouvrira un calendrier pour choisir une date. Choix et R\u00e9f\u00e9rence . Taper dans une cellule de l\u2019un de ces types produira un menu d\u00e9roulant de saisie semi-automatique. Lien vers les cellules # Vous pouvez cr\u00e9er un lien partageable vers une cellule en appuyant sur \u2318 \u21e7 A (Mac) ou Ctrl + Maj + A (Windows) lorsque la cellule est s\u00e9lectionn\u00e9e. Cette option est \u00e9galement disponible via le menu de la ligne sous \u201cCopier le lien d\u2019ancrage.\u201d Le lien sera plac\u00e9 dans votre presse-papiers, pr\u00eat \u00e0 \u00eatre coll\u00e9 dans un email ou une application de messagerie instantan\u00e9e. Le lien ne s\u2019ouvrira que pour les personnes ayant acc\u00e8s au document.","title":"Entering data"},{"location":"enter-data/#saisie-de-donnees","text":"Une grille de type tableur est un excellent moyen de visualiser les donn\u00e9es. Dans Grist, c\u2019est la vue offerte par le widget de page par d\u00e9faut appel\u00e9 \u201cTable\u201d. Comme dans un tableur, vous pouvez utiliser la souris ou les touches fl\u00e9ch\u00e9es pour vous d\u00e9placer dans les cellules d\u2019une table. Pour commencer \u00e0 saisir des donn\u00e9es dans une cellule s\u00e9lectionn\u00e9e, commencez \u00e0 taper, appuyez sur Entr\u00e9e , ou double-cliquez sur la cellule.","title":"Saisie de donn\u00e9es"},{"location":"enter-data/#edition-des-cellules","text":"Lors de l\u2019\u00e9dition d\u2019une cellule, plusieurs touches sont sp\u00e9ciales : \u00c9chap annule l\u2019op\u00e9ration et restaure la valeur pr\u00e9c\u00e9dente dans la cellule. Tab , Maj + Tab enregistre votre entr\u00e9e et d\u00e9place votre curseur vers la cellule suivante ou pr\u00e9c\u00e9dente. Entr\u00e9e enregistre votre entr\u00e9e et d\u00e9place votre curseur vers la ligne suivante. Maj + Entr\u00e9e ajoute une nouvelle ligne dans votre cellule.","title":"\u00c9dition des cellules"},{"location":"enter-data/#copier-et-coller","text":"Vous pouvez copier des donn\u00e9es depuis Grist ou y coller des donn\u00e9es. Si l\u2019intervalle coll\u00e9 est plus long que les enregistrements disponibles, de nouveaux enregistrements seront ajout\u00e9s. Notez que Grist ne cr\u00e9e pas automatiquement de nouvelles colonnes. Si les donn\u00e9es coll\u00e9es ont plus de colonnes que celles affich\u00e9es par la grille, les colonnes suppl\u00e9mentaires seront omises.","title":"Copier et coller"},{"location":"enter-data/#widgets-de-saisie-de-donnees","text":"Dans Grist, les colonnes ont des types. En plus de taper des valeurs, de nombreux types de colonnes offrent des widgets sp\u00e9cialis\u00e9s pour saisir des donn\u00e9es plus facilement. Voici quelques-uns des plus utiles : Basculer . Une colonne \u201cBasculer\u201d affiche des valeurs Vrai/Faux et peut les afficher sous forme de \u201cCase \u00e0 cocher\u201d ou de \u201cCommutateur\u201d, que vous pouvez s\u00e9lectionner dans les options de la colonne. Vous pouvez basculer une valeur dans une telle cellule en cliquant sur la case \u00e0 cocher ou le commutateur, ou en appuyant sur Espace . Date et DateHeure . Appuyer sur Entr\u00e9e dans une telle cellule ouvrira un calendrier pour choisir une date. Choix et R\u00e9f\u00e9rence . Taper dans une cellule de l\u2019un de ces types produira un menu d\u00e9roulant de saisie semi-automatique.","title":"Widgets de saisie de donn\u00e9es"},{"location":"enter-data/#lien-vers-les-cellules","text":"Vous pouvez cr\u00e9er un lien partageable vers une cellule en appuyant sur \u2318 \u21e7 A (Mac) ou Ctrl + Maj + A (Windows) lorsque la cellule est s\u00e9lectionn\u00e9e. Cette option est \u00e9galement disponible via le menu de la ligne sous \u201cCopier le lien d\u2019ancrage.\u201d Le lien sera plac\u00e9 dans votre presse-papiers, pr\u00eat \u00e0 \u00eatre coll\u00e9 dans un email ou une application de messagerie instantan\u00e9e. Le lien ne s\u2019ouvrira que pour les personnes ayant acc\u00e8s au document.","title":"Lien vers les cellules"},{"location":"examples/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Plus d\u2019exemples # Ici, nous publierons des exemples utiles de ce que vous pouvez faire avec Grist, parfois avec des mod\u00e8les pr\u00eats \u00e0 l\u2019emploi. Analyse des D\u00e9penses de Carte de Cr\u00e9dit : Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit. Les membres de la carte American Express peuvent utiliser le mod\u00e8le pr\u00eat \u00e0 l\u2019emploi dans l\u2019exemple. Listes de Livres avec Recherches en Biblioth\u00e8que et Magasin : La gestion des liens et les formules de Grist peuvent vous aider avec votre club de lecture, en ajoutant des liens automatiques vers des biblioth\u00e8ques, des magasins, des sites de critiques et d\u2019autres r\u00e9f\u00e9rences. Les m\u00eames id\u00e9es pourraient fonctionner avec les meubles Ikea, les commandes de nourriture, tout ce que vous aimez. Pr\u00e9parer des Emails en Utilisant des Formules : Transformez les cellules en liens qui ouvrent un programme de messagerie pour composer un nouveau message, et pr\u00e9-remplir ses destinataires, son objet, et plus encore. Pr\u00e9paration des Factures : Pr\u00e9visualisez des factures imprimables c\u00f4te \u00e0 c\u00f4te avec les donn\u00e9es de vos clients. Suivi de la Paie : Suivez facilement les taux, r\u00f4les et heures des employ\u00e9s, avec des r\u00e9sum\u00e9s de paie fiables et \u00e0 jour, et un historique d\u00e9taill\u00e9. Impression d\u2019\u00c9tiquettes de Courrier : Imprimez facilement des \u00e9tiquettes de courrier. Une vue personnalis\u00e9e prenant en charge les tailles d\u2019\u00e9tiquettes populaires permet de g\u00e9n\u00e9rer rapidement des \u00e9tiquettes et de les imprimer depuis Grist. Chasse au Tr\u00e9sor : Planifiez une chasse au tr\u00e9sor sans perdre le fil. Brainstormez des indices, puis assemblez-les en un parcours coh\u00e9rent. Carte : Affichez les emplacements list\u00e9s dans une table sur une carte. Gestion des T\u00e2ches pour \u00c9quipes : Cette liste de t\u00e2ches glorifi\u00e9e - similaire \u00e0 celle que nous utilisons en interne chez Grist labs - fonctionne bien pour g\u00e9rer les t\u00e2ches d\u2019une \u00e9quipe. Liste de Prospects : Une liste tr\u00e8s simple de prospects, assign\u00e9e \u00e0 des individus pour un suivi, avec le contr\u00f4le des affectations r\u00e9serv\u00e9 aux propri\u00e9taires du document. Comprendre les Cl\u00e9s de Lien : Apprenez \u00e0 cr\u00e9er des liens uniques qui partagent des vues limit\u00e9es de votre document Grist. Guide des Colonnes de R\u00e9f\u00e9rence : Ma\u00eetriser les Colonnes de R\u00e9f\u00e9rence en 3 \u00c9tapes. Guide des Tables R\u00e9sum\u00e9es : Ma\u00eetrisez les Tables R\u00e9sum\u00e9es avec 2 Concepts, en utilisant l\u2019exemple d\u2019un suivi de feuilles de temps, avec un suivi d\u00e9taill\u00e9 des comptes. Horodatages Automatiques et Tampons d\u2019Utilisateur : Apprenez \u00e0 cr\u00e9er des colonnes qui tamponnent l\u2019heure ou le nom d\u2019un utilisateur sur un enregistrement lorsqu\u2019il est cr\u00e9\u00e9 ou mis \u00e0 jour. Permissions Avanc\u00e9es pour Restreindre les Enregistrements en Double : Apprenez \u00e0 cr\u00e9er une condition dans les Permissions Avanc\u00e9es pour restreindre la cr\u00e9ation d\u2019un enregistrement en double. Cr\u00e9ation de Propositions et Contrats : Pr\u00e9visualisez des formulaires imprimables c\u00f4te \u00e0 c\u00f4te avec les donn\u00e9es de votre projet. Vous avez quelque chose \u00e0 partager ? # Vous avez votre propre mod\u00e8le \u00e0 partager avec le monde ? Envoyez-nous un email \u00e0 support@getgrist.com , et nous pourrions le pr\u00e9senter dans un futur post.","title":"More examples"},{"location":"examples/#plus-dexemples","text":"Ici, nous publierons des exemples utiles de ce que vous pouvez faire avec Grist, parfois avec des mod\u00e8les pr\u00eats \u00e0 l\u2019emploi. Analyse des D\u00e9penses de Carte de Cr\u00e9dit : Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit. Les membres de la carte American Express peuvent utiliser le mod\u00e8le pr\u00eat \u00e0 l\u2019emploi dans l\u2019exemple. Listes de Livres avec Recherches en Biblioth\u00e8que et Magasin : La gestion des liens et les formules de Grist peuvent vous aider avec votre club de lecture, en ajoutant des liens automatiques vers des biblioth\u00e8ques, des magasins, des sites de critiques et d\u2019autres r\u00e9f\u00e9rences. Les m\u00eames id\u00e9es pourraient fonctionner avec les meubles Ikea, les commandes de nourriture, tout ce que vous aimez. Pr\u00e9parer des Emails en Utilisant des Formules : Transformez les cellules en liens qui ouvrent un programme de messagerie pour composer un nouveau message, et pr\u00e9-remplir ses destinataires, son objet, et plus encore. Pr\u00e9paration des Factures : Pr\u00e9visualisez des factures imprimables c\u00f4te \u00e0 c\u00f4te avec les donn\u00e9es de vos clients. Suivi de la Paie : Suivez facilement les taux, r\u00f4les et heures des employ\u00e9s, avec des r\u00e9sum\u00e9s de paie fiables et \u00e0 jour, et un historique d\u00e9taill\u00e9. Impression d\u2019\u00c9tiquettes de Courrier : Imprimez facilement des \u00e9tiquettes de courrier. Une vue personnalis\u00e9e prenant en charge les tailles d\u2019\u00e9tiquettes populaires permet de g\u00e9n\u00e9rer rapidement des \u00e9tiquettes et de les imprimer depuis Grist. Chasse au Tr\u00e9sor : Planifiez une chasse au tr\u00e9sor sans perdre le fil. Brainstormez des indices, puis assemblez-les en un parcours coh\u00e9rent. Carte : Affichez les emplacements list\u00e9s dans une table sur une carte. Gestion des T\u00e2ches pour \u00c9quipes : Cette liste de t\u00e2ches glorifi\u00e9e - similaire \u00e0 celle que nous utilisons en interne chez Grist labs - fonctionne bien pour g\u00e9rer les t\u00e2ches d\u2019une \u00e9quipe. Liste de Prospects : Une liste tr\u00e8s simple de prospects, assign\u00e9e \u00e0 des individus pour un suivi, avec le contr\u00f4le des affectations r\u00e9serv\u00e9 aux propri\u00e9taires du document. Comprendre les Cl\u00e9s de Lien : Apprenez \u00e0 cr\u00e9er des liens uniques qui partagent des vues limit\u00e9es de votre document Grist. Guide des Colonnes de R\u00e9f\u00e9rence : Ma\u00eetriser les Colonnes de R\u00e9f\u00e9rence en 3 \u00c9tapes. Guide des Tables R\u00e9sum\u00e9es : Ma\u00eetrisez les Tables R\u00e9sum\u00e9es avec 2 Concepts, en utilisant l\u2019exemple d\u2019un suivi de feuilles de temps, avec un suivi d\u00e9taill\u00e9 des comptes. Horodatages Automatiques et Tampons d\u2019Utilisateur : Apprenez \u00e0 cr\u00e9er des colonnes qui tamponnent l\u2019heure ou le nom d\u2019un utilisateur sur un enregistrement lorsqu\u2019il est cr\u00e9\u00e9 ou mis \u00e0 jour. Permissions Avanc\u00e9es pour Restreindre les Enregistrements en Double : Apprenez \u00e0 cr\u00e9er une condition dans les Permissions Avanc\u00e9es pour restreindre la cr\u00e9ation d\u2019un enregistrement en double. Cr\u00e9ation de Propositions et Contrats : Pr\u00e9visualisez des formulaires imprimables c\u00f4te \u00e0 c\u00f4te avec les donn\u00e9es de votre projet.","title":"Plus d’exemples"},{"location":"examples/#vous-avez-quelque-chose-a-partager","text":"Vous avez votre propre mod\u00e8le \u00e0 partager avec le monde ? Envoyez-nous un email \u00e0 support@getgrist.com , et nous pourrions le pr\u00e9senter dans un futur post.","title":"Vous avez quelque chose \u00e0 partager ?"},{"location":"exports/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Exportation # Exporter une table # Si vous souhaitez exporter une table vers une autre feuille de calcul ou une base de donn\u00e9es, vous pouvez exporter cette table soit en fichier XLSX, soit en CSV, un format d\u2019\u00e9change courant pour les donn\u00e9es. Pour ce faire, ouvrez votre document \u00e0 la table ou \u00e0 la vue souhait\u00e9e. Ensuite, cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la vue. S\u00e9lectionnez soit \u201cT\u00e9l\u00e9charger en CSV\u201d soit \u201cT\u00e9l\u00e9charger en XLSX\u201d. Votre navigateur t\u00e9l\u00e9chargera alors un fichier contenant une ligne d\u2019en-t\u00eate nommant vos colonnes, \u00e0 l\u2019exclusion de toute colonne masqu\u00e9e ou ligne filtr\u00e9e, suivie de toutes les lignes de donn\u00e9es visibles dans la table. Exporter un document # Si vous souhaitez exporter toutes les tables au format Excel, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cExporter XLSX\u201d. Votre navigateur t\u00e9l\u00e9chargera alors un fichier Excel, o\u00f9 chaque table est une feuille distincte contenant toutes les lignes, sans aucun filtre appliqu\u00e9. Pour utiliser cette option, vous devez avoir un acc\u00e8s complet en lecture pour toutes les tables d\u2019un document. Une note \u00e0 propos de \u201cExporter CSV\u201d dans le menu de partage. Lorsque vous \u00eates sur une page avec plusieurs vues, \u201cExporter CSV\u201d n\u2019exportera que les donn\u00e9es de la vue actuellement s\u00e9lectionn\u00e9e. Pour exporter toutes vos donn\u00e9es, utilisez \u201cExporter XLSX\u201d ou l\u2019option \u201cT\u00e9l\u00e9charger\u201d qui est expliqu\u00e9e ci-dessous dans sauvegarder un document entier . Envoyer vers Google Drive # Si vous souhaitez exporter un document vers Google Drive en tant que fichier Google Sheet, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cEnvoyer vers Google Drive\u201d. Grist vous demandera d\u2019abord de vous connecter \u00e0 votre compte Google (ou d\u2019utiliser un compte auquel vous \u00eates d\u00e9j\u00e0 connect\u00e9) puis d\u2019autoriser la cr\u00e9ation d\u2019un fichier dans votre Google Drive. Grist pourra cr\u00e9er de nouveaux fichiers et les g\u00e9rer, mais ne pourra pas acc\u00e9der \u00e0 d\u2019autres fichiers dans votre drive. Une fois que vous acceptez la demande d\u2019autorisation, Grist exportera votre document en un fichier Excel puis le sauvegardera dans votre Google Drive en tant que fichier Google Sheet. Pour utiliser cette option, vous devez avoir un acc\u00e8s complet en lecture pour toutes les tables d\u2019un document. Sauvegarder un document entier # Grist effectue automatiquement des sauvegardes r\u00e9guli\u00e8res des documents, comme d\u00e9crit dans Sauvegardes Automatiques . Vous pouvez \u00e9galement effectuer des sauvegardes manuelles en enregistrant des copies des documents dans votre compte Grist. De plus, les documents Grist peuvent \u00eatre t\u00e9l\u00e9charg\u00e9s dans leur int\u00e9gralit\u00e9 sous forme de fichier de base de donn\u00e9es SQLite avec une extension .grist . SQLite est un format de base de donn\u00e9es populaire. Le fichier t\u00e9l\u00e9charg\u00e9 contiendra toutes vos donn\u00e9es tabulaires, tous les fichiers joints dans ces tables, les m\u00e9tadonn\u00e9es sur vos tables, pages et vues, ainsi qu\u2019un historique des modifications r\u00e9centes du document. Il ne contiendra pas d\u2019informations sur les personnes avec qui le document est partag\u00e9. Pour t\u00e9l\u00e9charger un document Grist, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran, et s\u00e9lectionnez \u201cT\u00e9l\u00e9charger\u201d. Restaurer \u00e0 partir d\u2019une sauvegarde # Un fichier .grist t\u00e9l\u00e9charg\u00e9 peut \u00eatre t\u00e9l\u00e9charg\u00e9 \u00e0 nouveau pour fournir une copie exacte de l\u2019original. Pour t\u00e9l\u00e9charger le fichier, ouvrez l\u2019espace d\u2019\u00e9quipe ou l\u2019espace personnel o\u00f9 vous souhaitez le placer, et s\u00e9lectionnez \u00e9ventuellement aussi un dossier. Ensuite, cliquez sur \u201cAjouter Nouveau\u201d en haut \u00e0 gauche, et s\u00e9lectionnez \u201cImporter un document\u201d. Vous pouvez \u00e9galement importer des fichiers CSV et Excel comme nouveaux documents Grist de cette mani\u00e8re.","title":"Exports & backups"},{"location":"exports/#exportation","text":"","title":"Exportation"},{"location":"exports/#exporter-une-table","text":"Si vous souhaitez exporter une table vers une autre feuille de calcul ou une base de donn\u00e9es, vous pouvez exporter cette table soit en fichier XLSX, soit en CSV, un format d\u2019\u00e9change courant pour les donn\u00e9es. Pour ce faire, ouvrez votre document \u00e0 la table ou \u00e0 la vue souhait\u00e9e. Ensuite, cliquez sur le menu \u00e0 trois points en haut \u00e0 droite de la vue. S\u00e9lectionnez soit \u201cT\u00e9l\u00e9charger en CSV\u201d soit \u201cT\u00e9l\u00e9charger en XLSX\u201d. Votre navigateur t\u00e9l\u00e9chargera alors un fichier contenant une ligne d\u2019en-t\u00eate nommant vos colonnes, \u00e0 l\u2019exclusion de toute colonne masqu\u00e9e ou ligne filtr\u00e9e, suivie de toutes les lignes de donn\u00e9es visibles dans la table.","title":"Exporter une table"},{"location":"exports/#exporter-un-document","text":"Si vous souhaitez exporter toutes les tables au format Excel, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cExporter XLSX\u201d. Votre navigateur t\u00e9l\u00e9chargera alors un fichier Excel, o\u00f9 chaque table est une feuille distincte contenant toutes les lignes, sans aucun filtre appliqu\u00e9. Pour utiliser cette option, vous devez avoir un acc\u00e8s complet en lecture pour toutes les tables d\u2019un document. Une note \u00e0 propos de \u201cExporter CSV\u201d dans le menu de partage. Lorsque vous \u00eates sur une page avec plusieurs vues, \u201cExporter CSV\u201d n\u2019exportera que les donn\u00e9es de la vue actuellement s\u00e9lectionn\u00e9e. Pour exporter toutes vos donn\u00e9es, utilisez \u201cExporter XLSX\u201d ou l\u2019option \u201cT\u00e9l\u00e9charger\u201d qui est expliqu\u00e9e ci-dessous dans sauvegarder un document entier .","title":"Exporter un document"},{"location":"exports/#envoyer-vers-google-drive","text":"Si vous souhaitez exporter un document vers Google Drive en tant que fichier Google Sheet, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cEnvoyer vers Google Drive\u201d. Grist vous demandera d\u2019abord de vous connecter \u00e0 votre compte Google (ou d\u2019utiliser un compte auquel vous \u00eates d\u00e9j\u00e0 connect\u00e9) puis d\u2019autoriser la cr\u00e9ation d\u2019un fichier dans votre Google Drive. Grist pourra cr\u00e9er de nouveaux fichiers et les g\u00e9rer, mais ne pourra pas acc\u00e9der \u00e0 d\u2019autres fichiers dans votre drive. Une fois que vous acceptez la demande d\u2019autorisation, Grist exportera votre document en un fichier Excel puis le sauvegardera dans votre Google Drive en tant que fichier Google Sheet. Pour utiliser cette option, vous devez avoir un acc\u00e8s complet en lecture pour toutes les tables d\u2019un document.","title":"Envoyer vers Google Drive"},{"location":"exports/#sauvegarder-un-document-entier","text":"Grist effectue automatiquement des sauvegardes r\u00e9guli\u00e8res des documents, comme d\u00e9crit dans Sauvegardes Automatiques . Vous pouvez \u00e9galement effectuer des sauvegardes manuelles en enregistrant des copies des documents dans votre compte Grist. De plus, les documents Grist peuvent \u00eatre t\u00e9l\u00e9charg\u00e9s dans leur int\u00e9gralit\u00e9 sous forme de fichier de base de donn\u00e9es SQLite avec une extension .grist . SQLite est un format de base de donn\u00e9es populaire. Le fichier t\u00e9l\u00e9charg\u00e9 contiendra toutes vos donn\u00e9es tabulaires, tous les fichiers joints dans ces tables, les m\u00e9tadonn\u00e9es sur vos tables, pages et vues, ainsi qu\u2019un historique des modifications r\u00e9centes du document. Il ne contiendra pas d\u2019informations sur les personnes avec qui le document est partag\u00e9. Pour t\u00e9l\u00e9charger un document Grist, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran, et s\u00e9lectionnez \u201cT\u00e9l\u00e9charger\u201d.","title":"Sauvegarder un document entier"},{"location":"exports/#restaurer-a-partir-dune-sauvegarde","text":"Un fichier .grist t\u00e9l\u00e9charg\u00e9 peut \u00eatre t\u00e9l\u00e9charg\u00e9 \u00e0 nouveau pour fournir une copie exacte de l\u2019original. Pour t\u00e9l\u00e9charger le fichier, ouvrez l\u2019espace d\u2019\u00e9quipe ou l\u2019espace personnel o\u00f9 vous souhaitez le placer, et s\u00e9lectionnez \u00e9ventuellement aussi un dossier. Ensuite, cliquez sur \u201cAjouter Nouveau\u201d en haut \u00e0 gauche, et s\u00e9lectionnez \u201cImporter un document\u201d. Vous pouvez \u00e9galement importer des fichiers CSV et Excel comme nouveaux documents Grist de cette mani\u00e8re.","title":"Restaurer \u00e0 partir d’une sauvegarde"},{"location":"formula-cheat-sheet/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Fiche de Formules # Grist dispose d\u2019un puissant moteur de donn\u00e9es pour calculer les cellules de vos tables \u00e0 l\u2019aide de formules. Les formules Grist sont \u00e9crites en Python , le langage le plus populaire pour la science des donn\u00e9es. Nous avons \u00e9galement une suite de fonctions semblables \u00e0 celles d\u2019Excel, avec des noms en majuscules. Voici quelques notes utiles : Les formules s\u2019appliquent \u00e0 toute la colonne. Les champs sont inclus dans les formules sous la forme $ColumnID . Python est sensible \u00e0 la casse, y compris pour les noms de table et de colonne Grist. Si l\u2019ID de votre colonne est title , la formule utilisera $title , o\u00f9 les deux sont en minuscules. Vous pouvez \u00e9crire du code Python multi-lignes dans les formules (utilisez Shift + Enter pour ajouter des lignes), y compris des instructions, des variables, des imports, etc. Le code Grist s\u2019ex\u00e9cute dans un sandbox s\u00e9curis\u00e9, sans acc\u00e8s \u00e0 quoi que ce soit en dehors de votre document. Si vous ne trouvez pas ce que vous cherchez, postez dans le Forum Communautaire et nous pourrons vous aider ! Fonctions Math\u00e9matiques # Math\u00e9matiques Simples (addition, soustraction, multiplication, division) # Utilise les op\u00e9rateurs + , - , / et * pour effectuer des calculs. Exemple de Math\u00e9matiques Simples # Chestwood Art Studio exp\u00e9die des \u0153uvres d\u2019art \u00e0 travers le pays et a la possibilit\u00e9 de paiements mensuels sur une p\u00e9riode de 12 mois. Nous avons le sous-total, la taxe (bas\u00e9e sur l\u2019\u00e9tat de destination) et le montant d\u00fb mensuel. Cette colonne de formule utilise l\u2019addition, la multiplication et la division. La formule utilis\u00e9e ici est : ($Subtotal + ($Subtotal*$Tax)) / 12 Nous ajoutons le sous-total \u00e0 la taxe calcul\u00e9e, puis divisons cela par 12 mois pour obtenir notre montant d\u00fb mensuel. D\u00e9pannage des Erreurs # #TypeError : Confirmez que toutes les colonnes utilis\u00e9es dans la formule sont de type Num\u00e9rique . max et min # Vous permet de trouver les valeurs max ou min dans une liste. Exemples utilisant MAX() et MIN() # MAX() et MIN() lorsqu\u2019ils sont en majuscules sont des fonctions de tableur qui n\u00e9cessitent une syntaxe sp\u00e9cifique. La syntaxe des formules de tableur est r\u00e9sum\u00e9e dans notre r\u00e9f\u00e9rence de fonctions . max() et min() en minuscules sont des fonctions Python. Max : Table des classes du mod\u00e8le Class Enrollment . La formule utilis\u00e9e dans la colonne \u2018Spots Left\u2019 de la table des Classes est : max($Max_Students - $Count, 0) or \"Full\" Cette formule montre le nombre de places restantes dans une classe, ou le texte \u2018Full\u2019 lorsque la classe est pleine ou surabonn\u00e9e. Nous construisons une liste entre les parenth\u00e8ses compos\u00e9e de deux \u00e9l\u00e9ments : $Max_Students - $Count et 0 . La formule renvoie le plus grand des deux. Lorsque $Count est inf\u00e9rieur \u00e0 $Max_Students , la diff\u00e9rence $Max_Students - $Count est positive et repr\u00e9sente les places restantes dans la classe. Lorsque $Count d\u00e9passe $Max_Students , alors la classe est pleine ou surabonn\u00e9e, et $Max_Students - $Count est n\u00e9gatif. Le maximum d\u2019un nombre n\u00e9gatif et de 0 sera 0, donc max($Max_Students - $Count, 0) est 0. Cela repr\u00e9sente une classe pleine. L\u2019ajout de or \"Full\" est appliqu\u00e9 lorsque la valeur est fausse, ce qui signifie qu\u2019un 0 est remplac\u00e9 par le texte \"Full\" . Min : Table des contacts du mod\u00e8le Lightweight CRM . La formule utilis\u00e9e dans la colonne \u2018Due\u2019 de la table des Contacts est : items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return min(items.Date) if items else None D\u00e9composons cela. Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") trouve tous les enregistrements dans la table Interactions o\u00f9 les Contacts correspondent et le Type est To-Do. Cela renvoie une liste d\u2019enregistrements que nous assignons \u00e0 la variable items . Ensuite, nous utilisons la notation par points pour trouver toutes les Dates assign\u00e9es aux enregistrements de notre liste items . Ces dates sont \u00e9valu\u00e9es pour trouver la date minimale. C\u2019est la valeur qui est renvoy\u00e9e. Ainsi, nous voyons la date de la t\u00e2che qui est due le plus t\u00f4t. S\u2019il n\u2019y a pas d\u2019\u00e9l\u00e9ments dans la liste, rien n\u2019est renvoy\u00e9 et le champ reste vide. Dans l\u2019exemple MAX(), la liste a deux \u00e9l\u00e9ments : $Max_Students - $Count et 0 , et la formule renvoie le plus grand des deux. Dans l\u2019exemple min(), la variable items tire une liste d\u2019enregistrements bas\u00e9e sur les arguments lookupRecords , \u00e9num\u00e9rant les dates et renvoyant la plus petite date. Notez que c\u2019est une fonction Python. Si nous avions \u00e9crit la formule comme MIN(), une fonction de tableur, la formule ne fonctionnerait pas car la formule de tableur n\u00e9cessite un format tr\u00e8s sp\u00e9cifique . Somme # Utilisez la fonction SUM() lorsque vous souhaitez additionner une liste de valeurs disponibles dans une cellule. Si vous souhaitez additionner des valeurs dans une colonne, utilisez Tables de R\u00e9sum\u00e9 . Exemple de SUM() # Custom Product Builder template La formule utilis\u00e9e dans la colonne Co\u00fbt Total de la table S\u00e9lectionner ou Ajouter de Nouveaux Produits est : SUM($Requirements.Cost) La colonne Requirements est une colonne cach\u00e9e dans cette table. C\u2019est une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table Build Requirements. Notre formule utilise la colonne Requirements pour acc\u00e9der \u00e0 la table Build Requirements, puis tire le co\u00fbt pour chaque enregistrement dans la table. Nous utilisons SUM() pour additionner les co\u00fbts de chaque enregistrement. Inventory Manager template La formule utilis\u00e9e dans la colonne Re\u00e7u de la table Tous les Produits est : SUM(Incoming_Order_Line_Items.lookupRecords(SKU=$id).Received_Qty) Nous utilisons la fonction lookupRecords pour trouver tous les enregistrements dans la table Incoming Order Line Items o\u00f9 le SKU correspond au SKU dans cette ligne, puis tirer la valeur dans la colonne Received Qty pour chacun de ces enregistrements. Nous utilisons SUM() pour trouver la somme de ces valeurs. Les colonnes Qty on Order et Sold de la table Tous les Produits sont \u00e9galement de bons exemples de la fonction SUM(). Consultez un autre exemple dans notre Forum Communautaire : Cr\u00e9er une somme de b\u00e9n\u00e9fice net et brut \u00e0 partir de plusieurs tables Comparer pour l\u2019\u00e9galit\u00e9 : == et != # Lors de la comparaison pour l\u2019\u00e9galit\u00e9 en Python, nous utilisons == pour \u2018\u00e9gal\u2019 et != pour \u2018diff\u00e9rent\u2019. Si $A est 2 et $B est 3, la formule $A == $B renverrait False , tandis que la formule $A != $B serait True . Exemples utilisant == # Inventory Manager template La formule utilis\u00e9e dans la colonne Received Qty de la table Incoming Order Line Items est : if $Order.Status =='Received': return $Qty else: return None La colonne Order de la table Incoming Order Line Items est une colonne de r\u00e9f\u00e9rence qui pointe vers la colonne Order Number de la table Incoming Orders. $Order.Status utilise la notation par points pour tirer la valeur de la colonne Status de la table Incoming Orders. Si la valeur dans cette colonne est \u00e9gale \u00e0 Received , la valeur de la colonne Qty sera renvoy\u00e9e. Si la valeur n\u2019est pas \u00e9gale \u00e0 Received , rien n\u2019est renvoy\u00e9. La formule utilis\u00e9e dans la colonne Date Received de la table Create New Order est : if $Status == \"Received\": return NOW() C\u2019est une formule d\u2019initialisation qui est d\u00e9clench\u00e9e lorsqu\u2019un changement est effectu\u00e9 dans la colonne Status. Si la valeur dans la colonne Status est \u00e9gale \u00e0 Received , la date actuelle est renvoy\u00e9e. Si les valeurs ne sont pas \u00e9gales, rien n\u2019est renvoy\u00e9. Exemples utilisant != # Project Management template La formule utilis\u00e9e dans la colonne Missed Deadline de la table Missed Deadline est : TODAY()> $Due_Date and $Status != \"Completed\" Si la date actuelle est sup\u00e9rieure \u00e0 la date donn\u00e9e dans la colonne Due Date et que la valeur dans la colonne Status n\u2019est pas \u00e9gale \u00e0 Completed , la formule est True . Si l\u2019une de ces affirmations est fausse, la formule est False . Comparer des Valeurs : < , > , <= , >= # Vous permet de comparer des valeurs num\u00e9riques. Si Sales est \u00e9gal \u00e0 1200 et Running_Cost est \u00e9gal \u00e0 1650 , \"Gains\" if $Sales > $Running_Cost else \"Loss\" renverrait Loss . Exemples de comparaison de valeurs # Inventory Manager template La formule utilis\u00e9e dans la colonne Stock Alert de la table Tous les Produits est : if $In_Stock + $QTY_on_Order > 5: return \"In Stock\" if $In_Stock + $QTY_on_Order > 0: return \"Low Stock\" else: return \"OUT OF STOCK\" Ici, nous avons deux d\u00e9clarations if-return diff\u00e9rentes ; si x est vrai, renvoyer some_value . Une fois qu\u2019une d\u00e9claration est vraie et qu\u2019une valeur est renvoy\u00e9e, la formule s\u2019arr\u00eate. Si les deux sont fausses, OUT OF STOCK est renvoy\u00e9. Tout d\u2019abord, si la valeur dans la colonne In Stock plus la valeur dans la colonne Qty On Order est sup\u00e9rieure \u00e0 5, renvoyez \u201cIn Stock\u201d. Ensuite, si la valeur dans la colonne In Stock plus la valeur dans la colonne Qty On Order est sup\u00e9rieure \u00e0 0, renvoyez \u201cLow Stock\u201d. Il est implicite que la valeur est inf\u00e9rieure ou \u00e9gale \u00e0 5 car la premi\u00e8re d\u00e9claration devrait \u00eatre fausse pour que cela soit \u00e9valu\u00e9. Enfin, si toutes les d\u00e9clarations sont fausses, renvoyez \u201cOUT OF STOCK\u201d. Internal Links Tracker for SEO template La formule utilis\u00e9e dans la colonne Orphaned? de la table Orphaned Pages est : len(Links.lookupRecords(To=$id))<1 Nous utilisons la fonction lookupRecords pour trouver tous les enregistrements dans la table Links o\u00f9 le lien dans la colonne To correspond au lien list\u00e9 dans la colonne Slug de cette ligne. Nous utilisons len() pour compter le nombre d\u2019enregistrements trouv\u00e9s. S\u2019il est inf\u00e9rieur \u00e0 1, la formule est \u00e9valu\u00e9e comme vraie et la case \u00e0 cocher sera coch\u00e9e. S\u2019il est \u00e9gal ou sup\u00e9rieur \u00e0 1, la formule est \u00e9valu\u00e9e comme fausse. Conversion de String en Float # String : Une s\u00e9quence de caract\u00e8res ou d\u2019extraits de texte. Dans le code, les cha\u00eenes sont entre guillemets, par exemple 'Hello' ou \"-12\" (ce sont trois caract\u00e8res entre guillemets, par opposition \u00e0 un nombre n\u00e9gatif). Voir Fonction str() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en cha\u00eene. Float : Nombres r\u00e9els qui peuvent stocker des valeurs d\u00e9cimales. \u00c9galement appel\u00e9s nombres \u00e0 virgule flottante. Voir Fonction float() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en un nombre \u00e0 virgule flottante. Integer : Un nombre entier, sans d\u00e9cimales. Voir Fonction int() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en un nombre entier. Exemple de conversion d\u2019une cha\u00eene en float # Artwork Orders La formule utilis\u00e9e dans la colonne Sale Price est : if $Appraisal_Value.endswith(\"k\"): return float($Appraisal_Value.rstrip(\"k\")) * 1000 return float($Appraisal_Value) Dans cet exemple, la colonne Appraisal Value est une colonne de texte qui contient des caract\u00e8res alphanum\u00e9riques. Afin d\u2019utiliser cette valeur dans des formules math\u00e9matiques, nous devons convertir de string \u00e0 float. Si la valeur dans la colonne Appraisal Value se termine par \u201ck\u201d, nous utilisons d\u2019abord rstrip() pour supprimer \u201ck\u201d de la cha\u00eene dans la colonne Appraisal Value. Maintenant que nous n\u2019avons que des caract\u00e8res num\u00e9riques, nous utilisons float() pour convertir notre cha\u00eene en float. Comme K repr\u00e9sente 1000 et que nous avons supprim\u00e9 cela de la valeur, nous multiplions notre float par 1000. Si la valeur dans la colonne Appraisal Value ne se termine pas par \u201ck\u201d, et ne contient que des caract\u00e8res num\u00e9riques, nous pouvons simplement utiliser float() pour convertir notre cha\u00eene en float. D\u00e9pannage # Si vous essayez d\u2019utiliser diff\u00e9rentes colonnes avec des valeurs num\u00e9riques dans une formule math\u00e9matique mais que vous voyez une erreur, v\u00e9rifiez les types de colonnes pour chacune des colonnes utilis\u00e9es dans la formule. Toutes doivent \u00eatre de type Num\u00e9rique . float() n\u2019est n\u00e9cessaire que lorsque vous traitez des valeurs alphanum\u00e9riques comme nous le voyons dans l\u2019 exemple . TypeError : impossible de multiplier une s\u00e9quence par un type non-int de \u2018float\u2019 Cette erreur se produit lorsqu\u2019une formule tente de multiplier des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans la capture d\u2019\u00e9cran ci-dessous, la colonne Tax est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour / : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente de diviser des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne \u2018# of Payments\u2019 est une colonne Choice . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour + : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente d\u2019 ajouter des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne Tax est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour - : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente de soustraire des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne Discount est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. Arrondir les Nombres # Sp\u00e9cifiez le nombre de d\u00e9cimales \u00e0 donner dans un r\u00e9sultat en utilisant la fonction ROUND() . Si la Temp\u00e9rature Moyenne est \u00e9gale \u00e0 46.5 , ROUND($Average_Temperature) renverrait 47 . Exemple d\u2019arrondi des nombres # Payroll template La formule utilis\u00e9e dans la colonne Payment est : ROUND($Hours*$Per_Hour, 2) La fonction ROUND() suit le format ROUND(value, places) qui arrondira la valeur donn\u00e9e au nombre de d\u00e9cimales sp\u00e9cifi\u00e9. Notre formule trouve la valeur pour $Hours*$Per_Hour puis arrondit cette valeur \u00e0 2 d\u00e9cimales. Mixing Products La formule utilis\u00e9e dans la colonne Rounded Value est : mix_list_str = $Mix_Product.Lt_per_100_Lt mix_list_float = [float(i) for i in mix_list_str] x = [Lt * $Water/100 for Lt in mix_list_float] round_x = [ROUND(num, 2) for num in x] l = $Mix_Product.Product ' '.join('{} {}'.format(first, second) for first, second in zip(l, round_x)) D\u00e9composons cela. $Mix_Product repr\u00e9sente la colonne Mix Product, une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Product de Table1. Nous pouvons utiliser cette colonne comme un lien vers Table1 pour tirer d\u2019autres donn\u00e9es. $Mix_Product.Lt_per_100_Lt utilise la colonne de liste de r\u00e9f\u00e9rence, Mix Product, pour tirer des valeurs de la colonne Lt per 100 Lt de Table1 pour les produits list\u00e9s dans la colonne Mix Product de Table2, puis assigne cette liste de valeurs \u00e0 la variable mix_list_str . C\u2019est la m\u00eame formule utilis\u00e9e dans la colonne Lt per 100 Lt de Table2, donc vous pouvez voir la valeur qu\u2019elle renvoie dans la ligne 1 de Table2. Elle renvoie une liste : ['0.2355', '1.2579'] . Cette liste est \u00e9valu\u00e9e comme une cha\u00eene plut\u00f4t que comme des valeurs num\u00e9riques. Nous devons convertir chaque valeur de cette liste en float. Dans notre prochaine formule, [float(i) for i in mix_list_str] , nous it\u00e9rons \u00e0 travers la liste qui a \u00e9t\u00e9 assign\u00e9e dans la premi\u00e8re \u00e9quation \u00e0 mix_list_str et convertissons chaque valeur en un nombre \u00e0 virgule flottante. Nous voulons convertir en float plut\u00f4t qu\u2019en entier car toutes les valeurs ne sont pas des nombres entiers et contiennent des d\u00e9cimales. i est une variable repr\u00e9sentant chaque valeur. Donc chaque valeur dans mix_list_str est \u00e9valu\u00e9e dans l\u2019\u00e9quation float(i) . float(0.2355) convertit 0.2355 en float et float(1.2579) convertit 1.2579 en float. Maintenant, nous assignons notre liste de floats \u00e0 la variable mix_list_float . Nous pouvons maintenant utiliser nos valeurs float dans une \u00e9quation math\u00e9matique. Encore une fois, nous it\u00e9rons \u00e0 travers la liste qui a \u00e9t\u00e9 assign\u00e9e \u00e0 la variable mix_list_float . Dans notre \u00e9quation [Lt * $Water/100 for Lt in mix_list_float] , Lt repr\u00e9sente chaque valeur dans mix_list_float et $Water repr\u00e9sente la valeur trouv\u00e9e dans la colonne Water qui est 1000 . Nous \u00e9valuons l\u2019\u00e9quation Lt * 1000/100 lorsque Lt = 0.2355 et Lt = 1.2579 , ce qui renvoie la liste [2.355, 12.579] . Nous assignons cette liste \u00e0 la variable x . Pour arrondir les valeurs dans x \u00e0 deux d\u00e9cimales, nous devons \u00e9valuer l\u2019\u00e9quation ROUND(num, 2) o\u00f9 num repr\u00e9sente chaque valeur dans notre liste et 2 sp\u00e9cifie le nombre de d\u00e9cimales que nous voulons arrondir. Cela renvoie la liste [2.36, 12.58] que nous assignons \u00e0 la variable round_x. Dans la premi\u00e8re \u00e9quation, nous avons utilis\u00e9 notre colonne de liste de r\u00e9f\u00e9rence, Mix Product, comme notre lien vers Table1 afin de tirer des donn\u00e9es de Table1 dans Table2. Nous utilisons cette m\u00e9thode \u00e0 nouveau dans $Mix_Product.Product pour tirer des donn\u00e9es de la colonne Product de Table1. Cela renvoie une liste de produits ; [Prod A, Prod B] . Nous assignons cette liste \u00e0 la variable l . Enfin, nous utilisons la m\u00e9thode join() pour combiner nos deux listes. ' ' est notre cha\u00eene de d\u00e9part (vide). Nous utilisons la m\u00e9thode format de Python pour formater notre cha\u00eene. {} est un espace r\u00e9serv\u00e9 pour chaque variable list\u00e9e dans .format() . Enfin, nous utilisons la fonction zip() de Python pour associer les premi\u00e8res valeurs de chaque liste ensemble, puis associer les deuxi\u00e8mes valeurs de chaque liste ensemble. l est assign\u00e9 comme notre liste first et round_x est assign\u00e9 comme notre liste second . l = [Prod A, Prod B] et round_x = [2.36, 12.58] . En zippant nos listes dans '{} {}'.format(first, second) , nous obtenons Prod A 2.36 dans notre premi\u00e8re it\u00e9ration et Prod B 12.58 dans notre seconde it\u00e9ration. Notre valeur de retour finale est Prod A 2.36 Prod B 12.58 . Formatage des nombres avec des z\u00e9ros en t\u00eate # Vous permet de sp\u00e9cifier le nombre minimum de chiffres renvoy\u00e9s dans une colonne num\u00e9rique en ajoutant des z\u00e9ros en t\u00eate. Si x = 5, str(x).zfill(3) ou '{:0>3}'.format(x) renverrait 005 . Formatage des nombres avec des z\u00e9ros en t\u00eate # Exemple Communautaire : Utilisation de Row ID La formule utilis\u00e9e dans la colonne ID \u00e0 5 chiffres de la table ID Examples est : 'TCH{:0>5}'.format($id) '{:0>5}'.format($id) prend l\u2019ID de ligne unique et le formate pour avoir un minimum de 5 chiffres. Nous ajoutons ensuite cela \u00e0 notre cha\u00eene \"TCH\" pour obtenir notre valeur finale. Si l\u2019ID $id est plus long que 5 chiffres, la formule renvoie la cha\u00eene sans modification. Nous pouvons faire la m\u00eame chose en utilisant la m\u00e9thode str.zfill() . La formule utilis\u00e9e dans la colonne zfill Method de la table ID Examples est : str($id).zfill(5) str($id) convertit l\u2019ID de ligne en cha\u00eene. .zfill(x) renvoie une copie de la cha\u00eene avec des z\u00e9ros en t\u00eate pour faire une cha\u00eene de longueur x . Dans notre exemple, cela ajoute des z\u00e9ros en t\u00eate pour faire la cha\u00eene de 5 caract\u00e8res de long. Encore une fois, si l\u2019ID $id est plus long que 5 chiffres, la formule renvoie la cha\u00eene sans modification. D\u00e9pannage des Erreurs # #TypeError : ne peut concat\u00e9ner que str (pas \u201cint\u201d) \u00e0 str Si vous souhaitez combiner une cha\u00eene et une valeur num\u00e9rique, assurez-vous de la convertir en cha\u00eene en utilisant str() . Travailler avec des Cha\u00eenes # Combinaison de Texte de Plusieurs Colonnes # M\u00e9thode 1 : Si vous avez une colonne Pr\u00e9nom et une colonne Nom, vous pouvez combiner ces colonnes pour avoir une colonne Nom Complet. Si le Pr\u00e9nom est George et le Nom est Washington , $First_Name + \" \" + $Last_Name renverrait George Washington . M\u00e9thode 2 : Si vous avez un formatage suppl\u00e9mentaire, une mani\u00e8re plus simple de le faire serait d\u2019utiliser la m\u00e9thode format() de Python . La m\u00e9thode format() formate les valeurs sp\u00e9cifi\u00e9es et les ins\u00e8re \u00e0 la place du placeholder, {} . En utilisant le m\u00eame exemple que ci-dessus, notre formule serait \"{} {}\".format($First_Name, $Last_Name) . Remarque : Vous pouvez cliquer sur les colonnes pour les ins\u00e9rer dans vos formules, plut\u00f4t que de les taper. Exemples utilisant la M\u00e9thode 1 # Class Enrollment template{:target=\u201d_blank\u201d} La formule utilis\u00e9e dans la colonne Nom Complet de la table des \u00c9tudiants est : $Last_Name + \", \" + $First_Name Ici, nous combinons la valeur trouv\u00e9e dans la colonne Last Name avec une virgule suivie d\u2019un espace suivi de la valeur de la colonne First Name. Lorsque vous ajoutez des caract\u00e8res ou des espaces suppl\u00e9mentaires, placez-les entre guillemets doubles, comme nous l\u2019avons fait dans l\u2019exemple avec \", \" . Une combinaison alternative de ces colonnes pour le Nom Complet pourrait \u00eatre $First_Name + \" \" + $Last_Name . Pour l\u2019exemple dans la ligne 1, le Pr\u00e9nom est Brockie et le Nom est Raddon , donc la valeur renvoy\u00e9e serait Brockie Raddon . Inventory Manager template La formule utilis\u00e9e dans la colonne SKU de la table Tous les Produits est : $Brand.Brand_Code+\"-\"+$Color.Code+\"-\"+$Size Brand est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Name Brand de la table Add Products. Nous utilisons cette colonne de r\u00e9f\u00e9rence dans $Brand.Brand_Code pour tirer des donn\u00e9es de la colonne Brand Code de la table Add Products. Color est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Color de la table Color. Nous utilisons cette colonne de r\u00e9f\u00e9rence dans $Color.Code pour tirer des donn\u00e9es de la colonne Code de la table Color. Chacune des valeurs trouv\u00e9es dans $Brand.Brand_Code et $Color.Code est combin\u00e9e avec la valeur dans la colonne Size avec un - entre chacune des trois valeurs pour constituer le SKU. Exemples utilisant la M\u00e9thode 2 # Tracking Time + Invoicing template La formule utilis\u00e9e dans la colonne Nom du Projet de la table des Projets est : \"{}: {}\".format($Client.Name, $Name) D\u00e9composons cela. Tout ce qui se trouve entre guillemets doubles \" est notre cha\u00eene. Les accolades {} sont des espaces r\u00e9serv\u00e9s pour les valeurs trouv\u00e9es \u00e0 l\u2019aide de .format() qui est la m\u00e9thode de formatage de cha\u00eene de Python. Le premier ensemble d\u2019accolades est remplac\u00e9 par la valeur trouv\u00e9e dans $Client.Name . Client est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es pour un enregistrement sp\u00e9cifique de la table Clients. $Client.Name utilise notre colonne de r\u00e9f\u00e9rence, Client pour tirer des donn\u00e9es de la colonne Name de la table Clients. Le deuxi\u00e8me ensemble d\u2019accolades est remplac\u00e9 par la valeur trouv\u00e9e dans la colonne Name de cette table. Bien que la colonne Client montre la valeur que nous voulons, nous ne pouvons pas utiliser $Client comme nous l\u2019avons fait avec $Name . Cela est d\u00fb au fait que la colonne Client est une colonne de r\u00e9f\u00e9rence. Elle fait r\u00e9f\u00e9rence \u00e0 l\u2019 entier enregistrement mais utilise la valeur de la colonne Name de la table Clients comme repr\u00e9sentation visuelle de cet enregistrement. Dans le panneau de configuration de la colonne sur le c\u00f4t\u00e9 droit, nous pouvons changer quelle valeur de colonne nous voyons pour l\u2019enregistrement. Dans la capture d\u2019\u00e9cran ci-dessous, \u2018Show Column\u2019 a \u00e9t\u00e9 chang\u00e9 de Name \u00e0 Email. Cela ne change pas les donn\u00e9es, cela change simplement l\u2019\u00e9tiquette sur ces donn\u00e9es dans la colonne Client. Cela pointe toujours vers le m\u00eame enregistrement mais montre maintenant une \u00e9tiquette diff\u00e9rente. $Client.Name tire le Nom pour l\u2019enregistrement qui est r\u00e9f\u00e9renc\u00e9 dans la colonne Client, peu importe l\u2019\u00e9tiquette que nous voyons. Custom Product Builder template La formule utilis\u00e9e dans la colonne All Components de la carte CONTRACT_BUILDER est : '\\n'.join(sorted( \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) for (comp, quantity) in $Components.items() )) Nous utilisons la m\u00e9thode join() , la fonction sorted() et la m\u00e9thode format() toutes en une seule fois ! '\\n'.join() ajoute une nouvelle ligne entre chaque \u00e9l\u00e9ment de la liste. sorted() trie les \u00e9l\u00e9ments de la liste par ordre alphab\u00e9tique. Cela nous laisse avec le suivant : \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) for (comp, quantity) in $Components.items() Nous allons travailler \u00e0 l\u2019envers. Tout d\u2019abord, nous devons examiner la colonne Components qui est une colonne cach\u00e9e dans la table All Contracts. Cette colonne est une liste de composants et de leurs quantit\u00e9s associ\u00e9es pour le contrat. Dans la boucle for , nous assignons chaque \u00e9l\u00e9ment de la liste de composants \u00e0 deux variables, comp et quantity. Pour Components[3]: 6.0 , comp = Components[3] et quantity = 6.0 . Components[#] sp\u00e9cifie un Composant dans la table Components par ID de ligne. Components[3] est le composant assign\u00e9 3 comme son ID de ligne. Maintenant, nous ex\u00e9cutons chaque \u00e9l\u00e9ment de la liste ci-dessus \u00e0 travers l\u2019\u00e9quation \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) . comp.Component remplace le premier ensemble de {} . comp est la variable avec notre ID de composant donc comp.Component trouve la valeur dans la colonne Component associ\u00e9e \u00e0 cet ID de ligne. Pour Components[3] , comp.Component est Nozzle. quantity remplace le deuxi\u00e8me ensemble de {} . Encore une fois, la quantit\u00e9 est la deuxi\u00e8me variable dans notre liste. Pour Components[3]: 6.0 , quantity est 6.0 . Notre deuxi\u00e8me ensemble de {} n\u2019est pas vide. Ils incluent :g *. Cela convertit la valeur en un nombre \u00e0 virgule flottante. comp.Unit remplace le dernier ensemble de {} . comp est la variable avec notre ID de composant donc comp.Unit trouve la valeur dans la colonne Unit associ\u00e9e \u00e0 cet ID de ligne. Pour Components[3] , comp.Unit est None . *Notez que {:g} formate les nombres \u00e0 virgule flottante d\u2019une mani\u00e8re particuli\u00e8re qui omet les d\u00e9cimales lorsqu\u2019elles ne sont pas n\u00e9cessaires. Il existe de nombreuses options disponibles dans les espaces r\u00e9serv\u00e9s pour formater des nombres, des dates, etc. En savoir plus sur les espaces r\u00e9serv\u00e9s ici . Email Contacts template La formule utilis\u00e9e dans la colonne Body de la table Advanced Compose est : \"Dear %s,\\n\\nWelcome to the %s team!\" % ($Contact_Name_as_Plaintext, $Team) Cette technique utilise l\u2019op\u00e9rateur % au lieu de la m\u00e9thode format() . Les sp\u00e9cificateurs de format commencent par % suivi d\u2019un caract\u00e8re qui repr\u00e9sente le type de donn\u00e9es. %s est un espace r\u00e9serv\u00e9 pour une cha\u00eene. Le premier %s est remplac\u00e9 par la valeur trouv\u00e9e dans la colonne \u201cContact Name as Plaintext\u201d qui est une colonne cach\u00e9e et le deuxi\u00e8me %s est remplac\u00e9 par la valeur dans la colonne Team. \\n ajoute une nouvelle ligne. Division de Cha\u00eenes de Texte # Divisez une cha\u00eene en utilisant la m\u00e9thode split() de Python. Si le Nom Complet est George Washington , $Full_Name.split(\" \") renverrait [George, Washington] . Exemple de Division de Cha\u00eenes de Texte # Exemple Communautaire : Colors La formule dans la colonne \u201cColor Reference (Just URL)\u201d de la Table 2 est : split = $Color_Reference.Color.split(\" \") return split[-1] $Color_Reference.Color utilise la colonne de r\u00e9f\u00e9rence, \u201cColor Reference\u201d pour tirer des donn\u00e9es de la table qu\u2019elle r\u00e9f\u00e9rence, Table 1. Sp\u00e9cifiquement, elle tire la valeur de la colonne Color de Table 1. Color est une colonne de texte qui contient un hyperlien avec une \u00e9tiquette. Nous ne voyons que l\u2019\u00e9tiquette dans Table 1 mais comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessus, la valeur dans la cellule \u2018pink\u2019 est d\u00e9velopp\u00e9e pour montrer toute la cha\u00eene qui contient \u201cpink\u201d suivie de l\u2019URL. Vous pouvez \u00e9galement voir cela dans la colonne \u201cColor Reference\u201d de la Table 2. Nous voulons obtenir le lien par lui-m\u00eame dans \u201cColor Reference (Just URL)\u201d. Nous pouvons le faire en utilisant la m\u00e9thode split() de Python. .split(\" \") nous permet de diviser la cha\u00eene partout o\u00f9 il y a un espace (\" \") . Dans la colonne Color, il y a une \u00e9tiquette suivie d\u2019un espace suivi de l\u2019URL. La valeur de la colonne Color est divis\u00e9e en une liste contenant deux \u00e9l\u00e9ments Label et URL . Cette liste est assign\u00e9e \u00e0 la variable split . Nous voulons renvoyer le dernier \u00e9l\u00e9ment de la liste split afin d\u2019obtenir notre URL . Le dernier \u00e9l\u00e9ment d\u2019une liste a toujours l\u2019index [-1] . return split[-1] renvoie le dernier \u00e9l\u00e9ment de la liste split . Lien Direct vers l\u2019Historique Gmail pour un Contact # Si vous stockez des contacts dans Grist et utilisez Gmail pour les email, vous pouvez cr\u00e9er une formule qui ouvrira Gmail sur une liste de conversations avec ce contact. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Afficher l\u2019historique Gmail pour un contact particulier D\u00e9pannage # Votre URL s\u2019affiche-t-elle toujours apr\u00e8s avoir ajout\u00e9 une \u00e9tiquette ? Assurez-vous que votre Type de Colonne est Texte et que le Format de Cellule est Hyperlien. Joindre une Liste de Cha\u00eenes # Lorsque vous souhaitez joindre une liste de cha\u00eenes, vous pouvez utiliser la m\u00e9thode join() de Python . Exemple de Jointure d\u2019une Liste # Exemple Communautaire : .join() Exemple La formule utilis\u00e9e dans la colonne Advertisement de la table 2022 Grand Openings est : \"Coming soon to a city near you!\\n\" + \" : \".join($New_Location_s_in_2022) Ici, nous joignons plusieurs cha\u00eenes pour cr\u00e9er notre publicit\u00e9. \"Coming soon to a city near you!\\n\" est renvoy\u00e9 presque exactement comme nous le voyons, \u00e0 l\u2019exception des guillemets \"\" et \\n \u00e0 la fin de la cha\u00eene. Les guillemets \"\" sp\u00e9cifient qu\u2019il s\u2019agit d\u2019une cha\u00eene et \\n est en fait un caract\u00e8re de nouvelle ligne qui peut \u00eatre utilis\u00e9 pour sp\u00e9cifier une nouvelle ligne dans une cha\u00eene. \" : \".join($New_Location_s_in_2022) est \u00e9galement une cha\u00eene mais utilise la m\u00e9thode join() de Python pour joindre les valeurs de notre colonne de liste de choix , \u201cNew Locations in 2022\u201d. Ce que nous voyons entre guillemets avant .join est ce qui s\u00e9parera chaque valeur de notre liste. Dans cet exemple, chaque valeur est s\u00e9par\u00e9e par un espace, : et un autre espace. Trouver des Doublons # Vous pouvez trouver des doublons dans une colonne en utilisant soit le formatage conditionnel, soit une colonne d\u2019aide. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Assurer des valeurs uniques ou d\u00e9tecter des doublons Exemple de Trouver des Doublons # Exemple Communautaire : Finding Duplicates La formule utilis\u00e9e dans la colonne Duplicate? de la table Duplicates est : len(Duplicates.lookupRecords(Grocery_List=$Grocery_List))>1 D\u00e9composons cela, en travaillant de l\u2019int\u00e9rieur vers l\u2019ext\u00e9rieur. Duplicates.lookupRecords(Grocery_List=$Grocery_List) Ceci est une fonction lookupRecords qui suit le format : [Table_Name].lookupRecords([A]=$[B]) O\u00f9 [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table \u00e9tant recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Cette formule recherche des enregistrements dans la table Duplicates o\u00f9 un enregistrement dans la colonne Grocery List correspond \u00e0 un autre enregistrement dans la m\u00eame colonne. len() compte le nombre d\u2019enregistrements dans notre liste. Puisque chaque doublon correspondra \u00e0 l\u2019autre, il devrait appara\u00eetre deux fois dans notre liste. C\u2019est pourquoi len() > 1 . Si len() > 1 , la formule est vraie. Si len() <= 1 , la formule est fausse. Cette m\u00eame formule peut \u00eatre utilis\u00e9e dans le formatage conditionnel. Cela peut \u00eatre vu dans la colonne \u2018Grocery List\u2019 de la table Duplicates. Si len() > 1 , notre formule est vraie et la couleur de cellule conditionnelle est appliqu\u00e9e \u00e0 ces cellules. Si len() <= 1 , notre formule est fausse et la couleur de cellule reste inchang\u00e9e. Utilisation de l\u2019Identifiant Unique d\u2019un Enregistrement dans les Formules # Lorsqu\u2019un enregistrement est cr\u00e9\u00e9, il se voit attribuer un ID num\u00e9rique (disponible sous la forme $id dans les formules) qui est unique au sein de cette table. Vous pouvez r\u00e9v\u00e9ler l\u2019ID de ligne en ajoutant une colonne de formule o\u00f9 la formule est $id . Exemples d\u2019Utilisation de l\u2019ID de Ligne dans les Formules # Vous pouvez r\u00e9v\u00e9ler l\u2019ID avec la formule $id Custom Product Builder template La formule utilis\u00e9e dans la colonne Contract No de la table Contract Builder est : $id + 500 Ici, nous utilisons une formule d\u2019initialisation pour cr\u00e9er un num\u00e9ro de contrat unique lors de la cr\u00e9ation d\u2019un enregistrement. Class Enrollment template La formule utilis\u00e9e dans la colonne Count de la table des Classes est : len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) Ceci est appel\u00e9 une recherche invers\u00e9e. Nous pouvons utiliser l\u2019ID de ligne pour faire correspondre un enregistrement dans une autre table o\u00f9 une colonne de r\u00e9f\u00e9rence est utilis\u00e9e. LookupRecords suit le format [Table_Name].lookupRecords([A]=$[B]) . [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table \u00e9tant recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Lookup Records cr\u00e9e une liste d\u2019enregistrements qui correspondent aux crit\u00e8res \u00e9num\u00e9r\u00e9s. len() compte combien d\u2019enregistrements sont dans cette liste. Ici, nous recherchons des enregistrements dans la table Enrollments o\u00f9 l\u2019enregistrement mentionn\u00e9 dans la colonne Class (notre colonne de r\u00e9f\u00e9rence) a le m\u00eame ID de ligne que la ligne dans la table dans laquelle vous entrez la formule. De plus, la valeur dans la colonne Status de la table Enrollments est Confirmed . Nous allons d\u00e9composer cela. La table dans laquelle nous recherchons des enregistrements est la table Enrollments. Nos crit\u00e8res proviennent de la colonne Class et de la colonne Status. Le crit\u00e8re pour Status est simple ; la valeur doit \u00eatre Confirmed pour \u00eatre incluse dans notre liste d\u2019enregistrements. Class est un peu plus compliqu\u00e9. Comme nous le voyons dans la capture d\u2019\u00e9cran ci-dessous, Class est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table Classes. Ici, la colonne Class montre la valeur de la colonne Class Code de la table Classes mais elle pointe vers l\u2019enregistrement entier o\u00f9 le code de classe est 2018F-Stars . Une colonne de r\u00e9f\u00e9rence pointe vers l\u2019 entier enregistrement, pas seulement la valeur que vous voyez ici dans la colonne Class. En utilisant le panneau de configuration sur le c\u00f4t\u00e9 droit de l\u2019\u00e9cran, vous pouvez choisir n\u2019importe quelle colonne de la table d\u2019origine \u00e0 afficher. Pour cet exemple, la colonne Class montre la valeur de la colonne Class Code de la table Classes mais elle pointe vers l\u2019enregistrement entier o\u00f9 le code de classe est 2018F-Stars . Comme vous pouvez le voir dans cette capture d\u2019\u00e9cran, l\u2019ID de ligne pour cet enregistrement particulier est 2 et parce que nous calculons le Count pour la ligne avec Row ID = 2 , il comptera tous les enregistrements dans la table Enrollment o\u00f9 Class montre 2018F-Stars et Status est Confirmed . Restaurant Custom Orders template La formule d\u2019initialisation utilis\u00e9e dans la colonne BOM # de la table Bill of Materials est : MAX(o.BOM_ for o in Bill_Of_Materials.all if o.id != $id) + 1 Tout d\u2019abord, nous allons examiner la formule \u00e0 l\u2019int\u00e9rieur des parenth\u00e8ses, puis travailler vers l\u2019ext\u00e9rieur. Ici, o est une variable repr\u00e9sentant chaque enregistrement dans notre table. o.BOM_ repr\u00e9sente le BOM # pour chaque enregistrement et o.id repr\u00e9sente l\u2019ID de ligne pour chaque enregistrement. C\u2019est une boucle for qui cr\u00e9e une liste des BOM # pour chaque enregistrement dans la table Bill of Materials lorsque l\u2019ID d\u2019enregistrement n\u2019est pas \u00e9gal \u00e0 l\u2019ID de cette ligne. MAX() trouve le maximum des BOM # dans la liste puis + 1 pour obtenir notre valeur finale. C\u2019est une formule d\u2019initialisation qui ne s\u2019applique qu\u2019aux nouveaux enregistrements. Lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9, la formule trouve le plus grand BOM # dans la table puis ajoute 1 pour que nous ayons un BOM # unique pour le nouvel enregistrement. Suppression des Doublons d\u2019une Liste # Vous pouvez supprimer des doublons d\u2019une liste avec l\u2019aide de la m\u00e9thode set() de Python. Exemple de Suppression des Doublons d\u2019une Liste # Exemple Communautaire : Removing Duplicates From a List La formule dans la colonne All Divisions de la table Abroad Trips est : confirmed_div = $Attending_Confirmed.Role_Division.Division pending_div = $Attending_Pending.Role_Division.Division full_list = confirmed_div + pending_div return sorted(set(full_list)) Nous allons d\u00e9composer cela ligne par ligne. Attending-Confirmed est une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table EMPLOYEES. $Attending_Confirmed.Role_Division tire la valeur de la colonne Role Division de la table EMPLOYEES. La colonne Role Division dans la table EMPLOYEES est elle-m\u00eame une colonne de r\u00e9f\u00e9rence, qui pointe vers un enregistrement dans la table Divisions. Chaining nous permet de sp\u00e9cifier quelles informations nous voulons de cet enregistrement. Dans ce cas, nous voulons la Division. Nous d\u00e9veloppons notre formule pour $Attending_Confirmed.Role_Division.Division . La Division est trouv\u00e9e pour chaque employ\u00e9 list\u00e9 dans la colonne Attending-Confirmed, cr\u00e9ant une liste. Nous assignons cette liste de divisions \u00e0 la variable confirmed_div . Attending-Pending est \u00e9galement une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table EMPLOYEES. $Attending_Pending.Role_Division.Division fait la m\u00eame chose que ci-dessus sauf que maintenant nous tirons la division pour chaque employ\u00e9 dans la colonne Attending-Pending. Nous assignons cette liste \u00e0 la variable pending_div . Nous cr\u00e9ons une liste de toutes les divisions en ajoutant les deux listes ensemble et en assignant cette liste combin\u00e9e \u00e0 la variable full_list . return sorted(set(full_list)) utilise d\u2019abord la m\u00e9thode set() de Python pour cr\u00e9er une liste sans doublons. Nous utilisons ensuite la m\u00e9thode sorted() pour renvoyer notre ensemble de divisions, tri\u00e9 par ordre alphab\u00e9tique. Notez que la formule ci-dessus peut \u00eatre simplifi\u00e9e encore plus \u00e0 : sorted( set($Attending_Confirmed.Role_Division.Division) | set($Attending_Pending.Role_Division.Division) ) D\u00e9finir des Valeurs par D\u00e9faut pour de Nouveaux Enregistrements # Vous pouvez d\u00e9finir des valeurs par d\u00e9faut pour lorsque un nouvel enregistrement est cr\u00e9\u00e9 et vous \u00e9pargner le tracas de devoir remplir les m\u00eames champs avec les m\u00eames valeurs encore et encore. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Valeurs par d\u00e9faut sur le widget Travailler avec des dates et des heures # Tampons Automatiques de Date, Heure et Auteur # Vous pouvez automatiquement ajouter la date ou l\u2019heure \u00e0 laquelle un enregistrement a \u00e9t\u00e9 cr\u00e9\u00e9 ou mis \u00e0 jour ainsi que qui a effectu\u00e9 le changement. Exemples de Tampons Automatiques de Date, Heure et Auteur # Grant Application Tracker template La formule utilis\u00e9e dans la colonne Last Updated de la table Tasks est : NOW() C\u2019est une formule d\u2019initialisation qui se d\u00e9clenche lorsqu\u2019un changement est effectu\u00e9 dans n\u2019importe quel champ pour cet enregistrement. Lorsqu\u2019un changement est effectu\u00e9, cette formule ex\u00e9cute son calcul. NOW() calcule l\u2019heure et la date actuelles pour le fuseau horaire s\u00e9lectionn\u00e9. La formule utilis\u00e9e dans la colonne Created By de la table Tasks est : user.Name C\u2019est une formule d\u2019initialisation qui se d\u00e9clenche lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Lorsque l\u2019enregistrement est cr\u00e9\u00e9, cette formule ex\u00e9cute son calcul. user.Name recherche le compte utilisateur qui est connect\u00e9 \u00e0 Grist et renvoie le nom associ\u00e9 \u00e0 ce compte. D\u00e9pannage des Erreurs # Si la valeur de temps dans votre colonne datetime ne se calcule pas, v\u00e9rifiez votre formule. Si TODAY() est utilis\u00e9 dans DateTime, l\u2019heure affichera toujours 12:00 am comme vous le voyez ci-dessous. NOW() est utilis\u00e9 pour les colonnes DateTime. TODAY() est utilis\u00e9 pour la Date. #AttributeError Vous avez probablement entr\u00e9 user.name mais la formule est user.Name . Faites attention \u00e0 la capitalisation ! #NameError Vous avez peut-\u00eatre entr\u00e9 username ou userName . La formule correcte est user.Name . Une autre possibilit\u00e9 est que cela a \u00e9t\u00e9 entr\u00e9 en tant que colonne de formule plut\u00f4t qu\u2019en tant que colonne de formule d\u2019initialisation. Convertissez-la en formule d\u2019initialisation et cela devrait r\u00e9soudre le probl\u00e8me. Filtrer les Donn\u00e9es dans une Dur\u00e9e Sp\u00e9cifi\u00e9e # En utilisant la fonction DATEADD() et les op\u00e9rateurs de comparaison , vous pouvez d\u00e9terminer si une date tombe dans une plage sp\u00e9cifique puis appliquer un filtre. Exemple de Filtrage des Donn\u00e9es qui \u2018Tombe dans une Plage de 1 Mois\u2019 # Exemple Communautaire : Filtrage des Donn\u00e9es dans une Plage de 1 Mois La formule utilis\u00e9e dans la colonne Falls in 1 Month Range? de la table Interactions est : TODAY() >= $Date >= DATEADD(TODAY(),months=-1) TODAY() renvoie la date actuelle. $Date est le nom d\u2019une colonne dans notre table, qui est de type Date . DATEADD(start_date, days=0, months=0, years=0, weeks=0) renvoie la date qui est le nombre donn\u00e9 de jours, mois, ann\u00e9es ou semaines avant ou apr\u00e8s la start_date . Dans cet exemple, elle renvoie la date qui est un mois avant la date de d\u00e9part, TODAY() . Cette formule est vraie si la valeur de date dans la colonne Date tombe entre TODAY() et notre date DATEADD() qui est un mois auparavant. Si la valeur de date dans la colonne Date ne tombe pas entre ces deux dates, la formule renvoie faux. Nous pouvons utiliser cette colonne pour filtrer nos donn\u00e9es. Si nous ne voulons voir que les interactions qui tombent dans la Plage de 1 Mois, nous filtrerions pour n\u2019inclure que les valeurs true . Si nous voulons voir les interactions qui tombent en dehors de la Plage de 1 Mois, nous filtrerions pour n\u2019inclure que les valeurs false . D\u00e9pannage des Erreurs # #TypeError : Parce que $Date est une colonne de type Date , TODAY() doit \u00eatre utilis\u00e9 dans les formules comparant des dates. NOW() est une formule DateTime qui ne doit \u00eatre utilis\u00e9e qu\u2019avec d\u2019autres valeurs DateTime. Par exemple, si la colonne $Date \u00e9tait une colonne de type DateTime , NOW() devrait \u00eatre utilis\u00e9 plut\u00f4t que TODAY() car il inclut le composant temps. NOW() est date et heure. TODAY() est seulement date.","title":"Formula cheat sheet"},{"location":"formula-cheat-sheet/#fiche-de-formules","text":"Grist dispose d\u2019un puissant moteur de donn\u00e9es pour calculer les cellules de vos tables \u00e0 l\u2019aide de formules. Les formules Grist sont \u00e9crites en Python , le langage le plus populaire pour la science des donn\u00e9es. Nous avons \u00e9galement une suite de fonctions semblables \u00e0 celles d\u2019Excel, avec des noms en majuscules. Voici quelques notes utiles : Les formules s\u2019appliquent \u00e0 toute la colonne. Les champs sont inclus dans les formules sous la forme $ColumnID . Python est sensible \u00e0 la casse, y compris pour les noms de table et de colonne Grist. Si l\u2019ID de votre colonne est title , la formule utilisera $title , o\u00f9 les deux sont en minuscules. Vous pouvez \u00e9crire du code Python multi-lignes dans les formules (utilisez Shift + Enter pour ajouter des lignes), y compris des instructions, des variables, des imports, etc. Le code Grist s\u2019ex\u00e9cute dans un sandbox s\u00e9curis\u00e9, sans acc\u00e8s \u00e0 quoi que ce soit en dehors de votre document. Si vous ne trouvez pas ce que vous cherchez, postez dans le Forum Communautaire et nous pourrons vous aider !","title":"Fiche de Formules"},{"location":"formula-cheat-sheet/#fonctions-mathematiques","text":"","title":"Fonctions Math\u00e9matiques"},{"location":"formula-cheat-sheet/#mathematiques-simples-addition-soustraction-multiplication-division","text":"Utilise les op\u00e9rateurs + , - , / et * pour effectuer des calculs.","title":"Math\u00e9matiques Simples (addition, soustraction, multiplication, division)"},{"location":"formula-cheat-sheet/#exemple-de-mathematiques-simples","text":"Chestwood Art Studio exp\u00e9die des \u0153uvres d\u2019art \u00e0 travers le pays et a la possibilit\u00e9 de paiements mensuels sur une p\u00e9riode de 12 mois. Nous avons le sous-total, la taxe (bas\u00e9e sur l\u2019\u00e9tat de destination) et le montant d\u00fb mensuel. Cette colonne de formule utilise l\u2019addition, la multiplication et la division. La formule utilis\u00e9e ici est : ($Subtotal + ($Subtotal*$Tax)) / 12 Nous ajoutons le sous-total \u00e0 la taxe calcul\u00e9e, puis divisons cela par 12 mois pour obtenir notre montant d\u00fb mensuel.","title":"Exemple de Math\u00e9matiques Simples"},{"location":"formula-cheat-sheet/#depannage-des-erreurs","text":"#TypeError : Confirmez que toutes les colonnes utilis\u00e9es dans la formule sont de type Num\u00e9rique .","title":"D\u00e9pannage des Erreurs"},{"location":"formula-cheat-sheet/#max-et-min","text":"Vous permet de trouver les valeurs max ou min dans une liste.","title":"max et min"},{"location":"formula-cheat-sheet/#exemples-utilisant-max-et-min","text":"MAX() et MIN() lorsqu\u2019ils sont en majuscules sont des fonctions de tableur qui n\u00e9cessitent une syntaxe sp\u00e9cifique. La syntaxe des formules de tableur est r\u00e9sum\u00e9e dans notre r\u00e9f\u00e9rence de fonctions . max() et min() en minuscules sont des fonctions Python. Max : Table des classes du mod\u00e8le Class Enrollment . La formule utilis\u00e9e dans la colonne \u2018Spots Left\u2019 de la table des Classes est : max($Max_Students - $Count, 0) or \"Full\" Cette formule montre le nombre de places restantes dans une classe, ou le texte \u2018Full\u2019 lorsque la classe est pleine ou surabonn\u00e9e. Nous construisons une liste entre les parenth\u00e8ses compos\u00e9e de deux \u00e9l\u00e9ments : $Max_Students - $Count et 0 . La formule renvoie le plus grand des deux. Lorsque $Count est inf\u00e9rieur \u00e0 $Max_Students , la diff\u00e9rence $Max_Students - $Count est positive et repr\u00e9sente les places restantes dans la classe. Lorsque $Count d\u00e9passe $Max_Students , alors la classe est pleine ou surabonn\u00e9e, et $Max_Students - $Count est n\u00e9gatif. Le maximum d\u2019un nombre n\u00e9gatif et de 0 sera 0, donc max($Max_Students - $Count, 0) est 0. Cela repr\u00e9sente une classe pleine. L\u2019ajout de or \"Full\" est appliqu\u00e9 lorsque la valeur est fausse, ce qui signifie qu\u2019un 0 est remplac\u00e9 par le texte \"Full\" . Min : Table des contacts du mod\u00e8le Lightweight CRM . La formule utilis\u00e9e dans la colonne \u2018Due\u2019 de la table des Contacts est : items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return min(items.Date) if items else None D\u00e9composons cela. Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") trouve tous les enregistrements dans la table Interactions o\u00f9 les Contacts correspondent et le Type est To-Do. Cela renvoie une liste d\u2019enregistrements que nous assignons \u00e0 la variable items . Ensuite, nous utilisons la notation par points pour trouver toutes les Dates assign\u00e9es aux enregistrements de notre liste items . Ces dates sont \u00e9valu\u00e9es pour trouver la date minimale. C\u2019est la valeur qui est renvoy\u00e9e. Ainsi, nous voyons la date de la t\u00e2che qui est due le plus t\u00f4t. S\u2019il n\u2019y a pas d\u2019\u00e9l\u00e9ments dans la liste, rien n\u2019est renvoy\u00e9 et le champ reste vide. Dans l\u2019exemple MAX(), la liste a deux \u00e9l\u00e9ments : $Max_Students - $Count et 0 , et la formule renvoie le plus grand des deux. Dans l\u2019exemple min(), la variable items tire une liste d\u2019enregistrements bas\u00e9e sur les arguments lookupRecords , \u00e9num\u00e9rant les dates et renvoyant la plus petite date. Notez que c\u2019est une fonction Python. Si nous avions \u00e9crit la formule comme MIN(), une fonction de tableur, la formule ne fonctionnerait pas car la formule de tableur n\u00e9cessite un format tr\u00e8s sp\u00e9cifique .","title":"Exemples utilisant MAX() et MIN()"},{"location":"formula-cheat-sheet/#somme","text":"Utilisez la fonction SUM() lorsque vous souhaitez additionner une liste de valeurs disponibles dans une cellule. Si vous souhaitez additionner des valeurs dans une colonne, utilisez Tables de R\u00e9sum\u00e9 .","title":"Somme"},{"location":"formula-cheat-sheet/#exemple-de-sum","text":"Custom Product Builder template La formule utilis\u00e9e dans la colonne Co\u00fbt Total de la table S\u00e9lectionner ou Ajouter de Nouveaux Produits est : SUM($Requirements.Cost) La colonne Requirements est une colonne cach\u00e9e dans cette table. C\u2019est une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table Build Requirements. Notre formule utilise la colonne Requirements pour acc\u00e9der \u00e0 la table Build Requirements, puis tire le co\u00fbt pour chaque enregistrement dans la table. Nous utilisons SUM() pour additionner les co\u00fbts de chaque enregistrement. Inventory Manager template La formule utilis\u00e9e dans la colonne Re\u00e7u de la table Tous les Produits est : SUM(Incoming_Order_Line_Items.lookupRecords(SKU=$id).Received_Qty) Nous utilisons la fonction lookupRecords pour trouver tous les enregistrements dans la table Incoming Order Line Items o\u00f9 le SKU correspond au SKU dans cette ligne, puis tirer la valeur dans la colonne Received Qty pour chacun de ces enregistrements. Nous utilisons SUM() pour trouver la somme de ces valeurs. Les colonnes Qty on Order et Sold de la table Tous les Produits sont \u00e9galement de bons exemples de la fonction SUM(). Consultez un autre exemple dans notre Forum Communautaire : Cr\u00e9er une somme de b\u00e9n\u00e9fice net et brut \u00e0 partir de plusieurs tables","title":"Exemple de SUM()"},{"location":"formula-cheat-sheet/#comparer-pour-legalite-et","text":"Lors de la comparaison pour l\u2019\u00e9galit\u00e9 en Python, nous utilisons == pour \u2018\u00e9gal\u2019 et != pour \u2018diff\u00e9rent\u2019. Si $A est 2 et $B est 3, la formule $A == $B renverrait False , tandis que la formule $A != $B serait True .","title":"Comparer pour l’\u00e9galit\u00e9 : == et !="},{"location":"formula-cheat-sheet/#exemples-utilisant","text":"Inventory Manager template La formule utilis\u00e9e dans la colonne Received Qty de la table Incoming Order Line Items est : if $Order.Status =='Received': return $Qty else: return None La colonne Order de la table Incoming Order Line Items est une colonne de r\u00e9f\u00e9rence qui pointe vers la colonne Order Number de la table Incoming Orders. $Order.Status utilise la notation par points pour tirer la valeur de la colonne Status de la table Incoming Orders. Si la valeur dans cette colonne est \u00e9gale \u00e0 Received , la valeur de la colonne Qty sera renvoy\u00e9e. Si la valeur n\u2019est pas \u00e9gale \u00e0 Received , rien n\u2019est renvoy\u00e9. La formule utilis\u00e9e dans la colonne Date Received de la table Create New Order est : if $Status == \"Received\": return NOW() C\u2019est une formule d\u2019initialisation qui est d\u00e9clench\u00e9e lorsqu\u2019un changement est effectu\u00e9 dans la colonne Status. Si la valeur dans la colonne Status est \u00e9gale \u00e0 Received , la date actuelle est renvoy\u00e9e. Si les valeurs ne sont pas \u00e9gales, rien n\u2019est renvoy\u00e9.","title":"Exemples utilisant =="},{"location":"formula-cheat-sheet/#exemples-utilisant_1","text":"Project Management template La formule utilis\u00e9e dans la colonne Missed Deadline de la table Missed Deadline est : TODAY()> $Due_Date and $Status != \"Completed\" Si la date actuelle est sup\u00e9rieure \u00e0 la date donn\u00e9e dans la colonne Due Date et que la valeur dans la colonne Status n\u2019est pas \u00e9gale \u00e0 Completed , la formule est True . Si l\u2019une de ces affirmations est fausse, la formule est False .","title":"Exemples utilisant !="},{"location":"formula-cheat-sheet/#comparer-des-valeurs","text":"Vous permet de comparer des valeurs num\u00e9riques. Si Sales est \u00e9gal \u00e0 1200 et Running_Cost est \u00e9gal \u00e0 1650 , \"Gains\" if $Sales > $Running_Cost else \"Loss\" renverrait Loss .","title":"Comparer des Valeurs : < , > , <= , >="},{"location":"formula-cheat-sheet/#exemples-de-comparaison-de-valeurs","text":"Inventory Manager template La formule utilis\u00e9e dans la colonne Stock Alert de la table Tous les Produits est : if $In_Stock + $QTY_on_Order > 5: return \"In Stock\" if $In_Stock + $QTY_on_Order > 0: return \"Low Stock\" else: return \"OUT OF STOCK\" Ici, nous avons deux d\u00e9clarations if-return diff\u00e9rentes ; si x est vrai, renvoyer some_value . Une fois qu\u2019une d\u00e9claration est vraie et qu\u2019une valeur est renvoy\u00e9e, la formule s\u2019arr\u00eate. Si les deux sont fausses, OUT OF STOCK est renvoy\u00e9. Tout d\u2019abord, si la valeur dans la colonne In Stock plus la valeur dans la colonne Qty On Order est sup\u00e9rieure \u00e0 5, renvoyez \u201cIn Stock\u201d. Ensuite, si la valeur dans la colonne In Stock plus la valeur dans la colonne Qty On Order est sup\u00e9rieure \u00e0 0, renvoyez \u201cLow Stock\u201d. Il est implicite que la valeur est inf\u00e9rieure ou \u00e9gale \u00e0 5 car la premi\u00e8re d\u00e9claration devrait \u00eatre fausse pour que cela soit \u00e9valu\u00e9. Enfin, si toutes les d\u00e9clarations sont fausses, renvoyez \u201cOUT OF STOCK\u201d. Internal Links Tracker for SEO template La formule utilis\u00e9e dans la colonne Orphaned? de la table Orphaned Pages est : len(Links.lookupRecords(To=$id))<1 Nous utilisons la fonction lookupRecords pour trouver tous les enregistrements dans la table Links o\u00f9 le lien dans la colonne To correspond au lien list\u00e9 dans la colonne Slug de cette ligne. Nous utilisons len() pour compter le nombre d\u2019enregistrements trouv\u00e9s. S\u2019il est inf\u00e9rieur \u00e0 1, la formule est \u00e9valu\u00e9e comme vraie et la case \u00e0 cocher sera coch\u00e9e. S\u2019il est \u00e9gal ou sup\u00e9rieur \u00e0 1, la formule est \u00e9valu\u00e9e comme fausse.","title":"Exemples de comparaison de valeurs"},{"location":"formula-cheat-sheet/#conversion-de-string-en-float","text":"String : Une s\u00e9quence de caract\u00e8res ou d\u2019extraits de texte. Dans le code, les cha\u00eenes sont entre guillemets, par exemple 'Hello' ou \"-12\" (ce sont trois caract\u00e8res entre guillemets, par opposition \u00e0 un nombre n\u00e9gatif). Voir Fonction str() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en cha\u00eene. Float : Nombres r\u00e9els qui peuvent stocker des valeurs d\u00e9cimales. \u00c9galement appel\u00e9s nombres \u00e0 virgule flottante. Voir Fonction float() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en un nombre \u00e0 virgule flottante. Integer : Un nombre entier, sans d\u00e9cimales. Voir Fonction int() de Python pour convertir une valeur sp\u00e9cifi\u00e9e en un nombre entier.","title":"Conversion de String en Float"},{"location":"formula-cheat-sheet/#exemple-de-conversion-dune-chaine-en-float","text":"Artwork Orders La formule utilis\u00e9e dans la colonne Sale Price est : if $Appraisal_Value.endswith(\"k\"): return float($Appraisal_Value.rstrip(\"k\")) * 1000 return float($Appraisal_Value) Dans cet exemple, la colonne Appraisal Value est une colonne de texte qui contient des caract\u00e8res alphanum\u00e9riques. Afin d\u2019utiliser cette valeur dans des formules math\u00e9matiques, nous devons convertir de string \u00e0 float. Si la valeur dans la colonne Appraisal Value se termine par \u201ck\u201d, nous utilisons d\u2019abord rstrip() pour supprimer \u201ck\u201d de la cha\u00eene dans la colonne Appraisal Value. Maintenant que nous n\u2019avons que des caract\u00e8res num\u00e9riques, nous utilisons float() pour convertir notre cha\u00eene en float. Comme K repr\u00e9sente 1000 et que nous avons supprim\u00e9 cela de la valeur, nous multiplions notre float par 1000. Si la valeur dans la colonne Appraisal Value ne se termine pas par \u201ck\u201d, et ne contient que des caract\u00e8res num\u00e9riques, nous pouvons simplement utiliser float() pour convertir notre cha\u00eene en float.","title":"Exemple de conversion d’une cha\u00eene en float"},{"location":"formula-cheat-sheet/#depannage","text":"Si vous essayez d\u2019utiliser diff\u00e9rentes colonnes avec des valeurs num\u00e9riques dans une formule math\u00e9matique mais que vous voyez une erreur, v\u00e9rifiez les types de colonnes pour chacune des colonnes utilis\u00e9es dans la formule. Toutes doivent \u00eatre de type Num\u00e9rique . float() n\u2019est n\u00e9cessaire que lorsque vous traitez des valeurs alphanum\u00e9riques comme nous le voyons dans l\u2019 exemple . TypeError : impossible de multiplier une s\u00e9quence par un type non-int de \u2018float\u2019 Cette erreur se produit lorsqu\u2019une formule tente de multiplier des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans la capture d\u2019\u00e9cran ci-dessous, la colonne Tax est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour / : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente de diviser des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne \u2018# of Payments\u2019 est une colonne Choice . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour + : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente d\u2019 ajouter des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne Tax est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue. TypeError : type d\u2019op\u00e9rande non pris en charge pour - : \u2018float\u2019 et \u2018str\u2019 Cette erreur se produit lorsqu\u2019une formule tente de soustraire des valeurs de plusieurs colonnes, dont au moins une n\u2019est pas de type Num\u00e9rique . Dans l\u2019exemple ci-dessus, la colonne Discount est une colonne Texte . Lorsque nous changeons le type de colonne en Num\u00e9rique , l\u2019erreur est r\u00e9solue.","title":"D\u00e9pannage"},{"location":"formula-cheat-sheet/#arrondir-les-nombres","text":"Sp\u00e9cifiez le nombre de d\u00e9cimales \u00e0 donner dans un r\u00e9sultat en utilisant la fonction ROUND() . Si la Temp\u00e9rature Moyenne est \u00e9gale \u00e0 46.5 , ROUND($Average_Temperature) renverrait 47 .","title":"Arrondir les Nombres"},{"location":"formula-cheat-sheet/#exemple-darrondi-des-nombres","text":"Payroll template La formule utilis\u00e9e dans la colonne Payment est : ROUND($Hours*$Per_Hour, 2) La fonction ROUND() suit le format ROUND(value, places) qui arrondira la valeur donn\u00e9e au nombre de d\u00e9cimales sp\u00e9cifi\u00e9. Notre formule trouve la valeur pour $Hours*$Per_Hour puis arrondit cette valeur \u00e0 2 d\u00e9cimales. Mixing Products La formule utilis\u00e9e dans la colonne Rounded Value est : mix_list_str = $Mix_Product.Lt_per_100_Lt mix_list_float = [float(i) for i in mix_list_str] x = [Lt * $Water/100 for Lt in mix_list_float] round_x = [ROUND(num, 2) for num in x] l = $Mix_Product.Product ' '.join('{} {}'.format(first, second) for first, second in zip(l, round_x)) D\u00e9composons cela. $Mix_Product repr\u00e9sente la colonne Mix Product, une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Product de Table1. Nous pouvons utiliser cette colonne comme un lien vers Table1 pour tirer d\u2019autres donn\u00e9es. $Mix_Product.Lt_per_100_Lt utilise la colonne de liste de r\u00e9f\u00e9rence, Mix Product, pour tirer des valeurs de la colonne Lt per 100 Lt de Table1 pour les produits list\u00e9s dans la colonne Mix Product de Table2, puis assigne cette liste de valeurs \u00e0 la variable mix_list_str . C\u2019est la m\u00eame formule utilis\u00e9e dans la colonne Lt per 100 Lt de Table2, donc vous pouvez voir la valeur qu\u2019elle renvoie dans la ligne 1 de Table2. Elle renvoie une liste : ['0.2355', '1.2579'] . Cette liste est \u00e9valu\u00e9e comme une cha\u00eene plut\u00f4t que comme des valeurs num\u00e9riques. Nous devons convertir chaque valeur de cette liste en float. Dans notre prochaine formule, [float(i) for i in mix_list_str] , nous it\u00e9rons \u00e0 travers la liste qui a \u00e9t\u00e9 assign\u00e9e dans la premi\u00e8re \u00e9quation \u00e0 mix_list_str et convertissons chaque valeur en un nombre \u00e0 virgule flottante. Nous voulons convertir en float plut\u00f4t qu\u2019en entier car toutes les valeurs ne sont pas des nombres entiers et contiennent des d\u00e9cimales. i est une variable repr\u00e9sentant chaque valeur. Donc chaque valeur dans mix_list_str est \u00e9valu\u00e9e dans l\u2019\u00e9quation float(i) . float(0.2355) convertit 0.2355 en float et float(1.2579) convertit 1.2579 en float. Maintenant, nous assignons notre liste de floats \u00e0 la variable mix_list_float . Nous pouvons maintenant utiliser nos valeurs float dans une \u00e9quation math\u00e9matique. Encore une fois, nous it\u00e9rons \u00e0 travers la liste qui a \u00e9t\u00e9 assign\u00e9e \u00e0 la variable mix_list_float . Dans notre \u00e9quation [Lt * $Water/100 for Lt in mix_list_float] , Lt repr\u00e9sente chaque valeur dans mix_list_float et $Water repr\u00e9sente la valeur trouv\u00e9e dans la colonne Water qui est 1000 . Nous \u00e9valuons l\u2019\u00e9quation Lt * 1000/100 lorsque Lt = 0.2355 et Lt = 1.2579 , ce qui renvoie la liste [2.355, 12.579] . Nous assignons cette liste \u00e0 la variable x . Pour arrondir les valeurs dans x \u00e0 deux d\u00e9cimales, nous devons \u00e9valuer l\u2019\u00e9quation ROUND(num, 2) o\u00f9 num repr\u00e9sente chaque valeur dans notre liste et 2 sp\u00e9cifie le nombre de d\u00e9cimales que nous voulons arrondir. Cela renvoie la liste [2.36, 12.58] que nous assignons \u00e0 la variable round_x. Dans la premi\u00e8re \u00e9quation, nous avons utilis\u00e9 notre colonne de liste de r\u00e9f\u00e9rence, Mix Product, comme notre lien vers Table1 afin de tirer des donn\u00e9es de Table1 dans Table2. Nous utilisons cette m\u00e9thode \u00e0 nouveau dans $Mix_Product.Product pour tirer des donn\u00e9es de la colonne Product de Table1. Cela renvoie une liste de produits ; [Prod A, Prod B] . Nous assignons cette liste \u00e0 la variable l . Enfin, nous utilisons la m\u00e9thode join() pour combiner nos deux listes. ' ' est notre cha\u00eene de d\u00e9part (vide). Nous utilisons la m\u00e9thode format de Python pour formater notre cha\u00eene. {} est un espace r\u00e9serv\u00e9 pour chaque variable list\u00e9e dans .format() . Enfin, nous utilisons la fonction zip() de Python pour associer les premi\u00e8res valeurs de chaque liste ensemble, puis associer les deuxi\u00e8mes valeurs de chaque liste ensemble. l est assign\u00e9 comme notre liste first et round_x est assign\u00e9 comme notre liste second . l = [Prod A, Prod B] et round_x = [2.36, 12.58] . En zippant nos listes dans '{} {}'.format(first, second) , nous obtenons Prod A 2.36 dans notre premi\u00e8re it\u00e9ration et Prod B 12.58 dans notre seconde it\u00e9ration. Notre valeur de retour finale est Prod A 2.36 Prod B 12.58 .","title":"Exemple d’arrondi des nombres"},{"location":"formula-cheat-sheet/#formatage-des-nombres-avec-des-zeros-en-tete","text":"Vous permet de sp\u00e9cifier le nombre minimum de chiffres renvoy\u00e9s dans une colonne num\u00e9rique en ajoutant des z\u00e9ros en t\u00eate. Si x = 5, str(x).zfill(3) ou '{:0>3}'.format(x) renverrait 005 .","title":"Formatage des nombres avec des z\u00e9ros en t\u00eate"},{"location":"formula-cheat-sheet/#formatage-des-nombres-avec-des-zeros-en-tete_1","text":"Exemple Communautaire : Utilisation de Row ID La formule utilis\u00e9e dans la colonne ID \u00e0 5 chiffres de la table ID Examples est : 'TCH{:0>5}'.format($id) '{:0>5}'.format($id) prend l\u2019ID de ligne unique et le formate pour avoir un minimum de 5 chiffres. Nous ajoutons ensuite cela \u00e0 notre cha\u00eene \"TCH\" pour obtenir notre valeur finale. Si l\u2019ID $id est plus long que 5 chiffres, la formule renvoie la cha\u00eene sans modification. Nous pouvons faire la m\u00eame chose en utilisant la m\u00e9thode str.zfill() . La formule utilis\u00e9e dans la colonne zfill Method de la table ID Examples est : str($id).zfill(5) str($id) convertit l\u2019ID de ligne en cha\u00eene. .zfill(x) renvoie une copie de la cha\u00eene avec des z\u00e9ros en t\u00eate pour faire une cha\u00eene de longueur x . Dans notre exemple, cela ajoute des z\u00e9ros en t\u00eate pour faire la cha\u00eene de 5 caract\u00e8res de long. Encore une fois, si l\u2019ID $id est plus long que 5 chiffres, la formule renvoie la cha\u00eene sans modification.","title":"Formatage des nombres avec des z\u00e9ros en t\u00eate"},{"location":"formula-cheat-sheet/#depannage-des-erreurs_1","text":"#TypeError : ne peut concat\u00e9ner que str (pas \u201cint\u201d) \u00e0 str Si vous souhaitez combiner une cha\u00eene et une valeur num\u00e9rique, assurez-vous de la convertir en cha\u00eene en utilisant str() .","title":"D\u00e9pannage des Erreurs"},{"location":"formula-cheat-sheet/#travailler-avec-des-chaines","text":"","title":"Travailler avec des Cha\u00eenes"},{"location":"formula-cheat-sheet/#combinaison-de-texte-de-plusieurs-colonnes","text":"M\u00e9thode 1 : Si vous avez une colonne Pr\u00e9nom et une colonne Nom, vous pouvez combiner ces colonnes pour avoir une colonne Nom Complet. Si le Pr\u00e9nom est George et le Nom est Washington , $First_Name + \" \" + $Last_Name renverrait George Washington . M\u00e9thode 2 : Si vous avez un formatage suppl\u00e9mentaire, une mani\u00e8re plus simple de le faire serait d\u2019utiliser la m\u00e9thode format() de Python . La m\u00e9thode format() formate les valeurs sp\u00e9cifi\u00e9es et les ins\u00e8re \u00e0 la place du placeholder, {} . En utilisant le m\u00eame exemple que ci-dessus, notre formule serait \"{} {}\".format($First_Name, $Last_Name) . Remarque : Vous pouvez cliquer sur les colonnes pour les ins\u00e9rer dans vos formules, plut\u00f4t que de les taper.","title":"Combinaison de Texte de Plusieurs Colonnes"},{"location":"formula-cheat-sheet/#exemples-utilisant-la-methode-1","text":"Class Enrollment template{:target=\u201d_blank\u201d} La formule utilis\u00e9e dans la colonne Nom Complet de la table des \u00c9tudiants est : $Last_Name + \", \" + $First_Name Ici, nous combinons la valeur trouv\u00e9e dans la colonne Last Name avec une virgule suivie d\u2019un espace suivi de la valeur de la colonne First Name. Lorsque vous ajoutez des caract\u00e8res ou des espaces suppl\u00e9mentaires, placez-les entre guillemets doubles, comme nous l\u2019avons fait dans l\u2019exemple avec \", \" . Une combinaison alternative de ces colonnes pour le Nom Complet pourrait \u00eatre $First_Name + \" \" + $Last_Name . Pour l\u2019exemple dans la ligne 1, le Pr\u00e9nom est Brockie et le Nom est Raddon , donc la valeur renvoy\u00e9e serait Brockie Raddon . Inventory Manager template La formule utilis\u00e9e dans la colonne SKU de la table Tous les Produits est : $Brand.Brand_Code+\"-\"+$Color.Code+\"-\"+$Size Brand est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Name Brand de la table Add Products. Nous utilisons cette colonne de r\u00e9f\u00e9rence dans $Brand.Brand_Code pour tirer des donn\u00e9es de la colonne Brand Code de la table Add Products. Color est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la colonne Color de la table Color. Nous utilisons cette colonne de r\u00e9f\u00e9rence dans $Color.Code pour tirer des donn\u00e9es de la colonne Code de la table Color. Chacune des valeurs trouv\u00e9es dans $Brand.Brand_Code et $Color.Code est combin\u00e9e avec la valeur dans la colonne Size avec un - entre chacune des trois valeurs pour constituer le SKU.","title":"Exemples utilisant la M\u00e9thode 1"},{"location":"formula-cheat-sheet/#exemples-utilisant-la-methode-2","text":"Tracking Time + Invoicing template La formule utilis\u00e9e dans la colonne Nom du Projet de la table des Projets est : \"{}: {}\".format($Client.Name, $Name) D\u00e9composons cela. Tout ce qui se trouve entre guillemets doubles \" est notre cha\u00eene. Les accolades {} sont des espaces r\u00e9serv\u00e9s pour les valeurs trouv\u00e9es \u00e0 l\u2019aide de .format() qui est la m\u00e9thode de formatage de cha\u00eene de Python. Le premier ensemble d\u2019accolades est remplac\u00e9 par la valeur trouv\u00e9e dans $Client.Name . Client est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es pour un enregistrement sp\u00e9cifique de la table Clients. $Client.Name utilise notre colonne de r\u00e9f\u00e9rence, Client pour tirer des donn\u00e9es de la colonne Name de la table Clients. Le deuxi\u00e8me ensemble d\u2019accolades est remplac\u00e9 par la valeur trouv\u00e9e dans la colonne Name de cette table. Bien que la colonne Client montre la valeur que nous voulons, nous ne pouvons pas utiliser $Client comme nous l\u2019avons fait avec $Name . Cela est d\u00fb au fait que la colonne Client est une colonne de r\u00e9f\u00e9rence. Elle fait r\u00e9f\u00e9rence \u00e0 l\u2019 entier enregistrement mais utilise la valeur de la colonne Name de la table Clients comme repr\u00e9sentation visuelle de cet enregistrement. Dans le panneau de configuration de la colonne sur le c\u00f4t\u00e9 droit, nous pouvons changer quelle valeur de colonne nous voyons pour l\u2019enregistrement. Dans la capture d\u2019\u00e9cran ci-dessous, \u2018Show Column\u2019 a \u00e9t\u00e9 chang\u00e9 de Name \u00e0 Email. Cela ne change pas les donn\u00e9es, cela change simplement l\u2019\u00e9tiquette sur ces donn\u00e9es dans la colonne Client. Cela pointe toujours vers le m\u00eame enregistrement mais montre maintenant une \u00e9tiquette diff\u00e9rente. $Client.Name tire le Nom pour l\u2019enregistrement qui est r\u00e9f\u00e9renc\u00e9 dans la colonne Client, peu importe l\u2019\u00e9tiquette que nous voyons. Custom Product Builder template La formule utilis\u00e9e dans la colonne All Components de la carte CONTRACT_BUILDER est : '\\n'.join(sorted( \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) for (comp, quantity) in $Components.items() )) Nous utilisons la m\u00e9thode join() , la fonction sorted() et la m\u00e9thode format() toutes en une seule fois ! '\\n'.join() ajoute une nouvelle ligne entre chaque \u00e9l\u00e9ment de la liste. sorted() trie les \u00e9l\u00e9ments de la liste par ordre alphab\u00e9tique. Cela nous laisse avec le suivant : \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) for (comp, quantity) in $Components.items() Nous allons travailler \u00e0 l\u2019envers. Tout d\u2019abord, nous devons examiner la colonne Components qui est une colonne cach\u00e9e dans la table All Contracts. Cette colonne est une liste de composants et de leurs quantit\u00e9s associ\u00e9es pour le contrat. Dans la boucle for , nous assignons chaque \u00e9l\u00e9ment de la liste de composants \u00e0 deux variables, comp et quantity. Pour Components[3]: 6.0 , comp = Components[3] et quantity = 6.0 . Components[#] sp\u00e9cifie un Composant dans la table Components par ID de ligne. Components[3] est le composant assign\u00e9 3 comme son ID de ligne. Maintenant, nous ex\u00e9cutons chaque \u00e9l\u00e9ment de la liste ci-dessus \u00e0 travers l\u2019\u00e9quation \"{} \u2014 {:g} {}\".format(comp.Component, quantity, comp.Unit) . comp.Component remplace le premier ensemble de {} . comp est la variable avec notre ID de composant donc comp.Component trouve la valeur dans la colonne Component associ\u00e9e \u00e0 cet ID de ligne. Pour Components[3] , comp.Component est Nozzle. quantity remplace le deuxi\u00e8me ensemble de {} . Encore une fois, la quantit\u00e9 est la deuxi\u00e8me variable dans notre liste. Pour Components[3]: 6.0 , quantity est 6.0 . Notre deuxi\u00e8me ensemble de {} n\u2019est pas vide. Ils incluent :g *. Cela convertit la valeur en un nombre \u00e0 virgule flottante. comp.Unit remplace le dernier ensemble de {} . comp est la variable avec notre ID de composant donc comp.Unit trouve la valeur dans la colonne Unit associ\u00e9e \u00e0 cet ID de ligne. Pour Components[3] , comp.Unit est None . *Notez que {:g} formate les nombres \u00e0 virgule flottante d\u2019une mani\u00e8re particuli\u00e8re qui omet les d\u00e9cimales lorsqu\u2019elles ne sont pas n\u00e9cessaires. Il existe de nombreuses options disponibles dans les espaces r\u00e9serv\u00e9s pour formater des nombres, des dates, etc. En savoir plus sur les espaces r\u00e9serv\u00e9s ici . Email Contacts template La formule utilis\u00e9e dans la colonne Body de la table Advanced Compose est : \"Dear %s,\\n\\nWelcome to the %s team!\" % ($Contact_Name_as_Plaintext, $Team) Cette technique utilise l\u2019op\u00e9rateur % au lieu de la m\u00e9thode format() . Les sp\u00e9cificateurs de format commencent par % suivi d\u2019un caract\u00e8re qui repr\u00e9sente le type de donn\u00e9es. %s est un espace r\u00e9serv\u00e9 pour une cha\u00eene. Le premier %s est remplac\u00e9 par la valeur trouv\u00e9e dans la colonne \u201cContact Name as Plaintext\u201d qui est une colonne cach\u00e9e et le deuxi\u00e8me %s est remplac\u00e9 par la valeur dans la colonne Team. \\n ajoute une nouvelle ligne.","title":"Exemples utilisant la M\u00e9thode 2"},{"location":"formula-cheat-sheet/#division-de-chaines-de-texte","text":"Divisez une cha\u00eene en utilisant la m\u00e9thode split() de Python. Si le Nom Complet est George Washington , $Full_Name.split(\" \") renverrait [George, Washington] .","title":"Division de Cha\u00eenes de Texte"},{"location":"formula-cheat-sheet/#exemple-de-division-de-chaines-de-texte","text":"Exemple Communautaire : Colors La formule dans la colonne \u201cColor Reference (Just URL)\u201d de la Table 2 est : split = $Color_Reference.Color.split(\" \") return split[-1] $Color_Reference.Color utilise la colonne de r\u00e9f\u00e9rence, \u201cColor Reference\u201d pour tirer des donn\u00e9es de la table qu\u2019elle r\u00e9f\u00e9rence, Table 1. Sp\u00e9cifiquement, elle tire la valeur de la colonne Color de Table 1. Color est une colonne de texte qui contient un hyperlien avec une \u00e9tiquette. Nous ne voyons que l\u2019\u00e9tiquette dans Table 1 mais comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessus, la valeur dans la cellule \u2018pink\u2019 est d\u00e9velopp\u00e9e pour montrer toute la cha\u00eene qui contient \u201cpink\u201d suivie de l\u2019URL. Vous pouvez \u00e9galement voir cela dans la colonne \u201cColor Reference\u201d de la Table 2. Nous voulons obtenir le lien par lui-m\u00eame dans \u201cColor Reference (Just URL)\u201d. Nous pouvons le faire en utilisant la m\u00e9thode split() de Python. .split(\" \") nous permet de diviser la cha\u00eene partout o\u00f9 il y a un espace (\" \") . Dans la colonne Color, il y a une \u00e9tiquette suivie d\u2019un espace suivi de l\u2019URL. La valeur de la colonne Color est divis\u00e9e en une liste contenant deux \u00e9l\u00e9ments Label et URL . Cette liste est assign\u00e9e \u00e0 la variable split . Nous voulons renvoyer le dernier \u00e9l\u00e9ment de la liste split afin d\u2019obtenir notre URL . Le dernier \u00e9l\u00e9ment d\u2019une liste a toujours l\u2019index [-1] . return split[-1] renvoie le dernier \u00e9l\u00e9ment de la liste split .","title":"Exemple de Division de Cha\u00eenes de Texte"},{"location":"formula-cheat-sheet/#lien-direct-vers-lhistorique-gmail-pour-un-contact","text":"Si vous stockez des contacts dans Grist et utilisez Gmail pour les email, vous pouvez cr\u00e9er une formule qui ouvrira Gmail sur une liste de conversations avec ce contact. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Afficher l\u2019historique Gmail pour un contact particulier","title":"Lien Direct vers l’Historique Gmail pour un Contact"},{"location":"formula-cheat-sheet/#depannage_1","text":"Votre URL s\u2019affiche-t-elle toujours apr\u00e8s avoir ajout\u00e9 une \u00e9tiquette ? Assurez-vous que votre Type de Colonne est Texte et que le Format de Cellule est Hyperlien.","title":"D\u00e9pannage"},{"location":"formula-cheat-sheet/#joindre-une-liste-de-chaines","text":"Lorsque vous souhaitez joindre une liste de cha\u00eenes, vous pouvez utiliser la m\u00e9thode join() de Python .","title":"Joindre une Liste de Cha\u00eenes"},{"location":"formula-cheat-sheet/#exemple-de-jointure-dune-liste","text":"Exemple Communautaire : .join() Exemple La formule utilis\u00e9e dans la colonne Advertisement de la table 2022 Grand Openings est : \"Coming soon to a city near you!\\n\" + \" : \".join($New_Location_s_in_2022) Ici, nous joignons plusieurs cha\u00eenes pour cr\u00e9er notre publicit\u00e9. \"Coming soon to a city near you!\\n\" est renvoy\u00e9 presque exactement comme nous le voyons, \u00e0 l\u2019exception des guillemets \"\" et \\n \u00e0 la fin de la cha\u00eene. Les guillemets \"\" sp\u00e9cifient qu\u2019il s\u2019agit d\u2019une cha\u00eene et \\n est en fait un caract\u00e8re de nouvelle ligne qui peut \u00eatre utilis\u00e9 pour sp\u00e9cifier une nouvelle ligne dans une cha\u00eene. \" : \".join($New_Location_s_in_2022) est \u00e9galement une cha\u00eene mais utilise la m\u00e9thode join() de Python pour joindre les valeurs de notre colonne de liste de choix , \u201cNew Locations in 2022\u201d. Ce que nous voyons entre guillemets avant .join est ce qui s\u00e9parera chaque valeur de notre liste. Dans cet exemple, chaque valeur est s\u00e9par\u00e9e par un espace, : et un autre espace.","title":"Exemple de Jointure d’une Liste"},{"location":"formula-cheat-sheet/#trouver-des-doublons","text":"Vous pouvez trouver des doublons dans une colonne en utilisant soit le formatage conditionnel, soit une colonne d\u2019aide. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Assurer des valeurs uniques ou d\u00e9tecter des doublons","title":"Trouver des Doublons"},{"location":"formula-cheat-sheet/#exemple-de-trouver-des-doublons","text":"Exemple Communautaire : Finding Duplicates La formule utilis\u00e9e dans la colonne Duplicate? de la table Duplicates est : len(Duplicates.lookupRecords(Grocery_List=$Grocery_List))>1 D\u00e9composons cela, en travaillant de l\u2019int\u00e9rieur vers l\u2019ext\u00e9rieur. Duplicates.lookupRecords(Grocery_List=$Grocery_List) Ceci est une fonction lookupRecords qui suit le format : [Table_Name].lookupRecords([A]=$[B]) O\u00f9 [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table \u00e9tant recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Cette formule recherche des enregistrements dans la table Duplicates o\u00f9 un enregistrement dans la colonne Grocery List correspond \u00e0 un autre enregistrement dans la m\u00eame colonne. len() compte le nombre d\u2019enregistrements dans notre liste. Puisque chaque doublon correspondra \u00e0 l\u2019autre, il devrait appara\u00eetre deux fois dans notre liste. C\u2019est pourquoi len() > 1 . Si len() > 1 , la formule est vraie. Si len() <= 1 , la formule est fausse. Cette m\u00eame formule peut \u00eatre utilis\u00e9e dans le formatage conditionnel. Cela peut \u00eatre vu dans la colonne \u2018Grocery List\u2019 de la table Duplicates. Si len() > 1 , notre formule est vraie et la couleur de cellule conditionnelle est appliqu\u00e9e \u00e0 ces cellules. Si len() <= 1 , notre formule est fausse et la couleur de cellule reste inchang\u00e9e.","title":"Exemple de Trouver des Doublons"},{"location":"formula-cheat-sheet/#utilisation-de-lidentifiant-unique-dun-enregistrement-dans-les-formules","text":"Lorsqu\u2019un enregistrement est cr\u00e9\u00e9, il se voit attribuer un ID num\u00e9rique (disponible sous la forme $id dans les formules) qui est unique au sein de cette table. Vous pouvez r\u00e9v\u00e9ler l\u2019ID de ligne en ajoutant une colonne de formule o\u00f9 la formule est $id .","title":"Utilisation de l’Identifiant Unique d’un Enregistrement dans les Formules"},{"location":"formula-cheat-sheet/#exemples-dutilisation-de-lid-de-ligne-dans-les-formules","text":"Vous pouvez r\u00e9v\u00e9ler l\u2019ID avec la formule $id Custom Product Builder template La formule utilis\u00e9e dans la colonne Contract No de la table Contract Builder est : $id + 500 Ici, nous utilisons une formule d\u2019initialisation pour cr\u00e9er un num\u00e9ro de contrat unique lors de la cr\u00e9ation d\u2019un enregistrement. Class Enrollment template La formule utilis\u00e9e dans la colonne Count de la table des Classes est : len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) Ceci est appel\u00e9 une recherche invers\u00e9e. Nous pouvons utiliser l\u2019ID de ligne pour faire correspondre un enregistrement dans une autre table o\u00f9 une colonne de r\u00e9f\u00e9rence est utilis\u00e9e. LookupRecords suit le format [Table_Name].lookupRecords([A]=$[B]) . [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table \u00e9tant recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Lookup Records cr\u00e9e une liste d\u2019enregistrements qui correspondent aux crit\u00e8res \u00e9num\u00e9r\u00e9s. len() compte combien d\u2019enregistrements sont dans cette liste. Ici, nous recherchons des enregistrements dans la table Enrollments o\u00f9 l\u2019enregistrement mentionn\u00e9 dans la colonne Class (notre colonne de r\u00e9f\u00e9rence) a le m\u00eame ID de ligne que la ligne dans la table dans laquelle vous entrez la formule. De plus, la valeur dans la colonne Status de la table Enrollments est Confirmed . Nous allons d\u00e9composer cela. La table dans laquelle nous recherchons des enregistrements est la table Enrollments. Nos crit\u00e8res proviennent de la colonne Class et de la colonne Status. Le crit\u00e8re pour Status est simple ; la valeur doit \u00eatre Confirmed pour \u00eatre incluse dans notre liste d\u2019enregistrements. Class est un peu plus compliqu\u00e9. Comme nous le voyons dans la capture d\u2019\u00e9cran ci-dessous, Class est une colonne de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table Classes. Ici, la colonne Class montre la valeur de la colonne Class Code de la table Classes mais elle pointe vers l\u2019enregistrement entier o\u00f9 le code de classe est 2018F-Stars . Une colonne de r\u00e9f\u00e9rence pointe vers l\u2019 entier enregistrement, pas seulement la valeur que vous voyez ici dans la colonne Class. En utilisant le panneau de configuration sur le c\u00f4t\u00e9 droit de l\u2019\u00e9cran, vous pouvez choisir n\u2019importe quelle colonne de la table d\u2019origine \u00e0 afficher. Pour cet exemple, la colonne Class montre la valeur de la colonne Class Code de la table Classes mais elle pointe vers l\u2019enregistrement entier o\u00f9 le code de classe est 2018F-Stars . Comme vous pouvez le voir dans cette capture d\u2019\u00e9cran, l\u2019ID de ligne pour cet enregistrement particulier est 2 et parce que nous calculons le Count pour la ligne avec Row ID = 2 , il comptera tous les enregistrements dans la table Enrollment o\u00f9 Class montre 2018F-Stars et Status est Confirmed . Restaurant Custom Orders template La formule d\u2019initialisation utilis\u00e9e dans la colonne BOM # de la table Bill of Materials est : MAX(o.BOM_ for o in Bill_Of_Materials.all if o.id != $id) + 1 Tout d\u2019abord, nous allons examiner la formule \u00e0 l\u2019int\u00e9rieur des parenth\u00e8ses, puis travailler vers l\u2019ext\u00e9rieur. Ici, o est une variable repr\u00e9sentant chaque enregistrement dans notre table. o.BOM_ repr\u00e9sente le BOM # pour chaque enregistrement et o.id repr\u00e9sente l\u2019ID de ligne pour chaque enregistrement. C\u2019est une boucle for qui cr\u00e9e une liste des BOM # pour chaque enregistrement dans la table Bill of Materials lorsque l\u2019ID d\u2019enregistrement n\u2019est pas \u00e9gal \u00e0 l\u2019ID de cette ligne. MAX() trouve le maximum des BOM # dans la liste puis + 1 pour obtenir notre valeur finale. C\u2019est une formule d\u2019initialisation qui ne s\u2019applique qu\u2019aux nouveaux enregistrements. Lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9, la formule trouve le plus grand BOM # dans la table puis ajoute 1 pour que nous ayons un BOM # unique pour le nouvel enregistrement.","title":"Exemples d’Utilisation de l’ID de Ligne dans les Formules"},{"location":"formula-cheat-sheet/#suppression-des-doublons-dune-liste","text":"Vous pouvez supprimer des doublons d\u2019une liste avec l\u2019aide de la m\u00e9thode set() de Python.","title":"Suppression des Doublons d’une Liste"},{"location":"formula-cheat-sheet/#exemple-de-suppression-des-doublons-dune-liste","text":"Exemple Communautaire : Removing Duplicates From a List La formule dans la colonne All Divisions de la table Abroad Trips est : confirmed_div = $Attending_Confirmed.Role_Division.Division pending_div = $Attending_Pending.Role_Division.Division full_list = confirmed_div + pending_div return sorted(set(full_list)) Nous allons d\u00e9composer cela ligne par ligne. Attending-Confirmed est une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table EMPLOYEES. $Attending_Confirmed.Role_Division tire la valeur de la colonne Role Division de la table EMPLOYEES. La colonne Role Division dans la table EMPLOYEES est elle-m\u00eame une colonne de r\u00e9f\u00e9rence, qui pointe vers un enregistrement dans la table Divisions. Chaining nous permet de sp\u00e9cifier quelles informations nous voulons de cet enregistrement. Dans ce cas, nous voulons la Division. Nous d\u00e9veloppons notre formule pour $Attending_Confirmed.Role_Division.Division . La Division est trouv\u00e9e pour chaque employ\u00e9 list\u00e9 dans la colonne Attending-Confirmed, cr\u00e9ant une liste. Nous assignons cette liste de divisions \u00e0 la variable confirmed_div . Attending-Pending est \u00e9galement une colonne de liste de r\u00e9f\u00e9rence qui tire des donn\u00e9es de la table EMPLOYEES. $Attending_Pending.Role_Division.Division fait la m\u00eame chose que ci-dessus sauf que maintenant nous tirons la division pour chaque employ\u00e9 dans la colonne Attending-Pending. Nous assignons cette liste \u00e0 la variable pending_div . Nous cr\u00e9ons une liste de toutes les divisions en ajoutant les deux listes ensemble et en assignant cette liste combin\u00e9e \u00e0 la variable full_list . return sorted(set(full_list)) utilise d\u2019abord la m\u00e9thode set() de Python pour cr\u00e9er une liste sans doublons. Nous utilisons ensuite la m\u00e9thode sorted() pour renvoyer notre ensemble de divisions, tri\u00e9 par ordre alphab\u00e9tique. Notez que la formule ci-dessus peut \u00eatre simplifi\u00e9e encore plus \u00e0 : sorted( set($Attending_Confirmed.Role_Division.Division) | set($Attending_Pending.Role_Division.Division) )","title":"Exemple de Suppression des Doublons d’une Liste"},{"location":"formula-cheat-sheet/#definir-des-valeurs-par-defaut-pour-de-nouveaux-enregistrements","text":"Vous pouvez d\u00e9finir des valeurs par d\u00e9faut pour lorsque un nouvel enregistrement est cr\u00e9\u00e9 et vous \u00e9pargner le tracas de devoir remplir les m\u00eames champs avec les m\u00eames valeurs encore et encore. Lisez \u00e0 ce sujet dans la Communaut\u00e9 : Valeurs par d\u00e9faut sur le widget","title":"D\u00e9finir des Valeurs par D\u00e9faut pour de Nouveaux Enregistrements"},{"location":"formula-cheat-sheet/#travailler-avec-des-dates-et-des-heures","text":"","title":"Travailler avec des dates et des heures"},{"location":"formula-cheat-sheet/#tampons-automatiques-de-date-heure-et-auteur","text":"Vous pouvez automatiquement ajouter la date ou l\u2019heure \u00e0 laquelle un enregistrement a \u00e9t\u00e9 cr\u00e9\u00e9 ou mis \u00e0 jour ainsi que qui a effectu\u00e9 le changement.","title":"Tampons Automatiques de Date, Heure et Auteur"},{"location":"formula-cheat-sheet/#exemples-de-tampons-automatiques-de-date-heure-et-auteur","text":"Grant Application Tracker template La formule utilis\u00e9e dans la colonne Last Updated de la table Tasks est : NOW() C\u2019est une formule d\u2019initialisation qui se d\u00e9clenche lorsqu\u2019un changement est effectu\u00e9 dans n\u2019importe quel champ pour cet enregistrement. Lorsqu\u2019un changement est effectu\u00e9, cette formule ex\u00e9cute son calcul. NOW() calcule l\u2019heure et la date actuelles pour le fuseau horaire s\u00e9lectionn\u00e9. La formule utilis\u00e9e dans la colonne Created By de la table Tasks est : user.Name C\u2019est une formule d\u2019initialisation qui se d\u00e9clenche lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Lorsque l\u2019enregistrement est cr\u00e9\u00e9, cette formule ex\u00e9cute son calcul. user.Name recherche le compte utilisateur qui est connect\u00e9 \u00e0 Grist et renvoie le nom associ\u00e9 \u00e0 ce compte.","title":"Exemples de Tampons Automatiques de Date, Heure et Auteur"},{"location":"formula-cheat-sheet/#depannage-des-erreurs_2","text":"Si la valeur de temps dans votre colonne datetime ne se calcule pas, v\u00e9rifiez votre formule. Si TODAY() est utilis\u00e9 dans DateTime, l\u2019heure affichera toujours 12:00 am comme vous le voyez ci-dessous. NOW() est utilis\u00e9 pour les colonnes DateTime. TODAY() est utilis\u00e9 pour la Date. #AttributeError Vous avez probablement entr\u00e9 user.name mais la formule est user.Name . Faites attention \u00e0 la capitalisation ! #NameError Vous avez peut-\u00eatre entr\u00e9 username ou userName . La formule correcte est user.Name . Une autre possibilit\u00e9 est que cela a \u00e9t\u00e9 entr\u00e9 en tant que colonne de formule plut\u00f4t qu\u2019en tant que colonne de formule d\u2019initialisation. Convertissez-la en formule d\u2019initialisation et cela devrait r\u00e9soudre le probl\u00e8me.","title":"D\u00e9pannage des Erreurs"},{"location":"formula-cheat-sheet/#filtrer-les-donnees-dans-une-duree-specifiee","text":"En utilisant la fonction DATEADD() et les op\u00e9rateurs de comparaison , vous pouvez d\u00e9terminer si une date tombe dans une plage sp\u00e9cifique puis appliquer un filtre.","title":"Filtrer les Donn\u00e9es dans une Dur\u00e9e Sp\u00e9cifi\u00e9e"},{"location":"formula-cheat-sheet/#exemple-de-filtrage-des-donnees-qui-tombe-dans-une-plage-de-1-mois","text":"Exemple Communautaire : Filtrage des Donn\u00e9es dans une Plage de 1 Mois La formule utilis\u00e9e dans la colonne Falls in 1 Month Range? de la table Interactions est : TODAY() >= $Date >= DATEADD(TODAY(),months=-1) TODAY() renvoie la date actuelle. $Date est le nom d\u2019une colonne dans notre table, qui est de type Date . DATEADD(start_date, days=0, months=0, years=0, weeks=0) renvoie la date qui est le nombre donn\u00e9 de jours, mois, ann\u00e9es ou semaines avant ou apr\u00e8s la start_date . Dans cet exemple, elle renvoie la date qui est un mois avant la date de d\u00e9part, TODAY() . Cette formule est vraie si la valeur de date dans la colonne Date tombe entre TODAY() et notre date DATEADD() qui est un mois auparavant. Si la valeur de date dans la colonne Date ne tombe pas entre ces deux dates, la formule renvoie faux. Nous pouvons utiliser cette colonne pour filtrer nos donn\u00e9es. Si nous ne voulons voir que les interactions qui tombent dans la Plage de 1 Mois, nous filtrerions pour n\u2019inclure que les valeurs true . Si nous voulons voir les interactions qui tombent en dehors de la Plage de 1 Mois, nous filtrerions pour n\u2019inclure que les valeurs false .","title":"Exemple de Filtrage des Donn\u00e9es qui ‘Tombe dans une Plage de 1 Mois’"},{"location":"formula-cheat-sheet/#depannage-des-erreurs_3","text":"#TypeError : Parce que $Date est une colonne de type Date , TODAY() doit \u00eatre utilis\u00e9 dans les formules comparant des dates. NOW() est une formule DateTime qui ne doit \u00eatre utilis\u00e9e qu\u2019avec d\u2019autres valeurs DateTime. Par exemple, si la colonne $Date \u00e9tait une colonne de type DateTime , NOW() devrait \u00eatre utilis\u00e9 plut\u00f4t que TODAY() car il inclut le composant temps. NOW() est date et heure. TODAY() est seulement date.","title":"D\u00e9pannage des Erreurs"},{"location":"formula-timer/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Minuteur de formules # Grist dispose d\u2019un minuteur de formules int\u00e9gr\u00e9 qui mesure le temps n\u00e9cessaire pour \u00e9valuer chaque formule dans un document. Cela aide \u00e0 diagnostiquer quelles formules sont responsables des ralentissements lorsque le document est ouvert pour la premi\u00e8re fois ou lorsqu\u2019il r\u00e9pond \u00e0 des modifications. Le minuteur de formules de Grist se trouve sur la page \u2018Param\u00e8tres du document\u2019, sous \u2018Moteur de donn\u00e9es\u2019. S\u00e9lectionnez \u2018D\u00e9marrer le chronom\u00e9trage\u2019 pour commencer. Sur l\u2019\u00e9cran suivant, vous aurez deux choix, \u2018D\u00e9marrer le chronom\u00e9trage\u2019 et \u2018Recharger et chronom\u00e9trer\u2019. D\u00e9marrer le chronom\u00e9trage \u2018D\u00e9marrer le chronom\u00e9trage\u2019 vous permet de faire des modifications dans le document, puis d\u2019arr\u00eater le chronom\u00e9trage pour voir les r\u00e9sultats. Cela est utile si vous souhaitez tester des formules sp\u00e9cifiques. Vous pouvez effectuer une modification qui affecte cette formule, puis revenir et cliquer sur \u2018Arr\u00eater le chronom\u00e9trage\u2019 pour voir le r\u00e9sultat. Recharger et chronom\u00e9trer \u2018Recharger et chronom\u00e9trer\u2019 force un rechargement du document tout en chronom\u00e9trant les formules et affiche le r\u00e9sultat. Cela montrera les r\u00e9sultats de chronom\u00e9trage pour toutes les formules \u00e0 travers l\u2019ensemble du document. R\u00e9sultats # Les r\u00e9sultats sont affich\u00e9s sous forme de tableau. \u26a0\ufe0f Tableau des r\u00e9sultats Le tableau des r\u00e9sultats du minuteur de formules n\u2019est enregistr\u00e9 nulle part dans le document. Si vous quittez cette page, vous devrez relancer le minuteur de formules pour r\u00e9cup\u00e9rer le tableau. Triez la colonne Temps total de Z > A afin que les formules prenant le plus de temps \u00e0 s\u2019ex\u00e9cuter soient list\u00e9es en premier. Le tableau sp\u00e9cifie l\u2019 ID de la table et l\u2019 ID de la colonne contenant chaque formule. Examinez les formules avec le temps total le plus \u00e9lev\u00e9 pour voir comment elles peuvent \u00eatre am\u00e9lior\u00e9es. Si votre document subit des ralentissements dus aux calculs de formules, vous verrez des Temps totaux sup\u00e9rieurs \u00e0 1 seconde. Besoin de conseils pour am\u00e9liorer une formule ? Publiez sur notre Forum Communautaire !","title":"Formula timer"},{"location":"formula-timer/#minuteur-de-formules","text":"Grist dispose d\u2019un minuteur de formules int\u00e9gr\u00e9 qui mesure le temps n\u00e9cessaire pour \u00e9valuer chaque formule dans un document. Cela aide \u00e0 diagnostiquer quelles formules sont responsables des ralentissements lorsque le document est ouvert pour la premi\u00e8re fois ou lorsqu\u2019il r\u00e9pond \u00e0 des modifications. Le minuteur de formules de Grist se trouve sur la page \u2018Param\u00e8tres du document\u2019, sous \u2018Moteur de donn\u00e9es\u2019. S\u00e9lectionnez \u2018D\u00e9marrer le chronom\u00e9trage\u2019 pour commencer. Sur l\u2019\u00e9cran suivant, vous aurez deux choix, \u2018D\u00e9marrer le chronom\u00e9trage\u2019 et \u2018Recharger et chronom\u00e9trer\u2019. D\u00e9marrer le chronom\u00e9trage \u2018D\u00e9marrer le chronom\u00e9trage\u2019 vous permet de faire des modifications dans le document, puis d\u2019arr\u00eater le chronom\u00e9trage pour voir les r\u00e9sultats. Cela est utile si vous souhaitez tester des formules sp\u00e9cifiques. Vous pouvez effectuer une modification qui affecte cette formule, puis revenir et cliquer sur \u2018Arr\u00eater le chronom\u00e9trage\u2019 pour voir le r\u00e9sultat. Recharger et chronom\u00e9trer \u2018Recharger et chronom\u00e9trer\u2019 force un rechargement du document tout en chronom\u00e9trant les formules et affiche le r\u00e9sultat. Cela montrera les r\u00e9sultats de chronom\u00e9trage pour toutes les formules \u00e0 travers l\u2019ensemble du document.","title":"Minuteur de formules"},{"location":"formula-timer/#resultats","text":"Les r\u00e9sultats sont affich\u00e9s sous forme de tableau. \u26a0\ufe0f Tableau des r\u00e9sultats Le tableau des r\u00e9sultats du minuteur de formules n\u2019est enregistr\u00e9 nulle part dans le document. Si vous quittez cette page, vous devrez relancer le minuteur de formules pour r\u00e9cup\u00e9rer le tableau. Triez la colonne Temps total de Z > A afin que les formules prenant le plus de temps \u00e0 s\u2019ex\u00e9cuter soient list\u00e9es en premier. Le tableau sp\u00e9cifie l\u2019 ID de la table et l\u2019 ID de la colonne contenant chaque formule. Examinez les formules avec le temps total le plus \u00e9lev\u00e9 pour voir comment elles peuvent \u00eatre am\u00e9lior\u00e9es. Si votre document subit des ralentissements dus aux calculs de formules, vous verrez des Temps totaux sup\u00e9rieurs \u00e0 1 seconde. Besoin de conseils pour am\u00e9liorer une formule ? Publiez sur notre Forum Communautaire !","title":"R\u00e9sultats"},{"location":"formulas/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Formules # Grist dispose d\u2019un puissant moteur de donn\u00e9es pour calculer les cellules de vos tables en utilisant des formules. Il dispose m\u00eame d\u2019un Assistant de Formule AI pour aider \u00e0 r\u00e9diger des formules. Si vous avez d\u00e9j\u00e0 utilis\u00e9 des tableurs ou des expressions de base de donn\u00e9es, vous serez dans un territoire familier - mais il y a quelques subtilit\u00e9s que vous voudrez conna\u00eetre, alors restez avec nous. Commen\u00e7ons par un usage classique des tableurs. Supposons que vous ayez une liste de produits que vous avez command\u00e9s, la quantit\u00e9 que vous avez command\u00e9e, et le prix unitaire de chacun. Vous avez cr\u00e9\u00e9 une colonne pour montrer la quantit\u00e9 multipli\u00e9e par le prix unitaire, mais vous voulez que l\u2019ordinateur s\u2019occupe de cette partie pour vous. Il vous suffit de s\u00e9lectionner une cellule dans la colonne que vous souhaitez remplir, et d\u2019appuyer sur la touche = pour indiquer \u00e0 Grist que vous souhaitez entrer une formule, plut\u00f4t qu\u2019une valeur. Avez-vous remarqu\u00e9 que, lorsque vous avez fait cela, les \u00e9tiquettes des colonnes ont l\u00e9g\u00e8rement chang\u00e9 ? \u201cProduit\u201d est devenu \u201c$Produit\u201d, et \u201cPrix Unitaire\u201d est devenu \u201c$Prix_Unitaire\u201d. C\u2019est Grist qui vous indique comment vous r\u00e9f\u00e9rer \u00e0 ces colonnes dans votre formule. Il vous suffit de taper $Quantit\u00e9 * $Prix_Unitaire . Vous trouverez une fonction d\u2019auto-compl\u00e9tion pr\u00eate \u00e0 vous aider. Ou si vous n\u2019aimez pas taper, cliquez sur la colonne Quantit\u00e9, tapez le symbole de multiplication, puis cliquez sur la colonne Prix Unitaire. Votre formule devrait ressembler \u00e0 ceci : Pour contr\u00f4ler l\u2019ID de la colonne, comme \u201c$Prix_Unitaire\u201d, qui est utilis\u00e9 dans les formules, consultez Renommer les colonnes . Appuyez sur Entr\u00e9e , et votre formule est appliqu\u00e9e \u00e0 toutes les cellules de la colonne. Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec des tableurs, vous serez peut-\u00eatre surpris de constater que vous n\u2019avez pas besoin de sp\u00e9cifier les num\u00e9ros de ligne, comme B1 * C1 . Dans Grist, une seule formule s\u2019applique \u00e0 toute une colonne. Vous n\u2019avez pas \u00e0 vous soucier de la remplir pour toutes les lignes, et vous pouvez vous r\u00e9f\u00e9rer \u00e0 des valeurs dans la m\u00eame ligne sans tracas. Vous pouvez formater les colonnes num\u00e9riques pour qu\u2019elles aient un meilleur aspect en d\u00e9finissant le type de colonne sur Num\u00e9rique , et en s\u00e9lectionnant des options de formatage appropri\u00e9es : Comportement des colonnes # Lorsque nous fournissons une formule pour une colonne, nous disons \u00e0 Grist de mettre \u00e0 jour sa valeur \u00e0 chaque changement dans un document. Nous ne pouvons plus saisir une valeur dans la cellule, car sa valeur est d\u00e9termin\u00e9e uniquement par la formule. Une colonne de formule est l\u2019un des trois comportements possibles de colonne, que vous pouvez contr\u00f4ler en utilisant la section COMPORTEMENT DE COLONNE dans le panneau de cr\u00e9ation : Colonne de donn\u00e9es maintient des donn\u00e9es, que vous pouvez mettre \u00e0 jour ou effacer manuellement, ou \u00e9ventuellement calculer en utilisant formules d\u2019initialisation . Colonne de formule refl\u00e8te toujours le r\u00e9sultat du calcul de la formule, et est maintenue \u00e0 jour par Grist. Colonne vide est un \u00e9tat pour une nouvelle colonne. Saisir une valeur dans celle-ci la transformera en une Colonne de Donn\u00e9es, tandis que la saisie d\u2019une formule la transformera en une Colonne de Formule. En utilisant la section COMPORTEMENT DE COLONNE , vous pouvez changer manuellement le comportement de la colonne. Les options les plus courantes sont disponibles sous forme de boutons d\u2019action verts en bas, et d\u2019autres options sont disponibles dans le menu de comportement. Selon le comportement actuel de la colonne, celles-ci sont : L\u2019action D\u00e9finir la formule convertit une colonne vide en colonne de formule. L\u2019action D\u00e9finir la formule d'initialisation ou Convertir en formule d'initialisation d\u00e9finit un d\u00e9clencheur sur une colonne (plus d\u2019informations sur les d\u00e9clencheurs dans la prochaine section Formules d\u2019initialisation ). L\u2019action Transformer en colonne de donn\u00e9es convertit une colonne vide en colonne de donn\u00e9es r\u00e9guli\u00e8re. Convertir la colonne en donn\u00e9es convertit une colonne de formule en colonne de donn\u00e9es r\u00e9guli\u00e8re (vous pouvez en lire davantage sur cette fonctionnalit\u00e9 dans la section Geler une colonne de formule ). L\u2019action Effacer et transformer en formule efface toutes les donn\u00e9es d\u2019une colonne et la convertit en une colonne de formule. (Nous disons \u201ceffacer\u201d pour rappeler que les donn\u00e9es existantes dans la colonne seront perdues. Elles seront remplac\u00e9es par les r\u00e9sultats de calcul de la formule.) L\u2019action Effacer et r\u00e9initialiser efface toutes les donn\u00e9es et r\u00e9initialise compl\u00e8tement la colonne \u00e0 son \u00e9tat initial Colonne Vide . Python # Les formules Grist sont \u00e9crites en Python, le langage le plus populaire pour la science des donn\u00e9es. L\u2019int\u00e9gralit\u00e9 de la biblioth\u00e8que standard de Python est \u00e0 votre disposition. Pour ceux qui ont un pass\u00e9 de tableur, nous avons \u00e9galement ajout\u00e9 une suite de fonctions similaires \u00e0 Excel, avec des noms en majuscules. Voici la liste compl\u00e8te des fonctions . Les documents Grist peuvent utiliser Python 2 ou Python 3, consultez notre guide Python pour plus de d\u00e9tails. Formules qui op\u00e8rent sur plusieurs lignes # Si vous \u00eates un utilisateur de tableur, vous pourriez vouloir avoir des lignes sp\u00e9ciales \u00e0 la fin de votre table qui ont des formules diff\u00e9rentes des autres. Dans Grist, nous vous encourageons \u00e0 envisager d\u2019ajouter un widget \u00e0 votre page \u00e0 la place. Pour des cas d\u2019utilisation courants, les Tableaux de R\u00e9sum\u00e9 peuvent \u00eatre exactement ce dont vous avez besoin. Ou si vous voulez tout configurer vous-m\u00eame, vous pouvez ajouter un widget de tableau suppl\u00e9mentaire comme celui-ci (voir Widgets de Page pour plus de d\u00e9tails) : C\u2019est juste un autre tableau, nous donnant un endroit pour mettre des formules en dehors de la structure de la table des Mat\u00e9riaux. Par exemple, si nous voulions compter combien de produits il y a dans ce tableau, nous pourrions utiliser cette formule : len(Materials.all) Chaque tableau dans votre document est disponible par son nom dans les formules, en tant que UserTable . Cette formule utilise la m\u00e9thode all pour acc\u00e9der aux lignes du tableau, mais ne fait rien d\u2019autre que de les compter. Voici une formule pour calculer le prix moyen, en utilisant la fonction similaire \u00e0 Excel MOYENNE : MOYENNE(Materials.all.Prix) La m\u00e9thode all renvoie un RecordSet , qui prend en charge l\u2019it\u00e9ration sur des colonnes individuelles de cette mani\u00e8re. \u00c9quivalemment, nous pourrions utiliser une compr\u00e9hension de liste Python : MOYENNE(mat\u00e9riau.Prix pour mat\u00e9riau dans Materials.all) Si vous n\u2019\u00eates pas familier avec Python, il vaut la peine de suivre un tutoriel. Il existe des milliers en ligne, y compris ce tutoriel officiel . Python vous sera utile pour toutes sortes de travaux de donn\u00e9es, pas seulement pour Grist. La compr\u00e9hension de liste est utile d\u00e8s que nous faisons quelque chose de nuanc\u00e9. Par exemple, voici une formule pour lister les noms des produits avec une quantit\u00e9 sup\u00e9rieure \u00e0 80 : [m.Produit pour m dans Materials.all si m.Quantit\u00e9 > 80] C\u2019est une compr\u00e9hension de liste, mais maintenant avec une condition. Le r\u00e9sultat est une liste, qui est rendue sous forme de texte dans une cellule. Python peut aider de plusieurs autres mani\u00e8res dans votre recherche de lignes. Par exemple, voici une formule pour trouver le nom du produit avec la plus grande quantit\u00e9 : max(Materials.all, key=lambda m: m.Quantit\u00e9).Produit Les formules sont sensibles \u00e0 la casse, les fonctions similaires \u00e0 Excel \u00e9tant en majuscules ( MAX ), et le Python r\u00e9gulier \u00e9tant g\u00e9n\u00e9ralement en minuscules ( max ). Pour des correspondances exactes, il existe un raccourci pour \u00e9viter l\u2019it\u00e9ration appel\u00e9 lookupRecords , ou lookupOne pour des correspondances uniques. Il suffit de passer les valeurs des colonnes que vous souhaitez faire correspondre. Par exemple, voici une formule pour rechercher le nom du produit d\u2019un mat\u00e9riau avec une quantit\u00e9 de 52 : Materials.lookupOne(Quantit\u00e9=52).Produit Pour des tableaux tr\u00e8s volumineux, il est sage d\u2019utiliser des recherches autant que possible, plut\u00f4t que d\u2019it\u00e9rer \u00e0 travers les lignes. Revenons \u00e0 notre document exemple, vous pouvez maintenant voir comment nous avons calcul\u00e9 les colonnes Total D\u00e9pens\u00e9 , Quantit\u00e9 Moyenne , et Produit le Plus Command\u00e9 : Colonne Formule Total D\u00e9pens\u00e9 SUM(Materials.all.Prix) Quantit\u00e9 Moyenne MOYENNE(Materials.all.Quantit\u00e9) Produit le Plus Command\u00e9 max(Materials.all, key=lambda m: m.Quantit\u00e9).Produit S\u00e9parer les calculs de cette mani\u00e8re du corps de vos donn\u00e9es peut prendre un certain temps pour s\u2019y habituer, mais travailler de cette fa\u00e7on peut aider \u00e0 garder votre document plus organis\u00e9. Et cela apporte d\u2019autres avantages. Par exemple, nous pourrions changer le formatage du widget de r\u00e9sum\u00e9 via le panneau lat\u00e9ral : Varier la formule par ligne # Faire appliquer une formule \u00e0 toutes les lignes est pratique et r\u00e9duit les risques d\u2019erreurs. Si vous devez faire changer le comportement d\u2019une colonne sur diff\u00e9rentes lignes, c\u2019est possible en utilisant une condition dans la formule. Par exemple, voici un remplacement pour la formule Materials.Prix qui ignore le prix et affiche z\u00e9ro pour les produits dont le nom se termine par \u201c(\u00c9chantillon)\u201d : if $Produit.endswith(\"(\u00c9chantillon)\"): return 0 else: return $Quantit\u00e9 * $Prix_Unitaire Visualiseur de code # Une fois que vous avez beaucoup de formules, ou si vous avez \u00e9t\u00e9 invit\u00e9 \u00e0 un document et souhaitez avoir un aper\u00e7u de ses formules, il existe un visualiseur de code disponible avec un r\u00e9sum\u00e9 Python pur du document. Valeurs sp\u00e9ciales disponibles dans les formules # Pour ceux qui connaissent Python, voici les valeurs suppl\u00e9mentaires disponibles pour vous dans Grist : rec est la ligne actuelle. La syntaxe $column est une abr\u00e9viation pour rec.column . La variable rec est de type Record . table est le tableau actuel, et est de type UserTable . Les tableaux dans votre document sont disponibles par leur nom, et sont \u00e9galement de type UserTable . De nombreuses fonctions de tableur suppl\u00e9mentaires sont disponibles, consultez la liste compl\u00e8te des fonctions . Si votre tableau ou colonne a un espace dans son nom, ou d\u2019autres caract\u00e8res qui sont g\u00eanants en Python, ces caract\u00e8res sont remplac\u00e9s par un soulignement. L\u2019auto-compl\u00e9tion peut vous aider si vous n\u2019\u00eates pas s\u00fbr. Vous pouvez \u00e9galement contr\u00f4ler les \u201cids\u201d des colonnes et des tableaux dans le panneau lat\u00e9ral droit. Geler une colonne de formule # Si vous souhaitez enregistrer la sortie de votre formule en tant que valeurs simples, vous pouvez simplement changer le comportement de la colonne de Colonne de Formule \u00e0 Colonne de Donn\u00e9es . Ouvrez d\u2019abord les options de colonne dans le panneau lat\u00e9ral : Cliquez maintenant sur la Colonne de Formule et s\u00e9lectionnez l\u2019option Convertir la colonne en donn\u00e9es . Remarquez qu\u2019il n\u2019y a plus de signe = dans les cellules de la colonne, montrant qu\u2019elle n\u2019est plus une formule. Les cellules ne changeront plus si d\u2019autres cellules dont elles d\u00e9pendaient changent. La formule d\u2019origine est sauvegard\u00e9e mais reste inactive. Elle peut redevenir utile si vous souhaitez convertir la colonne de nouveau en colonne de formule, ou l\u2019utiliser comme une Formule d\u2019Initialisation . Le panneau lat\u00e9ral a de nombreux autres param\u00e8tres pratiques, tels que le formatage des cellules (nombre de chiffres apr\u00e8s la virgule, couleur, etc.). Les options s\u2019appliquent tout autant aux colonnes de formule qu\u2019aux colonnes r\u00e9guli\u00e8res. Recherches # Les fonctions Grist lookupOne et lookupRecords sont utiles pour \u00e9num\u00e9rer des sous-ensembles de vos donn\u00e9es. Par exemple, supposons que nous ajoutions une colonne Cat\u00e9gorie \u00e0 notre tableau Mat\u00e9riaux , et souhaitions lister tous les produits appartenant \u00e0 une cat\u00e9gorie sp\u00e9cifique. Nous pouvons le faire en utilisant TABLE.lookupRecords , o\u00f9 TABLE est le tableau d\u2019int\u00e9r\u00eat, et en lui fournissant les valeurs de colonne \u00e0 faire correspondre. Par exemple, Materials.lookupRecords(Cat\u00e9gorie='Navire') , comme ici : Si vous suivez, consultez Ajouter un champ pour des d\u00e9tails sur la fa\u00e7on d\u2019ajouter un nouveau champ \u00e0 une carte. Si vous vous souciez de l\u2019ordre des r\u00e9sultats, lookupRecords prend un param\u00e8tre optionnel sort_by . Par exemple, nous pourrions utiliser cette formule pour trier par le nom du produit lui-m\u00eame : Materials.lookupRecords(Cat\u00e9gorie='Navire', sort_by='Produit').Produit Si vous souhaitez trier par plusieurs colonnes, rappelez-vous que vous pouvez cr\u00e9er une colonne de formule cach\u00e9e qui combine les donn\u00e9es de la mani\u00e8re dont vous le souhaitez, puis trier par celle-ci. L\u2019ordre des enregistrements renvoy\u00e9s par lookupRecords peut ne pas correspondre \u00e0 l\u2019ordre des lignes que vous voyez dans un tableau. Pour obtenir cet ordre, utilisez sort_by='manualSort' . Il s\u2019agit d\u2019une colonne interne qui est mise \u00e0 jour avec l\u2019ordre de tri \u00e9tabli manuellement des lignes. Si vous vous retrouvez \u00e0 faire beaucoup de recherches, envisagez si les Tableaux de R\u00e9sum\u00e9 et Formules de R\u00e9sum\u00e9 pourraient \u00eatre ce que vous recherchez. R\u00e9cursivit\u00e9 # Les recherches sont pratiques pour les formules r\u00e9cursives. Supposons que nous ayons un tableau comptant combien d\u2019\u00e9v\u00e9nements nous avons par jour, et que nous souhaitions ajouter une somme cumulative de ces comptes d\u2019\u00e9v\u00e9nements. Une fa\u00e7on de le faire est avec une formule comme celle-ci : hier = Events.lookupOne(date=$date - datetime.timedelta(days=1)) $events + (hier.cumulative or 0) Pour plus de clart\u00e9, nous avons divis\u00e9 cette formule en deux lignes. La premi\u00e8re ligne cr\u00e9e une variable pointant vers la ligne du jour pr\u00e9c\u00e9dent. La seconde ligne calcule la valeur que nous voulons dans la cellule. Note Python : la valeur de la derni\u00e8re ligne est automatiquement renvoy\u00e9e (vous pourriez la pr\u00e9fixer par return si vous le souhaitez). Remarquez le hier.cumulative or 0 . Pour la premi\u00e8re ligne du tableau, il n\u2019y aura pas de hier. Dans ce cas, lookupOne renvoie un enregistrement vide sp\u00e9cial, pour lequel hier.cumulative sera None . Si vous souhaitez simplifier cette formule, ou si vous vous retrouvez \u00e0 utiliser la m\u00eame recherche dans plusieurs formules, il serait judicieux de faire de hier une colonne de r\u00e9f\u00e9rence . Ajoutez simplement une colonne de r\u00e9f\u00e9rence, et donnez-lui une formule qui correspond \u00e0 la fa\u00e7on dont nous avons d\u00e9fini hier ici. Pour entrer r\u00e9ellement cette formule dans une cellule, vous utiliseriez Shift + Entr\u00e9e pour diviser les lignes. Formules d\u2019initialisation # Les colonnes de formule sont excellentes pour les valeurs calcul\u00e9es \u2013 celles d\u00e9termin\u00e9es par d\u2019autres donn\u00e9es dans le document. Il peut \u00e9galement \u00eatre utile de stocker des donn\u00e9es ind\u00e9pendantes dans une colonne, mais d\u2019utiliser tout de m\u00eame une formule pour les calculer dans certaines situations. C\u2019est exactement ce que les Formules d\u2019Initialisation offrent. C\u2019est une fonctionnalit\u00e9 tr\u00e8s puissante qui vous permet de cr\u00e9er une colonne Horodatage ou d\u2019Autorit\u00e9 , de recalculer vos donn\u00e9es en fonction d\u2019un ensemble de conditions que vous d\u00e9cidez, de nettoyer les donn\u00e9es lorsqu\u2019une nouvelle valeur est saisie, ou de fournir une valeur par d\u00e9faut sensible pour une colonne. Pour cr\u00e9er une colonne de Formule d\u2019Initialisation, vous devez d\u2019abord ouvrir le panneau de cr\u00e9ation et cliquer sur l\u2019action D\u00e9finir la formule d'initialisation . Si vous souhaitez convertir une formule existante, utilisez l\u2019action Convertir en formule d'initialisation disponible dans la section COMPORTEMENT DE COLONNE . Pour contr\u00f4ler quand la formule est \u00e9valu\u00e9e, utilisez les deux options de case \u00e0 cocher ci-dessous : Appliquer aux nouveaux enregistrements d\u00e9clenche la formule uniquement lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9 (une valeur de cellule par d\u00e9faut). Appliquer lors des changements d'enregistrement d\u00e9clenche la formule lorsqu\u2019un enregistrement est mis \u00e0 jour. L\u2019application aux nouveaux enregistrements est explicite, la formule sera \u00e9valu\u00e9e une seule fois lorsque vous ajoutez un nouvel enregistrement. C\u2019est une solution parfaite pour fournir des valeurs par d\u00e9faut aux cellules vides. La seconde option vous permet de peaufiner les conditions et de sp\u00e9cifier quelles colonnes, lorsqu\u2019elles sont mises \u00e0 jour, d\u00e9clencheront l\u2019\u00e9valuation : Vous avez probablement remarqu\u00e9 la premi\u00e8re option Champ actuel . \u00c0 premi\u00e8re vue, vous vous demandez probablement : \u201cPourquoi voudrais-je d\u00e9clencher la colonne sur son propre changement ?\u201d. Cette option vous permet de r\u00e9agir \u00e0 une valeur qui est en cours de saisie dans la colonne, juste avant qu\u2019elle ne soit enregistr\u00e9e ! Dans l\u2019\u00e9diteur de formules, vous avez acc\u00e8s \u00e0 deux variables qui ne sont pas disponibles pour les formules r\u00e9guli\u00e8res : value qui est la valeur qu\u2019un utilisateur souhaite entrer, user qui repr\u00e9sente un objet utilisateur qui effectue le changement (vous verrez \u00e9galement cela dans la section R\u00e8gles d\u2019acc\u00e8s ). Cela vous permet de rendre votre application encore plus intelligente, de suivre quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour , ou de voir qui a effectu\u00e9 le dernier changement \u00e0 une ligne . Exemples simples : Assurez-vous que la valeur d\u2019une colonne est toujours \u00e9crite en lettres majuscules : Avec la formule d\u2019initialisation de value.upper() , la valeur saisie dans cette colonne sera automatiquement convertie en majuscules. Formatez une valeur que l\u2019utilisateur entre pour assainir les donn\u00e9es avant de les enregistrer : Avec une formule comme value if value.startswith(\"SK\") else \"SK\" + value , la valeur saisie dans cette colonne sera toujours pr\u00e9c\u00e9d\u00e9e de \u201cSK\u201d. \u00c9crasez une valeur par d\u00e9faut d\u2019une table r\u00e9f\u00e9renc\u00e9e : Vous pouvez utiliser une formule comme value or $Client.T\u00e9l\u00e9phone , pour fournir une valeur par d\u00e9faut d\u2019une table r\u00e9f\u00e9renc\u00e9e, mais permettre tout de m\u00eame \u00e0 l\u2019utilisateur d\u2019en saisir une nouvelle. Dans chacun de ces exemples, lorsque l\u2019utilisateur essaie de modifier une cellule, Grist (avant de mettre \u00e0 jour l\u2019enregistrement) \u00e9valuera la formule et stockera son r\u00e9sultat dans la colonne au lieu de la valeur fournie par l\u2019utilisateur. Pour un exemple d\u00e9taill\u00e9 et concret, consultez notre guide sur la fa\u00e7on de cr\u00e9er des horodatages et des utilisateurs. Pour plus d\u2019informations sur les formules et les formules d\u2019initialisation, consultez notre webinaire Formules d\u2019Initialisation vs. Formules .","title":"Intro to formulas"},{"location":"formulas/#formules","text":"Grist dispose d\u2019un puissant moteur de donn\u00e9es pour calculer les cellules de vos tables en utilisant des formules. Il dispose m\u00eame d\u2019un Assistant de Formule AI pour aider \u00e0 r\u00e9diger des formules. Si vous avez d\u00e9j\u00e0 utilis\u00e9 des tableurs ou des expressions de base de donn\u00e9es, vous serez dans un territoire familier - mais il y a quelques subtilit\u00e9s que vous voudrez conna\u00eetre, alors restez avec nous. Commen\u00e7ons par un usage classique des tableurs. Supposons que vous ayez une liste de produits que vous avez command\u00e9s, la quantit\u00e9 que vous avez command\u00e9e, et le prix unitaire de chacun. Vous avez cr\u00e9\u00e9 une colonne pour montrer la quantit\u00e9 multipli\u00e9e par le prix unitaire, mais vous voulez que l\u2019ordinateur s\u2019occupe de cette partie pour vous. Il vous suffit de s\u00e9lectionner une cellule dans la colonne que vous souhaitez remplir, et d\u2019appuyer sur la touche = pour indiquer \u00e0 Grist que vous souhaitez entrer une formule, plut\u00f4t qu\u2019une valeur. Avez-vous remarqu\u00e9 que, lorsque vous avez fait cela, les \u00e9tiquettes des colonnes ont l\u00e9g\u00e8rement chang\u00e9 ? \u201cProduit\u201d est devenu \u201c$Produit\u201d, et \u201cPrix Unitaire\u201d est devenu \u201c$Prix_Unitaire\u201d. C\u2019est Grist qui vous indique comment vous r\u00e9f\u00e9rer \u00e0 ces colonnes dans votre formule. Il vous suffit de taper $Quantit\u00e9 * $Prix_Unitaire . Vous trouverez une fonction d\u2019auto-compl\u00e9tion pr\u00eate \u00e0 vous aider. Ou si vous n\u2019aimez pas taper, cliquez sur la colonne Quantit\u00e9, tapez le symbole de multiplication, puis cliquez sur la colonne Prix Unitaire. Votre formule devrait ressembler \u00e0 ceci : Pour contr\u00f4ler l\u2019ID de la colonne, comme \u201c$Prix_Unitaire\u201d, qui est utilis\u00e9 dans les formules, consultez Renommer les colonnes . Appuyez sur Entr\u00e9e , et votre formule est appliqu\u00e9e \u00e0 toutes les cellules de la colonne. Si vous avez d\u00e9j\u00e0 travaill\u00e9 avec des tableurs, vous serez peut-\u00eatre surpris de constater que vous n\u2019avez pas besoin de sp\u00e9cifier les num\u00e9ros de ligne, comme B1 * C1 . Dans Grist, une seule formule s\u2019applique \u00e0 toute une colonne. Vous n\u2019avez pas \u00e0 vous soucier de la remplir pour toutes les lignes, et vous pouvez vous r\u00e9f\u00e9rer \u00e0 des valeurs dans la m\u00eame ligne sans tracas. Vous pouvez formater les colonnes num\u00e9riques pour qu\u2019elles aient un meilleur aspect en d\u00e9finissant le type de colonne sur Num\u00e9rique , et en s\u00e9lectionnant des options de formatage appropri\u00e9es :","title":"Formules"},{"location":"formulas/#comportement-des-colonnes","text":"Lorsque nous fournissons une formule pour une colonne, nous disons \u00e0 Grist de mettre \u00e0 jour sa valeur \u00e0 chaque changement dans un document. Nous ne pouvons plus saisir une valeur dans la cellule, car sa valeur est d\u00e9termin\u00e9e uniquement par la formule. Une colonne de formule est l\u2019un des trois comportements possibles de colonne, que vous pouvez contr\u00f4ler en utilisant la section COMPORTEMENT DE COLONNE dans le panneau de cr\u00e9ation : Colonne de donn\u00e9es maintient des donn\u00e9es, que vous pouvez mettre \u00e0 jour ou effacer manuellement, ou \u00e9ventuellement calculer en utilisant formules d\u2019initialisation . Colonne de formule refl\u00e8te toujours le r\u00e9sultat du calcul de la formule, et est maintenue \u00e0 jour par Grist. Colonne vide est un \u00e9tat pour une nouvelle colonne. Saisir une valeur dans celle-ci la transformera en une Colonne de Donn\u00e9es, tandis que la saisie d\u2019une formule la transformera en une Colonne de Formule. En utilisant la section COMPORTEMENT DE COLONNE , vous pouvez changer manuellement le comportement de la colonne. Les options les plus courantes sont disponibles sous forme de boutons d\u2019action verts en bas, et d\u2019autres options sont disponibles dans le menu de comportement. Selon le comportement actuel de la colonne, celles-ci sont : L\u2019action D\u00e9finir la formule convertit une colonne vide en colonne de formule. L\u2019action D\u00e9finir la formule d'initialisation ou Convertir en formule d'initialisation d\u00e9finit un d\u00e9clencheur sur une colonne (plus d\u2019informations sur les d\u00e9clencheurs dans la prochaine section Formules d\u2019initialisation ). L\u2019action Transformer en colonne de donn\u00e9es convertit une colonne vide en colonne de donn\u00e9es r\u00e9guli\u00e8re. Convertir la colonne en donn\u00e9es convertit une colonne de formule en colonne de donn\u00e9es r\u00e9guli\u00e8re (vous pouvez en lire davantage sur cette fonctionnalit\u00e9 dans la section Geler une colonne de formule ). L\u2019action Effacer et transformer en formule efface toutes les donn\u00e9es d\u2019une colonne et la convertit en une colonne de formule. (Nous disons \u201ceffacer\u201d pour rappeler que les donn\u00e9es existantes dans la colonne seront perdues. Elles seront remplac\u00e9es par les r\u00e9sultats de calcul de la formule.) L\u2019action Effacer et r\u00e9initialiser efface toutes les donn\u00e9es et r\u00e9initialise compl\u00e8tement la colonne \u00e0 son \u00e9tat initial Colonne Vide .","title":"Comportement des colonnes"},{"location":"formulas/#python","text":"Les formules Grist sont \u00e9crites en Python, le langage le plus populaire pour la science des donn\u00e9es. L\u2019int\u00e9gralit\u00e9 de la biblioth\u00e8que standard de Python est \u00e0 votre disposition. Pour ceux qui ont un pass\u00e9 de tableur, nous avons \u00e9galement ajout\u00e9 une suite de fonctions similaires \u00e0 Excel, avec des noms en majuscules. Voici la liste compl\u00e8te des fonctions . Les documents Grist peuvent utiliser Python 2 ou Python 3, consultez notre guide Python pour plus de d\u00e9tails.","title":"Python"},{"location":"formulas/#formules-qui-operent-sur-plusieurs-lignes","text":"Si vous \u00eates un utilisateur de tableur, vous pourriez vouloir avoir des lignes sp\u00e9ciales \u00e0 la fin de votre table qui ont des formules diff\u00e9rentes des autres. Dans Grist, nous vous encourageons \u00e0 envisager d\u2019ajouter un widget \u00e0 votre page \u00e0 la place. Pour des cas d\u2019utilisation courants, les Tableaux de R\u00e9sum\u00e9 peuvent \u00eatre exactement ce dont vous avez besoin. Ou si vous voulez tout configurer vous-m\u00eame, vous pouvez ajouter un widget de tableau suppl\u00e9mentaire comme celui-ci (voir Widgets de Page pour plus de d\u00e9tails) : C\u2019est juste un autre tableau, nous donnant un endroit pour mettre des formules en dehors de la structure de la table des Mat\u00e9riaux. Par exemple, si nous voulions compter combien de produits il y a dans ce tableau, nous pourrions utiliser cette formule : len(Materials.all) Chaque tableau dans votre document est disponible par son nom dans les formules, en tant que UserTable . Cette formule utilise la m\u00e9thode all pour acc\u00e9der aux lignes du tableau, mais ne fait rien d\u2019autre que de les compter. Voici une formule pour calculer le prix moyen, en utilisant la fonction similaire \u00e0 Excel MOYENNE : MOYENNE(Materials.all.Prix) La m\u00e9thode all renvoie un RecordSet , qui prend en charge l\u2019it\u00e9ration sur des colonnes individuelles de cette mani\u00e8re. \u00c9quivalemment, nous pourrions utiliser une compr\u00e9hension de liste Python : MOYENNE(mat\u00e9riau.Prix pour mat\u00e9riau dans Materials.all) Si vous n\u2019\u00eates pas familier avec Python, il vaut la peine de suivre un tutoriel. Il existe des milliers en ligne, y compris ce tutoriel officiel . Python vous sera utile pour toutes sortes de travaux de donn\u00e9es, pas seulement pour Grist. La compr\u00e9hension de liste est utile d\u00e8s que nous faisons quelque chose de nuanc\u00e9. Par exemple, voici une formule pour lister les noms des produits avec une quantit\u00e9 sup\u00e9rieure \u00e0 80 : [m.Produit pour m dans Materials.all si m.Quantit\u00e9 > 80] C\u2019est une compr\u00e9hension de liste, mais maintenant avec une condition. Le r\u00e9sultat est une liste, qui est rendue sous forme de texte dans une cellule. Python peut aider de plusieurs autres mani\u00e8res dans votre recherche de lignes. Par exemple, voici une formule pour trouver le nom du produit avec la plus grande quantit\u00e9 : max(Materials.all, key=lambda m: m.Quantit\u00e9).Produit Les formules sont sensibles \u00e0 la casse, les fonctions similaires \u00e0 Excel \u00e9tant en majuscules ( MAX ), et le Python r\u00e9gulier \u00e9tant g\u00e9n\u00e9ralement en minuscules ( max ). Pour des correspondances exactes, il existe un raccourci pour \u00e9viter l\u2019it\u00e9ration appel\u00e9 lookupRecords , ou lookupOne pour des correspondances uniques. Il suffit de passer les valeurs des colonnes que vous souhaitez faire correspondre. Par exemple, voici une formule pour rechercher le nom du produit d\u2019un mat\u00e9riau avec une quantit\u00e9 de 52 : Materials.lookupOne(Quantit\u00e9=52).Produit Pour des tableaux tr\u00e8s volumineux, il est sage d\u2019utiliser des recherches autant que possible, plut\u00f4t que d\u2019it\u00e9rer \u00e0 travers les lignes. Revenons \u00e0 notre document exemple, vous pouvez maintenant voir comment nous avons calcul\u00e9 les colonnes Total D\u00e9pens\u00e9 , Quantit\u00e9 Moyenne , et Produit le Plus Command\u00e9 : Colonne Formule Total D\u00e9pens\u00e9 SUM(Materials.all.Prix) Quantit\u00e9 Moyenne MOYENNE(Materials.all.Quantit\u00e9) Produit le Plus Command\u00e9 max(Materials.all, key=lambda m: m.Quantit\u00e9).Produit S\u00e9parer les calculs de cette mani\u00e8re du corps de vos donn\u00e9es peut prendre un certain temps pour s\u2019y habituer, mais travailler de cette fa\u00e7on peut aider \u00e0 garder votre document plus organis\u00e9. Et cela apporte d\u2019autres avantages. Par exemple, nous pourrions changer le formatage du widget de r\u00e9sum\u00e9 via le panneau lat\u00e9ral :","title":"Formules qui op\u00e8rent sur plusieurs lignes"},{"location":"formulas/#varier-la-formule-par-ligne","text":"Faire appliquer une formule \u00e0 toutes les lignes est pratique et r\u00e9duit les risques d\u2019erreurs. Si vous devez faire changer le comportement d\u2019une colonne sur diff\u00e9rentes lignes, c\u2019est possible en utilisant une condition dans la formule. Par exemple, voici un remplacement pour la formule Materials.Prix qui ignore le prix et affiche z\u00e9ro pour les produits dont le nom se termine par \u201c(\u00c9chantillon)\u201d : if $Produit.endswith(\"(\u00c9chantillon)\"): return 0 else: return $Quantit\u00e9 * $Prix_Unitaire","title":"Varier la formule par ligne"},{"location":"formulas/#visualiseur-de-code","text":"Une fois que vous avez beaucoup de formules, ou si vous avez \u00e9t\u00e9 invit\u00e9 \u00e0 un document et souhaitez avoir un aper\u00e7u de ses formules, il existe un visualiseur de code disponible avec un r\u00e9sum\u00e9 Python pur du document.","title":"Visualiseur de code"},{"location":"formulas/#valeurs-speciales-disponibles-dans-les-formules","text":"Pour ceux qui connaissent Python, voici les valeurs suppl\u00e9mentaires disponibles pour vous dans Grist : rec est la ligne actuelle. La syntaxe $column est une abr\u00e9viation pour rec.column . La variable rec est de type Record . table est le tableau actuel, et est de type UserTable . Les tableaux dans votre document sont disponibles par leur nom, et sont \u00e9galement de type UserTable . De nombreuses fonctions de tableur suppl\u00e9mentaires sont disponibles, consultez la liste compl\u00e8te des fonctions . Si votre tableau ou colonne a un espace dans son nom, ou d\u2019autres caract\u00e8res qui sont g\u00eanants en Python, ces caract\u00e8res sont remplac\u00e9s par un soulignement. L\u2019auto-compl\u00e9tion peut vous aider si vous n\u2019\u00eates pas s\u00fbr. Vous pouvez \u00e9galement contr\u00f4ler les \u201cids\u201d des colonnes et des tableaux dans le panneau lat\u00e9ral droit.","title":"Valeurs sp\u00e9ciales disponibles dans les formules"},{"location":"formulas/#geler-une-colonne-de-formule","text":"Si vous souhaitez enregistrer la sortie de votre formule en tant que valeurs simples, vous pouvez simplement changer le comportement de la colonne de Colonne de Formule \u00e0 Colonne de Donn\u00e9es . Ouvrez d\u2019abord les options de colonne dans le panneau lat\u00e9ral : Cliquez maintenant sur la Colonne de Formule et s\u00e9lectionnez l\u2019option Convertir la colonne en donn\u00e9es . Remarquez qu\u2019il n\u2019y a plus de signe = dans les cellules de la colonne, montrant qu\u2019elle n\u2019est plus une formule. Les cellules ne changeront plus si d\u2019autres cellules dont elles d\u00e9pendaient changent. La formule d\u2019origine est sauvegard\u00e9e mais reste inactive. Elle peut redevenir utile si vous souhaitez convertir la colonne de nouveau en colonne de formule, ou l\u2019utiliser comme une Formule d\u2019Initialisation . Le panneau lat\u00e9ral a de nombreux autres param\u00e8tres pratiques, tels que le formatage des cellules (nombre de chiffres apr\u00e8s la virgule, couleur, etc.). Les options s\u2019appliquent tout autant aux colonnes de formule qu\u2019aux colonnes r\u00e9guli\u00e8res.","title":"Geler une colonne de formule"},{"location":"formulas/#recherches","text":"Les fonctions Grist lookupOne et lookupRecords sont utiles pour \u00e9num\u00e9rer des sous-ensembles de vos donn\u00e9es. Par exemple, supposons que nous ajoutions une colonne Cat\u00e9gorie \u00e0 notre tableau Mat\u00e9riaux , et souhaitions lister tous les produits appartenant \u00e0 une cat\u00e9gorie sp\u00e9cifique. Nous pouvons le faire en utilisant TABLE.lookupRecords , o\u00f9 TABLE est le tableau d\u2019int\u00e9r\u00eat, et en lui fournissant les valeurs de colonne \u00e0 faire correspondre. Par exemple, Materials.lookupRecords(Cat\u00e9gorie='Navire') , comme ici : Si vous suivez, consultez Ajouter un champ pour des d\u00e9tails sur la fa\u00e7on d\u2019ajouter un nouveau champ \u00e0 une carte. Si vous vous souciez de l\u2019ordre des r\u00e9sultats, lookupRecords prend un param\u00e8tre optionnel sort_by . Par exemple, nous pourrions utiliser cette formule pour trier par le nom du produit lui-m\u00eame : Materials.lookupRecords(Cat\u00e9gorie='Navire', sort_by='Produit').Produit Si vous souhaitez trier par plusieurs colonnes, rappelez-vous que vous pouvez cr\u00e9er une colonne de formule cach\u00e9e qui combine les donn\u00e9es de la mani\u00e8re dont vous le souhaitez, puis trier par celle-ci. L\u2019ordre des enregistrements renvoy\u00e9s par lookupRecords peut ne pas correspondre \u00e0 l\u2019ordre des lignes que vous voyez dans un tableau. Pour obtenir cet ordre, utilisez sort_by='manualSort' . Il s\u2019agit d\u2019une colonne interne qui est mise \u00e0 jour avec l\u2019ordre de tri \u00e9tabli manuellement des lignes. Si vous vous retrouvez \u00e0 faire beaucoup de recherches, envisagez si les Tableaux de R\u00e9sum\u00e9 et Formules de R\u00e9sum\u00e9 pourraient \u00eatre ce que vous recherchez.","title":"Recherches"},{"location":"formulas/#recursivite","text":"Les recherches sont pratiques pour les formules r\u00e9cursives. Supposons que nous ayons un tableau comptant combien d\u2019\u00e9v\u00e9nements nous avons par jour, et que nous souhaitions ajouter une somme cumulative de ces comptes d\u2019\u00e9v\u00e9nements. Une fa\u00e7on de le faire est avec une formule comme celle-ci : hier = Events.lookupOne(date=$date - datetime.timedelta(days=1)) $events + (hier.cumulative or 0) Pour plus de clart\u00e9, nous avons divis\u00e9 cette formule en deux lignes. La premi\u00e8re ligne cr\u00e9e une variable pointant vers la ligne du jour pr\u00e9c\u00e9dent. La seconde ligne calcule la valeur que nous voulons dans la cellule. Note Python : la valeur de la derni\u00e8re ligne est automatiquement renvoy\u00e9e (vous pourriez la pr\u00e9fixer par return si vous le souhaitez). Remarquez le hier.cumulative or 0 . Pour la premi\u00e8re ligne du tableau, il n\u2019y aura pas de hier. Dans ce cas, lookupOne renvoie un enregistrement vide sp\u00e9cial, pour lequel hier.cumulative sera None . Si vous souhaitez simplifier cette formule, ou si vous vous retrouvez \u00e0 utiliser la m\u00eame recherche dans plusieurs formules, il serait judicieux de faire de hier une colonne de r\u00e9f\u00e9rence . Ajoutez simplement une colonne de r\u00e9f\u00e9rence, et donnez-lui une formule qui correspond \u00e0 la fa\u00e7on dont nous avons d\u00e9fini hier ici. Pour entrer r\u00e9ellement cette formule dans une cellule, vous utiliseriez Shift + Entr\u00e9e pour diviser les lignes.","title":"R\u00e9cursivit\u00e9"},{"location":"formulas/#formules-dinitialisation","text":"Les colonnes de formule sont excellentes pour les valeurs calcul\u00e9es \u2013 celles d\u00e9termin\u00e9es par d\u2019autres donn\u00e9es dans le document. Il peut \u00e9galement \u00eatre utile de stocker des donn\u00e9es ind\u00e9pendantes dans une colonne, mais d\u2019utiliser tout de m\u00eame une formule pour les calculer dans certaines situations. C\u2019est exactement ce que les Formules d\u2019Initialisation offrent. C\u2019est une fonctionnalit\u00e9 tr\u00e8s puissante qui vous permet de cr\u00e9er une colonne Horodatage ou d\u2019Autorit\u00e9 , de recalculer vos donn\u00e9es en fonction d\u2019un ensemble de conditions que vous d\u00e9cidez, de nettoyer les donn\u00e9es lorsqu\u2019une nouvelle valeur est saisie, ou de fournir une valeur par d\u00e9faut sensible pour une colonne. Pour cr\u00e9er une colonne de Formule d\u2019Initialisation, vous devez d\u2019abord ouvrir le panneau de cr\u00e9ation et cliquer sur l\u2019action D\u00e9finir la formule d'initialisation . Si vous souhaitez convertir une formule existante, utilisez l\u2019action Convertir en formule d'initialisation disponible dans la section COMPORTEMENT DE COLONNE . Pour contr\u00f4ler quand la formule est \u00e9valu\u00e9e, utilisez les deux options de case \u00e0 cocher ci-dessous : Appliquer aux nouveaux enregistrements d\u00e9clenche la formule uniquement lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9 (une valeur de cellule par d\u00e9faut). Appliquer lors des changements d'enregistrement d\u00e9clenche la formule lorsqu\u2019un enregistrement est mis \u00e0 jour. L\u2019application aux nouveaux enregistrements est explicite, la formule sera \u00e9valu\u00e9e une seule fois lorsque vous ajoutez un nouvel enregistrement. C\u2019est une solution parfaite pour fournir des valeurs par d\u00e9faut aux cellules vides. La seconde option vous permet de peaufiner les conditions et de sp\u00e9cifier quelles colonnes, lorsqu\u2019elles sont mises \u00e0 jour, d\u00e9clencheront l\u2019\u00e9valuation : Vous avez probablement remarqu\u00e9 la premi\u00e8re option Champ actuel . \u00c0 premi\u00e8re vue, vous vous demandez probablement : \u201cPourquoi voudrais-je d\u00e9clencher la colonne sur son propre changement ?\u201d. Cette option vous permet de r\u00e9agir \u00e0 une valeur qui est en cours de saisie dans la colonne, juste avant qu\u2019elle ne soit enregistr\u00e9e ! Dans l\u2019\u00e9diteur de formules, vous avez acc\u00e8s \u00e0 deux variables qui ne sont pas disponibles pour les formules r\u00e9guli\u00e8res : value qui est la valeur qu\u2019un utilisateur souhaite entrer, user qui repr\u00e9sente un objet utilisateur qui effectue le changement (vous verrez \u00e9galement cela dans la section R\u00e8gles d\u2019acc\u00e8s ). Cela vous permet de rendre votre application encore plus intelligente, de suivre quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour , ou de voir qui a effectu\u00e9 le dernier changement \u00e0 une ligne . Exemples simples : Assurez-vous que la valeur d\u2019une colonne est toujours \u00e9crite en lettres majuscules : Avec la formule d\u2019initialisation de value.upper() , la valeur saisie dans cette colonne sera automatiquement convertie en majuscules. Formatez une valeur que l\u2019utilisateur entre pour assainir les donn\u00e9es avant de les enregistrer : Avec une formule comme value if value.startswith(\"SK\") else \"SK\" + value , la valeur saisie dans cette colonne sera toujours pr\u00e9c\u00e9d\u00e9e de \u201cSK\u201d. \u00c9crasez une valeur par d\u00e9faut d\u2019une table r\u00e9f\u00e9renc\u00e9e : Vous pouvez utiliser une formule comme value or $Client.T\u00e9l\u00e9phone , pour fournir une valeur par d\u00e9faut d\u2019une table r\u00e9f\u00e9renc\u00e9e, mais permettre tout de m\u00eame \u00e0 l\u2019utilisateur d\u2019en saisir une nouvelle. Dans chacun de ces exemples, lorsque l\u2019utilisateur essaie de modifier une cellule, Grist (avant de mettre \u00e0 jour l\u2019enregistrement) \u00e9valuera la formule et stockera son r\u00e9sultat dans la colonne au lieu de la valeur fournie par l\u2019utilisateur. Pour un exemple d\u00e9taill\u00e9 et concret, consultez notre guide sur la fa\u00e7on de cr\u00e9er des horodatages et des utilisateurs. Pour plus d\u2019informations sur les formules et les formules d\u2019initialisation, consultez notre webinaire Formules d\u2019Initialisation vs. Formules .","title":"Formules d’initialisation"},{"location":"functions/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . /* Aligne les en-t\u00eates des fonctions avec la fl\u00e8che \"d\u00e9velopper\" */ .wm-page-content summary h4 { display: inline-block; font-size: 14px; } R\u00e9f\u00e9rence des Fonctions # Les formules Grist prennent en charge la plupart des fonctions Excel, ainsi que le langage de programmation Python. Le tableau ci-dessous r\u00e9pertorie les fonctions sp\u00e9cifiques \u00e0 Grist, ainsi que l\u2019ensemble des fonctions similaires \u00e0 Excel incluses. De plus, l\u2019ensemble de la biblioth\u00e8que standard Python est disponible. Pour en savoir plus sur l\u2019utilisation des formules dans Grist, consultez Introduction aux Formules . Grist utilise Python (version 3.11) pour les formules. Vous pouvez utiliser presque toutes les fonctionnalit\u00e9s de Python (voir documentation Python ). Voici quelques notes utiles : Python est sensible \u00e0 la casse, y compris pour les noms de table et de colonne Grist. Les fonctions similaires \u00e0 Excel sont toujours en majuscules. Par exemple, if est un mot-cl\u00e9 Python, tandis que IF est une fonction similaire \u00e0 Excel. Comparez pour l\u2019\u00e9galit\u00e9 en utilisant == , \u00e0 la place du = unique d\u2019Excel (qui en Python signifie l\u2019assignation). \u201cDiff\u00e9rent\u201d utilise != \u00e0 la place de <> d\u2019Excel. Vous pouvez \u00e9crire du Python multi-lignes dans les formules (utilisez Shift + Enter pour ajouter des lignes), y compris des d\u00e9clarations, des variables, des imports, etc. Le code Grist s\u2019ex\u00e9cute dans un sandbox s\u00e9curis\u00e9, sans acc\u00e8s \u00e0 quoi que ce soit en dehors de votre document. Category Functions Grist Record ou rec , $Field ou rec.Field , $group ou rec.group , RecordSet , find.* , UserTable , all , lookupOne , lookupRecords Cumulatif NEXT , PREVIOUS , RANK Date DATE , DATEADD , DATEDIF , DATEVALUE , DATE_TO_XL , DAY , DAYS , DTIME , EDATE , EOMONTH , HOUR , ISOWEEKNUM , MINUTE , MONTH , MOONPHASE , NOW , SECOND , TODAY , WEEKDAY , WEEKNUM , XL_TO_DATE , YEAR , YEARFRAC Info CELL , ISBLANK , ISEMAIL , ISERR , ISERROR , ISLOGICAL , ISNA , ISNONTEXT , ISNUMBER , ISREF , ISREFLIST , ISTEXT , ISURL , N , NA , PEEK , RECORD , REQUEST , TYPE Logique AND , FALSE , IF , IFERROR , NOT , OR , TRUE Lookup lookupOne , lookupRecords , ADDRESS , CHOOSE , COLUMN , COLUMNS , CONTAINS , GETPIVOTDATA , HLOOKUP , HYPERLINK , INDEX , INDIRECT , LOOKUP , MATCH , OFFSET , ROW , ROWS , SELF_HYPERLINK , VLOOKUP Maths ABS , ACOS , ACOSH , ARABIC , ASIN , ASINH , ATAN , ATAN2 , ATANH , CEILING , COMBIN , COS , COSH , DEGREES , EVEN , EXP , FACT , FACTDOUBLE , FLOOR , GCD , INT , LCM , LN , LOG , LOG10 , MOD , MROUND , MULTINOMIAL , NUM , ODD , PI , POWER , PRODUCT , QUOTIENT , RADIANS , RAND , RANDBETWEEN , ROMAN , ROUND , ROUNDDOWN , ROUNDUP , SERIESSUM , SIGN , SIN , SINH , SQRT , SQRTPI , SUBTOTAL , SUM , SUMIF , SUMIFS , SUMPRODUCT , SUMSQ , TAN , TANH , TRUNC , UUID Horaire SCHEDULE Statistiques AVEDEV , AVERAGE , AVERAGEA , AVERAGEIF , AVERAGEIFS , AVERAGE_WEIGHTED , BINOMDIST , CONFIDENCE , CORREL , COUNT , COUNTA , COVAR , CRITBINOM , DEVSQ , EXPONDIST , FDIST , FISHER , FISHERINV , FORECAST , F_DIST , F_DIST_RT , GEOMEAN , HARMEAN , HYPGEOMDIST , INTERCEPT , KURT , LARGE , LOGINV , LOGNORMDIST , MAX , MAXA , MEDIAN , MIN , MINA , MODE , NEGBINOMDIST , NORMDIST , NORMINV , NORMSDIST , NORMSINV , PEARSON , PERCENTILE , PERCENTRANK , PERCENTRANK_EXC , PERCENTRANK_INC , PERMUT , POISSON , PROB , QUARTILE , RANK_AVG , RANK_EQ , RSQ , SKEW , SLOPE , SMALL , STANDARDIZE , STDEV , STDEVA , STDEVP , STDEVPA , STEYX , TDIST , TINV , TRIMMEAN , TTEST , T_INV , T_INV_2T , VAR , VARA , VARP , VARPA , WEIBULL , ZTEST Texte CHAR , CLEAN , CODE , CONCAT , CONCATENATE , DOLLAR , EXACT , FIND , FIXED , LEFT , LEN , LOWER , MID , PHONE_FORMAT , PROPER , REGEXEXTRACT , REGEXMATCH , REGEXREPLACE , REPLACE , REPT , RIGHT , SEARCH , SUBSTITUTE , T , TASTEME , TEXT , TRIM , UPPER , VALUE Grist # class Record # Un Enregistrement repr\u00e9sente un enregistrement de donn\u00e9es. C\u2019est le principal moyen d\u2019acc\u00e9der aux valeurs dans les formules. Un Enregistrement pour une table particuli\u00e8re a une propri\u00e9t\u00e9 pour chaque colonne de donn\u00e9es et de formule dans la table. Dans une formule, $field est traduit en rec.field , o\u00f9 rec est l\u2019Enregistrement pour lequel la formule est \u00e9valu\u00e9e. Par exemple : def Nom_Complet(rec, table): return rec.Prenom + ' ' + rec.NomDeFamille def Longueur_Nom(rec, table): return len(rec.Nom_Complet) $ Field ou rec .Field # Acc\u00e8de au champ nomm\u00e9 \u201cField\u201d de l\u2019enregistrement actuel. Par exemple, $Prenom ou rec.Prenom . $group # Dans une table de r\u00e9sum\u00e9 , $group est un champ sp\u00e9cial contenant la liste des Enregistrements qui sont r\u00e9sum\u00e9s par la ligne de r\u00e9sum\u00e9 actuelle. Par exemple, la formule len($group) compte le nombre de ces enregistrements \u00e9tant r\u00e9sum\u00e9s dans chaque ligne. Voir Ensemble d\u2019Enregistrements pour les propri\u00e9t\u00e9s utiles offertes par l\u2019objet retourn\u00e9. Exemples : sum($group.Montant) # Somme du champ Montant dans les enregistrements correspondants sum(r.Montant for r in $group) # M\u00eame que sum($group.Montant) sum(r.Montant for r in $group if r > 0) # Somme uniquement des montants positifs sum(r.Actions * r.Prix for r in $group) # Somme des produits actions * prix class RecordSet # Un Ensemble d\u2019Enregistrements repr\u00e9sente une collection d\u2019enregistrements, comme retourn\u00e9 par Table.lookupRecords() ou la propri\u00e9t\u00e9 $group dans les vues de r\u00e9sum\u00e9. Un Ensemble d\u2019Enregistrements permet d\u2019it\u00e9rer \u00e0 travers les enregistrements : sum(r.Montant for r in Etudiants.lookupRecords(Prenom=\"John\", NomDeFamille=\"Doe\")) min(r.DateEcheance for r in T\u00e2ches.lookupRecords(Propri\u00e9taire=\"Bob\")) Les Ensembles d\u2019Enregistrements fournissent \u00e9galement un moyen pratique d\u2019acc\u00e9der \u00e0 la liste des valeurs pour un champ particulier pour tous les enregistrements, comme record_set.Field . Par exemple, les exemples ci-dessus sont \u00e9quivalents \u00e0 : sum(Etudiants.lookupRecords(Prenom=\"John\", NomDeFamille=\"Doe\").Montant) min(T\u00e2ches.lookupRecords(Propri\u00e9taire=\"Bob\").DateEcheance) Vous pouvez obtenir le nombre d\u2019enregistrements dans un Ensemble d\u2019Enregistrements en utilisant len , par exemple len($group) . RecordSet. find.* (value) # Un ensemble de m\u00e9thodes pour trouver des valeurs dans des ensembles d\u2019enregistrements tri\u00e9s, comme retourn\u00e9 par lookupRecords . Par exemple : Transactions.lookupRecords(..., order_by=\"Date\").find.lt($Date) Table.lookupRecords(..., order_by=(\"Foo\", \"Bar\")).find.le(foo, bar) Si l\u2019attribut find est masqu\u00e9 par une colonne utilisateur du m\u00eame nom, vous pouvez utiliser _find \u00e0 la place. Les m\u00e9thodes disponibles sont : lt : (moins que) trouver l\u2019enregistrement le plus proche avec des valeurs de tri < les valeurs donn\u00e9es le : (moins que ou \u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri <= les valeurs donn\u00e9es gt : (plus que) trouver l\u2019enregistrement le plus proche avec des valeurs de tri > les valeurs donn\u00e9es ge : (plus que ou \u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri >= les valeurs donn\u00e9es eq : (\u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri == les valeurs donn\u00e9es Exemple de notre mod\u00e8le de Paie . Chaque personne a un historique de taux de paiement, dans la table Taux. Pour trouver un taux applicable \u00e0 une date donn\u00e9e, voici comment vous pouvez le faire \u00e0 l\u2019ancienne : # Obtenez tous les taux pour la Personne et le R\u00f4le dans cette ligne. taux = Taux.lookupRecords(Personne=$Personne, R\u00f4le=$R\u00f4le) # S\u00e9lectionnez uniquement les taux dont le D\u00e9but_Taux est \u00e0 ou avant la Date de cette ligne. taux_pass\u00e9s = [r for r in taux if r.D\u00e9but_Taux <= $Date] # S\u00e9lectionnez le dernier des taux_pass\u00e9s, c'est-\u00e0-dire le maximum par D\u00e9but_Taux. taux = max(taux_pass\u00e9s, key=lambda r: r.D\u00e9but_Taux) # Retournez le Taux_Horaire du taux pertinent. return taux.Taux_Horaire Avec les nouvelles m\u00e9thodes, c\u2019est beaucoup plus simple : taux = Taux.lookupRecords(Personne=$Personne, R\u00f4le=$R\u00f4le, order_by=\"D\u00e9but_Taux\") taux = taux.find.le($Date) return taux.Taux_Horaire Notez que cela est \u00e9galement beaucoup plus rapide lorsqu\u2019il y a de nombreux taux pour la m\u00eame Personne et R\u00f4le. class UserTable # Chaque table de donn\u00e9es dans le document est repr\u00e9sent\u00e9e dans le code par une instance de la classe UserTable . Ces noms sont toujours en majuscules. Une UserTable fournit un acc\u00e8s \u00e0 tous les enregistrements dans la table, ainsi que des m\u00e9thodes pour rechercher des enregistrements particuliers. Chaque table dans le document est disponible pour toutes les formules. UserTable. all # La liste de tous les enregistrements dans cette table. Par exemple, cela \u00e9value le nombre d\u2019enregistrements dans la table Etudiants . len(Etudiants.all) Cela \u00e9value la somme du champ Population pour chaque enregistrement dans la table Pays . sum(r.Population for r in Pays.all) UserTable. lookupOne (Field_In_Lookup_Table=value, \u2026) # Retourne un Enregistrement correspondant aux arguments field=value donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ de la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ). Par exemple : Personnes.lookupOne(Prenom=\"Lewis\", NomDeFamille=\"Carroll\") Personnes.lookupOne(Email=$Email_Travail) En savoir plus sur lookupOne . Si plusieurs enregistrements sont trouv\u00e9s, le premier match est retourn\u00e9. Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les correspondances, pour d\u00e9terminer lequel d\u2019entre eux est retourn\u00e9 en premier. Par d\u00e9faut, l\u2019enregistrement avec le plus petit ID de ligne est retourn\u00e9. Voir lookupRecords pour les d\u00e9tails de toutes les options disponibles et du comportement de order_by (et de son alternative h\u00e9rit\u00e9e, sort_by ). Par exemple : T\u00e2ches.lookupOne(Projet=$id, order_by=\"Priorit\u00e9\") # T\u00e2che avec la plus petite Priorit\u00e9. Taux.lookupOne(Personne=$id, order_by=\"-Date\") # Taux avec la derni\u00e8re Date. UserTable. lookupRecords (Field_In_Lookup_Table=value, \u2026) # Retourne un Ensemble d\u2019Enregistrements correspondant aux arguments field=value donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ de la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ) (exemples ci-dessous). Par exemple : Personnes.lookupRecords(Email=$Email_Travail) Personnes.lookupRecords(Prenom=\"George\", NomDeFamille=\"Washington\") Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les r\u00e9sultats. Vous pouvez pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Vous pouvez \u00e9galement sp\u00e9cifier plusieurs IDs de colonnes sous forme de tuple (par exemple, order_by=(\"Compte\", \"-Date\") ). Par exemple : Transactions.lookupRecords(Compte=$Compte, order_by=\"Date\") Transactions.lookupRecords(Compte=$Compte, order_by=\"-Date\") Transactions.lookupRecords(Actif=True, order_by=(\"Compte\", \"-Date\")) Pour les enregistrements avec des champs order_by \u00e9gaux, les r\u00e9sultats sont tri\u00e9s selon leur apparence dans les vues (ce qui est d\u00e9termin\u00e9 par la colonne sp\u00e9ciale manualSort ). Vous pouvez d\u00e9finir order_by=None pour correspondre \u00e0 l\u2019ordre des enregistrements dans des vues non tri\u00e9es. Par d\u00e9faut, sans order_by , les enregistrements sont tri\u00e9s par ID de ligne, comme si avec order_by=\"id\" . Pour des raisons de compatibilit\u00e9, sort_by peut \u00eatre utilis\u00e9 \u00e0 la place de order_by , mais ne permet qu\u2019un seul champ, et revient \u00e0 l\u2019ID de ligne (plut\u00f4t qu\u2019\u00e0 manualSort ). Voir Ensemble d\u2019Enregistrements pour les propri\u00e9t\u00e9s utiles offertes par l\u2019objet retourn\u00e9. En particulier, des m\u00e9thodes comme .find.le permettent de rechercher des valeurs les plus proches. Voir CONTIENT pour un exemple utilisant UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ de type liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. En savoir plus sur lookupRecords . Cumulatif # NEXT (rec, *, group_by=(), order_by) # Trouve l\u2019enregistrement suivant dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Voir PR\u00c9C\u00c9DENT pour plus de d\u00e9tails. PREVIOUS (rec, *, group_by=(), order_by) # Trouve l\u2019enregistrement pr\u00e9c\u00e9dent dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Chacun de ces arguments peut \u00eatre un ID de colonne ou un tuple de IDs de colonnes, et order_by permet aux IDs de colonnes d\u2019\u00eatre pr\u00e9fix\u00e9s par \u201c-\u201d pour inverser l\u2019ordre de tri. Par exemple, PR\u00c9C\u00c9DENT(rec, order_by=\"Date\") # L'enregistrement pr\u00e9c\u00e9dent lorsqu'il est tri\u00e9 par date croissante. PR\u00c9C\u00c9DENT(rec, order_by=\"-Date\") # L'enregistrement pr\u00e9c\u00e9dent lorsqu'il est tri\u00e9 par date d\u00e9croissante. Vous pouvez utiliser group_by pour rechercher l\u2019enregistrement pr\u00e9c\u00e9dent dans un groupe filtr\u00e9. Par exemple, cela trouve l\u2019enregistrement pr\u00e9c\u00e9dent avec le m\u00eame Compte que rec , lorsque les enregistrements sont filtr\u00e9s par le Compte de rec et tri\u00e9s par date croissante : PR\u00c9C\u00c9DENT(rec, group_by=\"Compte\", order_by=\"Date\") Lorsque plusieurs enregistrements ont les m\u00eames valeurs order_by (par exemple, la m\u00eame Date dans les exemples ci-dessus), l\u2019ordre est d\u00e9termin\u00e9 par la position relative des lignes dans les vues. Cela se fait en interne en retombant sur la colonne sp\u00e9ciale manualSort et la colonne ID de ligne id . Utilisez order_by=None pour trouver l\u2019enregistrement pr\u00e9c\u00e9dent dans une table non tri\u00e9e (lorsque les lignes peuvent \u00eatre r\u00e9arrang\u00e9es en les faisant glisser manuellement). Par exemple : PR\u00c9C\u00c9DENT(rec, order_by=None) # L'enregistrement pr\u00e9c\u00e9dent dans la liste non tri\u00e9e des enregistrements. Vous pouvez sp\u00e9cifier plusieurs IDs de colonnes sous forme de tuple, pour group_by et order_by . Cela peut \u00eatre utilis\u00e9 pour correspondre aux vues tri\u00e9es par plusieurs colonnes. Par exemple : PR\u00c9C\u00c9DENT(rec, group_by=(\"Compte\", \"Ann\u00e9e\"), order_by=(\"Date\", \"-Montant\")) RANK (rec, *, group_by=(), order_by, order=\u2019asc\u2019) # Retourne le rang (ou la position) de cet enregistrement dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Voir PR\u00c9C\u00c9DENT pour les d\u00e9tails de ces param\u00e8tres. Le param\u00e8tre order peut \u00eatre \"asc\" (qui est la valeur par d\u00e9faut) ou \"desc\" . Lorsque order est \"asc\" ou omis, le premier enregistrement dans le groupe dans l\u2019ordre tri\u00e9 aurait le rang de 1. Lorsque order est \"desc\" , le dernier enregistrement dans l\u2019ordre tri\u00e9 aurait le rang de 1. S\u2019il y a plusieurs groupes, il y aura plusieurs enregistrements avec le m\u00eame rang. En particulier, chaque groupe aura un enregistrement avec le rang 1. Par exemple, RANG(rec, group_by=\"Ann\u00e9e\", order_by=\"Score\", order=\"desc\") retournera le rang de l\u2019enregistrement actuel ( rec ) parmi tous les enregistrements de sa table pour la m\u00eame ann\u00e9e, ordonn\u00e9 par score d\u00e9croissant. Date # DATE (year, month, day) # Retourne l\u2019objet datetime.datetime qui repr\u00e9sente une date particuli\u00e8re. La fonction DATE est la plus utile dans les formules o\u00f9 l\u2019ann\u00e9e, le mois et le jour sont des formules, pas des constantes. Si l\u2019ann\u00e9e est comprise entre 0 et 1899 (inclus), ajoute 1900 pour calculer l\u2019ann\u00e9e. >>> DATE(108, 1, 2) datetime.date(2008, 1, 2) >>> DATE(2008, 1, 2) datetime.date(2008, 1, 2) Si le mois est sup\u00e9rieur \u00e0 12, passe \u00e0 l\u2019ann\u00e9e suivante. >>> DATE(2008, 14, 2) datetime.date(2009, 2, 2) Si le mois est inf\u00e9rieur \u00e0 1, soustrait ce nombre de mois plus 1, du premier mois de l\u2019ann\u00e9e. >>> DATE(2008, -3, 2) datetime.date(2007, 9, 2) Si le jour est sup\u00e9rieur au nombre de jours dans le mois donn\u00e9, passe aux mois suivants. >>> DATE(2008, 1, 35) datetime.date(2008, 2, 4) Si le jour est inf\u00e9rieur \u00e0 1, soustrait ce nombre de jours plus 1, du premier jour du mois donn\u00e9. >>> DATE(2008, 1, -15) datetime.date(2007, 12, 16) DATEADD (start_date, days=0, months=0, years=0, weeks=0) # Retourne la date un certain nombre de jours, mois, ann\u00e9es ou semaines \u00e0 partir de start_date . Vous pouvez sp\u00e9cifier les arguments dans n\u2019importe quel ordre si vous sp\u00e9cifiez les noms des arguments. Utilisez des valeurs n\u00e9gatives pour soustraire. Par exemple, DATEADD(date, 1) est identique \u00e0 DATEADD(date, days=1) , et ajoute un jour \u00e0 date . DATEADD(date, years=1, days=-1) ajoute un an moins un jour. >>> DATEADD(DATE(2011, 1, 15), 1) datetime.date(2011, 1, 16) >>> DATEADD(DATE(2011, 1, 15), months=1, days=-1) datetime.date(2011, 2, 14) >>> DATEADD(DATE(2011, 1, 15), years=-2, months=1, days=3, weeks=2) datetime.date(2009, 3, 4) >>> DATEADD(DATE(1975, 4, 30), years=50, weeks=-5) datetime.date(2025, 3, 26) DATEDIF (start_date, end_date, unit) # Calcule le nombre de jours, mois ou ann\u00e9es entre deux dates. L\u2019unit\u00e9 indique le type d\u2019information que vous souhaitez retourner : \u201cY\u201d : Le nombre d\u2019ann\u00e9es compl\u00e8tes dans la p\u00e9riode. \u201cM\u201d : Le nombre de mois complets dans la p\u00e9riode. \u201cD\u201d : Le nombre de jours dans la p\u00e9riode. \u201cMD\u201d : La diff\u00e9rence entre les jours dans start_date et end_date. Les mois et ann\u00e9es des dates sont ignor\u00e9s. \u201cYM\u201d : La diff\u00e9rence entre les mois dans start_date et end_date. Les jours et ann\u00e9es des dates sont ignor\u00e9s. \u201cYD\u201d : La diff\u00e9rence entre les jours de start_date et end_date. Les ann\u00e9es des dates sont ignor\u00e9es. Deux ann\u00e9es compl\u00e8tes dans la p\u00e9riode (2) >>> DATEDIF(DATE(2001, 1, 1), DATE(2003, 1, 1), \"Y\") 2 440 jours entre le 1er juin 2001 et le 15 ao\u00fbt 2002 (440) >>> DATEDIF(DATE(2001, 6, 1), DATE(2002, 8, 15), \"D\") 440 75 jours entre le 1er juin et le 15 ao\u00fbt, en ignorant les ann\u00e9es des dates (75) >>> DATEDIF(DATE(2001, 6, 1), DATE(2012, 8, 15), \"YD\") 75 La diff\u00e9rence entre 1 et 15, en ignorant les mois et les ann\u00e9es des dates (14) >>> DATEDIF(DATE(2001, 6, 1), DATE(2002, 8, 15), \"MD\") 14 DATEVALUE (date_string, tz=None) # Convertit une date qui est stock\u00e9e sous forme de texte en un objet datetime . >>> DATEVALUE(\"1/1/2008\") datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"30-Jan-2008\") datetime.datetime(2008, 1, 30, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"2008-12-11\") datetime.datetime(2008, 12, 11, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"5-JUL\").replace(year=2000) datetime.datetime(2000, 7, 5, 0, 0, tzinfo=moment.tzinfo('America/New_York')) En cas d\u2019ambigu\u00eft\u00e9, pr\u00e9f\u00e9rez le format M/J/A. >>> DATEVALUE(\"1/2/3\") datetime.datetime(2003, 1, 2, 0, 0, tzinfo=moment.tzinfo('America/New_York')) DATE_TO_XL (date_value) # Convertit un objet date ou datetime Python en le num\u00e9ro de s\u00e9rie utilis\u00e9 par Excel, avec le 30 d\u00e9cembre 1899 comme num\u00e9ro de s\u00e9rie 1. Voir XL_TO_DATE pour plus d\u2019explications. >>> DATE_TO_XL(datetime.date(2008, 1, 1)) 39448.0 >>> DATE_TO_XL(datetime.date(2012, 3, 14)) 40982.0 >>> DATE_TO_XL(datetime.datetime(2012, 3, 14, 1, 30)) 40982.0625 DAY (date) # Retourne le jour d\u2019une date, sous forme d\u2019entier allant de 1 \u00e0 31. Identique \u00e0 date.day . >>> DAY(DATE(2011, 4, 15)) 15 >>> DAY(\"5/31/2012\") 31 >>> DAY(datetime.datetime(1900, 1, 1)) 1 DAYS (end_date, start_date) # Retourne le nombre de jours entre deux dates. Identique \u00e0 (end_date - start_date).days . >>> DAYS(\"3/15/11\",\"2/1/11\") 42 >>> DAYS(DATE(2011, 12, 31), DATE(2011, 1, 1)) 364 >>> DAYS(\"2/1/11\", \"3/15/11\") -42 DTIME (value, tz=None) # Retourne la valeur convertie en un objet datetime Python. La valeur peut \u00eatre une cha\u00eene , une date (interpr\u00e9t\u00e9e comme minuit ce jour-l\u00e0), une heure (interpr\u00e9t\u00e9e comme une heure de la journ\u00e9e aujourd\u2019hui), ou un datetime existant. Le datetime retourn\u00e9 aura son fuseau horaire d\u00e9fini sur l\u2019argument tz , ou le fuseau horaire par d\u00e9faut du document lorsque tz est omis ou None. Si l\u2019entr\u00e9e est elle-m\u00eame un datetime avec le fuseau horaire d\u00e9fini, il est retourn\u00e9 sans changement (sans modifications de son fuseau horaire). >>> DTIME(datetime.date(2017, 1, 1)) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DTIME(datetime.date(2017, 1, 1), 'Europe/Paris') datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('Europe/Paris')) >>> DTIME(datetime.datetime(2017, 1, 1)) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DTIME(datetime.datetime(2017, 1, 1, tzinfo=moment.tzinfo('UTC'))) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('UTC')) >>> DTIME(datetime.datetime(2017, 1, 1, tzinfo=moment.tzinfo('UTC')), 'Europe/Paris') datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('UTC')) >>> DTIME(\"1/1/2008\") datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) EDATE (start_date, months) # Retourne la date qui est le nombre donn\u00e9 de mois avant ou apr\u00e8s start_date . Utilisez EDATE pour calculer les dates d\u2019\u00e9ch\u00e9ance ou de maturit\u00e9 qui tombent le m\u00eame jour du mois que la date d\u2019\u00e9mission. >>> EDATE(DATE(2011, 1, 15), 1) datetime.date(2011, 2, 15) >>> EDATE(DATE(2011, 1, 15), -1) datetime.date(2010, 12, 15) >>> EDATE(DATE(2011, 1, 15), 2) datetime.date(2011, 3, 15) >>> EDATE(DATE(2012, 3, 1), 10) datetime.date(2013, 1, 1) >>> EDATE(DATE(2012, 5, 1), -2) datetime.date(2012, 3, 1) EOMONTH (start_date, months) # Retourne la date du dernier jour du mois qui est le nombre indiqu\u00e9 de mois avant ou apr\u00e8s start_date. Utilisez EOMONTH pour calculer les dates d\u2019\u00e9ch\u00e9ance ou de maturit\u00e9 qui tombent le dernier jour du mois. >>> EOMONTH(DATE(2011, 1, 1), 1) datetime.date(2011, 2, 28) >>> EOMONTH(DATE(2011, 1, 15), -3) datetime.date(2010, 10, 31) >>> EOMONTH(DATE(2012, 3, 1), 10) datetime.date(2013, 1, 31) >>> EOMONTH(DATE(2012, 5, 1), -2) datetime.date(2012, 3, 31) HOUR (time) # Identique \u00e0 time.hour . >>> HOUR(XL_TO_DATE(0.75)) 18 >>> HOUR(\"7/18/2011 7:45\") 7 >>> HOUR(\"4/21/2012\") 0 ISOWEEKNUM (date) # Retourne le num\u00e9ro de la semaine ISO de l\u2019ann\u00e9e pour une date donn\u00e9e. >>> ISOWEEKNUM(\"3/9/2012\") 10 >>> [ISOWEEKNUM(DATE(2000 + y, 1, 1)) for y in [0,1,2,3,4,5,6,7,8]] [52, 1, 1, 1, 1, 53, 52, 1, 1] MINUTE (time) # Retourne les minutes d\u2019un datetime , sous forme d\u2019entier de 0 \u00e0 59. Identique \u00e0 time.minute . >>> MINUTE(XL_TO_DATE(0.75)) 0 >>> MINUTE(\"7/18/2011 7:45\") 45 >>> MINUTE(\"12:59:00 PM\") 59 >>> MINUTE(datetime.time(12, 58, 59)) 58 MONTH (date) # Retourne le mois d\u2019une date repr\u00e9sent\u00e9e, sous forme d\u2019entier de 1 (janvier) \u00e0 12 (d\u00e9cembre). Identique \u00e0 date.month . >>> MONTH(DATE(2011, 4, 15)) 4 >>> MONTH(\"5/31/2012\") 5 >>> MONTH(datetime.datetime(1900, 1, 1)) 1 MOONPHASE (date, output=\u2019emoji\u2019) # Retourne la phase de la lune \u00e0 la date donn\u00e9e. La sortie par d\u00e9faut est un emoji de phase lunaire. Avec output=\"days\" , la sortie est l\u2019\u00e2ge de la lune en jours (nouvelle lune \u00e9tant 0). Avec output=\"fraction\" , la sortie est la fraction du mois lunaire depuis la nouvelle lune. Le calcul n\u2019est pas astronomiquement pr\u00e9cis, mais suffisant pour les loups et les marins. NE PAS utiliser output=\"lunacy\" . >>> MOONPHASE(datetime.date(1900, 1, 1), \"days\") 0.0 >>> MOONPHASE(datetime.date(1900, 1, 1), \"fraction\") 0.0 >>> MOONPHASE(datetime.datetime(1900, 1, 1)) == '\ud83c\udf11' True >>> MOONPHASE(datetime.date(1900, 1, 15)) == '\ud83c\udf15' True >>> MOONPHASE(datetime.date(1900, 1, 30)) == '\ud83c\udf11' True >>> [MOONPHASE(DATEADD(datetime.date(2023, 4, 1), days=4*n)) for n in range(8)] == ['\ud83c\udf14', '\ud83c\udf15', '\ud83c\udf16', '\ud83c\udf17', '\ud83c\udf18', '\ud83c\udf11', '\ud83c\udf12', '\ud83c\udf13'] True >>> [round(MOONPHASE(DATEADD(datetime.date(2023, 4, 1), days=4*n)), 1) for n in range(8)] [10.4, 14.4, 18.4, 22.4, 26.4, 0.9, 4.9, 8.9] NOW (tz=None) # Retourne l\u2019objet datetime pour l\u2019heure actuelle. SECOND (time) # Retourne les secondes d\u2019un datetime , sous forme d\u2019entier de 0 \u00e0 59. Identique \u00e0 time.second . >>> SECOND(XL_TO_DATE(0.75)) 0 >>> SECOND(\"7/18/2011 7:45:13\") 13 >>> SECOND(datetime.time(12, 58, 59)) 59 TODAY (tz=None) # Retourne l\u2019objet date pour la date actuelle. WEEKDAY (date, return_type=1) # Retourne le jour de la semaine correspondant \u00e0 une date. Le jour est donn\u00e9 sous forme d\u2019entier, allant de 1 (dimanche) \u00e0 7 (samedi), par d\u00e9faut. Return_type d\u00e9termine le type de la valeur retourn\u00e9e. 1 (par d\u00e9faut) - Retourne 1 (dimanche) \u00e0 7 (samedi). 2 - Retourne 1 (lundi) \u00e0 7 (dimanche). 3 - Retourne 0 (lundi) \u00e0 6 (dimanche). 11 - Retourne 1 (lundi) \u00e0 7 (dimanche). 12 - Retourne 1 (mardi) \u00e0 7 (lundi). 13 - Retourne 1 (mercredi) \u00e0 7 (mardi). 14 - Retourne 1 (jeudi) \u00e0 7 (mercredi). 15 - Retourne 1 (vendredi) \u00e0 7 (jeudi). 16 - Retourne 1 (samedi) \u00e0 7 (vendredi). 17 - Retourne 1 (dimanche) \u00e0 7 (samedi). >>> WEEKDAY(DATE(2008, 2, 14)) 5 >>> WEEKDAY(DATE(2012, 3, 1)) 5 >>> WEEKDAY(DATE(2012, 3, 1), 1) 5 >>> WEEKDAY(DATE(2012, 3, 1), 2) 4 >>> WEEKDAY(\"3/1/2012\", 3) 3 WEEKNUM (date, return_type=1) # Retourne le num\u00e9ro de la semaine d\u2019une date sp\u00e9cifique. Par exemple, la semaine contenant le 1er janvier est la premi\u00e8re semaine de l\u2019ann\u00e9e, et est num\u00e9rot\u00e9e semaine 1. Return_type d\u00e9termine quelle semaine est consid\u00e9r\u00e9e comme la premi\u00e8re semaine de l\u2019ann\u00e9e. 1 (par d\u00e9faut) - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant dimanche qui contient le 1er janvier. 2 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 1er janvier. 11 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 1er janvier. 12 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant mardi qui contient le 1er janvier. 13 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant mercredi qui contient le 1er janvier. 14 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant jeudi qui contient le 1er janvier. 15 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant vendredi qui contient le 1er janvier. 16 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant samedi qui contient le 1er janvier. 17 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant dimanche qui contient le 1er janvier. 21 - Approche ISO 8601 : La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 4 janvier. \u00c9quivalemment, c\u2019est la semaine qui contient le premier jeudi de l\u2019ann\u00e9e. >>> WEEKNUM(DATE(2012, 3, 9)) 10 >>> WEEKNUM(DATE(2012, 3, 9), 2) 11 >>> WEEKNUM('1/1/1900') 1 >>> WEEKNUM('2/1/1900') 5 XL_TO_DATE (value, tz=None) # Convertit un num\u00e9ro de s\u00e9rie Excel fourni repr\u00e9sentant une date en un objet datetime . La valeur est interpr\u00e9t\u00e9e comme le nombre de jours depuis le 30 d\u00e9cembre 1899. (Cela correspond \u00e0 l\u2019interpr\u00e9tation de Google Sheets. Excel commence avec le 31 d\u00e9cembre 1899 mais consid\u00e8re \u00e0 tort 1900 comme une ann\u00e9e bissextile. Excel pour Mac doit \u00eatre configur\u00e9 pour utiliser le syst\u00e8me de date 1900, c\u2019est-\u00e0-dire d\u00e9cocher l\u2019option \u201cUtiliser le syst\u00e8me de date 1904\u201d.) Le datetime retourn\u00e9 aura son fuseau horaire d\u00e9fini sur l\u2019argument tz , ou le fuseau horaire par d\u00e9faut du document lorsque tz est omis ou None. >>> XL_TO_DATE(41100.1875) datetime.datetime(2012, 7, 10, 4, 30, tzinfo=moment.tzinfo('America/New_York')) >>> XL_TO_DATE(39448) datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> XL_TO_DATE(40982.0625) datetime.datetime(2012, 3, 14, 1, 30, tzinfo=moment.tzinfo('America/New_York')) YEAR (date) # Retourne l\u2019ann\u00e9e correspondant \u00e0 une date sous forme d\u2019entier. Identique \u00e0 date.year . >>> YEAR(DATE(2011, 4, 15)) 2011 >>> YEAR(\"5/31/2030\") 2030 >>> YEAR(datetime.datetime(1900, 1, 1)) 1900 YEARFRAC (start_date, end_date, basis=0) # Calcule la fraction de l\u2019ann\u00e9e repr\u00e9sent\u00e9e par le nombre de jours entiers entre deux dates. Basis est le type de base de comptage des jours \u00e0 utiliser. 0 (par d\u00e9faut) - US (NASD) 30/360 1 - Actuel/actuel 2 - Actuel/360 3 - Actuel/365 4 - Europ\u00e9en 30/360 -1 - Actuel/actuel (variation Google Sheets) Cette fonction est utile pour les calculs financiers. Pour la compatibilit\u00e9 avec Excel, elle par d\u00e9faut utilise le calendrier standard NASD. Pour une utilisation dans des contextes non financiers, l\u2019option -1 est probablement le meilleur choix. Voir https://en.wikipedia.org/wiki/360-day_calendar pour l\u2019explication des m\u00e9thodes US 30/360 et Europ\u00e9enne 30/360. Voir pour l\u2019analyse de l\u2019impl\u00e9mentation particuli\u00e8re d\u2019Excel. Fraction de l\u2019ann\u00e9e entre le 1/1/2012 et le 30/7/12, en omettant l\u2019argument Basis. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30)) '0.58055556' Fraction entre les m\u00eames dates, en utilisant l\u2019argument de base Actuel/Actuel. Parce que 2012 est une ann\u00e9e bissextile, elle a une base de 366 jours. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30), 1) '0.57650273' Fraction entre les m\u00eames dates, en utilisant l\u2019argument de base Actuel/365. Utilise une base de 365 jours. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30), 3) '0.57808219' Info # CELL (info_type, reference) # Retourne les informations demand\u00e9es sur la cellule sp\u00e9cifi\u00e9e. Cela n\u2019est pas impl\u00e9ment\u00e9 dans Grist. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ISBLANK (value) # Retourne si une valeur fait r\u00e9f\u00e9rence \u00e0 une cellule vide. Elle n\u2019est pas impl\u00e9ment\u00e9e dans Grist. Pour v\u00e9rifier une cha\u00eene vide, utilisez value == \"\" . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ISEMAIL (value) # Retourne si une valeur est une adresse email valide. Notez que la v\u00e9rification de la validit\u00e9 des emails n\u2019est pas une science exacte. La norme technique consid\u00e8re de nombreuses adresses email comme valides qui ne sont pas utilis\u00e9es dans la pratique, et ne seraient pas consid\u00e9r\u00e9es comme valides par la plupart des utilisateurs. Au lieu de cela, nous suivons l\u2019impl\u00e9mentation de Google Sheets, avec quelques diff\u00e9rences, not\u00e9es ci-dessous. >>> ISEMAIL(\"Abc.123@example.com\") True >>> ISEMAIL(\"Bob_O-Reilly+tag@example.com\") True >>> ISEMAIL(\"John Doe\") False >>> ISEMAIL(\"john@aol...com\") False ISERR (value) # V\u00e9rifie si une valeur est une erreur. En d\u2019autres termes, elle retourne vrai si l\u2019utilisation de value directement provoquerait une exception. NOTE : Grist impl\u00e9mente cela en enveloppant automatiquement l\u2019argument pour utiliser l\u2019\u00e9valuation paresseuse. Une approche plus Pythonique pour v\u00e9rifier les erreurs est : try: ... value ... except Exception, err: ... faire quelque chose \u00e0 propos de l'erreur ... Par exemple : >>> ISERR(\"Hello\") False ISERROR (value) # V\u00e9rifie si une valeur est une erreur ou une valeur invalide. Elle est similaire \u00e0 ISERR , mais retourne \u00e9galement vrai pour une valeur invalide telle que NaN ou une valeur textuelle dans une colonne Num\u00e9rique. NOTE : Grist impl\u00e9mente cela en enveloppant automatiquement l\u2019argument pour utiliser l\u2019\u00e9valuation paresseuse. >>> ISERROR(\"Hello\") False >>> ISERROR(AltText(\"fail\")) True >>> ISERROR(float('nan')) True ISLOGICAL (value) # V\u00e9rifie si une valeur est True ou False . >>> ISLOGICAL(True) True >>> ISLOGICAL(False) True >>> ISLOGICAL(0) False >>> ISLOGICAL(None) False >>> ISLOGICAL(\"Test\") False ISNA (value) # V\u00e9rifie si une valeur est l\u2019erreur #N/A . >>> ISNA(float('nan')) True >>> ISNA(0.0) False >>> ISNA('text') False >>> ISNA(float('-inf')) False ISNONTEXT (value) # V\u00e9rifie si une valeur n\u2019est pas textuelle. >>> ISNONTEXT(\"asdf\") False >>> ISNONTEXT(\"\") False >>> ISNONTEXT(AltText(\"text\")) False >>> ISNONTEXT(17.0) True >>> ISNONTEXT(None) True >>> ISNONTEXT(datetime.date(2011, 1, 1)) True ISNUMBER (value) # V\u00e9rifie si une valeur est un nombre. >>> ISNUMBER(17) True >>> ISNUMBER(-123.123423) True >>> ISNUMBER(False) True >>> ISNUMBER(float('nan')) True >>> ISNUMBER(float('inf')) True >>> ISNUMBER('17') False >>> ISNUMBER(None) False >>> ISNUMBER(datetime.date(2011, 1, 1)) False ISREF (value) # V\u00e9rifie si une valeur est un enregistrement de table. Par exemple, si une colonne personne est de type R\u00e9f\u00e9rence \u00e0 la table Personnes , alors ISREF($personne) est True . De m\u00eame, ISREF(Personnes.lookupOne(name=$name)) est True . Pour tout autre type de valeur, ISREF() \u00e9valuerait \u00e0 False . >>> ISREF(17) False >>> ISREF(\"Roger\") False ISREFLIST (value) # V\u00e9rifie si une valeur est un Ensemble d'Enregistrements , le type de valeurs dans les colonnes de Liste de R\u00e9f\u00e9rences. Par exemple, si une colonne personnes est de type Liste de R\u00e9f\u00e9rences \u00e0 la table Personnes , alors ISREFLIST($personnes) est True . De m\u00eame, ISREFLIST(Personnes.lookupRecords(name=$name)) est True . Pour tout autre type de valeur, ISREFLIST() \u00e9valuerait \u00e0 False . >>> ISREFLIST(17) False >>> ISREFLIST(\"Roger\") False ISTEXT (value) # V\u00e9rifie si une valeur est textuelle. >>> ISTEXT(\"asdf\") True >>> ISTEXT(\"\") True >>> ISTEXT(AltText(\"text\")) True >>> ISTEXT(17.0) False >>> ISTEXT(None) False >>> ISTEXT(datetime.date(2011, 1, 1)) False ISURL (value) # V\u00e9rifie si une valeur est une URL valide. Elle n\u2019a pas besoin d\u2019\u00eatre enti\u00e8rement qualifi\u00e9e, ni d\u2019inclure \u201chttp://\u201d et \u201cwww\u201d. Elle ne suit pas une norme, mais tente de fonctionner de mani\u00e8re similaire \u00e0 ISURL dans Google Sheets, et de retourner True pour du texte qui est probablement une URL. Les protocoles valides incluent ftp, http, https, gopher, mailto, news, telnet et aim. >>> ISURL(\"http://www.getgrist.com\") True >>> ISURL(\"https://foo.com/test_(wikipedia)#cite-1\") True >>> ISURL(\"mailto://user@example.com\") True >>> ISURL(\"http:///a\") False N (value) # Retourne la valeur convertie en un nombre. Vrai/Faux sont convertis en 1/0. Une date est convertie en num\u00e9ro de s\u00e9rie de style Excel de la date. Tout le reste est converti en 0. >>> N(7) 7 >>> N(7.1) 7.1 >>> N(\"Even\") 0 >>> N(\"7\") 0 >>> N(True) 1 >>> N(datetime.datetime(2011, 4, 17)) 40650.0 NA () # Retourne l\u2019erreur \u201cvaleur non disponible\u201d, #N/A . >>> math.isnan(NA()) True PEEK (func) # \u00c9value l\u2019expression donn\u00e9e sans cr\u00e9er de d\u00e9pendances ou n\u00e9cessiter que les valeurs r\u00e9f\u00e9renc\u00e9es soient \u00e0 jour, en utilisant quelle que soit la valeur qu\u2019il trouve dans une cellule. Ceci est utile pour pr\u00e9venir les erreurs de r\u00e9f\u00e9rence circulaire, en particulier dans les formules de d\u00e9clenchement. Par exemple, si la formule pour A d\u00e9pend de $B et la formule pour B d\u00e9pend de $A , cela provoquerait normalement une erreur de r\u00e9f\u00e9rence circulaire car chaque valeur doit \u00eatre calcul\u00e9e avant l\u2019autre. Mais si A utilise PEEK($B) alors il obtiendra simplement la valeur d\u00e9j\u00e0 stock\u00e9e dans $B sans n\u00e9cessiter que $B soit d\u2019abord calcul\u00e9 \u00e0 la derni\u00e8re valeur. Ainsi, A sera calcul\u00e9 en premier, et B pourra utiliser $A sans probl\u00e8mes. RECORD (record_or_list, dates_as_iso=False, expand_refs=0) # Retourne un dictionnaire Python avec tous les champs de l\u2019enregistrement donn\u00e9. Si une liste d\u2019enregistrements est donn\u00e9e, retourne une liste de dictionnaires Python correspondants. Si dates_as_iso est d\u00e9fini, les valeurs Date et DateTime sont converties en cha\u00eene en utilisant le format ISO 8601. Si expand_refs est d\u00e9fini \u00e0 1 ou plus, les valeurs de R\u00e9f\u00e9rence sont remplac\u00e9es par une repr\u00e9sentation RECORD de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9, en d\u00e9veloppant le nombre donn\u00e9 de niveaux. Les valeurs d\u2019erreur pr\u00e9sentes dans les cellules de l\u2019enregistrement sont remplac\u00e9es par une valeur None, et une cl\u00e9 sp\u00e9ciale de \u201c error \u201d est ajout\u00e9e contenant les messages d\u2019erreur pour ces cellules. Par exemple : {\"Ratio\": None, \"_error_\": {\"Ratio\": \"ZeroDivisionError: integer division or modulo by zero\"}} Notez qu\u2019il faut faire attention \u00e0 \u00e9viter les r\u00e9f\u00e9rences circulaires lors de l\u2019utilisation de RECORD(), car cela cr\u00e9e une d\u00e9pendance sur chaque cellule de l\u2019enregistrement. Dans le cas de RECORD(rec), la cellule contenant cet appel sera omise du dictionnaire r\u00e9sultant. Par exemple : RECORD($Personne) RECORD(rec) RECORD(Personnes.lookupOne(Prenom=\"Alice\")) RECORD(Personnes.lookupRecords(D\u00e9partement=\"RH\")) REQUEST (url, params=None, headers=None, method=\u2019GET\u2019, data=None, json=None) # Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TYPE (value) # Retourne un nombre associ\u00e9 au type de donn\u00e9es pass\u00e9 dans la fonction. Cela n\u2019est pas impl\u00e9ment\u00e9 dans Grist. Utilisez isinstance(value, type) ou type(value) . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. Logique # AND (logical_expression, *logical_expressions) # Renvoie True si tous les arguments sont logiquement vrais, et False si l\u2019un d\u2019eux est faux. Identique \u00e0 all([valeur1, valeur2, ...]) . >>> AND(1) True >>> AND(0) False >>> AND(1, 1) True >>> AND(1,2,3,4) True >>> AND(1,2,3,4,0) False FALSE () # Renvoie la valeur logique False . Vous pouvez \u00e9galement utiliser la valeur False directement. Cette fonction est fournie principalement pour la compatibilit\u00e9 avec d\u2019autres programmes de tableur. >>> FALSE() False IF (logical_expression, value_if_true, value_if_false) # Renvoie une valeur si une expression logique est True et une autre si elle est False . L\u2019expression Python \u00e9quivalente est : valeur_si_vrai si expression_logique sinon valeur_si_faux Comme Grist prend en charge les formules multi-lignes, vous pouvez \u00e9galement utiliser des blocs Python tels que : if expression_logique: return valeur_si_vrai else: return valeur_si_faux NOTE : Grist suit le mod\u00e8le Excel en n\u2019\u00e9valuant qu\u2019une des expressions de valeur, en enveloppant automatiquement les expressions pour utiliser l\u2019\u00e9valuation paresseuse. Cela permet \u00e0 IF(False, 1/0, 1) d\u2019\u00e9valuer \u00e0 1 plut\u00f4t que de lever une exception. >>> IF(12, \"Oui\", \"Non\") 'Oui' >>> IF(None, \"Oui\", \"Non\") 'Non' >>> IF(True, 0.85, 0.0) 0.85 >>> IF(False, 0.85, 0.0) 0.0 IFERROR (value, value_if_error=\u2019\u2018) # Renvoie le premier argument s\u2019il n\u2019est pas une valeur d\u2019erreur, sinon renvoie le deuxi\u00e8me argument s\u2019il est pr\u00e9sent, ou une cha\u00eene vide si le deuxi\u00e8me argument est absent. NOTE : Grist g\u00e8re les valeurs qui l\u00e8vent une exception en les enveloppant pour utiliser l\u2019\u00e9valuation paresseuse. >>> IFERROR(float('nan'), \"**NAN**\") '**NAN**' >>> IFERROR(17.17, \"**NAN**\") 17.17 >>> IFERROR(\"Texte\") 'Texte' >>> IFERROR(AltText(\"bonjour\")) '' NOT (logical_expression) # True . Identique \u00e0 not expression_logique . >>> NOT(123) False >>> NOT(0) True OR (logical_expression, *logical_expressions) # Renvoie True si l\u2019un des arguments est logiquement vrai, et faux si tous les arguments sont faux. Identique \u00e0 any([valeur1, valeur2, ...]) . >>> OR(1) True >>> OR(0) False >>> OR(1, 1) True >>> OR(0, 1) True >>> OR(0, 0) False >>> OR(0,False,0.0,\"\",None) False >>> OR(0,None,3,0) True TRUE () # Renvoie la valeur logique True . Vous pouvez \u00e9galement utiliser la valeur True directement. Cette fonction est fournie principalement pour la compatibilit\u00e9 avec d\u2019autres programmes de tableur. >>> TRUE() True Recherche # UserTable. lookupOne (Field_In_Lookup_Table=value, \u2026) # Renvoie un Enregistrement correspondant aux arguments champ=valeur donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ dans la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ). Par exemple : People.lookupOne(First_Name=\"Lewis\", Last_Name=\"Carroll\") People.lookupOne(Email=$Work_Email) En savoir plus sur lookupOne . Si plusieurs enregistrements sont trouv\u00e9s, le premier match est renvoy\u00e9. Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les correspondances, pour d\u00e9terminer lequel d\u2019entre eux est renvoy\u00e9 en premier. Par d\u00e9faut, l\u2019enregistrement avec le plus petit ID de ligne est renvoy\u00e9. Voir lookupRecords pour des d\u00e9tails sur toutes les options disponibles et le comportement de order_by (et de son alternative h\u00e9rit\u00e9e, sort_by ). Par exemple : Tasks.lookupOne(Project=$id, order_by=\"Priority\") # T\u00e2che avec la plus petite priorit\u00e9. Rates.lookupOne(Person=$id, order_by=\"-Date\") # Taux avec la derni\u00e8re date. UserTable. lookupRecords (Field_In_Lookup_Table=value, \u2026) # Renvoie un Ensemble d\u2019Enregistrements correspondant aux arguments champ=valeur donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ dans la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ) (exemples ci-dessous). Par exemple : People.lookupRecords(Email=$Work_Email) People.lookupRecords(First_Name=\"George\", Last_Name=\"Washington\") Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les r\u00e9sultats. Vous pouvez pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Vous pouvez \u00e9galement sp\u00e9cifier plusieurs ID de colonnes sous forme de tuple (par exemple, order_by=(\"Account\", \"-Date\") ). Par exemple : Transactions.lookupRecords(Account=$Account, order_by=\"Date\") Transactions.lookupRecords(Account=$Account, order_by=\"-Date\") Transactions.lookupRecords(Active=True, order_by=(\"Account\", \"-Date\")) Pour les enregistrements avec des champs order_by \u00e9gaux, les r\u00e9sultats sont tri\u00e9s selon leur apparition dans les vues (ce qui est d\u00e9termin\u00e9 par la colonne sp\u00e9ciale manualSort ). Vous pouvez d\u00e9finir order_by=None pour correspondre \u00e0 l\u2019ordre des enregistrements dans des vues non tri\u00e9es. Par d\u00e9faut, sans order_by , les enregistrements sont tri\u00e9s par ID de ligne, comme si avec order_by=\"id\" . Pour des raisons de compatibilit\u00e9, sort_by peut \u00eatre utilis\u00e9 \u00e0 la place de order_by , mais ne permet qu\u2019un seul champ, et revient \u00e0 l\u2019ID de ligne (plut\u00f4t qu\u2019\u00e0 manualSort ). Voir Ensemble d\u2019Enregistrements pour des propri\u00e9t\u00e9s utiles offertes par l\u2019objet renvoy\u00e9. En particulier, des m\u00e9thodes comme .find.le permettent de rechercher les valeurs les plus proches. Voir CONTIENT pour un exemple utilisant UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ d\u2019un type de liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. En savoir plus sur lookupRecords . ADDRESS (row, column, absolute_relative_mode, use_a1_notation, sheet) # Renvoie une r\u00e9f\u00e9rence de cellule sous forme de cha\u00eene. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CHOOSE (index, choice1, choice2) # Renvoie un \u00e9l\u00e9ment d\u2019une liste de choix en fonction de l\u2019index. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. COLUMN (cell_reference=None) # Renvoie le num\u00e9ro de colonne d\u2019une cellule sp\u00e9cifi\u00e9e, avec A=1 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. COLUMNS (range) # Renvoie le nombre de colonnes dans un tableau ou un intervalle sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CONTAINS (value, match_empty=no_match_empty) # Utilisez ce marqueur avec UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ d\u2019un type de liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. Par exemple : MoviesTable.lookupRecords(genre=CONTAINS(\"Drama\")) renverra des enregistrements dans MoviesTable o\u00f9 la colonne genre est une liste ou un autre conteneur tel que [\"Comedy\", \"Drama\"] , c\u2019est-\u00e0-dire \"Drama\" in $genre . Notez que la colonne recherch\u00e9e (par exemple, genre ) doit avoir des valeurs d\u2019un type de conteneur tel que liste, tuple ou ensemble. En particulier, les valeurs ne doivent pas \u00eatre des cha\u00eenes, par exemple \"Comedy-Drama\" ne correspondra pas m\u00eame si \"Drama\" in \"Comedy-Drama\" est True en Python. Cela ne correspondra \u00e9galement pas aux sous-cha\u00eenes dans les \u00e9l\u00e9ments du conteneur, par exemple [\"Comedy-Drama\"] . Vous pouvez \u00e9ventuellement passer un deuxi\u00e8me argument match_empty pour indiquer une valeur qui devrait \u00eatre compar\u00e9e aux listes vides dans la colonne recherch\u00e9e. Par exemple, \u00e9tant donn\u00e9 cette formule : MoviesTable.lookupRecords(genre=CONTAINS(g, match_empty='')) Si g est '' (c\u2019est-\u00e0-dire \u00e9gal \u00e0 match_empty ), alors la colonne genre dans les enregistrements renvoy\u00e9s sera soit une liste vide (ou un autre conteneur) soit une liste contenant g comme d\u2019habitude. GETPIVOTDATA (value_name, any_pivot_table_cell, original_column_1, pivot_item_1=None, *args) # Extrait une valeur agr\u00e9g\u00e9e d\u2019un tableau crois\u00e9 dynamique qui correspond aux en-t\u00eates de ligne et de colonne sp\u00e9cifi\u00e9s. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. HLOOKUP (search_key, range, index, is_sorted) # Recherche horizontale. Recherche dans la premi\u00e8re ligne d\u2019un intervalle pour une cl\u00e9 et renvoie la valeur d\u2019une cellule sp\u00e9cifi\u00e9e dans la colonne trouv\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. HYPERLINK (url, link_label) # Cr\u00e9e un lien hypertexte \u00e0 l\u2019int\u00e9rieur d\u2019une cellule. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. INDEX (reference, row, column) # Renvoie le contenu d\u2019une cellule, sp\u00e9cifi\u00e9 par un d\u00e9calage de ligne et de colonne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. INDIRECT (cell_reference_as_string) # Renvoie une r\u00e9f\u00e9rence de cellule sp\u00e9cifi\u00e9e par une cha\u00eene. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. LOOKUP (search_key, search_range_or_search_result_array, result_range=None) # Recherche dans une ligne ou une colonne pour une cl\u00e9 et renvoie la valeur de la cellule dans une plage de r\u00e9sultats situ\u00e9e \u00e0 la m\u00eame position que la ligne ou la colonne de recherche. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. MATCH (search_key, range, search_type) # Renvoie la position relative d\u2019un \u00e9l\u00e9ment dans un intervalle qui correspond \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. OFFSET (cell_reference, offset_rows, offset_columns, height, width) # Renvoie une r\u00e9f\u00e9rence de plage d\u00e9cal\u00e9e d\u2019un nombre sp\u00e9cifi\u00e9 de lignes et de colonnes \u00e0 partir d\u2019une r\u00e9f\u00e9rence de cellule de d\u00e9part. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ROW (cell_reference) # Renvoie le num\u00e9ro de ligne d\u2019une cellule sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ROWS (range) # Renvoie le nombre de lignes dans un tableau ou un intervalle sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SELF_HYPERLINK (label=None, page=None, **kwargs) # Cr\u00e9e un lien vers le document actuel. Tous les param\u00e8tres sont optionnels. La cha\u00eene renvoy\u00e9e est au format URL, \u00e9ventuellement pr\u00e9c\u00e9d\u00e9e d\u2019une \u00e9tiquette et d\u2019un espace (le format attendu pour les colonnes de texte Grist avec l\u2019option HyperLink activ\u00e9e). Un num\u00e9ro de page num\u00e9rique peut \u00eatre fourni, ce qui cr\u00e9era un lien vers la page sp\u00e9cifi\u00e9e. Pour trouver le num\u00e9ro de page num\u00e9rique dont vous avez besoin, visitez une page et examinez son URL pour une partie /p/NN . Un nombre quelconque d\u2019arguments sous la forme LinkKey_NOM peut \u00eatre fourni, pour d\u00e9finir les valeurs user.LinkKey.NOM qui seront disponibles dans les r\u00e8gles d\u2019acc\u00e8s. Par exemple, si une r\u00e8gle permet aux utilisateurs de voir des lignes lorsque user.LinkKey.Code == rec.Code , nous pourrions vouloir cr\u00e9er des liens avec SELF_HYPERLINK(LinkKey_Code=$Code) . >>> SELF_HYPERLINK() u'https://docs.getgrist.com/sbaltsirg/Example' >>> SELF_HYPERLINK(label='doc') u'doc https://docs.getgrist.com/sbaltsirg/Example' >>> SELF_HYPERLINK(page=2) u'https://docs.getgrist.com/sbaltsirg/Example/p/2' >>> SELF_HYPERLINK(LinkKey_Code='X1234') u'https://docs.getgrist.com/sbaltsirg/Example?Code_=X1234' >>> SELF_HYPERLINK(label='order', page=3, LinkKey_Code='X1234', LinkKey_Name='Bi Ngo') u'order https://docs.getgrist.com/sbaltsirg/Example/p/3?Code_=X1234&Name_=Bi+Ngo' >>> SELF_HYPERLINK(Linky_Link='Link') Traceback (most recent call last): ... TypeError: unexpected keyword argument 'Linky_Link' (not of form LinkKey_NAME) VLOOKUP (table, **field_value_pairs) # Recherche verticale. Recherche dans la table donn\u00e9e pour un enregistrement correspondant aux arguments champ=valeur donn\u00e9s. Si plusieurs enregistrements correspondent, renvoie l\u2019un d\u2019eux. Si aucun ne correspond, renvoie l\u2019enregistrement vide sp\u00e9cial. L\u2019objet renvoy\u00e9 est un enregistrement dont les champs sont disponibles en utilisant la syntaxe .champ . Par exemple, VLOOKUP(Employees, EmployeeID=$EmpID).Salary . Notez que VLOOKUP n\u2019est pas couramment n\u00e9cessaire dans Grist, puisque les Colonnes de R\u00e9f\u00e9rence sont le meilleur moyen de lier des donn\u00e9es entre des tables, et permettent une utilisation simple et efficace telle que $Person.Age . VLOOKUP est exactement \u00e9quivalent \u00e0 table.lookupOne(**champ_valeur_paires) . Voir lookupOne . Par exemple : VLOOKUP(People, First_Name=\"Lewis\", Last_Name=\"Carroll\") VLOOKUP(People, First_Name=\"Lewis\", Last_Name=\"Carroll\").Age Math # ABS (value) # Renvoie la valeur absolue d\u2019un nombre. >>> ABS(2) 2 >>> ABS(-2) 2 >>> ABS(-4) 4 ACOS (value) # Renvoie le cosinus inverse d\u2019une valeur, en radians. >>> round(ACOS(-0.5), 9) 2.094395102 >>> round(ACOS(-0.5)*180/PI(), 10) 120.0 ACOSH (value) # Renvoie le cosinus hyperbolique inverse d\u2019un nombre. >>> ACOSH(1) 0.0 >>> round(ACOSH(10), 7) 2.9932228 ARABIC (roman_numeral) # Calcule la valeur d\u2019un chiffre romain. >>> ARABIC(\"LVII\") 57 >>> ARABIC('mcmxii') 1912 ASIN (value) # Renvoie le sinus inverse d\u2019une valeur, en radians. >>> round(ASIN(-0.5), 9) -0.523598776 >>> round(ASIN(-0.5)*180/PI(), 10) -30.0 >>> round(DEGREES(ASIN(-0.5)), 10) -30.0 ASINH (value) # Renvoie le sinus hyperbolique inverse d\u2019un nombre. >>> round(ASINH(-2.5), 9) -1.647231146 >>> round(ASINH(10), 9) 2.99822295 ATAN (value) # Renvoie l\u2019arc tangente d\u2019une valeur, en radians. >>> round(ATAN(1), 9) 0.785398163 >>> ATAN(1)*180/PI() 45.0 >>> DEGREES(ATAN(1)) 45.0 ATAN2 (x, y) # Renvoie l\u2019angle entre l\u2019axe x et un segment de ligne allant de l\u2019origine (0,0) \u00e0 la paire de coordonn\u00e9es sp\u00e9cifi\u00e9e ( x , y ), en radians. >>> round(ATAN2(1, 1), 9) 0.785398163 >>> round(ATAN2(-1, -1), 9) -2.35619449 >>> ATAN2(-1, -1)*180/PI() -135.0 >>> DEGREES(ATAN2(-1, -1)) -135.0 >>> round(ATAN2(1,2), 9) 1.107148718 ATANH (value) # Renvoie le sinus hyperbolique inverse d\u2019un nombre. >>> round(ATANH(0.76159416), 9) 1.00000001 >>> round(ATANH(-0.1), 9) -0.100335348 CEILING (value, factor=1) # Arrondit un nombre \u00e0 la multiple sup\u00e9rieure la plus proche du facteur, ou \u00e0 l\u2019entier le plus proche si le facteur est ommis ou 1. >>> CEILING(2.5, 1) 3 >>> CEILING(-2.5, -2) -4 >>> CEILING(-2.5, 2) -2 >>> CEILING(1.5, 0.1) 1.5 >>> CEILING(0.234, 0.01) 0.24 COMBIN (n, k) # Renvoie le nombre de fa\u00e7ons de choisir un certain nombre d\u2019objets dans un ensemble d\u2019une taille donn\u00e9e d\u2019objets. >>> COMBIN(8,2) 28 >>> COMBIN(4,2) 6 >>> COMBIN(10,7) 120 COS (angle) # Renvoie le cosinus d\u2019un angle donn\u00e9 en radians. >>> round(COS(1.047), 7) 0.5001711 >>> round(COS(60*PI()/180), 10) 0.5 >>> round(COS(RADIANS(60)), 10) 0.5 COSH (value) # Renvoie le cosinus hyperbolique de tout nombre r\u00e9el. >>> round(COSH(4), 6) 27.308233 >>> round(COSH(EXP(1)), 7) 7.6101251 DEGREES (angle) # Convertit une valeur d\u2019angle en radians en degr\u00e9s. >>> round(DEGREES(ACOS(-0.5)), 10) 120.0 >>> DEGREES(PI()) 180.0 EVEN (value) # Arrondit un nombre \u00e0 l\u2019entier pair sup\u00e9rieur le plus proche, en arrondissant loin de z\u00e9ro. >>> EVEN(1.5) 2 >>> EVEN(3) 4 >>> EVEN(2) 2 >>> EVEN(-1) -2 EXP (exponent) # Renvoie le nombre d\u2019Euler, e (~2.718) \u00e9lev\u00e9 \u00e0 une puissance. >>> round(EXP(1), 8) 2.71828183 >>> round(EXP(2), 7) 7.3890561 FACT (value) # Renvoie la factorielle d\u2019un nombre. >>> FACT(5) 120 >>> FACT(1.9) 1 >>> FACT(0) 1 >>> FACT(1) 1 >>> FACT(-1) Traceback (most recent call last): ... ValueError: factorial() not defined for negative values FACTDOUBLE (value) # Renvoie la \u201cdouble factorielle\u201d d\u2019un nombre. >>> FACTDOUBLE(6) 48 >>> FACTDOUBLE(7) 105 >>> FACTDOUBLE(3) 3 >>> FACTDOUBLE(4) 8 FLOOR (value, factor=1) # Arrondit un nombre \u00e0 l\u2019entier multiple inf\u00e9rieur le plus proche de la signification sp\u00e9cifi\u00e9e. >>> FLOOR(3.7,2) 2 >>> FLOOR(-2.5,-2) -2 >>> FLOOR(2.5,-2) Traceback (most recent call last): ... ValueError: facteur argument invalide >>> FLOOR(1.58,0.1) 1.5 >>> FLOOR(0.234,0.01) 0.23 GCD (value1, *more_values) # Renvoie le plus grand commun diviseur de un ou plusieurs entiers. >>> GCD(5, 2) 1 >>> GCD(24, 36) 12 >>> GCD(7, 1) 1 >>> GCD(5, 0) 5 >>> GCD(0, 5) 5 >>> GCD(5) 5 >>> GCD(14, 42, 21) 7 INT (value) # Arrondit un nombre \u00e0 l\u2019entier le plus proche qui est inf\u00e9rieur ou \u00e9gal \u00e0 lui. >>> INT(8.9) 8 >>> INT(-8.9) -9 >>> 19.5-INT(19.5) 0.5 LCM (value1, *more_values) # Renvoie le plus petit multiple commun de un ou plusieurs entiers. >>> LCM(5, 2) 10 >>> LCM(24, 36) 72 >>> LCM(0, 5) 0 >>> LCM(5) 5 >>> LCM(10, 100) 100 >>> LCM(12, 18) 36 >>> LCM(12, 18, 24) 72 LN (value) # Renvoie le logarithme d\u2019un nombre, base e (nombre d\u2019Euler). >>> round(LN(86), 7) 4.4543473 >>> round(LN(2.7182818), 7) 1.0 >>> round(LN(EXP(3)), 10) 3.0 LOG (value, base=10) # Renvoie le logarithme d\u2019un nombre donn\u00e9 une base. >>> LOG(10) 1.0 >>> LOG(8, 2) 3.0 >>> round(LOG(86, 2.7182818), 7) 4.4543473 LOG10 (value) # Renvoie le logarithme d\u2019un nombre, base 10. >>> round(LOG10(86), 9) 1.934498451 >>> LOG10(10) 1.0 >>> LOG10(100000) 5.0 >>> LOG10(10**5) 5.0 MOD (dividend, divisor) # Renvoie le r\u00e9sultat de l\u2019op\u00e9rateur modulo, le reste apr\u00e8s une op\u00e9ration de division. >>> MOD(3, 2) 1 >>> MOD(-3, 2) 1 >>> MOD(3, -2) -1 >>> MOD(-3, -2) -1 MROUND (value, factor) # Arrondit un nombre \u00e0 l\u2019entier multiple le plus proche d\u2019un autre. >>> MROUND(10, 3) 9 >>> MROUND(-10, -3) -9 >>> round(MROUND(1.3, 0.2), 10) 1.4 >>> MROUND(5, -2) Traceback (most recent call last): ... ValueError: facteur argument invalide MULTINOMIAL (value1, *more_values) # Renvoie la factorielle de la somme des valeurs divis\u00e9e par le produit des factorielles des valeurs. >>> MULTINOMIAL(2, 3, 4) 1260 >>> MULTINOMIAL(3) 1 >>> MULTINOMIAL(1,2,3) 60 >>> MULTINOMIAL(0,2,4,6) 13860 NUM (value) # Pour une valeur flottante Python qui est en fait un entier, renvoie un type entier Python. Sinon, renvoie la valeur inchang\u00e9e. Cela est parfois utile lorsqu\u2019une valeur provient d\u2019une colonne num\u00e9rique Grist (repr\u00e9sent\u00e9e comme des flottants), mais lorsque des valeurs int sont en fait attendues. >>> NUM(-17.0) -17 >>> NUM(1.5) 1.5 >>> NUM(4) 4 >>> NUM(\"NA\") 'NA' ODD (value) # Arrondit un nombre \u00e0 l\u2019entier impair sup\u00e9rieur le plus proche. >>> ODD(1.5) 3 >>> ODD(3) 3 >>> ODD(2) 3 >>> ODD(-1) -1 >>> ODD(-2) -3 PI () # Renvoie la valeur de Pi \u00e0 14 d\u00e9cimales. >>> round(PI(), 9) 3.141592654 >>> round(PI()/2, 9) 1.570796327 >>> round(PI()*9, 8) 28.27433388 POWER (base, exponent) # Renvoie un nombre \u00e9lev\u00e9 \u00e0 une puissance. >>> POWER(5,2) 25.0 >>> round(POWER(98.6,3.2), 3) 2401077.222 >>> round(POWER(4,5.0/4), 9) 5.656854249 PRODUCT (factor1, *more_factors) # Renvoie le r\u00e9sultat de la multiplication d\u2019une s\u00e9rie de nombres. Chaque argument peut \u00eatre un nombre ou un tableau. >>> PRODUCT([5,15,30]) 2250 >>> PRODUCT([5,15,30], 2) 4500 >>> PRODUCT(5,15,[30],[2]) 4500 QUOTIENT (dividend, divisor) # Renvoie un nombre divis\u00e9 par un autre, sans le reste. >>> QUOTIENT(5, 2) 2 >>> QUOTIENT(4.5, 3.1) 1 >>> QUOTIENT(-10, 3) -3 RADIANS (angle) # Convertit une valeur d\u2019angle en degr\u00e9s en radians. >>> round(RADIANS(270), 6) 4.712389 RAND () # Renvoie un nombre al\u00e9atoire entre 0 inclus et 1 exclus. RANDBETWEEN (low, high) # Renvoie un entier al\u00e9atoire uniform\u00e9ment entre deux valeurs, inclusif. ROMAN (number, form_unused=None) # Formate un nombre en chiffres romains. Le deuxi\u00e8me argument est ignor\u00e9 dans cette impl\u00e9mentation. >>> ROMAN(499,0) 'CDXCIX' >>> ROMAN(499.2,0) 'CDXCIX' >>> ROMAN(57) 'LVII' >>> ROMAN(1912) 'MCMXII' ROUND (value, places=0) # Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, par d\u00e9faut au nombre entier le plus proche si le nombre de places n\u2019est pas donn\u00e9. Arrondit loin de z\u00e9ro (\u2018vers le haut\u2019 pour les nombres positifs) en cas d\u2019\u00e9galit\u00e9, c\u2019est-\u00e0-dire lorsque le dernier chiffre est 5. >>> ROUND(1.4) 1.0 >>> ROUND(1.5) 2.0 >>> ROUND(2.5) 3.0 >>> ROUND(-2.5) -3.0 >>> ROUND(2.15, 1) 2.2 >>> ROUND(-1.475, 2) -1.48 >>> ROUND(21.5, -1) 20.0 >>> ROUND(626.3,-3) 1000.0 >>> ROUND(1.98,-1) 0.0 >>> ROUND(-50.55,-2) -100.0 >>> ROUND(0) 0.0 ROUNDDOWN (value, places=0) # Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, en arrondissant toujours vers le bas vers z\u00e9ro. >>> ROUNDDOWN(3.2, 0) 3 >>> ROUNDDOWN(76.9,0) 76 >>> ROUNDDOWN(3.14159, 3) 3.141 >>> ROUNDDOWN(-3.14159, 1) -3.1 >>> ROUNDDOWN(31415.92654, -2) 31400 ROUNDUP (value, places=0) # Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, en arrondissant toujours vers le haut loin de z\u00e9ro. >>> ROUNDUP(3.2,0) 4 >>> ROUNDUP(76.9,0) 77 >>> ROUNDUP(3.14159, 3) 3.142 >>> ROUNDUP(-3.14159, 1) -3.2 >>> ROUNDUP(31415.92654, -2) 31500 SERIESSUM (x, n, m, a) # \u00c9tant donn\u00e9 les param\u00e8tres x, n, m et a, renvoie la somme de la s\u00e9rie de puissance a_1 x^n + a_2 x^(n+m) + \u2026 + a_i*x^(n+(i-1)m), o\u00f9 i est le nombre d\u2019entr\u00e9es dans la plage a . >>> SERIESSUM(1,0,1,1) 1 >>> SERIESSUM(2,1,0,[1,2,3]) 12 >>> SERIESSUM(-3,1,1,[2,4,6]) -132 >>> round(SERIESSUM(PI()/4,0,2,[1,-1./FACT(2),1./FACT(4),-1./FACT(6)]), 6) 0.707103 SIGN (value) # \u00c9tant donn\u00e9 un nombre d\u2019entr\u00e9e, renvoie -1 s\u2019il est n\u00e9gatif, 1 s\u2019il est positif, et 0 s\u2019il est z\u00e9ro. >>> SIGN(10) 1 >>> SIGN(4.0-4.0) 0 >>> SIGN(-0.00001) -1 SIN (angle) # Renvoie le sinus d\u2019un angle donn\u00e9 en radians. >>> round(SIN(PI()), 10) 0.0 >>> SIN(PI()/2) 1.0 >>> round(SIN(30*PI()/180), 10) 0.5 >>> round(SIN(RADIANS(30)), 10) 0.5 SINH (value) # Renvoie le sinus hyperbolique de tout nombre r\u00e9el. >>> round(2.868*SINH(0.0342*1.03), 7) 0.1010491 SQRT (value) # Renvoie la racine carr\u00e9e positive d\u2019un nombre positif. >>> SQRT(16) 4.0 >>> SQRT(-16) Traceback (most recent call last): ... ValueError: math domain error >>> SQRT(ABS(-16)) 4.0 SQRTPI (value) # Renvoie la racine carr\u00e9e positive du produit de Pi et du nombre positif donn\u00e9. >>> round(SQRTPI(1), 6) 1.772454 >>> round(SQRTPI(2), 6) 2.506628 SUBTOTAL (function_code, range1, range2) # Renvoie un sous-total pour une plage verticale de cellules en utilisant une fonction d\u2019agr\u00e9gation sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SUM (value1, *more_values) # Renvoie la somme d\u2019une s\u00e9rie de nombres. Chaque argument peut \u00eatre un nombre ou un tableau. Les valeurs non num\u00e9riques sont ignor\u00e9es. >>> SUM([5,15,30]) 50 >>> SUM([5.,15,30], 2) 52.0 >>> SUM(5,15,[30],[2]) 52 SUMIF (records, criterion, sum_range) # Renvoie une somme conditionnelle sur une plage. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SUMIFS (sum_range, criteria_range1, criterion1, *args) # Renvoie la somme d\u2019une plage en fonction de plusieurs crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SUMPRODUCT (array1, *more_arrays) # Multiplie les composants correspondants dans deux tableaux de taille \u00e9gale, et renvoie la somme de ces produits. >>> SUMPRODUCT([3,8,1,4,6,9], [2,6,5,7,7,3]) 156 >>> SUMPRODUCT([], [], []) 0 >>> SUMPRODUCT([-0.25], [-2], [-3]) -1.5 >>> SUMPRODUCT([-0.25, -0.25], [-2, -2], [-3, -3]) -3.0 SUMSQ (value1, value2) # Renvoie la somme des carr\u00e9s d\u2019une s\u00e9rie de nombres et/ou de cellules. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TAN (angle) # Renvoie la tangente d\u2019un angle donn\u00e9 en radians. >>> round(TAN(0.785), 8) 0.99920399 >>> round(TAN(45*PI()/180), 10) 1.0 >>> round(TAN(RADIANS(45)), 10) 1.0 TANH (value) # Renvoie la tangente hyperbolique de tout nombre r\u00e9el. >>> round(TANH(-2), 6) -0.964028 >>> TANH(0) 0.0 >>> round(TANH(0.5), 6) 0.462117 TRUNC (value, places=0) # Tronque un nombre \u00e0 un certain nombre de chiffres significatifs en omettant les chiffres moins significatifs. >>> TRUNC(8.9) 8 >>> TRUNC(-8.9) -8 >>> TRUNC(0.45) 0 UUID () # G\u00e9n\u00e8re un identifiant de cha\u00eene format\u00e9 UUID al\u00e9atoire. Puisque UUID() produit une valeur diff\u00e9rente chaque fois qu\u2019il est appel\u00e9, il est pr\u00e9f\u00e9rable de l\u2019utiliser dans formule de d\u00e9clenchement pour de nouveaux enregistrements. Cela ne calculerait UUID() qu\u2019une seule fois et figerait la valeur calcul\u00e9e. En revanche, une formule ordinaire peut \u00eatre recalcul\u00e9e \u00e0 chaque fois que le document est recharg\u00e9, produisant une valeur diff\u00e9rente pour UUID() \u00e0 chaque fois. Horaire # SCHEDULE (schedule, start=None, count=10, end=None) # Renvoie la liste des objets datetime g\u00e9n\u00e9r\u00e9s selon la cha\u00eene horaire . Commence \u00e0 d\u00e9but , qui par d\u00e9faut est NOW(). G\u00e9n\u00e8re au maximum compte r\u00e9sultats (10 par d\u00e9faut). Si fin est donn\u00e9, s\u2019arr\u00eate l\u00e0. L\u2019horaire a le format \u201cINTERVALLE : SLOTS, \u2026\u201d. Par exemple : annuel : Jan-15, Apr-15, Jul-15 -- Trois fois par an aux dates donn\u00e9es \u00e0 minuit. annuel : 1/15, 4/15, 7/15 -- Identique \u00e0 ce qui pr\u00e9c\u00e8de. mensuel : /1 14h, /15 14h -- Le 1er et le 15 de chaque mois, \u00e0 14h. 3-mois : /10, +1m /20 -- Tous les 3 mois le 10 du mois 1, le 20 du mois 2. hebdomadaire : Lu 9h, Ma 9h, Ve 14h -- Trois fois par semaine \u00e0 des heures sp\u00e9cifi\u00e9es. 2-semaines : Lu, +1s Ma -- Toutes les 2 semaines le lundi de la semaine 1, le mardi de la semaine 2. quotidien : 07:30, 21:00 -- Deux fois par jour \u00e0 des heures sp\u00e9cifi\u00e9es. 2-jours : 00h, 16h, +1j 08h -- Trois fois tous les deux jours, espac\u00e9s uniform\u00e9ment. horaire : :15, :45 -- 15 minutes avant et apr\u00e8s chaque heure. 4-heures : :00, 1:20, 2:40 -- Trois fois toutes les 4 heures, espac\u00e9s uniform\u00e9ment. 10-minutes : +0s -- Toutes les 10 minutes \u00e0 la minute. L\u2019INTERVALLE doit \u00eatre soit de la forme N-unit\u00e9 o\u00f9 N est un nombre et unit\u00e9 est l\u2019un des ann\u00e9e , mois , semaine , jour , heure ; ou l\u2019un des alias : annuel , mensuel , hebdomadaire , quotidien , horaire , qui signifient 1-ann\u00e9e , 1-mois , etc. Les SLOTS prennent en charge les unit\u00e9s suivantes : `Jan-15` ou `1/15` -- Mois et jour du mois ; disponible lorsque l'INTERVALLE est bas\u00e9 sur l'ann\u00e9e. `/15` -- Jour du mois, disponible lorsque l'INTERVALLE est bas\u00e9 sur le mois. `Lun`, `Lu`, `Vendredi` -- Jour de la semaine (ou abr\u00e9viation), lorsque l'INTERVALLE est bas\u00e9 sur la semaine. 10h, 13h30, 15h45 -- Heure de la journ\u00e9e, disponible pour des intervalles bas\u00e9s sur le jour ou plus longs. :45, :00 -- Minutes de l'heure, disponibles lorsque l'INTERVALLE est bas\u00e9 sur l'heure. +1j, +15j -- Combien de jours ajouter au d\u00e9but de l'INTERVALLE. +1s -- Combien de semaines ajouter au d\u00e9but de l'INTERVALLE. +1m -- Combien de mois ajouter au d\u00e9but de l'INTERVALLE. Les SLOTS sont toujours relatifs \u00e0 l\u2019INTERVALLE plut\u00f4t qu\u2019\u00e0 d\u00e9but . Les intervalles bas\u00e9s sur la semaine commencent le dimanche. Par exemple, hebdomadaire : +1j, +4j est identique \u00e0 hebdomadaire : Lun, Jeu , et g\u00e9n\u00e8re des heures les lundis et jeudis, quel que soit d\u00e9but . Le premier temps g\u00e9n\u00e9r\u00e9 est d\u00e9termin\u00e9 par l\u2019 unit\u00e9 de l\u2019INTERVALLE sans tenir compte du multiple. Par exemple, \u00e0 la fois \u201c2-semaine : Lun\u201d et \u201c3-semaine : Lun\u201d commencent le premier lundi apr\u00e8s d\u00e9but , et g\u00e9n\u00e8rent ensuite soit tous les deuxi\u00e8mes soit tous les troisi\u00e8mes lundis apr\u00e8s cela. De m\u00eame, 24-heures : :00 commence avec le premier d\u00e9but d\u2019heure apr\u00e8s d\u00e9but (pas avec minuit), puis se r\u00e9p\u00e8te toutes les 24 heures. Pour commencer avec la minuit apr\u00e8s d\u00e9but , utilisez quotidien : 0:00 . Pour les unit\u00e9s d\u2019intervalle d\u2019un jour ou plus, si l\u2019heure de la journ\u00e9e n\u2019est pas sp\u00e9cifi\u00e9e, elle par d\u00e9faut \u00e0 minuit. Le fuseau horaire de d\u00e9but d\u00e9termine le fuseau horaire des temps g\u00e9n\u00e9r\u00e9s. >>> def show(dates): return [d.strftime(\"%Y-%m-%d %H:%M\") for d in dates] >>> start = datetime(2018, 9, 4, 14, 0); # 14h le mardi 4 septembre 2018. >>> show(SCHEDULE('annual: Jan-15, Apr-15, Jul-15, Oct-15', start=start, count=4)) ['2018-10-15 00:00', '2019-01-15 00:00', '2019-04-15 00:00', '2019-07-15 00:00'] >>> show(SCHEDULE('annual: 1/15, 4/15, 7/15', start=start, count=4)) ['2019-01-15 00:00', '2019-04-15 00:00', '2019-07-15 00:00', '2020-01-15 00:00'] >>> show(SCHEDULE('monthly: /1 14h, /15 17h', start=start, count=4)) ['2018-09-15 17:00', '2018-10-01 14:00', '2018-10-15 17:00', '2018-11-01 14:00'] >>> show(SCHEDULE('3-months: /10, +1m /20', start=start, count=4)) ['2018-09-10 00:00', '2018-10-20 00:00', '2018-12-10 00:00', '2019-01-20 00:00'] >>> show(SCHEDULE('weekly: Lu 9h, Ma 9h, Ve 14h', start=start, count=4)) ['2018-09-07 14:00', '2018-09-10 09:00', '2018-09-11 09:00', '2018-09-14 14:00'] >>> show(SCHEDULE('2-semaines: Lu, +1s Ma', start=start, count=4)) ['2018-09-11 00:00', '2018-09-17 00:00', '2018-09-25 00:00', '2018-10-01 00:00'] >>> show(SCHEDULE('quotidien: 07:30, 21:00', start=start, count=4)) ['2018-09-04 21:00', '2018-09-05 07:30', '2018-09-05 21:00', '2018-09-06 07:30'] >>> show(SCHEDULE('2-jours: 00h, 16h, +1j 08h', start=start, count=4)) ['2018-09-04 16:00', '2018-09-05 08:00', '2018-09-06 00:00', '2018-09-06 16:00'] >>> show(SCHEDULE('horaire: :15, :45', start=start, count=4)) ['2018-09-04 14:15', '2018-09-04 14:45', '2018-09-04 15:15', '2018-09-04 15:45'] >>> show(SCHEDULE('4-heures: :00, +1H :20, +2H :40', start=start, count=4)) ['2018-09-04 14:00', '2018-09-04 15:20', '2018-09-04 16:40', '2018-09-04 18:00'] Statistiques # AVEDEV (value1, value2) # Calcule la moyenne des magnitudes des \u00e9carts des donn\u00e9es par rapport \u00e0 la moyenne d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. AVERAGE (value, *more_values) # Renvoie la valeur moyenne num\u00e9rique dans un ensemble de donn\u00e9es, en ignorant les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les valeurs logiques et vides, et les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. >>> AVERAGE([2, -1.0, 11]) 4.0 >>> AVERAGE([2, -1, 11, \"Bonjour\"]) 4.0 >>> AVERAGE([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11]) 4.0 >>> AVERAGE(False, True) Traceback (most recent call last): ... ZeroDivisionError: float division by zero AVERAGEA (value, *more_values) # Renvoie la valeur moyenne num\u00e9rique dans un ensemble de donn\u00e9es, en comptant les valeurs non num\u00e9riques comme 0. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. >>> AVERAGEA([2, -1.0, 11]) 4.0 >>> AVERAGEA([2, -1, 11, \"Bonjour\"]) 3.0 >>> AVERAGEA([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 1.5 >>> AVERAGEA(False, True) 0.5 AVERAGEIF (criteria_range, criterion, average_range=None) # Renvoie la moyenne d\u2019une plage en fonction de crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. AVERAGEIFS (average_range, criteria_range1, criterion1, *args) # Renvoie la moyenne d\u2019une plage en fonction de plusieurs crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. AVERAGE_WEIGHTED (pairs) # \u00c9tant donn\u00e9 une liste de paires (valeur, poids), trouve la moyenne des valeurs pond\u00e9r\u00e9es par les poids correspondants. Ignore toutes les paires avec une valeur ou un poids non num\u00e9rique. Si vous avez deux listes, de valeurs et de poids, utilisez la fonction int\u00e9gr\u00e9e Python zip() pour cr\u00e9er une liste de paires. >>> AVERAGE_WEIGHTED(((95, .25), (90, .1), (\"X\", .5), (85, .15), (88, .2), (82, .3), (70, None))) 87.7 >>> AVERAGE_WEIGHTED(zip([95, 90, \"X\", 85, 88, 82, 70], [25, 10, 50, 15, 20, 30, None])) 87.7 >>> AVERAGE_WEIGHTED(zip([95, 90, False, 85, 88, 82, 70], [.25, .1, .5, .15, .2, .3, True])) 87.7 BINOMDIST (num_successes, num_trials, prob_success, cumulative) # Calcule la probabilit\u00e9 de tirer un certain nombre de succ\u00e8s (ou un nombre maximum de succ\u00e8s) dans un certain nombre d\u2019essais donn\u00e9 une population d\u2019une certaine taille contenant un certain nombre de succ\u00e8s, avec remplacement des tirages. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CONFIDENCE (alpha, standard_deviation, pop_size) # Calcule la largeur de la moiti\u00e9 de l\u2019intervalle de confiance pour une distribution normale. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CORREL (data_y, data_x) # Calcule r, le coefficient de corr\u00e9lation de produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. COUNT (value, *more_values) # Renvoie le nombre de valeurs num\u00e9riques et de dates/datetime dans un ensemble de donn\u00e9es, ignorant d\u2019autres types de valeurs. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et vides, et les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. >>> COUNT([2, -1.0, 11]) 3 >>> COUNT([2, -1, 11, \"Bonjour\"]) 3 >>> COUNT([DATE(2000, 1, 1), DATE(2000, 1, 2), DATE(2000, 1, 3), \"Bonjour\"]) 3 >>> COUNT([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 4 >>> COUNT(False, True) 0 COUNTA (value, *more_values) # Renvoie le nombre de toutes les valeurs dans un ensemble de donn\u00e9es, y compris les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. >>> COUNTA([2, -1.0, 11]) 3 >>> COUNTA([2, -1, 11, \"Bonjour\"]) 4 >>> COUNTA([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 9 >>> COUNTA(False, True) 2 COVAR (data_y, data_x) # Calcule la covariance d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. CRITBINOM (num_trials, prob_success, target_prob) # Calcule la plus petite valeur pour laquelle la distribution binomiale cumulative est sup\u00e9rieure ou \u00e9gale \u00e0 un crit\u00e8re sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. DEVSQ (value1, value2) # Calcule la somme des carr\u00e9s des \u00e9carts bas\u00e9s sur un \u00e9chantillon. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. EXPONDIST (x, lambda_, cumulative) # Renvoie la valeur de la fonction de distribution exponentielle avec un lambda sp\u00e9cifi\u00e9 \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. FDIST (x, degrees_freedom1, degrees_freedom2) # Calcule la distribution de probabilit\u00e9 F \u00e0 droite (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. FISHER (value) # Renvoie la transformation de Fisher d\u2019une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. FISHERINV (value) # Renvoie la transformation inverse de Fisher d\u2019une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. FORECAST (x, data_y, data_x) # Calcule la valeur y attendue pour un x sp\u00e9cifi\u00e9 bas\u00e9 sur une r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. F_DIST (x, degrees_freedom1, degrees_freedom2, cumulative) # Calcule la distribution de probabilit\u00e9 F \u00e0 gauche (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. F_DIST_RT (x, degrees_freedom1, degrees_freedom2) # Calcule la distribution de probabilit\u00e9 F \u00e0 droite (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. GEOMEAN (value1, value2) # Calcule la moyenne g\u00e9om\u00e9trique d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. HARMEAN (value1, value2) # Calcule la moyenne harmonique d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. HYPGEOMDIST (num_successes, num_draws, successes_in_pop, pop_size) # Calcule la probabilit\u00e9 de tirer un certain nombre de succ\u00e8s dans un certain nombre d\u2019essais, \u00e9tant donn\u00e9 une population d\u2019une certaine taille contenant un certain nombre de succ\u00e8s, sans remplacement des tirages. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. INTERCEPT (data_y, data_x) # Calcule la valeur y \u00e0 laquelle la ligne r\u00e9sultant de la r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es va intersecter l\u2019axe y (x=0). Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. KURT (value1, value2) # Calcule la kurtose d\u2019un ensemble de donn\u00e9es, qui d\u00e9crit la forme, et en particulier le \u201cpic\u201d de cet ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. LARGE (data, n) # Renvoie le n-i\u00e8me plus grand \u00e9l\u00e9ment d\u2019un ensemble de donn\u00e9es, o\u00f9 n est d\u00e9fini par l\u2019utilisateur. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. LOGINV (x, mean, standard_deviation) # Renvoie la valeur de la distribution cumulative log-normale inverse avec une moyenne et un \u00e9cart type donn\u00e9s \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. LOGNORMDIST (x, mean, standard_deviation) # Renvoie la valeur de la distribution cumulative log-normale avec une moyenne et un \u00e9cart type donn\u00e9s \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. MAX (value, *more_values) # Renvoie la valeur maximale d\u2019un ensemble de donn\u00e9es, en ignorant les valeurs autres que les nombres et les dates/datetime. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Renvoie 0 si les arguments ne contiennent aucun nombre ou date. >>> MAX([2, -1.5, 11.5]) 11.5 >>> MAX([2, -1.5, \"Hello\"], True, [False, \"123\", \"\", 11.5]) 11.5 >>> MAX(True, -123) -123 >>> MAX(\"123\", -123) -123 >>> MAX(\"Hello\", \"123\", True, False) 0 >>> MAX(DATE(2015, 1, 1), DATE(2015, 1, 2)) datetime.date(2015, 1, 2) >>> MAX(DATE(2015, 1, 1), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.datetime(2015, 1, 1, 12, 34, 56) >>> MAX(DATE(2015, 1, 2), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.date(2015, 1, 2) MAXA (value, *more_values) # Renvoie la valeur num\u00e9rique maximale d\u2019un ensemble de donn\u00e9es. Chaque argument peut \u00eatre une valeur d\u2019un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. Renvoie 0 si les arguments ne contiennent aucun nombre. >>> MAXA([2, -1.5, 11.5]) 11.5 >>> MAXA([2, -1.5, \"Hello\", DATE(2015, 1, 1)], True, [False, \"123\", \"\", 11.5]) 11.5 >>> MAXA(True, -123) 1 >>> MAXA(\"123\", -123) 0 >>> MAXA(\"Hello\", \"123\", DATE(2015, 1, 1)) 0 MEDIAN (value, *more_values) # Renvoie la valeur m\u00e9diane d\u2019un ensemble de donn\u00e9es num\u00e9riques, en ignorant les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Produit une erreur si les arguments ne contiennent aucun nombre. La m\u00e9diane est le nombre du milieu lorsque toutes les valeurs sont tri\u00e9es. Ainsi, la moiti\u00e9 des valeurs dans l\u2019ensemble de donn\u00e9es sont inf\u00e9rieures \u00e0 la m\u00e9diane, et l\u2019autre moiti\u00e9 est sup\u00e9rieure. S\u2019il y a un nombre pair de valeurs dans l\u2019ensemble de donn\u00e9es, renvoie la moyenne des deux nombres du milieu. >>> MEDIAN(1, 2, 3, 4, 5) 3 >>> MEDIAN(3, 5, 1, 4, 2) 3 >>> MEDIAN(range(10)) 4.5 >>> MEDIAN(\"Hello\", \"123\", DATE(2015, 1, 1), 12.3) 12.3 >>> MEDIAN(\"Hello\", \"123\", DATE(2015, 1, 1)) Traceback (most recent call last): ... ValueError: MEDIAN requires at least one number MIN (value, *more_values) # Renvoie la valeur minimale d\u2019un ensemble de donn\u00e9es, en ignorant les valeurs autres que les nombres et les dates/datetimes. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Renvoie 0 si les arguments ne contiennent aucun nombre ou date. >>> MIN([2, -1.5, 11.5]) -1.5 >>> MIN([2, -1.5, \"Hello\"], True, [False, \"123\", \"\", 11.5]) -1.5 >>> MIN(True, 123) 123 >>> MIN(\"-123\", 123) 123 >>> MIN(\"Hello\", \"123\", True, False) 0 >>> MIN(DATE(2015, 1, 1), DATE(2015, 1, 2)) datetime.date(2015, 1, 1) >>> MIN(DATE(2015, 1, 1), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.date(2015, 1, 1) >>> MIN(DATE(2015, 1, 2), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.datetime(2015, 1, 1, 12, 34, 56) MINA (value, *more_values) # Renvoie la valeur num\u00e9rique minimale d\u2019un ensemble de donn\u00e9es. Chaque argument peut \u00eatre une valeur d\u2019un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. Renvoie 0 si les arguments ne contiennent aucun nombre. >>> MINA([2, -1.5, 11.5]) -1.5 >>> MINA([2, -1.5, \"Hello\", DATE(2015, 1, 1)], True, [False, \"123\", \"\", 11.5]) -1.5 >>> MINA(True, 123) 1 >>> MINA(\"-123\", 123) 0 >>> MINA(\"Hello\", \"123\", DATE(2015, 1, 1)) 0 MODE (value1, value2) # Renvoie la valeur la plus courante dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NEGBINOMDIST (num_failures, num_successes, prob_success) # Calcule la probabilit\u00e9 de tirer un certain nombre d\u2019\u00e9checs avant un certain nombre de succ\u00e8s, \u00e9tant donn\u00e9 une probabilit\u00e9 de succ\u00e8s dans des essais ind\u00e9pendants. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NORMDIST (x, mean, standard_deviation, cumulative) # Renvoie la valeur de la fonction de distribution normale (ou fonction de distribution cumulative normale) pour une valeur sp\u00e9cifi\u00e9e, une moyenne et un \u00e9cart type. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NORMINV (x, mean, standard_deviation) # Renvoie la valeur de la fonction de distribution normale inverse pour une valeur sp\u00e9cifi\u00e9e, une moyenne et un \u00e9cart type. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NORMSDIST (x) # Renvoie la valeur de la fonction de distribution cumulative normale standard pour une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. NORMSINV (x) # Renvoie la valeur de la fonction de distribution normale standard inverse pour une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PEARSON (data_y, data_x) # Calcule r, le coefficient de corr\u00e9lation produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERCENTILE (data, percentile) # Renvoie la valeur \u00e0 un certain percentile d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERCENTRANK (data, value, significant_digits=None) # Renvoie le rang en pourcentage (percentile) d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERCENTRANK_EXC (data, value, significant_digits=None) # Renvoie le rang en pourcentage (percentile) de 0 \u00e0 1 exclusif d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERCENTRANK_INC (data, value, significant_digits=None) # Renvoie le rang en pourcentage (percentile) de 0 \u00e0 1 inclusif d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PERMUT (n, k) # Renvoie le nombre de fa\u00e7ons de choisir un certain nombre d\u2019objets \u00e0 partir d\u2019un ensemble d\u2019une taille donn\u00e9e d\u2019objets, en tenant compte de l\u2019ordre. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. POISSON (x, mean, cumulative) # Renvoie la valeur de la fonction de distribution de Poisson (ou fonction de distribution cumulative de Poisson) pour une valeur et une moyenne sp\u00e9cifi\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. PROB (data, probabilities, low_limit, high_limit=None) # \u00c9tant donn\u00e9 un ensemble de valeurs et des probabilit\u00e9s correspondantes, calcule la probabilit\u00e9 qu\u2019une valeur choisie au hasard tombe entre deux limites. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. QUARTILE (data, quartile_number) # Renvoie une valeur la plus proche d\u2019un certain quartile d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. RANK_AVG (value, data, is_ascending=None) # Renvoie le rang d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. S\u2019il y a plus d\u2019une entr\u00e9e de la m\u00eame valeur dans l\u2019ensemble de donn\u00e9es, le rang moyen des entr\u00e9es sera renvoy\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. RANK_EQ (value, data, is_ascending=None) # Renvoie le rang d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. S\u2019il y a plus d\u2019une entr\u00e9e de la m\u00eame valeur dans l\u2019ensemble de donn\u00e9es, le meilleur rang des entr\u00e9es sera renvoy\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. RSQ (data_y, data_x) # Calcule le carr\u00e9 de r, le coefficient de corr\u00e9lation produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SKEW (value1, value2) # Calcule l\u2019asym\u00e9trie d\u2019un ensemble de donn\u00e9es, qui d\u00e9crit la sym\u00e9trie de cet ensemble de donn\u00e9es par rapport \u00e0 la moyenne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SLOPE (data_y, data_x) # Calcule la pente de la ligne r\u00e9sultant de la r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. SMALL (data, n) # Renvoie le n-i\u00e8me plus petit \u00e9l\u00e9ment d\u2019un ensemble de donn\u00e9es, o\u00f9 n est d\u00e9fini par l\u2019utilisateur. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. STANDARDIZE (value, mean, standard_deviation) # Calcule l\u2019\u00e9quivalent normalis\u00e9 d\u2019une variable al\u00e9atoire donn\u00e9e la moyenne et l\u2019\u00e9cart type de la distribution. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. STDEV (value, *more_values) # Calcule l\u2019\u00e9cart type bas\u00e9 sur un \u00e9chantillon, en ignorant les valeurs non num\u00e9riques. >>> STDEV([2, 5, 8, 13, 10]) 4.277849927241488 >>> STDEV([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.277849927241488 >>> STDEV([2, 5, 8, 13, 10], 3, 12, 15) 4.810702354423639 >>> STDEV([2, 5, 8, 13, 10], [3, 12, 15]) 4.810702354423639 >>> STDEV([5]) Traceback (most recent call last): ... ZeroDivisionError: float division by zero STDEVA (value, *more_values) # Calcule l\u2019\u00e9cart type bas\u00e9 sur un \u00e9chantillon, en consid\u00e9rant le texte comme la valeur 0 . >>> STDEVA([2, 5, 8, 13, 10]) 4.277849927241488 >>> STDEVA([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.969550137731641 >>> STDEVA([2, 5, 8, 13, 10], 1, 0, 0) 4.969550137731641 >>> STDEVA([2, 5, 8, 13, 10], [1, 0, 0]) 4.969550137731641 >>> STDEVA([5]) Traceback (most recent call last): ... ZeroDivisionError: float division by zero STDEVP (value, *more_values) # Calcule l\u2019\u00e9cart type bas\u00e9 sur une population enti\u00e8re, en ignorant les valeurs non num\u00e9riques. >>> STDEVP([2, 5, 8, 13, 10]) 3.8262252939417984 >>> STDEVP([2, 5, 8, 13, 10, True, False, \"Test\"]) 3.8262252939417984 >>> STDEVP([2, 5, 8, 13, 10], 3, 12, 15) 4.5 >>> STDEVP([2, 5, 8, 13, 10], [3, 12, 15]) 4.5 >>> STDEVP([5]) 0.0 STDEVPA (value, *more_values) # Calcule l\u2019\u00e9cart type bas\u00e9 sur une population enti\u00e8re, en consid\u00e9rant le texte comme la valeur 0 . >>> STDEVPA([2, 5, 8, 13, 10]) 3.8262252939417984 >>> STDEVPA([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.648588495446763 >>> STDEVPA([2, 5, 8, 13, 10], 1, 0, 0) 4.648588495446763 >>> STDEVPA([2, 5, 8, 13, 10], [1, 0, 0]) 4.648588495446763 >>> STDEVPA([5]) 0.0 STEYX (data_y, data_x) # Calcule l\u2019erreur standard de la valeur y pr\u00e9dite pour chaque x dans la r\u00e9gression d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TDIST (x, degrees_freedom, tails) # Calcule la probabilit\u00e9 pour la distribution t de Student avec une entr\u00e9e donn\u00e9e (x). Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TINV (probability, degrees_freedom) # Calcule l\u2019inverse de la fonction TDIST \u00e0 deux queues. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TRIMMEAN (data, exclude_proportion) # Calcule la moyenne d\u2019un ensemble de donn\u00e9es en excluant une certaine proportion de donn\u00e9es des extr\u00e9mit\u00e9s haute et basse de l\u2019ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TTEST (range1, range2, tails, type) # Renvoie la probabilit\u00e9 associ\u00e9e au test t. D\u00e9termine si deux \u00e9chantillons sont susceptibles de provenir des m\u00eames deux populations sous-jacentes ayant la m\u00eame moyenne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. T_INV (probability, degrees_freedom) # Calcule l\u2019inverse n\u00e9gatif de la fonction TDIST \u00e0 une queue. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. T_INV_2T (probability, degrees_freedom) # Calcule l\u2019inverse de la fonction TDIST \u00e0 deux queues. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. VAR (value1, value2) # Calcule la variance bas\u00e9e sur un \u00e9chantillon. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. VARA (value1, value2) # Calcule une estimation de la variance bas\u00e9e sur un \u00e9chantillon, en consid\u00e9rant le texte comme la valeur 0 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. VARP (value1, value2) # Calcule la variance bas\u00e9e sur une population enti\u00e8re. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. VARPA (value1, value2) # Calcule la variance bas\u00e9e sur une population enti\u00e8re, en consid\u00e9rant le texte comme la valeur 0 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. WEIBULL (x, shape, scale, cumulative) # Renvoie la valeur de la fonction de distribution de Weibull (ou fonction de distribution cumulative de Weibull) pour une forme et une \u00e9chelle sp\u00e9cifi\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. ZTEST (data, value, standard_deviation) # Renvoie la valeur P \u00e0 deux queues d\u2019un test Z avec distribution standard. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. Texte # CHAR (table_number) # Convertit un nombre en un caract\u00e8re selon la table Unicode actuelle. Identique \u00e0 unichr(number) . >>> CHAR(65) u'A' >>> CHAR(33) u'!' CLEAN (text) # Renvoie le texte avec les caract\u00e8res non imprimables supprim\u00e9s. Cela supprime \u00e0 la fois les caract\u00e8res avec des valeurs de 0 \u00e0 31, et d\u2019autres caract\u00e8res Unicode dans la cat\u00e9gorie \u201ccaract\u00e8res de contr\u00f4le\u201d. >>> CLEAN(CHAR(9) + \"Rapport mensuel\" + CHAR(10)) u'Rapport mensuel' CODE (string) # Renvoie la valeur de la carte Unicode num\u00e9rique du premier caract\u00e8re de la cha\u00eene fournie. Identique \u00e0 ord(string[0]) . >>> CODE(\"A\") 65 >>> CODE(\"!\") 33 >>> CODE(\"!A\") 33 CONCAT (string, *more_strings) # Joint ensemble de cha\u00eenes de texte en une seule cha\u00eene. \u00c9galement disponible sous le nom CONCATENATE . Semblable \u00e0 l\u2019expression Python \"\".join(array_of_strings) . >>> CONCAT(\"Population de ruisseau pour \", \"truite\", \" \", \"esp\u00e8ces\", \" est \", 32, \"/mile.\") u'Population de ruisseau pour truite esp\u00e8ces est 32/mile.' >>> CONCAT(\"Dans \", 4, \" jours, c'est \", datetime.date(2016,1,1)) u'Dans 4 jours, c'est 2016-01-01' >>> CONCAT(\"abc\") u'abc' >>> CONCAT(0, \"abc\") u'0abc' >>> assert CONCAT(2, u\" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' CONCATENATE (string, *more_strings) # Joint ensemble de cha\u00eenes de texte en une seule cha\u00eene. \u00c9galement disponible sous le nom CONCAT . Semblable \u00e0 l\u2019expression Python \"\".join(array_of_strings) . >>> CONCATENATE(\"Population de ruisseau pour \", \"truite\", \" \", \"esp\u00e8ces\", \" est \", 32, \"/mile.\") u'Population de ruisseau pour truite esp\u00e8ces est 32/mile.' >>> CONCATENATE(\"Dans \", 4, \" jours, c'est \", datetime.date(2016,1,1)) u'Dans 4 jours, c'est 2016-01-01' >>> CONCATENATE(\"abc\") u'abc' >>> CONCATENATE(0, \"abc\") u'0abc' >>> assert CONCATENATE(2, u\" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' >>> assert CONCATENATE(2, \" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' >>> assert CONCATENATE(2, \" cr\u00e8me \", \"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' DOLLAR (number, decimals=2) # Formate un nombre en un montant en dollars format\u00e9, avec des d\u00e9cimales arrondies \u00e0 la place sp\u00e9cifi\u00e9e (. Si la valeur des d\u00e9cimales est omise, elle est par d\u00e9faut \u00e0 2. >>> DOLLAR(1234.567) '$1,234.57' >>> DOLLAR(1234.567, -2) '$1,200' >>> DOLLAR(-1234.567, -2) '($1,200)' >>> DOLLAR(-0.123, 4) '($0.1230)' >>> DOLLAR(99.888) '$99.89' >>> DOLLAR(0) '$0.00' >>> DOLLAR(10, 0) '$10' EXACT (string1, string2) # Teste si deux cha\u00eenes sont identiques. Identique \u00e0 string2 == string2 . >>> EXACT(\"mot\", \"mot\") True >>> EXACT(\"Mot\", \"mot\") False >>> EXACT(\"m ot\", \"mot\") False FIND (find_text, within_text, start_num=1) # Renvoie la position \u00e0 laquelle une cha\u00eene est d\u2019abord trouv\u00e9e dans le texte. La recherche est sensible \u00e0 la casse. La position renvoy\u00e9e est 1 si within_text commence par find_text. start_num sp\u00e9cifie le caract\u00e8re \u00e0 partir duquel commencer la recherche, par d\u00e9faut \u00e0 1 (le premier caract\u00e8re de within_text). Si find_text n\u2019est pas trouv\u00e9, ou si start_num est invalide, l\u00e8ve une ValueError. >>> FIND(\"M\", \"Miriam McGovern\") 1 >>> FIND(\"m\", \"Miriam McGovern\") 6 >>> FIND(\"M\", \"Miriam McGovern\", 3) 8 >>> FIND(\" #\", \"Hello world # Test\") 12 >>> FIND(\"gle\", \"Google\", 1) 4 >>> FIND(\"GLE\", \"Google\", 1) Traceback (most recent call last): ... ValueError: substring not found >>> FIND(\"page\", \"homepage\") 5 >>> FIND(\"page\", \"homepage\", 6) Traceback (most recent call last): ... ValueError: substring not found FIXED (number, decimals=2, no_commas=False) # Formate un nombre avec un nombre fixe de d\u00e9cimales (2 par d\u00e9faut), et des virgules. Si no_commas est True, alors omet les virgules. >>> FIXED(1234.567, 1) '1,234.6' >>> FIXED(1234.567, -1) '1,230' >>> FIXED(-1234.567, -1, True) '-1230' >>> FIXED(44.332) '44.33' >>> FIXED(3521.478, 2, False) '3,521.48' >>> FIXED(-3521.478, 1, True) '-3521.5' >>> FIXED(3521.478, 0, True) '3521' >>> FIXED(3521.478, -2, True) '3500' LEFT (string, num_chars=1) # Renvoie une sous-cha\u00eene de longueur num_chars \u00e0 partir du d\u00e9but de la cha\u00eene donn\u00e9e. Si num_chars est omise, elle est suppos\u00e9e \u00eatre 1. Identique \u00e0 string[:num_chars] . >>> LEFT(\"Prix de vente\", 4) 'Sale' >>> LEFT('Su\u00e8de') 'S' >>> LEFT('Texte', -1) Traceback (most recent call last): ... ValueError: num_chars invalid LEN (text) # Renvoie le nombre de caract\u00e8res dans une cha\u00eene de texte, ou le nombre d\u2019\u00e9l\u00e9ments dans une liste. Identique \u00e0 len en python. Voir Ensemble d\u2019enregistrements pour un exemple d\u2019utilisation de len sur une liste d\u2019enregistrements. >>> LEN(\"Phoenix, AZ\") 11 >>> LEN(\"\") 0 >>> LEN(\" Un \") 11 LOWER (text) # Convertit une cha\u00eene sp\u00e9cifi\u00e9e en minuscules. Identique \u00e0 text.lower() . >>> LOWER(\"E. E. Cummings\") 'e. e. cummings' >>> LOWER(\"Apt. 2B\") 'apt. 2b' MID (text, start_num, num_chars) # Renvoie un segment d\u2019une cha\u00eene, commen\u00e7ant \u00e0 start_num. Le premier caract\u00e8re dans le texte a start_num 1. >>> MID(\"Flux de fluide\", 1, 5) 'Fluid' >>> MID(\"Flux de fluide\", 7, 20) 'Flow' >>> MID(\"Flux de fluide\", 20, 5) '' >>> MID(\"Flux de fluide\", 0, 5) Traceback (most recent call last): ... ValueError: start_num invalid PHONE_FORMAT (value, country=None, format=None) # Formate un num\u00e9ro de t\u00e9l\u00e9phone. Sans arguments optionnels, le num\u00e9ro doit commencer par \u201c+\u201d et le pr\u00e9fixe d\u2019appel international, et sera format\u00e9 comme un num\u00e9ro international, par exemple +12345678901 devient +1 234-567-8901 . L\u2019argument country permet de sp\u00e9cifier un code de pays \u00e0 2 lettres (par exemple \u201cUS\u201d ou \u201cGB\u201d) pour interpr\u00e9ter les num\u00e9ros de t\u00e9l\u00e9phone qui ne commencent pas par \u201c+\u201d. Par exemple, PHONE_FORMAT('2025555555', 'US') serait consid\u00e9r\u00e9 comme un num\u00e9ro am\u00e9ricain et format\u00e9 comme \u201c(202) 555-5555\u201d. Les num\u00e9ros de t\u00e9l\u00e9phone qui commencent par \u201c+\u201d ignorent country . Par exemple, PHONE_FORMAT('+33555555555', 'US') est un num\u00e9ro fran\u00e7ais car \u2018+33\u2019 est le pr\u00e9fixe international pour la France. L\u2019argument format sp\u00e9cifie le format de sortie, selon ce tableau : \"#\" ou \"NATL\" (par d\u00e9faut) - utilise le format national, sans le pr\u00e9fixe d\u2019appel international, lorsque c\u2019est possible. Par exemple (234) 567-8901 pour \u201cUS\u201d, ou 02 34 56 78 90 pour \u201cFR\u201d. Si country est omis, ou le num\u00e9ro ne correspond pas au pays donn\u00e9, le format international est utilis\u00e9 \u00e0 la place. \"+\" ou \"INTL\" - format international, par exemple +1 234-567-8901 ou +33 2 34 56 78 90 . \"*\" ou \"E164\" - format E164, comme international mais sans s\u00e9parateurs, par exemple +12345678901 . \"tel\" ou \"RFC3966\" - format adapt\u00e9 \u00e0 utiliser comme un hyperlien , par exemple \u2018tel:+1-234-567-8901\u2019. Lorsque vous sp\u00e9cifiez l\u2019argument format , vous pouvez omettre l\u2019argument country . C\u2019est-\u00e0-dire PHONE_FORMAT(value, \"tel\") est \u00e9quivalent \u00e0 PHONE_FORMAT(value, None, \"tel\") . Pour plus de d\u00e9tails, voir la biblioth\u00e8que Python phonenumbers qui sous-tend cette fonction. >>> PHONE_FORMAT(\"+12345678901\") u'+1 234-567-8901' >>> PHONE_FORMAT(\"2345678901\", \"US\") u'(234) 567-8901' >>> PHONE_FORMAT(\"2345678901\", \"GB\") u'023 4567 8901' >>> PHONE_FORMAT(\"2345678901\", \"GB\", \"+\") u'+44 23 4567 8901' >>> PHONE_FORMAT(\"+442345678901\", \"GB\") u'023 4567 8901' >>> PHONE_FORMAT(\"+12345678901\", \"GB\") u'+1 234-567-8901' >>> PHONE_FORMAT(\"(234) 567-8901\") Traceback (most recent call last): ... NumberParseException: (0) Missing or invalid default region. >>> PHONE_FORMAT(\"(234)567 89-01\", \"US\", \"tel\") u'tel:+1-234-567-8901' >>> PHONE_FORMAT(\"2/3456/7890\", \"FR\", '#') u'02 34 56 78 90' >>> PHONE_FORMAT(\"+33234567890\", '#') u'+33 2 34 56 78 90' >>> PHONE_FORMAT(\"+33234567890\", 'tel') u'tel:+33-2-34-56-78-90' >>> PHONE_FORMAT(\"tel:+1-234-567-8901\", country=\"US\", format=\"*\") u'+12345678901' >>> PHONE_FORMAT(33234567890) Traceback (most recent call last): ... TypeError: Le num\u00e9ro de t\u00e9l\u00e9phone doit \u00eatre une valeur textuelle. Si vous formatez une valeur d'une colonne Num\u00e9rique, convertissez d'abord cette colonne en Texte. PROPER (text) # Met en majuscule chaque mot dans une cha\u00eene sp\u00e9cifi\u00e9e. Il convertit la premi\u00e8re lettre de chaque mot en majuscule, et toutes les autres lettres en minuscules. Identique \u00e0 text.title() . >>> PROPER('ceci est un TITRE') 'Ceci Est Un Titre' >>> PROPER('2-way street') '2-Way Street' >>> PROPER('76BudGet') '76Budget' REGEXEXTRACT (text, regular_expression) # Extrait la premi\u00e8re partie du texte qui correspond \u00e0 l\u2019expression r\u00e9guli\u00e8re. >>> REGEXEXTRACT(\"Google Doc 101\", \"[0-9]+\") '101' >>> REGEXEXTRACT(\"Le prix aujourd'hui est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\") '826.25' S\u2019il y a une expression entre parenth\u00e8ses, elle est renvoy\u00e9e au lieu de la correspondance enti\u00e8re. >>> REGEXEXTRACT(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\") 'Content' >>> REGEXEXTRACT(\"Foo\", \"Bar\") Traceback (most recent call last): ... ValueError: REGEXEXTRACT text does not match REGEXMATCH (text, regular_expression) # Renvoie si un morceau de texte correspond \u00e0 une expression r\u00e9guli\u00e8re. >>> REGEXMATCH(\"Google Doc 101\", \"[0-9]+\") True >>> REGEXMATCH(\"Google Doc\", \"[0-9]+\") False >>> REGEXMATCH(\"Le prix aujourd'hui est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\") True >>> REGEXMATCH(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\") True >>> REGEXMATCH(\"Foo\", \"Bar\") False REGEXREPLACE (text, regular_expression, replacement) # Remplace toutes les parties du texte correspondant \u00e0 l\u2019expression r\u00e9guli\u00e8re donn\u00e9e par le texte de remplacement. >>> REGEXREPLACE(\"Google Doc 101\", \"[0-9]+\", \"777\") 'Google Doc 777' >>> REGEXREPLACE(\"Google Doc\", \"[0-9]+\", \"777\") 'Google Doc' >>> REGEXREPLACE(\"Le prix est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\", \"315.75\") 'Le prix est de $315.75' >>> REGEXREPLACE(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\", \"Mot\") 'Mot entre crochets' >>> REGEXREPLACE(\"Foo\", \"Bar\", \"Baz\") 'Foo' REPLACE (text, position, length, new_text) # Remplace une partie d\u2019une cha\u00eene de texte par une cha\u00eene de texte diff\u00e9rente. La position est compt\u00e9e \u00e0 partir de 1. >>> REPLACE(\"abcdefghijk\", 6, 5, \"*\") 'abcde*k' >>> REPLACE(\"2009\", 3, 2, \"10\") '2010' >>> REPLACE('123456', 1, 3, '@') '@456' >>> REPLACE('foo', 1, 0, 'bar') 'barfoo' >>> REPLACE('foo', 0, 1, 'bar') Traceback (most recent call last): ... ValueError: position invalid REPT (text, number_times) # Renvoie le texte sp\u00e9cifi\u00e9 r\u00e9p\u00e9t\u00e9 un certain nombre de fois. Identique \u00e0 text * number_times . Le r\u00e9sultat de la fonction REPT ne peut pas d\u00e9passer 32767 caract\u00e8res, sinon cela l\u00e8ve une ValueError. >>> REPT(\"*-\", 3) '*-*-*-' >>> REPT('-', 10) '----------' >>> REPT('-', 0) '' >>> len(REPT('---', 10000)) 30000 >>> REPT('---', 11000) Traceback (most recent call last): ... ValueError: number_times invalid >>> REPT('-', -1) Traceback (most recent call last): ... ValueError: number_times invalid RIGHT (string, num_chars=1) # Renvoie une sous-cha\u00eene de longueur num_chars \u00e0 partir de la fin d\u2019une cha\u00eene sp\u00e9cifi\u00e9e. Si num_chars est omise, elle est suppos\u00e9e \u00eatre 1. Identique \u00e0 string[-num_chars:] . >>> RIGHT(\"Prix de vente\", 5) 'Price' >>> RIGHT('Num\u00e9ro de stock') 'r' >>> RIGHT('Texte', 100) 'Texte' >>> RIGHT('Texte', -1) Traceback (most recent call last): ... ValueError: num_chars invalid SEARCH (find_text, within_text, start_num=1) # Renvoie la position \u00e0 laquelle une cha\u00eene est d\u2019abord trouv\u00e9e dans le texte, en ignorant la casse. La recherche est sensible \u00e0 la casse. La position renvoy\u00e9e est 1 si within_text commence par find_text. start_num sp\u00e9cifie le caract\u00e8re \u00e0 partir duquel commencer la recherche, par d\u00e9faut \u00e0 1 (le premier caract\u00e8re de within_text). Si find_text n\u2019est pas trouv\u00e9, ou si start_num est invalide, l\u00e8ve une ValueError. >>> SEARCH(\"e\", \"D\u00e9clarations\", 6) 7 >>> SEARCH(\"marge\", \"Marge b\u00e9n\u00e9ficiaire\") 8 >>> SEARCH(\" \", \"Marge b\u00e9n\u00e9ficiaire\") 7 >>> SEARCH('\"', 'Le \"patron\" est ici.') 5 >>> SEARCH(\"gle\", \"Google\") 4 >>> SEARCH(\"GLE\", \"Google\") 4 SUBSTITUTE (text, old_text, new_text, instance_num=None) # Remplace le texte existant par du nouveau texte dans une cha\u00eene. Il est utile lorsque vous connaissez le sous-texte \u00e0 remplacer. Utilisez REPLACE lorsque vous connaissez la position du texte \u00e0 remplacer. Si instance_num est donn\u00e9, il sp\u00e9cifie quelle occurrence de old_text remplacer. Si omis, toutes les occurrences sont remplac\u00e9es. Identique \u00e0 text.replace(old_text, new_text) lorsque instance_num est omis. >>> SUBSTITUTE(\"Donn\u00e9es de vente\", \"Ventes\", \"Co\u00fbt\") u'Donn\u00e9es de co\u00fbt' >>> SUBSTITUTE(\"Trimestre 1, 2008\", \"1\", \"2\", 1) u'Trimestre 2, 2008' >>> SUBSTITUTE(\"Trimestre 1, 2011\", \"1\", \"2\", 3) u'Trimestre 1, 2012' T (value) # Renvoie la valeur si la valeur est du texte, ou la cha\u00eene vide lorsque la valeur n\u2019est pas du texte. >>> T('Texte') u'Texte' >>> T(826) u'' >>> T('826') u'826' >>> T(False) u'' >>> T('100 points') u'100 points' >>> T(AltText('Texte')) u'Texte' >>> T(float('nan')) u'' TASTEME (food) # Pour un morceau de texte donn\u00e9, d\u00e9cide s\u2019il est savoureux ou non. Ce n\u2019est pas s\u00e9rieux. Cela est apparu comme un \u0153uf de P\u00e2ques, et est conserv\u00e9 en tant que tel. C\u2019est en fait un puzzle pour comprendre la r\u00e8gle simple sous-jacente. Cela a \u00e9t\u00e9 \u00e9tonnamment rarement r\u00e9solu, m\u00eame apr\u00e8s avoir lu le code source, qui est librement disponible et peut divertir les fans de Python. >>> TASTEME('Banane') True >>> TASTEME('Ail') False TEXT (number, format_type) # Convertit un nombre en texte selon un format sp\u00e9cifi\u00e9. Il n\u2019est pas encore impl\u00e9ment\u00e9 dans Grist. Vous pouvez utiliser les fonctions Python similaires str() pour convertir des nombres en cha\u00eenes, et optionnellement format() pour sp\u00e9cifier le format du nombre. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist. TRIM (text) # Supprime tous les espaces du texte sauf pour les espaces simples entre les mots. Notez que TRIM ne supprime pas d\u2019autres espaces blancs tels que les caract\u00e8res de tabulation ou de nouvelle ligne. >>> TRIM(\" Premier trimestre\\n B\u00e9n\u00e9fices \") 'Premier trimestre\\n B\u00e9n\u00e9fices' >>> TRIM(\"\") '' UPPER (text) # Convertit une cha\u00eene sp\u00e9cifi\u00e9e en majuscules. Identique \u00e0 text.upper() . >>> UPPER(\"e. e. cummings\") 'E. E. CUMMINGS' >>> UPPER(\"Apt. 2B\") 'APT. 2B' VALUE (text) # Convertit une cha\u00eene dans des formats de date, d\u2019heure ou de nombre accept\u00e9s en un nombre ou une date. >>> VALUE(\"$1,000\") 1000 >>> assert VALUE(\"16:48:00\") - VALUE(\"12:00:00\") == datetime.timedelta(0, 17280) >>> VALUE(\"01/01/2012\") datetime.datetime(2012, 1, 1, 0, 0) >>> VALUE(\"\") 0 >>> VALUE(0) 0 >>> VALUE(\"826\") 826 >>> VALUE(\"-826.123123123\") -826.123123123 >>> VALUE(float('nan')) nan >>> VALUE(\"Invalid\") Traceback (most recent call last): ... ValueError: le texte ne peut pas \u00eatre analys\u00e9 en un nombre >>> VALUE(\"13/13/13\") Traceback (most recent call last): ... ValueError: le texte ne peut pas \u00eatre analys\u00e9 en un nombre","title":"Function reference"},{"location":"functions/#reference-des-fonctions","text":"Les formules Grist prennent en charge la plupart des fonctions Excel, ainsi que le langage de programmation Python. Le tableau ci-dessous r\u00e9pertorie les fonctions sp\u00e9cifiques \u00e0 Grist, ainsi que l\u2019ensemble des fonctions similaires \u00e0 Excel incluses. De plus, l\u2019ensemble de la biblioth\u00e8que standard Python est disponible. Pour en savoir plus sur l\u2019utilisation des formules dans Grist, consultez Introduction aux Formules . Grist utilise Python (version 3.11) pour les formules. Vous pouvez utiliser presque toutes les fonctionnalit\u00e9s de Python (voir documentation Python ). Voici quelques notes utiles : Python est sensible \u00e0 la casse, y compris pour les noms de table et de colonne Grist. Les fonctions similaires \u00e0 Excel sont toujours en majuscules. Par exemple, if est un mot-cl\u00e9 Python, tandis que IF est une fonction similaire \u00e0 Excel. Comparez pour l\u2019\u00e9galit\u00e9 en utilisant == , \u00e0 la place du = unique d\u2019Excel (qui en Python signifie l\u2019assignation). \u201cDiff\u00e9rent\u201d utilise != \u00e0 la place de <> d\u2019Excel. Vous pouvez \u00e9crire du Python multi-lignes dans les formules (utilisez Shift + Enter pour ajouter des lignes), y compris des d\u00e9clarations, des variables, des imports, etc. Le code Grist s\u2019ex\u00e9cute dans un sandbox s\u00e9curis\u00e9, sans acc\u00e8s \u00e0 quoi que ce soit en dehors de votre document. Category Functions Grist Record ou rec , $Field ou rec.Field , $group ou rec.group , RecordSet , find.* , UserTable , all , lookupOne , lookupRecords Cumulatif NEXT , PREVIOUS , RANK Date DATE , DATEADD , DATEDIF , DATEVALUE , DATE_TO_XL , DAY , DAYS , DTIME , EDATE , EOMONTH , HOUR , ISOWEEKNUM , MINUTE , MONTH , MOONPHASE , NOW , SECOND , TODAY , WEEKDAY , WEEKNUM , XL_TO_DATE , YEAR , YEARFRAC Info CELL , ISBLANK , ISEMAIL , ISERR , ISERROR , ISLOGICAL , ISNA , ISNONTEXT , ISNUMBER , ISREF , ISREFLIST , ISTEXT , ISURL , N , NA , PEEK , RECORD , REQUEST , TYPE Logique AND , FALSE , IF , IFERROR , NOT , OR , TRUE Lookup lookupOne , lookupRecords , ADDRESS , CHOOSE , COLUMN , COLUMNS , CONTAINS , GETPIVOTDATA , HLOOKUP , HYPERLINK , INDEX , INDIRECT , LOOKUP , MATCH , OFFSET , ROW , ROWS , SELF_HYPERLINK , VLOOKUP Maths ABS , ACOS , ACOSH , ARABIC , ASIN , ASINH , ATAN , ATAN2 , ATANH , CEILING , COMBIN , COS , COSH , DEGREES , EVEN , EXP , FACT , FACTDOUBLE , FLOOR , GCD , INT , LCM , LN , LOG , LOG10 , MOD , MROUND , MULTINOMIAL , NUM , ODD , PI , POWER , PRODUCT , QUOTIENT , RADIANS , RAND , RANDBETWEEN , ROMAN , ROUND , ROUNDDOWN , ROUNDUP , SERIESSUM , SIGN , SIN , SINH , SQRT , SQRTPI , SUBTOTAL , SUM , SUMIF , SUMIFS , SUMPRODUCT , SUMSQ , TAN , TANH , TRUNC , UUID Horaire SCHEDULE Statistiques AVEDEV , AVERAGE , AVERAGEA , AVERAGEIF , AVERAGEIFS , AVERAGE_WEIGHTED , BINOMDIST , CONFIDENCE , CORREL , COUNT , COUNTA , COVAR , CRITBINOM , DEVSQ , EXPONDIST , FDIST , FISHER , FISHERINV , FORECAST , F_DIST , F_DIST_RT , GEOMEAN , HARMEAN , HYPGEOMDIST , INTERCEPT , KURT , LARGE , LOGINV , LOGNORMDIST , MAX , MAXA , MEDIAN , MIN , MINA , MODE , NEGBINOMDIST , NORMDIST , NORMINV , NORMSDIST , NORMSINV , PEARSON , PERCENTILE , PERCENTRANK , PERCENTRANK_EXC , PERCENTRANK_INC , PERMUT , POISSON , PROB , QUARTILE , RANK_AVG , RANK_EQ , RSQ , SKEW , SLOPE , SMALL , STANDARDIZE , STDEV , STDEVA , STDEVP , STDEVPA , STEYX , TDIST , TINV , TRIMMEAN , TTEST , T_INV , T_INV_2T , VAR , VARA , VARP , VARPA , WEIBULL , ZTEST Texte CHAR , CLEAN , CODE , CONCAT , CONCATENATE , DOLLAR , EXACT , FIND , FIXED , LEFT , LEN , LOWER , MID , PHONE_FORMAT , PROPER , REGEXEXTRACT , REGEXMATCH , REGEXREPLACE , REPLACE , REPT , RIGHT , SEARCH , SUBSTITUTE , T , TASTEME , TEXT , TRIM , UPPER , VALUE","title":""},{"location":"functions/#grist","text":"","title":"Grist"},{"location":"functions/#record","text":"Un Enregistrement repr\u00e9sente un enregistrement de donn\u00e9es. C\u2019est le principal moyen d\u2019acc\u00e9der aux valeurs dans les formules. Un Enregistrement pour une table particuli\u00e8re a une propri\u00e9t\u00e9 pour chaque colonne de donn\u00e9es et de formule dans la table. Dans une formule, $field est traduit en rec.field , o\u00f9 rec est l\u2019Enregistrement pour lequel la formule est \u00e9valu\u00e9e. Par exemple : def Nom_Complet(rec, table): return rec.Prenom + ' ' + rec.NomDeFamille def Longueur_Nom(rec, table): return len(rec.Nom_Complet)","title":"Record"},{"location":"functions/#_field","text":"Acc\u00e8de au champ nomm\u00e9 \u201cField\u201d de l\u2019enregistrement actuel. Par exemple, $Prenom ou rec.Prenom .","title":"$Field"},{"location":"functions/#_group","text":"Dans une table de r\u00e9sum\u00e9 , $group est un champ sp\u00e9cial contenant la liste des Enregistrements qui sont r\u00e9sum\u00e9s par la ligne de r\u00e9sum\u00e9 actuelle. Par exemple, la formule len($group) compte le nombre de ces enregistrements \u00e9tant r\u00e9sum\u00e9s dans chaque ligne. Voir Ensemble d\u2019Enregistrements pour les propri\u00e9t\u00e9s utiles offertes par l\u2019objet retourn\u00e9. Exemples : sum($group.Montant) # Somme du champ Montant dans les enregistrements correspondants sum(r.Montant for r in $group) # M\u00eame que sum($group.Montant) sum(r.Montant for r in $group if r > 0) # Somme uniquement des montants positifs sum(r.Actions * r.Prix for r in $group) # Somme des produits actions * prix","title":"$group"},{"location":"functions/#recordset","text":"Un Ensemble d\u2019Enregistrements repr\u00e9sente une collection d\u2019enregistrements, comme retourn\u00e9 par Table.lookupRecords() ou la propri\u00e9t\u00e9 $group dans les vues de r\u00e9sum\u00e9. Un Ensemble d\u2019Enregistrements permet d\u2019it\u00e9rer \u00e0 travers les enregistrements : sum(r.Montant for r in Etudiants.lookupRecords(Prenom=\"John\", NomDeFamille=\"Doe\")) min(r.DateEcheance for r in T\u00e2ches.lookupRecords(Propri\u00e9taire=\"Bob\")) Les Ensembles d\u2019Enregistrements fournissent \u00e9galement un moyen pratique d\u2019acc\u00e9der \u00e0 la liste des valeurs pour un champ particulier pour tous les enregistrements, comme record_set.Field . Par exemple, les exemples ci-dessus sont \u00e9quivalents \u00e0 : sum(Etudiants.lookupRecords(Prenom=\"John\", NomDeFamille=\"Doe\").Montant) min(T\u00e2ches.lookupRecords(Propri\u00e9taire=\"Bob\").DateEcheance) Vous pouvez obtenir le nombre d\u2019enregistrements dans un Ensemble d\u2019Enregistrements en utilisant len , par exemple len($group) .","title":"RecordSet"},{"location":"functions/#find_","text":"Un ensemble de m\u00e9thodes pour trouver des valeurs dans des ensembles d\u2019enregistrements tri\u00e9s, comme retourn\u00e9 par lookupRecords . Par exemple : Transactions.lookupRecords(..., order_by=\"Date\").find.lt($Date) Table.lookupRecords(..., order_by=(\"Foo\", \"Bar\")).find.le(foo, bar) Si l\u2019attribut find est masqu\u00e9 par une colonne utilisateur du m\u00eame nom, vous pouvez utiliser _find \u00e0 la place. Les m\u00e9thodes disponibles sont : lt : (moins que) trouver l\u2019enregistrement le plus proche avec des valeurs de tri < les valeurs donn\u00e9es le : (moins que ou \u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri <= les valeurs donn\u00e9es gt : (plus que) trouver l\u2019enregistrement le plus proche avec des valeurs de tri > les valeurs donn\u00e9es ge : (plus que ou \u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri >= les valeurs donn\u00e9es eq : (\u00e9gal \u00e0) trouver l\u2019enregistrement le plus proche avec des valeurs de tri == les valeurs donn\u00e9es Exemple de notre mod\u00e8le de Paie . Chaque personne a un historique de taux de paiement, dans la table Taux. Pour trouver un taux applicable \u00e0 une date donn\u00e9e, voici comment vous pouvez le faire \u00e0 l\u2019ancienne : # Obtenez tous les taux pour la Personne et le R\u00f4le dans cette ligne. taux = Taux.lookupRecords(Personne=$Personne, R\u00f4le=$R\u00f4le) # S\u00e9lectionnez uniquement les taux dont le D\u00e9but_Taux est \u00e0 ou avant la Date de cette ligne. taux_pass\u00e9s = [r for r in taux if r.D\u00e9but_Taux <= $Date] # S\u00e9lectionnez le dernier des taux_pass\u00e9s, c'est-\u00e0-dire le maximum par D\u00e9but_Taux. taux = max(taux_pass\u00e9s, key=lambda r: r.D\u00e9but_Taux) # Retournez le Taux_Horaire du taux pertinent. return taux.Taux_Horaire Avec les nouvelles m\u00e9thodes, c\u2019est beaucoup plus simple : taux = Taux.lookupRecords(Personne=$Personne, R\u00f4le=$R\u00f4le, order_by=\"D\u00e9but_Taux\") taux = taux.find.le($Date) return taux.Taux_Horaire Notez que cela est \u00e9galement beaucoup plus rapide lorsqu\u2019il y a de nombreux taux pour la m\u00eame Personne et R\u00f4le.","title":"find.*"},{"location":"functions/#usertable","text":"Chaque table de donn\u00e9es dans le document est repr\u00e9sent\u00e9e dans le code par une instance de la classe UserTable . Ces noms sont toujours en majuscules. Une UserTable fournit un acc\u00e8s \u00e0 tous les enregistrements dans la table, ainsi que des m\u00e9thodes pour rechercher des enregistrements particuliers. Chaque table dans le document est disponible pour toutes les formules.","title":"UserTable"},{"location":"functions/#all","text":"La liste de tous les enregistrements dans cette table. Par exemple, cela \u00e9value le nombre d\u2019enregistrements dans la table Etudiants . len(Etudiants.all) Cela \u00e9value la somme du champ Population pour chaque enregistrement dans la table Pays . sum(r.Population for r in Pays.all)","title":"all"},{"location":"functions/#lookupone","text":"Retourne un Enregistrement correspondant aux arguments field=value donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ de la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ). Par exemple : Personnes.lookupOne(Prenom=\"Lewis\", NomDeFamille=\"Carroll\") Personnes.lookupOne(Email=$Email_Travail) En savoir plus sur lookupOne . Si plusieurs enregistrements sont trouv\u00e9s, le premier match est retourn\u00e9. Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les correspondances, pour d\u00e9terminer lequel d\u2019entre eux est retourn\u00e9 en premier. Par d\u00e9faut, l\u2019enregistrement avec le plus petit ID de ligne est retourn\u00e9. Voir lookupRecords pour les d\u00e9tails de toutes les options disponibles et du comportement de order_by (et de son alternative h\u00e9rit\u00e9e, sort_by ). Par exemple : T\u00e2ches.lookupOne(Projet=$id, order_by=\"Priorit\u00e9\") # T\u00e2che avec la plus petite Priorit\u00e9. Taux.lookupOne(Personne=$id, order_by=\"-Date\") # Taux avec la derni\u00e8re Date.","title":"lookupOne"},{"location":"functions/#lookuprecords","text":"Retourne un Ensemble d\u2019Enregistrements correspondant aux arguments field=value donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ de la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ) (exemples ci-dessous). Par exemple : Personnes.lookupRecords(Email=$Email_Travail) Personnes.lookupRecords(Prenom=\"George\", NomDeFamille=\"Washington\") Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les r\u00e9sultats. Vous pouvez pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Vous pouvez \u00e9galement sp\u00e9cifier plusieurs IDs de colonnes sous forme de tuple (par exemple, order_by=(\"Compte\", \"-Date\") ). Par exemple : Transactions.lookupRecords(Compte=$Compte, order_by=\"Date\") Transactions.lookupRecords(Compte=$Compte, order_by=\"-Date\") Transactions.lookupRecords(Actif=True, order_by=(\"Compte\", \"-Date\")) Pour les enregistrements avec des champs order_by \u00e9gaux, les r\u00e9sultats sont tri\u00e9s selon leur apparence dans les vues (ce qui est d\u00e9termin\u00e9 par la colonne sp\u00e9ciale manualSort ). Vous pouvez d\u00e9finir order_by=None pour correspondre \u00e0 l\u2019ordre des enregistrements dans des vues non tri\u00e9es. Par d\u00e9faut, sans order_by , les enregistrements sont tri\u00e9s par ID de ligne, comme si avec order_by=\"id\" . Pour des raisons de compatibilit\u00e9, sort_by peut \u00eatre utilis\u00e9 \u00e0 la place de order_by , mais ne permet qu\u2019un seul champ, et revient \u00e0 l\u2019ID de ligne (plut\u00f4t qu\u2019\u00e0 manualSort ). Voir Ensemble d\u2019Enregistrements pour les propri\u00e9t\u00e9s utiles offertes par l\u2019objet retourn\u00e9. En particulier, des m\u00e9thodes comme .find.le permettent de rechercher des valeurs les plus proches. Voir CONTIENT pour un exemple utilisant UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ de type liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. En savoir plus sur lookupRecords .","title":"lookupRecords"},{"location":"functions/#cumulatif","text":"","title":"Cumulatif"},{"location":"functions/#next","text":"Trouve l\u2019enregistrement suivant dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Voir PR\u00c9C\u00c9DENT pour plus de d\u00e9tails.","title":"NEXT"},{"location":"functions/#previous","text":"Trouve l\u2019enregistrement pr\u00e9c\u00e9dent dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Chacun de ces arguments peut \u00eatre un ID de colonne ou un tuple de IDs de colonnes, et order_by permet aux IDs de colonnes d\u2019\u00eatre pr\u00e9fix\u00e9s par \u201c-\u201d pour inverser l\u2019ordre de tri. Par exemple, PR\u00c9C\u00c9DENT(rec, order_by=\"Date\") # L'enregistrement pr\u00e9c\u00e9dent lorsqu'il est tri\u00e9 par date croissante. PR\u00c9C\u00c9DENT(rec, order_by=\"-Date\") # L'enregistrement pr\u00e9c\u00e9dent lorsqu'il est tri\u00e9 par date d\u00e9croissante. Vous pouvez utiliser group_by pour rechercher l\u2019enregistrement pr\u00e9c\u00e9dent dans un groupe filtr\u00e9. Par exemple, cela trouve l\u2019enregistrement pr\u00e9c\u00e9dent avec le m\u00eame Compte que rec , lorsque les enregistrements sont filtr\u00e9s par le Compte de rec et tri\u00e9s par date croissante : PR\u00c9C\u00c9DENT(rec, group_by=\"Compte\", order_by=\"Date\") Lorsque plusieurs enregistrements ont les m\u00eames valeurs order_by (par exemple, la m\u00eame Date dans les exemples ci-dessus), l\u2019ordre est d\u00e9termin\u00e9 par la position relative des lignes dans les vues. Cela se fait en interne en retombant sur la colonne sp\u00e9ciale manualSort et la colonne ID de ligne id . Utilisez order_by=None pour trouver l\u2019enregistrement pr\u00e9c\u00e9dent dans une table non tri\u00e9e (lorsque les lignes peuvent \u00eatre r\u00e9arrang\u00e9es en les faisant glisser manuellement). Par exemple : PR\u00c9C\u00c9DENT(rec, order_by=None) # L'enregistrement pr\u00e9c\u00e9dent dans la liste non tri\u00e9e des enregistrements. Vous pouvez sp\u00e9cifier plusieurs IDs de colonnes sous forme de tuple, pour group_by et order_by . Cela peut \u00eatre utilis\u00e9 pour correspondre aux vues tri\u00e9es par plusieurs colonnes. Par exemple : PR\u00c9C\u00c9DENT(rec, group_by=(\"Compte\", \"Ann\u00e9e\"), order_by=(\"Date\", \"-Montant\"))","title":"PREVIOUS"},{"location":"functions/#rank","text":"Retourne le rang (ou la position) de cet enregistrement dans la table selon l\u2019ordre sp\u00e9cifi\u00e9 par order_by , et le regroupement sp\u00e9cifi\u00e9 par group_by . Voir PR\u00c9C\u00c9DENT pour les d\u00e9tails de ces param\u00e8tres. Le param\u00e8tre order peut \u00eatre \"asc\" (qui est la valeur par d\u00e9faut) ou \"desc\" . Lorsque order est \"asc\" ou omis, le premier enregistrement dans le groupe dans l\u2019ordre tri\u00e9 aurait le rang de 1. Lorsque order est \"desc\" , le dernier enregistrement dans l\u2019ordre tri\u00e9 aurait le rang de 1. S\u2019il y a plusieurs groupes, il y aura plusieurs enregistrements avec le m\u00eame rang. En particulier, chaque groupe aura un enregistrement avec le rang 1. Par exemple, RANG(rec, group_by=\"Ann\u00e9e\", order_by=\"Score\", order=\"desc\") retournera le rang de l\u2019enregistrement actuel ( rec ) parmi tous les enregistrements de sa table pour la m\u00eame ann\u00e9e, ordonn\u00e9 par score d\u00e9croissant.","title":"RANK"},{"location":"functions/#date_1","text":"","title":"Date"},{"location":"functions/#date","text":"Retourne l\u2019objet datetime.datetime qui repr\u00e9sente une date particuli\u00e8re. La fonction DATE est la plus utile dans les formules o\u00f9 l\u2019ann\u00e9e, le mois et le jour sont des formules, pas des constantes. Si l\u2019ann\u00e9e est comprise entre 0 et 1899 (inclus), ajoute 1900 pour calculer l\u2019ann\u00e9e. >>> DATE(108, 1, 2) datetime.date(2008, 1, 2) >>> DATE(2008, 1, 2) datetime.date(2008, 1, 2) Si le mois est sup\u00e9rieur \u00e0 12, passe \u00e0 l\u2019ann\u00e9e suivante. >>> DATE(2008, 14, 2) datetime.date(2009, 2, 2) Si le mois est inf\u00e9rieur \u00e0 1, soustrait ce nombre de mois plus 1, du premier mois de l\u2019ann\u00e9e. >>> DATE(2008, -3, 2) datetime.date(2007, 9, 2) Si le jour est sup\u00e9rieur au nombre de jours dans le mois donn\u00e9, passe aux mois suivants. >>> DATE(2008, 1, 35) datetime.date(2008, 2, 4) Si le jour est inf\u00e9rieur \u00e0 1, soustrait ce nombre de jours plus 1, du premier jour du mois donn\u00e9. >>> DATE(2008, 1, -15) datetime.date(2007, 12, 16)","title":"DATE"},{"location":"functions/#dateadd","text":"Retourne la date un certain nombre de jours, mois, ann\u00e9es ou semaines \u00e0 partir de start_date . Vous pouvez sp\u00e9cifier les arguments dans n\u2019importe quel ordre si vous sp\u00e9cifiez les noms des arguments. Utilisez des valeurs n\u00e9gatives pour soustraire. Par exemple, DATEADD(date, 1) est identique \u00e0 DATEADD(date, days=1) , et ajoute un jour \u00e0 date . DATEADD(date, years=1, days=-1) ajoute un an moins un jour. >>> DATEADD(DATE(2011, 1, 15), 1) datetime.date(2011, 1, 16) >>> DATEADD(DATE(2011, 1, 15), months=1, days=-1) datetime.date(2011, 2, 14) >>> DATEADD(DATE(2011, 1, 15), years=-2, months=1, days=3, weeks=2) datetime.date(2009, 3, 4) >>> DATEADD(DATE(1975, 4, 30), years=50, weeks=-5) datetime.date(2025, 3, 26)","title":"DATEADD"},{"location":"functions/#datedif","text":"Calcule le nombre de jours, mois ou ann\u00e9es entre deux dates. L\u2019unit\u00e9 indique le type d\u2019information que vous souhaitez retourner : \u201cY\u201d : Le nombre d\u2019ann\u00e9es compl\u00e8tes dans la p\u00e9riode. \u201cM\u201d : Le nombre de mois complets dans la p\u00e9riode. \u201cD\u201d : Le nombre de jours dans la p\u00e9riode. \u201cMD\u201d : La diff\u00e9rence entre les jours dans start_date et end_date. Les mois et ann\u00e9es des dates sont ignor\u00e9s. \u201cYM\u201d : La diff\u00e9rence entre les mois dans start_date et end_date. Les jours et ann\u00e9es des dates sont ignor\u00e9s. \u201cYD\u201d : La diff\u00e9rence entre les jours de start_date et end_date. Les ann\u00e9es des dates sont ignor\u00e9es. Deux ann\u00e9es compl\u00e8tes dans la p\u00e9riode (2) >>> DATEDIF(DATE(2001, 1, 1), DATE(2003, 1, 1), \"Y\") 2 440 jours entre le 1er juin 2001 et le 15 ao\u00fbt 2002 (440) >>> DATEDIF(DATE(2001, 6, 1), DATE(2002, 8, 15), \"D\") 440 75 jours entre le 1er juin et le 15 ao\u00fbt, en ignorant les ann\u00e9es des dates (75) >>> DATEDIF(DATE(2001, 6, 1), DATE(2012, 8, 15), \"YD\") 75 La diff\u00e9rence entre 1 et 15, en ignorant les mois et les ann\u00e9es des dates (14) >>> DATEDIF(DATE(2001, 6, 1), DATE(2002, 8, 15), \"MD\") 14","title":"DATEDIF"},{"location":"functions/#datevalue","text":"Convertit une date qui est stock\u00e9e sous forme de texte en un objet datetime . >>> DATEVALUE(\"1/1/2008\") datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"30-Jan-2008\") datetime.datetime(2008, 1, 30, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"2008-12-11\") datetime.datetime(2008, 12, 11, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DATEVALUE(\"5-JUL\").replace(year=2000) datetime.datetime(2000, 7, 5, 0, 0, tzinfo=moment.tzinfo('America/New_York')) En cas d\u2019ambigu\u00eft\u00e9, pr\u00e9f\u00e9rez le format M/J/A. >>> DATEVALUE(\"1/2/3\") datetime.datetime(2003, 1, 2, 0, 0, tzinfo=moment.tzinfo('America/New_York'))","title":"DATEVALUE"},{"location":"functions/#date_to_xl","text":"Convertit un objet date ou datetime Python en le num\u00e9ro de s\u00e9rie utilis\u00e9 par Excel, avec le 30 d\u00e9cembre 1899 comme num\u00e9ro de s\u00e9rie 1. Voir XL_TO_DATE pour plus d\u2019explications. >>> DATE_TO_XL(datetime.date(2008, 1, 1)) 39448.0 >>> DATE_TO_XL(datetime.date(2012, 3, 14)) 40982.0 >>> DATE_TO_XL(datetime.datetime(2012, 3, 14, 1, 30)) 40982.0625","title":"DATE_TO_XL"},{"location":"functions/#day","text":"Retourne le jour d\u2019une date, sous forme d\u2019entier allant de 1 \u00e0 31. Identique \u00e0 date.day . >>> DAY(DATE(2011, 4, 15)) 15 >>> DAY(\"5/31/2012\") 31 >>> DAY(datetime.datetime(1900, 1, 1)) 1","title":"DAY"},{"location":"functions/#days","text":"Retourne le nombre de jours entre deux dates. Identique \u00e0 (end_date - start_date).days . >>> DAYS(\"3/15/11\",\"2/1/11\") 42 >>> DAYS(DATE(2011, 12, 31), DATE(2011, 1, 1)) 364 >>> DAYS(\"2/1/11\", \"3/15/11\") -42","title":"DAYS"},{"location":"functions/#dtime","text":"Retourne la valeur convertie en un objet datetime Python. La valeur peut \u00eatre une cha\u00eene , une date (interpr\u00e9t\u00e9e comme minuit ce jour-l\u00e0), une heure (interpr\u00e9t\u00e9e comme une heure de la journ\u00e9e aujourd\u2019hui), ou un datetime existant. Le datetime retourn\u00e9 aura son fuseau horaire d\u00e9fini sur l\u2019argument tz , ou le fuseau horaire par d\u00e9faut du document lorsque tz est omis ou None. Si l\u2019entr\u00e9e est elle-m\u00eame un datetime avec le fuseau horaire d\u00e9fini, il est retourn\u00e9 sans changement (sans modifications de son fuseau horaire). >>> DTIME(datetime.date(2017, 1, 1)) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DTIME(datetime.date(2017, 1, 1), 'Europe/Paris') datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('Europe/Paris')) >>> DTIME(datetime.datetime(2017, 1, 1)) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> DTIME(datetime.datetime(2017, 1, 1, tzinfo=moment.tzinfo('UTC'))) datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('UTC')) >>> DTIME(datetime.datetime(2017, 1, 1, tzinfo=moment.tzinfo('UTC')), 'Europe/Paris') datetime.datetime(2017, 1, 1, 0, 0, tzinfo=moment.tzinfo('UTC')) >>> DTIME(\"1/1/2008\") datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York'))","title":"DTIME"},{"location":"functions/#edate","text":"Retourne la date qui est le nombre donn\u00e9 de mois avant ou apr\u00e8s start_date . Utilisez EDATE pour calculer les dates d\u2019\u00e9ch\u00e9ance ou de maturit\u00e9 qui tombent le m\u00eame jour du mois que la date d\u2019\u00e9mission. >>> EDATE(DATE(2011, 1, 15), 1) datetime.date(2011, 2, 15) >>> EDATE(DATE(2011, 1, 15), -1) datetime.date(2010, 12, 15) >>> EDATE(DATE(2011, 1, 15), 2) datetime.date(2011, 3, 15) >>> EDATE(DATE(2012, 3, 1), 10) datetime.date(2013, 1, 1) >>> EDATE(DATE(2012, 5, 1), -2) datetime.date(2012, 3, 1)","title":"EDATE"},{"location":"functions/#eomonth","text":"Retourne la date du dernier jour du mois qui est le nombre indiqu\u00e9 de mois avant ou apr\u00e8s start_date. Utilisez EOMONTH pour calculer les dates d\u2019\u00e9ch\u00e9ance ou de maturit\u00e9 qui tombent le dernier jour du mois. >>> EOMONTH(DATE(2011, 1, 1), 1) datetime.date(2011, 2, 28) >>> EOMONTH(DATE(2011, 1, 15), -3) datetime.date(2010, 10, 31) >>> EOMONTH(DATE(2012, 3, 1), 10) datetime.date(2013, 1, 31) >>> EOMONTH(DATE(2012, 5, 1), -2) datetime.date(2012, 3, 31)","title":"EOMONTH"},{"location":"functions/#hour","text":"Identique \u00e0 time.hour . >>> HOUR(XL_TO_DATE(0.75)) 18 >>> HOUR(\"7/18/2011 7:45\") 7 >>> HOUR(\"4/21/2012\") 0","title":"HOUR"},{"location":"functions/#isoweeknum","text":"Retourne le num\u00e9ro de la semaine ISO de l\u2019ann\u00e9e pour une date donn\u00e9e. >>> ISOWEEKNUM(\"3/9/2012\") 10 >>> [ISOWEEKNUM(DATE(2000 + y, 1, 1)) for y in [0,1,2,3,4,5,6,7,8]] [52, 1, 1, 1, 1, 53, 52, 1, 1]","title":"ISOWEEKNUM"},{"location":"functions/#minute","text":"Retourne les minutes d\u2019un datetime , sous forme d\u2019entier de 0 \u00e0 59. Identique \u00e0 time.minute . >>> MINUTE(XL_TO_DATE(0.75)) 0 >>> MINUTE(\"7/18/2011 7:45\") 45 >>> MINUTE(\"12:59:00 PM\") 59 >>> MINUTE(datetime.time(12, 58, 59)) 58","title":"MINUTE"},{"location":"functions/#month","text":"Retourne le mois d\u2019une date repr\u00e9sent\u00e9e, sous forme d\u2019entier de 1 (janvier) \u00e0 12 (d\u00e9cembre). Identique \u00e0 date.month . >>> MONTH(DATE(2011, 4, 15)) 4 >>> MONTH(\"5/31/2012\") 5 >>> MONTH(datetime.datetime(1900, 1, 1)) 1","title":"MONTH"},{"location":"functions/#moonphase","text":"Retourne la phase de la lune \u00e0 la date donn\u00e9e. La sortie par d\u00e9faut est un emoji de phase lunaire. Avec output=\"days\" , la sortie est l\u2019\u00e2ge de la lune en jours (nouvelle lune \u00e9tant 0). Avec output=\"fraction\" , la sortie est la fraction du mois lunaire depuis la nouvelle lune. Le calcul n\u2019est pas astronomiquement pr\u00e9cis, mais suffisant pour les loups et les marins. NE PAS utiliser output=\"lunacy\" . >>> MOONPHASE(datetime.date(1900, 1, 1), \"days\") 0.0 >>> MOONPHASE(datetime.date(1900, 1, 1), \"fraction\") 0.0 >>> MOONPHASE(datetime.datetime(1900, 1, 1)) == '\ud83c\udf11' True >>> MOONPHASE(datetime.date(1900, 1, 15)) == '\ud83c\udf15' True >>> MOONPHASE(datetime.date(1900, 1, 30)) == '\ud83c\udf11' True >>> [MOONPHASE(DATEADD(datetime.date(2023, 4, 1), days=4*n)) for n in range(8)] == ['\ud83c\udf14', '\ud83c\udf15', '\ud83c\udf16', '\ud83c\udf17', '\ud83c\udf18', '\ud83c\udf11', '\ud83c\udf12', '\ud83c\udf13'] True >>> [round(MOONPHASE(DATEADD(datetime.date(2023, 4, 1), days=4*n)), 1) for n in range(8)] [10.4, 14.4, 18.4, 22.4, 26.4, 0.9, 4.9, 8.9]","title":"MOONPHASE"},{"location":"functions/#now","text":"Retourne l\u2019objet datetime pour l\u2019heure actuelle.","title":"NOW"},{"location":"functions/#second","text":"Retourne les secondes d\u2019un datetime , sous forme d\u2019entier de 0 \u00e0 59. Identique \u00e0 time.second . >>> SECOND(XL_TO_DATE(0.75)) 0 >>> SECOND(\"7/18/2011 7:45:13\") 13 >>> SECOND(datetime.time(12, 58, 59)) 59","title":"SECOND"},{"location":"functions/#today","text":"Retourne l\u2019objet date pour la date actuelle.","title":"TODAY"},{"location":"functions/#weekday","text":"Retourne le jour de la semaine correspondant \u00e0 une date. Le jour est donn\u00e9 sous forme d\u2019entier, allant de 1 (dimanche) \u00e0 7 (samedi), par d\u00e9faut. Return_type d\u00e9termine le type de la valeur retourn\u00e9e. 1 (par d\u00e9faut) - Retourne 1 (dimanche) \u00e0 7 (samedi). 2 - Retourne 1 (lundi) \u00e0 7 (dimanche). 3 - Retourne 0 (lundi) \u00e0 6 (dimanche). 11 - Retourne 1 (lundi) \u00e0 7 (dimanche). 12 - Retourne 1 (mardi) \u00e0 7 (lundi). 13 - Retourne 1 (mercredi) \u00e0 7 (mardi). 14 - Retourne 1 (jeudi) \u00e0 7 (mercredi). 15 - Retourne 1 (vendredi) \u00e0 7 (jeudi). 16 - Retourne 1 (samedi) \u00e0 7 (vendredi). 17 - Retourne 1 (dimanche) \u00e0 7 (samedi). >>> WEEKDAY(DATE(2008, 2, 14)) 5 >>> WEEKDAY(DATE(2012, 3, 1)) 5 >>> WEEKDAY(DATE(2012, 3, 1), 1) 5 >>> WEEKDAY(DATE(2012, 3, 1), 2) 4 >>> WEEKDAY(\"3/1/2012\", 3) 3","title":"WEEKDAY"},{"location":"functions/#weeknum","text":"Retourne le num\u00e9ro de la semaine d\u2019une date sp\u00e9cifique. Par exemple, la semaine contenant le 1er janvier est la premi\u00e8re semaine de l\u2019ann\u00e9e, et est num\u00e9rot\u00e9e semaine 1. Return_type d\u00e9termine quelle semaine est consid\u00e9r\u00e9e comme la premi\u00e8re semaine de l\u2019ann\u00e9e. 1 (par d\u00e9faut) - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant dimanche qui contient le 1er janvier. 2 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 1er janvier. 11 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 1er janvier. 12 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant mardi qui contient le 1er janvier. 13 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant mercredi qui contient le 1er janvier. 14 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant jeudi qui contient le 1er janvier. 15 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant vendredi qui contient le 1er janvier. 16 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant samedi qui contient le 1er janvier. 17 - La semaine 1 est la premi\u00e8re semaine commen\u00e7ant dimanche qui contient le 1er janvier. 21 - Approche ISO 8601 : La semaine 1 est la premi\u00e8re semaine commen\u00e7ant lundi qui contient le 4 janvier. \u00c9quivalemment, c\u2019est la semaine qui contient le premier jeudi de l\u2019ann\u00e9e. >>> WEEKNUM(DATE(2012, 3, 9)) 10 >>> WEEKNUM(DATE(2012, 3, 9), 2) 11 >>> WEEKNUM('1/1/1900') 1 >>> WEEKNUM('2/1/1900') 5","title":"WEEKNUM"},{"location":"functions/#xl_to_date","text":"Convertit un num\u00e9ro de s\u00e9rie Excel fourni repr\u00e9sentant une date en un objet datetime . La valeur est interpr\u00e9t\u00e9e comme le nombre de jours depuis le 30 d\u00e9cembre 1899. (Cela correspond \u00e0 l\u2019interpr\u00e9tation de Google Sheets. Excel commence avec le 31 d\u00e9cembre 1899 mais consid\u00e8re \u00e0 tort 1900 comme une ann\u00e9e bissextile. Excel pour Mac doit \u00eatre configur\u00e9 pour utiliser le syst\u00e8me de date 1900, c\u2019est-\u00e0-dire d\u00e9cocher l\u2019option \u201cUtiliser le syst\u00e8me de date 1904\u201d.) Le datetime retourn\u00e9 aura son fuseau horaire d\u00e9fini sur l\u2019argument tz , ou le fuseau horaire par d\u00e9faut du document lorsque tz est omis ou None. >>> XL_TO_DATE(41100.1875) datetime.datetime(2012, 7, 10, 4, 30, tzinfo=moment.tzinfo('America/New_York')) >>> XL_TO_DATE(39448) datetime.datetime(2008, 1, 1, 0, 0, tzinfo=moment.tzinfo('America/New_York')) >>> XL_TO_DATE(40982.0625) datetime.datetime(2012, 3, 14, 1, 30, tzinfo=moment.tzinfo('America/New_York'))","title":"XL_TO_DATE"},{"location":"functions/#year","text":"Retourne l\u2019ann\u00e9e correspondant \u00e0 une date sous forme d\u2019entier. Identique \u00e0 date.year . >>> YEAR(DATE(2011, 4, 15)) 2011 >>> YEAR(\"5/31/2030\") 2030 >>> YEAR(datetime.datetime(1900, 1, 1)) 1900","title":"YEAR"},{"location":"functions/#yearfrac","text":"Calcule la fraction de l\u2019ann\u00e9e repr\u00e9sent\u00e9e par le nombre de jours entiers entre deux dates. Basis est le type de base de comptage des jours \u00e0 utiliser. 0 (par d\u00e9faut) - US (NASD) 30/360 1 - Actuel/actuel 2 - Actuel/360 3 - Actuel/365 4 - Europ\u00e9en 30/360 -1 - Actuel/actuel (variation Google Sheets) Cette fonction est utile pour les calculs financiers. Pour la compatibilit\u00e9 avec Excel, elle par d\u00e9faut utilise le calendrier standard NASD. Pour une utilisation dans des contextes non financiers, l\u2019option -1 est probablement le meilleur choix. Voir https://en.wikipedia.org/wiki/360-day_calendar pour l\u2019explication des m\u00e9thodes US 30/360 et Europ\u00e9enne 30/360. Voir pour l\u2019analyse de l\u2019impl\u00e9mentation particuli\u00e8re d\u2019Excel. Fraction de l\u2019ann\u00e9e entre le 1/1/2012 et le 30/7/12, en omettant l\u2019argument Basis. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30)) '0.58055556' Fraction entre les m\u00eames dates, en utilisant l\u2019argument de base Actuel/Actuel. Parce que 2012 est une ann\u00e9e bissextile, elle a une base de 366 jours. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30), 1) '0.57650273' Fraction entre les m\u00eames dates, en utilisant l\u2019argument de base Actuel/365. Utilise une base de 365 jours. >>> \"%.8f\" % YEARFRAC(DATE(2012, 1, 1), DATE(2012, 7, 30), 3) '0.57808219'","title":"YEARFRAC"},{"location":"functions/#info","text":"","title":"Info"},{"location":"functions/#cell","text":"Retourne les informations demand\u00e9es sur la cellule sp\u00e9cifi\u00e9e. Cela n\u2019est pas impl\u00e9ment\u00e9 dans Grist. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CELL"},{"location":"functions/#isblank","text":"Retourne si une valeur fait r\u00e9f\u00e9rence \u00e0 une cellule vide. Elle n\u2019est pas impl\u00e9ment\u00e9e dans Grist. Pour v\u00e9rifier une cha\u00eene vide, utilisez value == \"\" . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ISBLANK"},{"location":"functions/#isemail","text":"Retourne si une valeur est une adresse email valide. Notez que la v\u00e9rification de la validit\u00e9 des emails n\u2019est pas une science exacte. La norme technique consid\u00e8re de nombreuses adresses email comme valides qui ne sont pas utilis\u00e9es dans la pratique, et ne seraient pas consid\u00e9r\u00e9es comme valides par la plupart des utilisateurs. Au lieu de cela, nous suivons l\u2019impl\u00e9mentation de Google Sheets, avec quelques diff\u00e9rences, not\u00e9es ci-dessous. >>> ISEMAIL(\"Abc.123@example.com\") True >>> ISEMAIL(\"Bob_O-Reilly+tag@example.com\") True >>> ISEMAIL(\"John Doe\") False >>> ISEMAIL(\"john@aol...com\") False","title":"ISEMAIL"},{"location":"functions/#iserr","text":"V\u00e9rifie si une valeur est une erreur. En d\u2019autres termes, elle retourne vrai si l\u2019utilisation de value directement provoquerait une exception. NOTE : Grist impl\u00e9mente cela en enveloppant automatiquement l\u2019argument pour utiliser l\u2019\u00e9valuation paresseuse. Une approche plus Pythonique pour v\u00e9rifier les erreurs est : try: ... value ... except Exception, err: ... faire quelque chose \u00e0 propos de l'erreur ... Par exemple : >>> ISERR(\"Hello\") False","title":"ISERR"},{"location":"functions/#iserror","text":"V\u00e9rifie si une valeur est une erreur ou une valeur invalide. Elle est similaire \u00e0 ISERR , mais retourne \u00e9galement vrai pour une valeur invalide telle que NaN ou une valeur textuelle dans une colonne Num\u00e9rique. NOTE : Grist impl\u00e9mente cela en enveloppant automatiquement l\u2019argument pour utiliser l\u2019\u00e9valuation paresseuse. >>> ISERROR(\"Hello\") False >>> ISERROR(AltText(\"fail\")) True >>> ISERROR(float('nan')) True","title":"ISERROR"},{"location":"functions/#islogical","text":"V\u00e9rifie si une valeur est True ou False . >>> ISLOGICAL(True) True >>> ISLOGICAL(False) True >>> ISLOGICAL(0) False >>> ISLOGICAL(None) False >>> ISLOGICAL(\"Test\") False","title":"ISLOGICAL"},{"location":"functions/#isna","text":"V\u00e9rifie si une valeur est l\u2019erreur #N/A . >>> ISNA(float('nan')) True >>> ISNA(0.0) False >>> ISNA('text') False >>> ISNA(float('-inf')) False","title":"ISNA"},{"location":"functions/#isnontext","text":"V\u00e9rifie si une valeur n\u2019est pas textuelle. >>> ISNONTEXT(\"asdf\") False >>> ISNONTEXT(\"\") False >>> ISNONTEXT(AltText(\"text\")) False >>> ISNONTEXT(17.0) True >>> ISNONTEXT(None) True >>> ISNONTEXT(datetime.date(2011, 1, 1)) True","title":"ISNONTEXT"},{"location":"functions/#isnumber","text":"V\u00e9rifie si une valeur est un nombre. >>> ISNUMBER(17) True >>> ISNUMBER(-123.123423) True >>> ISNUMBER(False) True >>> ISNUMBER(float('nan')) True >>> ISNUMBER(float('inf')) True >>> ISNUMBER('17') False >>> ISNUMBER(None) False >>> ISNUMBER(datetime.date(2011, 1, 1)) False","title":"ISNUMBER"},{"location":"functions/#isref","text":"V\u00e9rifie si une valeur est un enregistrement de table. Par exemple, si une colonne personne est de type R\u00e9f\u00e9rence \u00e0 la table Personnes , alors ISREF($personne) est True . De m\u00eame, ISREF(Personnes.lookupOne(name=$name)) est True . Pour tout autre type de valeur, ISREF() \u00e9valuerait \u00e0 False . >>> ISREF(17) False >>> ISREF(\"Roger\") False","title":"ISREF"},{"location":"functions/#isreflist","text":"V\u00e9rifie si une valeur est un Ensemble d'Enregistrements , le type de valeurs dans les colonnes de Liste de R\u00e9f\u00e9rences. Par exemple, si une colonne personnes est de type Liste de R\u00e9f\u00e9rences \u00e0 la table Personnes , alors ISREFLIST($personnes) est True . De m\u00eame, ISREFLIST(Personnes.lookupRecords(name=$name)) est True . Pour tout autre type de valeur, ISREFLIST() \u00e9valuerait \u00e0 False . >>> ISREFLIST(17) False >>> ISREFLIST(\"Roger\") False","title":"ISREFLIST"},{"location":"functions/#istext","text":"V\u00e9rifie si une valeur est textuelle. >>> ISTEXT(\"asdf\") True >>> ISTEXT(\"\") True >>> ISTEXT(AltText(\"text\")) True >>> ISTEXT(17.0) False >>> ISTEXT(None) False >>> ISTEXT(datetime.date(2011, 1, 1)) False","title":"ISTEXT"},{"location":"functions/#isurl","text":"V\u00e9rifie si une valeur est une URL valide. Elle n\u2019a pas besoin d\u2019\u00eatre enti\u00e8rement qualifi\u00e9e, ni d\u2019inclure \u201chttp://\u201d et \u201cwww\u201d. Elle ne suit pas une norme, mais tente de fonctionner de mani\u00e8re similaire \u00e0 ISURL dans Google Sheets, et de retourner True pour du texte qui est probablement une URL. Les protocoles valides incluent ftp, http, https, gopher, mailto, news, telnet et aim. >>> ISURL(\"http://www.getgrist.com\") True >>> ISURL(\"https://foo.com/test_(wikipedia)#cite-1\") True >>> ISURL(\"mailto://user@example.com\") True >>> ISURL(\"http:///a\") False","title":"ISURL"},{"location":"functions/#n","text":"Retourne la valeur convertie en un nombre. Vrai/Faux sont convertis en 1/0. Une date est convertie en num\u00e9ro de s\u00e9rie de style Excel de la date. Tout le reste est converti en 0. >>> N(7) 7 >>> N(7.1) 7.1 >>> N(\"Even\") 0 >>> N(\"7\") 0 >>> N(True) 1 >>> N(datetime.datetime(2011, 4, 17)) 40650.0","title":"N"},{"location":"functions/#na","text":"Retourne l\u2019erreur \u201cvaleur non disponible\u201d, #N/A . >>> math.isnan(NA()) True","title":"NA"},{"location":"functions/#peek","text":"\u00c9value l\u2019expression donn\u00e9e sans cr\u00e9er de d\u00e9pendances ou n\u00e9cessiter que les valeurs r\u00e9f\u00e9renc\u00e9es soient \u00e0 jour, en utilisant quelle que soit la valeur qu\u2019il trouve dans une cellule. Ceci est utile pour pr\u00e9venir les erreurs de r\u00e9f\u00e9rence circulaire, en particulier dans les formules de d\u00e9clenchement. Par exemple, si la formule pour A d\u00e9pend de $B et la formule pour B d\u00e9pend de $A , cela provoquerait normalement une erreur de r\u00e9f\u00e9rence circulaire car chaque valeur doit \u00eatre calcul\u00e9e avant l\u2019autre. Mais si A utilise PEEK($B) alors il obtiendra simplement la valeur d\u00e9j\u00e0 stock\u00e9e dans $B sans n\u00e9cessiter que $B soit d\u2019abord calcul\u00e9 \u00e0 la derni\u00e8re valeur. Ainsi, A sera calcul\u00e9 en premier, et B pourra utiliser $A sans probl\u00e8mes.","title":"PEEK"},{"location":"functions/#record_2","text":"Retourne un dictionnaire Python avec tous les champs de l\u2019enregistrement donn\u00e9. Si une liste d\u2019enregistrements est donn\u00e9e, retourne une liste de dictionnaires Python correspondants. Si dates_as_iso est d\u00e9fini, les valeurs Date et DateTime sont converties en cha\u00eene en utilisant le format ISO 8601. Si expand_refs est d\u00e9fini \u00e0 1 ou plus, les valeurs de R\u00e9f\u00e9rence sont remplac\u00e9es par une repr\u00e9sentation RECORD de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9, en d\u00e9veloppant le nombre donn\u00e9 de niveaux. Les valeurs d\u2019erreur pr\u00e9sentes dans les cellules de l\u2019enregistrement sont remplac\u00e9es par une valeur None, et une cl\u00e9 sp\u00e9ciale de \u201c error \u201d est ajout\u00e9e contenant les messages d\u2019erreur pour ces cellules. Par exemple : {\"Ratio\": None, \"_error_\": {\"Ratio\": \"ZeroDivisionError: integer division or modulo by zero\"}} Notez qu\u2019il faut faire attention \u00e0 \u00e9viter les r\u00e9f\u00e9rences circulaires lors de l\u2019utilisation de RECORD(), car cela cr\u00e9e une d\u00e9pendance sur chaque cellule de l\u2019enregistrement. Dans le cas de RECORD(rec), la cellule contenant cet appel sera omise du dictionnaire r\u00e9sultant. Par exemple : RECORD($Personne) RECORD(rec) RECORD(Personnes.lookupOne(Prenom=\"Alice\")) RECORD(Personnes.lookupRecords(D\u00e9partement=\"RH\"))","title":"RECORD"},{"location":"functions/#request","text":"Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"REQUEST"},{"location":"functions/#type","text":"Retourne un nombre associ\u00e9 au type de donn\u00e9es pass\u00e9 dans la fonction. Cela n\u2019est pas impl\u00e9ment\u00e9 dans Grist. Utilisez isinstance(value, type) ou type(value) . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TYPE"},{"location":"functions/#logique","text":"","title":"Logique"},{"location":"functions/#and","text":"Renvoie True si tous les arguments sont logiquement vrais, et False si l\u2019un d\u2019eux est faux. Identique \u00e0 all([valeur1, valeur2, ...]) . >>> AND(1) True >>> AND(0) False >>> AND(1, 1) True >>> AND(1,2,3,4) True >>> AND(1,2,3,4,0) False","title":"AND"},{"location":"functions/#false","text":"Renvoie la valeur logique False . Vous pouvez \u00e9galement utiliser la valeur False directement. Cette fonction est fournie principalement pour la compatibilit\u00e9 avec d\u2019autres programmes de tableur. >>> FALSE() False","title":"FALSE"},{"location":"functions/#if","text":"Renvoie une valeur si une expression logique est True et une autre si elle est False . L\u2019expression Python \u00e9quivalente est : valeur_si_vrai si expression_logique sinon valeur_si_faux Comme Grist prend en charge les formules multi-lignes, vous pouvez \u00e9galement utiliser des blocs Python tels que : if expression_logique: return valeur_si_vrai else: return valeur_si_faux NOTE : Grist suit le mod\u00e8le Excel en n\u2019\u00e9valuant qu\u2019une des expressions de valeur, en enveloppant automatiquement les expressions pour utiliser l\u2019\u00e9valuation paresseuse. Cela permet \u00e0 IF(False, 1/0, 1) d\u2019\u00e9valuer \u00e0 1 plut\u00f4t que de lever une exception. >>> IF(12, \"Oui\", \"Non\") 'Oui' >>> IF(None, \"Oui\", \"Non\") 'Non' >>> IF(True, 0.85, 0.0) 0.85 >>> IF(False, 0.85, 0.0) 0.0","title":"IF"},{"location":"functions/#iferror","text":"Renvoie le premier argument s\u2019il n\u2019est pas une valeur d\u2019erreur, sinon renvoie le deuxi\u00e8me argument s\u2019il est pr\u00e9sent, ou une cha\u00eene vide si le deuxi\u00e8me argument est absent. NOTE : Grist g\u00e8re les valeurs qui l\u00e8vent une exception en les enveloppant pour utiliser l\u2019\u00e9valuation paresseuse. >>> IFERROR(float('nan'), \"**NAN**\") '**NAN**' >>> IFERROR(17.17, \"**NAN**\") 17.17 >>> IFERROR(\"Texte\") 'Texte' >>> IFERROR(AltText(\"bonjour\")) ''","title":"IFERROR"},{"location":"functions/#not","text":"True . Identique \u00e0 not expression_logique . >>> NOT(123) False >>> NOT(0) True","title":"NOT"},{"location":"functions/#or","text":"Renvoie True si l\u2019un des arguments est logiquement vrai, et faux si tous les arguments sont faux. Identique \u00e0 any([valeur1, valeur2, ...]) . >>> OR(1) True >>> OR(0) False >>> OR(1, 1) True >>> OR(0, 1) True >>> OR(0, 0) False >>> OR(0,False,0.0,\"\",None) False >>> OR(0,None,3,0) True","title":"OR"},{"location":"functions/#true","text":"Renvoie la valeur logique True . Vous pouvez \u00e9galement utiliser la valeur True directement. Cette fonction est fournie principalement pour la compatibilit\u00e9 avec d\u2019autres programmes de tableur. >>> TRUE() True","title":"TRUE"},{"location":"functions/#recherche","text":"","title":"Recherche"},{"location":"functions/#lookupone_2","text":"Renvoie un Enregistrement correspondant aux arguments champ=valeur donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ dans la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ). Par exemple : People.lookupOne(First_Name=\"Lewis\", Last_Name=\"Carroll\") People.lookupOne(Email=$Work_Email) En savoir plus sur lookupOne . Si plusieurs enregistrements sont trouv\u00e9s, le premier match est renvoy\u00e9. Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les correspondances, pour d\u00e9terminer lequel d\u2019entre eux est renvoy\u00e9 en premier. Par d\u00e9faut, l\u2019enregistrement avec le plus petit ID de ligne est renvoy\u00e9. Voir lookupRecords pour des d\u00e9tails sur toutes les options disponibles et le comportement de order_by (et de son alternative h\u00e9rit\u00e9e, sort_by ). Par exemple : Tasks.lookupOne(Project=$id, order_by=\"Priority\") # T\u00e2che avec la plus petite priorit\u00e9. Rates.lookupOne(Person=$id, order_by=\"-Date\") # Taux avec la derni\u00e8re date.","title":"lookupOne"},{"location":"functions/#lookuprecords_2","text":"Renvoie un Ensemble d\u2019Enregistrements correspondant aux arguments champ=valeur donn\u00e9s. La valeur peut \u00eatre n\u2019importe quelle expression, le plus souvent un champ dans la ligne actuelle (par exemple, $SomeField ) ou une constante (par exemple, une cha\u00eene entre guillemets comme \"Some Value\" ) (exemples ci-dessous). Par exemple : People.lookupRecords(Email=$Work_Email) People.lookupRecords(First_Name=\"George\", Last_Name=\"Washington\") Vous pouvez d\u00e9finir le param\u00e8tre optionnel order_by au ID de colonne par lequel trier les r\u00e9sultats. Vous pouvez pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Vous pouvez \u00e9galement sp\u00e9cifier plusieurs ID de colonnes sous forme de tuple (par exemple, order_by=(\"Account\", \"-Date\") ). Par exemple : Transactions.lookupRecords(Account=$Account, order_by=\"Date\") Transactions.lookupRecords(Account=$Account, order_by=\"-Date\") Transactions.lookupRecords(Active=True, order_by=(\"Account\", \"-Date\")) Pour les enregistrements avec des champs order_by \u00e9gaux, les r\u00e9sultats sont tri\u00e9s selon leur apparition dans les vues (ce qui est d\u00e9termin\u00e9 par la colonne sp\u00e9ciale manualSort ). Vous pouvez d\u00e9finir order_by=None pour correspondre \u00e0 l\u2019ordre des enregistrements dans des vues non tri\u00e9es. Par d\u00e9faut, sans order_by , les enregistrements sont tri\u00e9s par ID de ligne, comme si avec order_by=\"id\" . Pour des raisons de compatibilit\u00e9, sort_by peut \u00eatre utilis\u00e9 \u00e0 la place de order_by , mais ne permet qu\u2019un seul champ, et revient \u00e0 l\u2019ID de ligne (plut\u00f4t qu\u2019\u00e0 manualSort ). Voir Ensemble d\u2019Enregistrements pour des propri\u00e9t\u00e9s utiles offertes par l\u2019objet renvoy\u00e9. En particulier, des m\u00e9thodes comme .find.le permettent de rechercher les valeurs les plus proches. Voir CONTIENT pour un exemple utilisant UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ d\u2019un type de liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. En savoir plus sur lookupRecords .","title":"lookupRecords"},{"location":"functions/#address","text":"Renvoie une r\u00e9f\u00e9rence de cellule sous forme de cha\u00eene. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ADDRESS"},{"location":"functions/#choose","text":"Renvoie un \u00e9l\u00e9ment d\u2019une liste de choix en fonction de l\u2019index. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CHOOSE"},{"location":"functions/#column","text":"Renvoie le num\u00e9ro de colonne d\u2019une cellule sp\u00e9cifi\u00e9e, avec A=1 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"COLUMN"},{"location":"functions/#columns","text":"Renvoie le nombre de colonnes dans un tableau ou un intervalle sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"COLUMNS"},{"location":"functions/#contains","text":"Utilisez ce marqueur avec UserTable.lookupRecords pour trouver des enregistrements o\u00f9 un champ d\u2019un type de liste (tel que Liste de Choix ou Liste de R\u00e9f\u00e9rences ) contient la valeur donn\u00e9e. Par exemple : MoviesTable.lookupRecords(genre=CONTAINS(\"Drama\")) renverra des enregistrements dans MoviesTable o\u00f9 la colonne genre est une liste ou un autre conteneur tel que [\"Comedy\", \"Drama\"] , c\u2019est-\u00e0-dire \"Drama\" in $genre . Notez que la colonne recherch\u00e9e (par exemple, genre ) doit avoir des valeurs d\u2019un type de conteneur tel que liste, tuple ou ensemble. En particulier, les valeurs ne doivent pas \u00eatre des cha\u00eenes, par exemple \"Comedy-Drama\" ne correspondra pas m\u00eame si \"Drama\" in \"Comedy-Drama\" est True en Python. Cela ne correspondra \u00e9galement pas aux sous-cha\u00eenes dans les \u00e9l\u00e9ments du conteneur, par exemple [\"Comedy-Drama\"] . Vous pouvez \u00e9ventuellement passer un deuxi\u00e8me argument match_empty pour indiquer une valeur qui devrait \u00eatre compar\u00e9e aux listes vides dans la colonne recherch\u00e9e. Par exemple, \u00e9tant donn\u00e9 cette formule : MoviesTable.lookupRecords(genre=CONTAINS(g, match_empty='')) Si g est '' (c\u2019est-\u00e0-dire \u00e9gal \u00e0 match_empty ), alors la colonne genre dans les enregistrements renvoy\u00e9s sera soit une liste vide (ou un autre conteneur) soit une liste contenant g comme d\u2019habitude.","title":"CONTAINS"},{"location":"functions/#getpivotdata","text":"Extrait une valeur agr\u00e9g\u00e9e d\u2019un tableau crois\u00e9 dynamique qui correspond aux en-t\u00eates de ligne et de colonne sp\u00e9cifi\u00e9s. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"GETPIVOTDATA"},{"location":"functions/#hlookup","text":"Recherche horizontale. Recherche dans la premi\u00e8re ligne d\u2019un intervalle pour une cl\u00e9 et renvoie la valeur d\u2019une cellule sp\u00e9cifi\u00e9e dans la colonne trouv\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"HLOOKUP"},{"location":"functions/#hyperlink","text":"Cr\u00e9e un lien hypertexte \u00e0 l\u2019int\u00e9rieur d\u2019une cellule. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"HYPERLINK"},{"location":"functions/#index","text":"Renvoie le contenu d\u2019une cellule, sp\u00e9cifi\u00e9 par un d\u00e9calage de ligne et de colonne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"INDEX"},{"location":"functions/#indirect","text":"Renvoie une r\u00e9f\u00e9rence de cellule sp\u00e9cifi\u00e9e par une cha\u00eene. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"INDIRECT"},{"location":"functions/#lookup","text":"Recherche dans une ligne ou une colonne pour une cl\u00e9 et renvoie la valeur de la cellule dans une plage de r\u00e9sultats situ\u00e9e \u00e0 la m\u00eame position que la ligne ou la colonne de recherche. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"LOOKUP"},{"location":"functions/#match","text":"Renvoie la position relative d\u2019un \u00e9l\u00e9ment dans un intervalle qui correspond \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"MATCH"},{"location":"functions/#offset","text":"Renvoie une r\u00e9f\u00e9rence de plage d\u00e9cal\u00e9e d\u2019un nombre sp\u00e9cifi\u00e9 de lignes et de colonnes \u00e0 partir d\u2019une r\u00e9f\u00e9rence de cellule de d\u00e9part. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"OFFSET"},{"location":"functions/#row","text":"Renvoie le num\u00e9ro de ligne d\u2019une cellule sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ROW"},{"location":"functions/#rows","text":"Renvoie le nombre de lignes dans un tableau ou un intervalle sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ROWS"},{"location":"functions/#self_hyperlink","text":"Cr\u00e9e un lien vers le document actuel. Tous les param\u00e8tres sont optionnels. La cha\u00eene renvoy\u00e9e est au format URL, \u00e9ventuellement pr\u00e9c\u00e9d\u00e9e d\u2019une \u00e9tiquette et d\u2019un espace (le format attendu pour les colonnes de texte Grist avec l\u2019option HyperLink activ\u00e9e). Un num\u00e9ro de page num\u00e9rique peut \u00eatre fourni, ce qui cr\u00e9era un lien vers la page sp\u00e9cifi\u00e9e. Pour trouver le num\u00e9ro de page num\u00e9rique dont vous avez besoin, visitez une page et examinez son URL pour une partie /p/NN . Un nombre quelconque d\u2019arguments sous la forme LinkKey_NOM peut \u00eatre fourni, pour d\u00e9finir les valeurs user.LinkKey.NOM qui seront disponibles dans les r\u00e8gles d\u2019acc\u00e8s. Par exemple, si une r\u00e8gle permet aux utilisateurs de voir des lignes lorsque user.LinkKey.Code == rec.Code , nous pourrions vouloir cr\u00e9er des liens avec SELF_HYPERLINK(LinkKey_Code=$Code) . >>> SELF_HYPERLINK() u'https://docs.getgrist.com/sbaltsirg/Example' >>> SELF_HYPERLINK(label='doc') u'doc https://docs.getgrist.com/sbaltsirg/Example' >>> SELF_HYPERLINK(page=2) u'https://docs.getgrist.com/sbaltsirg/Example/p/2' >>> SELF_HYPERLINK(LinkKey_Code='X1234') u'https://docs.getgrist.com/sbaltsirg/Example?Code_=X1234' >>> SELF_HYPERLINK(label='order', page=3, LinkKey_Code='X1234', LinkKey_Name='Bi Ngo') u'order https://docs.getgrist.com/sbaltsirg/Example/p/3?Code_=X1234&Name_=Bi+Ngo' >>> SELF_HYPERLINK(Linky_Link='Link') Traceback (most recent call last): ... TypeError: unexpected keyword argument 'Linky_Link' (not of form LinkKey_NAME)","title":"SELF_HYPERLINK"},{"location":"functions/#vlookup","text":"Recherche verticale. Recherche dans la table donn\u00e9e pour un enregistrement correspondant aux arguments champ=valeur donn\u00e9s. Si plusieurs enregistrements correspondent, renvoie l\u2019un d\u2019eux. Si aucun ne correspond, renvoie l\u2019enregistrement vide sp\u00e9cial. L\u2019objet renvoy\u00e9 est un enregistrement dont les champs sont disponibles en utilisant la syntaxe .champ . Par exemple, VLOOKUP(Employees, EmployeeID=$EmpID).Salary . Notez que VLOOKUP n\u2019est pas couramment n\u00e9cessaire dans Grist, puisque les Colonnes de R\u00e9f\u00e9rence sont le meilleur moyen de lier des donn\u00e9es entre des tables, et permettent une utilisation simple et efficace telle que $Person.Age . VLOOKUP est exactement \u00e9quivalent \u00e0 table.lookupOne(**champ_valeur_paires) . Voir lookupOne . Par exemple : VLOOKUP(People, First_Name=\"Lewis\", Last_Name=\"Carroll\") VLOOKUP(People, First_Name=\"Lewis\", Last_Name=\"Carroll\").Age","title":"VLOOKUP"},{"location":"functions/#math","text":"","title":"Math"},{"location":"functions/#abs","text":"Renvoie la valeur absolue d\u2019un nombre. >>> ABS(2) 2 >>> ABS(-2) 2 >>> ABS(-4) 4","title":"ABS"},{"location":"functions/#acos","text":"Renvoie le cosinus inverse d\u2019une valeur, en radians. >>> round(ACOS(-0.5), 9) 2.094395102 >>> round(ACOS(-0.5)*180/PI(), 10) 120.0","title":"ACOS"},{"location":"functions/#acosh","text":"Renvoie le cosinus hyperbolique inverse d\u2019un nombre. >>> ACOSH(1) 0.0 >>> round(ACOSH(10), 7) 2.9932228","title":"ACOSH"},{"location":"functions/#arabic","text":"Calcule la valeur d\u2019un chiffre romain. >>> ARABIC(\"LVII\") 57 >>> ARABIC('mcmxii') 1912","title":"ARABIC"},{"location":"functions/#asin","text":"Renvoie le sinus inverse d\u2019une valeur, en radians. >>> round(ASIN(-0.5), 9) -0.523598776 >>> round(ASIN(-0.5)*180/PI(), 10) -30.0 >>> round(DEGREES(ASIN(-0.5)), 10) -30.0","title":"ASIN"},{"location":"functions/#asinh","text":"Renvoie le sinus hyperbolique inverse d\u2019un nombre. >>> round(ASINH(-2.5), 9) -1.647231146 >>> round(ASINH(10), 9) 2.99822295","title":"ASINH"},{"location":"functions/#atan","text":"Renvoie l\u2019arc tangente d\u2019une valeur, en radians. >>> round(ATAN(1), 9) 0.785398163 >>> ATAN(1)*180/PI() 45.0 >>> DEGREES(ATAN(1)) 45.0","title":"ATAN"},{"location":"functions/#atan2","text":"Renvoie l\u2019angle entre l\u2019axe x et un segment de ligne allant de l\u2019origine (0,0) \u00e0 la paire de coordonn\u00e9es sp\u00e9cifi\u00e9e ( x , y ), en radians. >>> round(ATAN2(1, 1), 9) 0.785398163 >>> round(ATAN2(-1, -1), 9) -2.35619449 >>> ATAN2(-1, -1)*180/PI() -135.0 >>> DEGREES(ATAN2(-1, -1)) -135.0 >>> round(ATAN2(1,2), 9) 1.107148718","title":"ATAN2"},{"location":"functions/#atanh","text":"Renvoie le sinus hyperbolique inverse d\u2019un nombre. >>> round(ATANH(0.76159416), 9) 1.00000001 >>> round(ATANH(-0.1), 9) -0.100335348","title":"ATANH"},{"location":"functions/#ceiling","text":"Arrondit un nombre \u00e0 la multiple sup\u00e9rieure la plus proche du facteur, ou \u00e0 l\u2019entier le plus proche si le facteur est ommis ou 1. >>> CEILING(2.5, 1) 3 >>> CEILING(-2.5, -2) -4 >>> CEILING(-2.5, 2) -2 >>> CEILING(1.5, 0.1) 1.5 >>> CEILING(0.234, 0.01) 0.24","title":"CEILING"},{"location":"functions/#combin","text":"Renvoie le nombre de fa\u00e7ons de choisir un certain nombre d\u2019objets dans un ensemble d\u2019une taille donn\u00e9e d\u2019objets. >>> COMBIN(8,2) 28 >>> COMBIN(4,2) 6 >>> COMBIN(10,7) 120","title":"COMBIN"},{"location":"functions/#cos","text":"Renvoie le cosinus d\u2019un angle donn\u00e9 en radians. >>> round(COS(1.047), 7) 0.5001711 >>> round(COS(60*PI()/180), 10) 0.5 >>> round(COS(RADIANS(60)), 10) 0.5","title":"COS"},{"location":"functions/#cosh","text":"Renvoie le cosinus hyperbolique de tout nombre r\u00e9el. >>> round(COSH(4), 6) 27.308233 >>> round(COSH(EXP(1)), 7) 7.6101251","title":"COSH"},{"location":"functions/#degrees","text":"Convertit une valeur d\u2019angle en radians en degr\u00e9s. >>> round(DEGREES(ACOS(-0.5)), 10) 120.0 >>> DEGREES(PI()) 180.0","title":"DEGREES"},{"location":"functions/#even","text":"Arrondit un nombre \u00e0 l\u2019entier pair sup\u00e9rieur le plus proche, en arrondissant loin de z\u00e9ro. >>> EVEN(1.5) 2 >>> EVEN(3) 4 >>> EVEN(2) 2 >>> EVEN(-1) -2","title":"EVEN"},{"location":"functions/#exp","text":"Renvoie le nombre d\u2019Euler, e (~2.718) \u00e9lev\u00e9 \u00e0 une puissance. >>> round(EXP(1), 8) 2.71828183 >>> round(EXP(2), 7) 7.3890561","title":"EXP"},{"location":"functions/#fact","text":"Renvoie la factorielle d\u2019un nombre. >>> FACT(5) 120 >>> FACT(1.9) 1 >>> FACT(0) 1 >>> FACT(1) 1 >>> FACT(-1) Traceback (most recent call last): ... ValueError: factorial() not defined for negative values","title":"FACT"},{"location":"functions/#factdouble","text":"Renvoie la \u201cdouble factorielle\u201d d\u2019un nombre. >>> FACTDOUBLE(6) 48 >>> FACTDOUBLE(7) 105 >>> FACTDOUBLE(3) 3 >>> FACTDOUBLE(4) 8","title":"FACTDOUBLE"},{"location":"functions/#floor","text":"Arrondit un nombre \u00e0 l\u2019entier multiple inf\u00e9rieur le plus proche de la signification sp\u00e9cifi\u00e9e. >>> FLOOR(3.7,2) 2 >>> FLOOR(-2.5,-2) -2 >>> FLOOR(2.5,-2) Traceback (most recent call last): ... ValueError: facteur argument invalide >>> FLOOR(1.58,0.1) 1.5 >>> FLOOR(0.234,0.01) 0.23","title":"FLOOR"},{"location":"functions/#gcd","text":"Renvoie le plus grand commun diviseur de un ou plusieurs entiers. >>> GCD(5, 2) 1 >>> GCD(24, 36) 12 >>> GCD(7, 1) 1 >>> GCD(5, 0) 5 >>> GCD(0, 5) 5 >>> GCD(5) 5 >>> GCD(14, 42, 21) 7","title":"GCD"},{"location":"functions/#int","text":"Arrondit un nombre \u00e0 l\u2019entier le plus proche qui est inf\u00e9rieur ou \u00e9gal \u00e0 lui. >>> INT(8.9) 8 >>> INT(-8.9) -9 >>> 19.5-INT(19.5) 0.5","title":"INT"},{"location":"functions/#lcm","text":"Renvoie le plus petit multiple commun de un ou plusieurs entiers. >>> LCM(5, 2) 10 >>> LCM(24, 36) 72 >>> LCM(0, 5) 0 >>> LCM(5) 5 >>> LCM(10, 100) 100 >>> LCM(12, 18) 36 >>> LCM(12, 18, 24) 72","title":"LCM"},{"location":"functions/#ln","text":"Renvoie le logarithme d\u2019un nombre, base e (nombre d\u2019Euler). >>> round(LN(86), 7) 4.4543473 >>> round(LN(2.7182818), 7) 1.0 >>> round(LN(EXP(3)), 10) 3.0","title":"LN"},{"location":"functions/#log","text":"Renvoie le logarithme d\u2019un nombre donn\u00e9 une base. >>> LOG(10) 1.0 >>> LOG(8, 2) 3.0 >>> round(LOG(86, 2.7182818), 7) 4.4543473","title":"LOG"},{"location":"functions/#log10","text":"Renvoie le logarithme d\u2019un nombre, base 10. >>> round(LOG10(86), 9) 1.934498451 >>> LOG10(10) 1.0 >>> LOG10(100000) 5.0 >>> LOG10(10**5) 5.0","title":"LOG10"},{"location":"functions/#mod","text":"Renvoie le r\u00e9sultat de l\u2019op\u00e9rateur modulo, le reste apr\u00e8s une op\u00e9ration de division. >>> MOD(3, 2) 1 >>> MOD(-3, 2) 1 >>> MOD(3, -2) -1 >>> MOD(-3, -2) -1","title":"MOD"},{"location":"functions/#mround","text":"Arrondit un nombre \u00e0 l\u2019entier multiple le plus proche d\u2019un autre. >>> MROUND(10, 3) 9 >>> MROUND(-10, -3) -9 >>> round(MROUND(1.3, 0.2), 10) 1.4 >>> MROUND(5, -2) Traceback (most recent call last): ... ValueError: facteur argument invalide","title":"MROUND"},{"location":"functions/#multinomial","text":"Renvoie la factorielle de la somme des valeurs divis\u00e9e par le produit des factorielles des valeurs. >>> MULTINOMIAL(2, 3, 4) 1260 >>> MULTINOMIAL(3) 1 >>> MULTINOMIAL(1,2,3) 60 >>> MULTINOMIAL(0,2,4,6) 13860","title":"MULTINOMIAL"},{"location":"functions/#num","text":"Pour une valeur flottante Python qui est en fait un entier, renvoie un type entier Python. Sinon, renvoie la valeur inchang\u00e9e. Cela est parfois utile lorsqu\u2019une valeur provient d\u2019une colonne num\u00e9rique Grist (repr\u00e9sent\u00e9e comme des flottants), mais lorsque des valeurs int sont en fait attendues. >>> NUM(-17.0) -17 >>> NUM(1.5) 1.5 >>> NUM(4) 4 >>> NUM(\"NA\") 'NA'","title":"NUM"},{"location":"functions/#odd","text":"Arrondit un nombre \u00e0 l\u2019entier impair sup\u00e9rieur le plus proche. >>> ODD(1.5) 3 >>> ODD(3) 3 >>> ODD(2) 3 >>> ODD(-1) -1 >>> ODD(-2) -3","title":"ODD"},{"location":"functions/#pi","text":"Renvoie la valeur de Pi \u00e0 14 d\u00e9cimales. >>> round(PI(), 9) 3.141592654 >>> round(PI()/2, 9) 1.570796327 >>> round(PI()*9, 8) 28.27433388","title":"PI"},{"location":"functions/#power","text":"Renvoie un nombre \u00e9lev\u00e9 \u00e0 une puissance. >>> POWER(5,2) 25.0 >>> round(POWER(98.6,3.2), 3) 2401077.222 >>> round(POWER(4,5.0/4), 9) 5.656854249","title":"POWER"},{"location":"functions/#product","text":"Renvoie le r\u00e9sultat de la multiplication d\u2019une s\u00e9rie de nombres. Chaque argument peut \u00eatre un nombre ou un tableau. >>> PRODUCT([5,15,30]) 2250 >>> PRODUCT([5,15,30], 2) 4500 >>> PRODUCT(5,15,[30],[2]) 4500","title":"PRODUCT"},{"location":"functions/#quotient","text":"Renvoie un nombre divis\u00e9 par un autre, sans le reste. >>> QUOTIENT(5, 2) 2 >>> QUOTIENT(4.5, 3.1) 1 >>> QUOTIENT(-10, 3) -3","title":"QUOTIENT"},{"location":"functions/#radians","text":"Convertit une valeur d\u2019angle en degr\u00e9s en radians. >>> round(RADIANS(270), 6) 4.712389","title":"RADIANS"},{"location":"functions/#rand","text":"Renvoie un nombre al\u00e9atoire entre 0 inclus et 1 exclus.","title":"RAND"},{"location":"functions/#randbetween","text":"Renvoie un entier al\u00e9atoire uniform\u00e9ment entre deux valeurs, inclusif.","title":"RANDBETWEEN"},{"location":"functions/#roman","text":"Formate un nombre en chiffres romains. Le deuxi\u00e8me argument est ignor\u00e9 dans cette impl\u00e9mentation. >>> ROMAN(499,0) 'CDXCIX' >>> ROMAN(499.2,0) 'CDXCIX' >>> ROMAN(57) 'LVII' >>> ROMAN(1912) 'MCMXII'","title":"ROMAN"},{"location":"functions/#round","text":"Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, par d\u00e9faut au nombre entier le plus proche si le nombre de places n\u2019est pas donn\u00e9. Arrondit loin de z\u00e9ro (\u2018vers le haut\u2019 pour les nombres positifs) en cas d\u2019\u00e9galit\u00e9, c\u2019est-\u00e0-dire lorsque le dernier chiffre est 5. >>> ROUND(1.4) 1.0 >>> ROUND(1.5) 2.0 >>> ROUND(2.5) 3.0 >>> ROUND(-2.5) -3.0 >>> ROUND(2.15, 1) 2.2 >>> ROUND(-1.475, 2) -1.48 >>> ROUND(21.5, -1) 20.0 >>> ROUND(626.3,-3) 1000.0 >>> ROUND(1.98,-1) 0.0 >>> ROUND(-50.55,-2) -100.0 >>> ROUND(0) 0.0","title":"ROUND"},{"location":"functions/#rounddown","text":"Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, en arrondissant toujours vers le bas vers z\u00e9ro. >>> ROUNDDOWN(3.2, 0) 3 >>> ROUNDDOWN(76.9,0) 76 >>> ROUNDDOWN(3.14159, 3) 3.141 >>> ROUNDDOWN(-3.14159, 1) -3.1 >>> ROUNDDOWN(31415.92654, -2) 31400","title":"ROUNDDOWN"},{"location":"functions/#roundup","text":"Arrondit un nombre \u00e0 un certain nombre de d\u00e9cimales, en arrondissant toujours vers le haut loin de z\u00e9ro. >>> ROUNDUP(3.2,0) 4 >>> ROUNDUP(76.9,0) 77 >>> ROUNDUP(3.14159, 3) 3.142 >>> ROUNDUP(-3.14159, 1) -3.2 >>> ROUNDUP(31415.92654, -2) 31500","title":"ROUNDUP"},{"location":"functions/#seriessum","text":"\u00c9tant donn\u00e9 les param\u00e8tres x, n, m et a, renvoie la somme de la s\u00e9rie de puissance a_1 x^n + a_2 x^(n+m) + \u2026 + a_i*x^(n+(i-1)m), o\u00f9 i est le nombre d\u2019entr\u00e9es dans la plage a . >>> SERIESSUM(1,0,1,1) 1 >>> SERIESSUM(2,1,0,[1,2,3]) 12 >>> SERIESSUM(-3,1,1,[2,4,6]) -132 >>> round(SERIESSUM(PI()/4,0,2,[1,-1./FACT(2),1./FACT(4),-1./FACT(6)]), 6) 0.707103","title":"SERIESSUM"},{"location":"functions/#sign","text":"\u00c9tant donn\u00e9 un nombre d\u2019entr\u00e9e, renvoie -1 s\u2019il est n\u00e9gatif, 1 s\u2019il est positif, et 0 s\u2019il est z\u00e9ro. >>> SIGN(10) 1 >>> SIGN(4.0-4.0) 0 >>> SIGN(-0.00001) -1","title":"SIGN"},{"location":"functions/#sin","text":"Renvoie le sinus d\u2019un angle donn\u00e9 en radians. >>> round(SIN(PI()), 10) 0.0 >>> SIN(PI()/2) 1.0 >>> round(SIN(30*PI()/180), 10) 0.5 >>> round(SIN(RADIANS(30)), 10) 0.5","title":"SIN"},{"location":"functions/#sinh","text":"Renvoie le sinus hyperbolique de tout nombre r\u00e9el. >>> round(2.868*SINH(0.0342*1.03), 7) 0.1010491","title":"SINH"},{"location":"functions/#sqrt","text":"Renvoie la racine carr\u00e9e positive d\u2019un nombre positif. >>> SQRT(16) 4.0 >>> SQRT(-16) Traceback (most recent call last): ... ValueError: math domain error >>> SQRT(ABS(-16)) 4.0","title":"SQRT"},{"location":"functions/#sqrtpi","text":"Renvoie la racine carr\u00e9e positive du produit de Pi et du nombre positif donn\u00e9. >>> round(SQRTPI(1), 6) 1.772454 >>> round(SQRTPI(2), 6) 2.506628","title":"SQRTPI"},{"location":"functions/#subtotal","text":"Renvoie un sous-total pour une plage verticale de cellules en utilisant une fonction d\u2019agr\u00e9gation sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SUBTOTAL"},{"location":"functions/#sum","text":"Renvoie la somme d\u2019une s\u00e9rie de nombres. Chaque argument peut \u00eatre un nombre ou un tableau. Les valeurs non num\u00e9riques sont ignor\u00e9es. >>> SUM([5,15,30]) 50 >>> SUM([5.,15,30], 2) 52.0 >>> SUM(5,15,[30],[2]) 52","title":"SUM"},{"location":"functions/#sumif","text":"Renvoie une somme conditionnelle sur une plage. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SUMIF"},{"location":"functions/#sumifs","text":"Renvoie la somme d\u2019une plage en fonction de plusieurs crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SUMIFS"},{"location":"functions/#sumproduct","text":"Multiplie les composants correspondants dans deux tableaux de taille \u00e9gale, et renvoie la somme de ces produits. >>> SUMPRODUCT([3,8,1,4,6,9], [2,6,5,7,7,3]) 156 >>> SUMPRODUCT([], [], []) 0 >>> SUMPRODUCT([-0.25], [-2], [-3]) -1.5 >>> SUMPRODUCT([-0.25, -0.25], [-2, -2], [-3, -3]) -3.0","title":"SUMPRODUCT"},{"location":"functions/#sumsq","text":"Renvoie la somme des carr\u00e9s d\u2019une s\u00e9rie de nombres et/ou de cellules. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SUMSQ"},{"location":"functions/#tan","text":"Renvoie la tangente d\u2019un angle donn\u00e9 en radians. >>> round(TAN(0.785), 8) 0.99920399 >>> round(TAN(45*PI()/180), 10) 1.0 >>> round(TAN(RADIANS(45)), 10) 1.0","title":"TAN"},{"location":"functions/#tanh","text":"Renvoie la tangente hyperbolique de tout nombre r\u00e9el. >>> round(TANH(-2), 6) -0.964028 >>> TANH(0) 0.0 >>> round(TANH(0.5), 6) 0.462117","title":"TANH"},{"location":"functions/#trunc","text":"Tronque un nombre \u00e0 un certain nombre de chiffres significatifs en omettant les chiffres moins significatifs. >>> TRUNC(8.9) 8 >>> TRUNC(-8.9) -8 >>> TRUNC(0.45) 0","title":"TRUNC"},{"location":"functions/#uuid","text":"G\u00e9n\u00e8re un identifiant de cha\u00eene format\u00e9 UUID al\u00e9atoire. Puisque UUID() produit une valeur diff\u00e9rente chaque fois qu\u2019il est appel\u00e9, il est pr\u00e9f\u00e9rable de l\u2019utiliser dans formule de d\u00e9clenchement pour de nouveaux enregistrements. Cela ne calculerait UUID() qu\u2019une seule fois et figerait la valeur calcul\u00e9e. En revanche, une formule ordinaire peut \u00eatre recalcul\u00e9e \u00e0 chaque fois que le document est recharg\u00e9, produisant une valeur diff\u00e9rente pour UUID() \u00e0 chaque fois.","title":"UUID"},{"location":"functions/#horaire","text":"","title":"Horaire"},{"location":"functions/#schedule","text":"Renvoie la liste des objets datetime g\u00e9n\u00e9r\u00e9s selon la cha\u00eene horaire . Commence \u00e0 d\u00e9but , qui par d\u00e9faut est NOW(). G\u00e9n\u00e8re au maximum compte r\u00e9sultats (10 par d\u00e9faut). Si fin est donn\u00e9, s\u2019arr\u00eate l\u00e0. L\u2019horaire a le format \u201cINTERVALLE : SLOTS, \u2026\u201d. Par exemple : annuel : Jan-15, Apr-15, Jul-15 -- Trois fois par an aux dates donn\u00e9es \u00e0 minuit. annuel : 1/15, 4/15, 7/15 -- Identique \u00e0 ce qui pr\u00e9c\u00e8de. mensuel : /1 14h, /15 14h -- Le 1er et le 15 de chaque mois, \u00e0 14h. 3-mois : /10, +1m /20 -- Tous les 3 mois le 10 du mois 1, le 20 du mois 2. hebdomadaire : Lu 9h, Ma 9h, Ve 14h -- Trois fois par semaine \u00e0 des heures sp\u00e9cifi\u00e9es. 2-semaines : Lu, +1s Ma -- Toutes les 2 semaines le lundi de la semaine 1, le mardi de la semaine 2. quotidien : 07:30, 21:00 -- Deux fois par jour \u00e0 des heures sp\u00e9cifi\u00e9es. 2-jours : 00h, 16h, +1j 08h -- Trois fois tous les deux jours, espac\u00e9s uniform\u00e9ment. horaire : :15, :45 -- 15 minutes avant et apr\u00e8s chaque heure. 4-heures : :00, 1:20, 2:40 -- Trois fois toutes les 4 heures, espac\u00e9s uniform\u00e9ment. 10-minutes : +0s -- Toutes les 10 minutes \u00e0 la minute. L\u2019INTERVALLE doit \u00eatre soit de la forme N-unit\u00e9 o\u00f9 N est un nombre et unit\u00e9 est l\u2019un des ann\u00e9e , mois , semaine , jour , heure ; ou l\u2019un des alias : annuel , mensuel , hebdomadaire , quotidien , horaire , qui signifient 1-ann\u00e9e , 1-mois , etc. Les SLOTS prennent en charge les unit\u00e9s suivantes : `Jan-15` ou `1/15` -- Mois et jour du mois ; disponible lorsque l'INTERVALLE est bas\u00e9 sur l'ann\u00e9e. `/15` -- Jour du mois, disponible lorsque l'INTERVALLE est bas\u00e9 sur le mois. `Lun`, `Lu`, `Vendredi` -- Jour de la semaine (ou abr\u00e9viation), lorsque l'INTERVALLE est bas\u00e9 sur la semaine. 10h, 13h30, 15h45 -- Heure de la journ\u00e9e, disponible pour des intervalles bas\u00e9s sur le jour ou plus longs. :45, :00 -- Minutes de l'heure, disponibles lorsque l'INTERVALLE est bas\u00e9 sur l'heure. +1j, +15j -- Combien de jours ajouter au d\u00e9but de l'INTERVALLE. +1s -- Combien de semaines ajouter au d\u00e9but de l'INTERVALLE. +1m -- Combien de mois ajouter au d\u00e9but de l'INTERVALLE. Les SLOTS sont toujours relatifs \u00e0 l\u2019INTERVALLE plut\u00f4t qu\u2019\u00e0 d\u00e9but . Les intervalles bas\u00e9s sur la semaine commencent le dimanche. Par exemple, hebdomadaire : +1j, +4j est identique \u00e0 hebdomadaire : Lun, Jeu , et g\u00e9n\u00e8re des heures les lundis et jeudis, quel que soit d\u00e9but . Le premier temps g\u00e9n\u00e9r\u00e9 est d\u00e9termin\u00e9 par l\u2019 unit\u00e9 de l\u2019INTERVALLE sans tenir compte du multiple. Par exemple, \u00e0 la fois \u201c2-semaine : Lun\u201d et \u201c3-semaine : Lun\u201d commencent le premier lundi apr\u00e8s d\u00e9but , et g\u00e9n\u00e8rent ensuite soit tous les deuxi\u00e8mes soit tous les troisi\u00e8mes lundis apr\u00e8s cela. De m\u00eame, 24-heures : :00 commence avec le premier d\u00e9but d\u2019heure apr\u00e8s d\u00e9but (pas avec minuit), puis se r\u00e9p\u00e8te toutes les 24 heures. Pour commencer avec la minuit apr\u00e8s d\u00e9but , utilisez quotidien : 0:00 . Pour les unit\u00e9s d\u2019intervalle d\u2019un jour ou plus, si l\u2019heure de la journ\u00e9e n\u2019est pas sp\u00e9cifi\u00e9e, elle par d\u00e9faut \u00e0 minuit. Le fuseau horaire de d\u00e9but d\u00e9termine le fuseau horaire des temps g\u00e9n\u00e9r\u00e9s. >>> def show(dates): return [d.strftime(\"%Y-%m-%d %H:%M\") for d in dates] >>> start = datetime(2018, 9, 4, 14, 0); # 14h le mardi 4 septembre 2018. >>> show(SCHEDULE('annual: Jan-15, Apr-15, Jul-15, Oct-15', start=start, count=4)) ['2018-10-15 00:00', '2019-01-15 00:00', '2019-04-15 00:00', '2019-07-15 00:00'] >>> show(SCHEDULE('annual: 1/15, 4/15, 7/15', start=start, count=4)) ['2019-01-15 00:00', '2019-04-15 00:00', '2019-07-15 00:00', '2020-01-15 00:00'] >>> show(SCHEDULE('monthly: /1 14h, /15 17h', start=start, count=4)) ['2018-09-15 17:00', '2018-10-01 14:00', '2018-10-15 17:00', '2018-11-01 14:00'] >>> show(SCHEDULE('3-months: /10, +1m /20', start=start, count=4)) ['2018-09-10 00:00', '2018-10-20 00:00', '2018-12-10 00:00', '2019-01-20 00:00'] >>> show(SCHEDULE('weekly: Lu 9h, Ma 9h, Ve 14h', start=start, count=4)) ['2018-09-07 14:00', '2018-09-10 09:00', '2018-09-11 09:00', '2018-09-14 14:00'] >>> show(SCHEDULE('2-semaines: Lu, +1s Ma', start=start, count=4)) ['2018-09-11 00:00', '2018-09-17 00:00', '2018-09-25 00:00', '2018-10-01 00:00'] >>> show(SCHEDULE('quotidien: 07:30, 21:00', start=start, count=4)) ['2018-09-04 21:00', '2018-09-05 07:30', '2018-09-05 21:00', '2018-09-06 07:30'] >>> show(SCHEDULE('2-jours: 00h, 16h, +1j 08h', start=start, count=4)) ['2018-09-04 16:00', '2018-09-05 08:00', '2018-09-06 00:00', '2018-09-06 16:00'] >>> show(SCHEDULE('horaire: :15, :45', start=start, count=4)) ['2018-09-04 14:15', '2018-09-04 14:45', '2018-09-04 15:15', '2018-09-04 15:45'] >>> show(SCHEDULE('4-heures: :00, +1H :20, +2H :40', start=start, count=4)) ['2018-09-04 14:00', '2018-09-04 15:20', '2018-09-04 16:40', '2018-09-04 18:00']","title":"SCHEDULE"},{"location":"functions/#statistiques","text":"","title":"Statistiques"},{"location":"functions/#avedev","text":"Calcule la moyenne des magnitudes des \u00e9carts des donn\u00e9es par rapport \u00e0 la moyenne d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"AVEDEV"},{"location":"functions/#average","text":"Renvoie la valeur moyenne num\u00e9rique dans un ensemble de donn\u00e9es, en ignorant les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les valeurs logiques et vides, et les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. >>> AVERAGE([2, -1.0, 11]) 4.0 >>> AVERAGE([2, -1, 11, \"Bonjour\"]) 4.0 >>> AVERAGE([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11]) 4.0 >>> AVERAGE(False, True) Traceback (most recent call last): ... ZeroDivisionError: float division by zero","title":"AVERAGE"},{"location":"functions/#averagea","text":"Renvoie la valeur moyenne num\u00e9rique dans un ensemble de donn\u00e9es, en comptant les valeurs non num\u00e9riques comme 0. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. >>> AVERAGEA([2, -1.0, 11]) 4.0 >>> AVERAGEA([2, -1, 11, \"Bonjour\"]) 3.0 >>> AVERAGEA([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 1.5 >>> AVERAGEA(False, True) 0.5","title":"AVERAGEA"},{"location":"functions/#averageif","text":"Renvoie la moyenne d\u2019une plage en fonction de crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"AVERAGEIF"},{"location":"functions/#averageifs","text":"Renvoie la moyenne d\u2019une plage en fonction de plusieurs crit\u00e8res. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"AVERAGEIFS"},{"location":"functions/#average_weighted","text":"\u00c9tant donn\u00e9 une liste de paires (valeur, poids), trouve la moyenne des valeurs pond\u00e9r\u00e9es par les poids correspondants. Ignore toutes les paires avec une valeur ou un poids non num\u00e9rique. Si vous avez deux listes, de valeurs et de poids, utilisez la fonction int\u00e9gr\u00e9e Python zip() pour cr\u00e9er une liste de paires. >>> AVERAGE_WEIGHTED(((95, .25), (90, .1), (\"X\", .5), (85, .15), (88, .2), (82, .3), (70, None))) 87.7 >>> AVERAGE_WEIGHTED(zip([95, 90, \"X\", 85, 88, 82, 70], [25, 10, 50, 15, 20, 30, None])) 87.7 >>> AVERAGE_WEIGHTED(zip([95, 90, False, 85, 88, 82, 70], [.25, .1, .5, .15, .2, .3, True])) 87.7","title":"AVERAGE_WEIGHTED"},{"location":"functions/#binomdist","text":"Calcule la probabilit\u00e9 de tirer un certain nombre de succ\u00e8s (ou un nombre maximum de succ\u00e8s) dans un certain nombre d\u2019essais donn\u00e9 une population d\u2019une certaine taille contenant un certain nombre de succ\u00e8s, avec remplacement des tirages. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"BINOMDIST"},{"location":"functions/#confidence","text":"Calcule la largeur de la moiti\u00e9 de l\u2019intervalle de confiance pour une distribution normale. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CONFIDENCE"},{"location":"functions/#correl","text":"Calcule r, le coefficient de corr\u00e9lation de produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CORREL"},{"location":"functions/#count","text":"Renvoie le nombre de valeurs num\u00e9riques et de dates/datetime dans un ensemble de donn\u00e9es, ignorant d\u2019autres types de valeurs. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et vides, et les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. >>> COUNT([2, -1.0, 11]) 3 >>> COUNT([2, -1, 11, \"Bonjour\"]) 3 >>> COUNT([DATE(2000, 1, 1), DATE(2000, 1, 2), DATE(2000, 1, 3), \"Bonjour\"]) 3 >>> COUNT([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 4 >>> COUNT(False, True) 0","title":"COUNT"},{"location":"functions/#counta","text":"Renvoie le nombre de toutes les valeurs dans un ensemble de donn\u00e9es, y compris les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. >>> COUNTA([2, -1.0, 11]) 3 >>> COUNTA([2, -1, 11, \"Bonjour\"]) 4 >>> COUNTA([2, -1, \"Bonjour\", DATE(2015,1,1)], True, [False, \"123\", \"\", 11.5]) 9 >>> COUNTA(False, True) 2","title":"COUNTA"},{"location":"functions/#covar","text":"Calcule la covariance d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"COVAR"},{"location":"functions/#critbinom","text":"Calcule la plus petite valeur pour laquelle la distribution binomiale cumulative est sup\u00e9rieure ou \u00e9gale \u00e0 un crit\u00e8re sp\u00e9cifi\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"CRITBINOM"},{"location":"functions/#devsq","text":"Calcule la somme des carr\u00e9s des \u00e9carts bas\u00e9s sur un \u00e9chantillon. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"DEVSQ"},{"location":"functions/#expondist","text":"Renvoie la valeur de la fonction de distribution exponentielle avec un lambda sp\u00e9cifi\u00e9 \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"EXPONDIST"},{"location":"functions/#fdist","text":"Calcule la distribution de probabilit\u00e9 F \u00e0 droite (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"FDIST"},{"location":"functions/#fisher","text":"Renvoie la transformation de Fisher d\u2019une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"FISHER"},{"location":"functions/#fisherinv","text":"Renvoie la transformation inverse de Fisher d\u2019une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"FISHERINV"},{"location":"functions/#forecast","text":"Calcule la valeur y attendue pour un x sp\u00e9cifi\u00e9 bas\u00e9 sur une r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"FORECAST"},{"location":"functions/#f_dist","text":"Calcule la distribution de probabilit\u00e9 F \u00e0 gauche (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"F_DIST"},{"location":"functions/#f_dist_rt","text":"Calcule la distribution de probabilit\u00e9 F \u00e0 droite (degr\u00e9 de diversit\u00e9) pour deux ensembles de donn\u00e9es avec l\u2019entr\u00e9e x donn\u00e9e. \u00c9galement appel\u00e9e distribution de Fisher-Snedecor ou distribution F de Snedecor. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"F_DIST_RT"},{"location":"functions/#geomean","text":"Calcule la moyenne g\u00e9om\u00e9trique d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"GEOMEAN"},{"location":"functions/#harmean","text":"Calcule la moyenne harmonique d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"HARMEAN"},{"location":"functions/#hypgeomdist","text":"Calcule la probabilit\u00e9 de tirer un certain nombre de succ\u00e8s dans un certain nombre d\u2019essais, \u00e9tant donn\u00e9 une population d\u2019une certaine taille contenant un certain nombre de succ\u00e8s, sans remplacement des tirages. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"HYPGEOMDIST"},{"location":"functions/#intercept","text":"Calcule la valeur y \u00e0 laquelle la ligne r\u00e9sultant de la r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es va intersecter l\u2019axe y (x=0). Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"INTERCEPT"},{"location":"functions/#kurt","text":"Calcule la kurtose d\u2019un ensemble de donn\u00e9es, qui d\u00e9crit la forme, et en particulier le \u201cpic\u201d de cet ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"KURT"},{"location":"functions/#large","text":"Renvoie le n-i\u00e8me plus grand \u00e9l\u00e9ment d\u2019un ensemble de donn\u00e9es, o\u00f9 n est d\u00e9fini par l\u2019utilisateur. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"LARGE"},{"location":"functions/#loginv","text":"Renvoie la valeur de la distribution cumulative log-normale inverse avec une moyenne et un \u00e9cart type donn\u00e9s \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"LOGINV"},{"location":"functions/#lognormdist","text":"Renvoie la valeur de la distribution cumulative log-normale avec une moyenne et un \u00e9cart type donn\u00e9s \u00e0 une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"LOGNORMDIST"},{"location":"functions/#max","text":"Renvoie la valeur maximale d\u2019un ensemble de donn\u00e9es, en ignorant les valeurs autres que les nombres et les dates/datetime. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Renvoie 0 si les arguments ne contiennent aucun nombre ou date. >>> MAX([2, -1.5, 11.5]) 11.5 >>> MAX([2, -1.5, \"Hello\"], True, [False, \"123\", \"\", 11.5]) 11.5 >>> MAX(True, -123) -123 >>> MAX(\"123\", -123) -123 >>> MAX(\"Hello\", \"123\", True, False) 0 >>> MAX(DATE(2015, 1, 1), DATE(2015, 1, 2)) datetime.date(2015, 1, 2) >>> MAX(DATE(2015, 1, 1), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.datetime(2015, 1, 1, 12, 34, 56) >>> MAX(DATE(2015, 1, 2), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.date(2015, 1, 2)","title":"MAX"},{"location":"functions/#maxa","text":"Renvoie la valeur num\u00e9rique maximale d\u2019un ensemble de donn\u00e9es. Chaque argument peut \u00eatre une valeur d\u2019un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. Renvoie 0 si les arguments ne contiennent aucun nombre. >>> MAXA([2, -1.5, 11.5]) 11.5 >>> MAXA([2, -1.5, \"Hello\", DATE(2015, 1, 1)], True, [False, \"123\", \"\", 11.5]) 11.5 >>> MAXA(True, -123) 1 >>> MAXA(\"123\", -123) 0 >>> MAXA(\"Hello\", \"123\", DATE(2015, 1, 1)) 0","title":"MAXA"},{"location":"functions/#median","text":"Renvoie la valeur m\u00e9diane d\u2019un ensemble de donn\u00e9es num\u00e9riques, en ignorant les valeurs non num\u00e9riques. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Produit une erreur si les arguments ne contiennent aucun nombre. La m\u00e9diane est le nombre du milieu lorsque toutes les valeurs sont tri\u00e9es. Ainsi, la moiti\u00e9 des valeurs dans l\u2019ensemble de donn\u00e9es sont inf\u00e9rieures \u00e0 la m\u00e9diane, et l\u2019autre moiti\u00e9 est sup\u00e9rieure. S\u2019il y a un nombre pair de valeurs dans l\u2019ensemble de donn\u00e9es, renvoie la moyenne des deux nombres du milieu. >>> MEDIAN(1, 2, 3, 4, 5) 3 >>> MEDIAN(3, 5, 1, 4, 2) 3 >>> MEDIAN(range(10)) 4.5 >>> MEDIAN(\"Hello\", \"123\", DATE(2015, 1, 1), 12.3) 12.3 >>> MEDIAN(\"Hello\", \"123\", DATE(2015, 1, 1)) Traceback (most recent call last): ... ValueError: MEDIAN requires at least one number","title":"MEDIAN"},{"location":"functions/#min","text":"Renvoie la valeur minimale d\u2019un ensemble de donn\u00e9es, en ignorant les valeurs autres que les nombres et les dates/datetimes. Chaque argument peut \u00eatre une valeur ou un tableau. Les valeurs qui ne sont pas des nombres ou des dates, y compris les valeurs logiques et les valeurs vides, ainsi que les repr\u00e9sentations textuelles de nombres, sont ignor\u00e9es. Renvoie 0 si les arguments ne contiennent aucun nombre ou date. >>> MIN([2, -1.5, 11.5]) -1.5 >>> MIN([2, -1.5, \"Hello\"], True, [False, \"123\", \"\", 11.5]) -1.5 >>> MIN(True, 123) 123 >>> MIN(\"-123\", 123) 123 >>> MIN(\"Hello\", \"123\", True, False) 0 >>> MIN(DATE(2015, 1, 1), DATE(2015, 1, 2)) datetime.date(2015, 1, 1) >>> MIN(DATE(2015, 1, 1), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.date(2015, 1, 1) >>> MIN(DATE(2015, 1, 2), datetime.datetime(2015, 1, 1, 12, 34, 56)) datetime.datetime(2015, 1, 1, 12, 34, 56)","title":"MIN"},{"location":"functions/#mina","text":"Renvoie la valeur num\u00e9rique minimale d\u2019un ensemble de donn\u00e9es. Chaque argument peut \u00eatre une valeur d\u2019un tableau. Les valeurs qui ne sont pas des nombres, y compris les dates et les repr\u00e9sentations textuelles de nombres, sont compt\u00e9es comme 0 (z\u00e9ro). La valeur logique de True est compt\u00e9e comme 1, et False comme 0. Renvoie 0 si les arguments ne contiennent aucun nombre. >>> MINA([2, -1.5, 11.5]) -1.5 >>> MINA([2, -1.5, \"Hello\", DATE(2015, 1, 1)], True, [False, \"123\", \"\", 11.5]) -1.5 >>> MINA(True, 123) 1 >>> MINA(\"-123\", 123) 0 >>> MINA(\"Hello\", \"123\", DATE(2015, 1, 1)) 0","title":"MINA"},{"location":"functions/#mode","text":"Renvoie la valeur la plus courante dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"MODE"},{"location":"functions/#negbinomdist","text":"Calcule la probabilit\u00e9 de tirer un certain nombre d\u2019\u00e9checs avant un certain nombre de succ\u00e8s, \u00e9tant donn\u00e9 une probabilit\u00e9 de succ\u00e8s dans des essais ind\u00e9pendants. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NEGBINOMDIST"},{"location":"functions/#normdist","text":"Renvoie la valeur de la fonction de distribution normale (ou fonction de distribution cumulative normale) pour une valeur sp\u00e9cifi\u00e9e, une moyenne et un \u00e9cart type. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NORMDIST"},{"location":"functions/#norminv","text":"Renvoie la valeur de la fonction de distribution normale inverse pour une valeur sp\u00e9cifi\u00e9e, une moyenne et un \u00e9cart type. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NORMINV"},{"location":"functions/#normsdist","text":"Renvoie la valeur de la fonction de distribution cumulative normale standard pour une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NORMSDIST"},{"location":"functions/#normsinv","text":"Renvoie la valeur de la fonction de distribution normale standard inverse pour une valeur sp\u00e9cifi\u00e9e. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"NORMSINV"},{"location":"functions/#pearson","text":"Calcule r, le coefficient de corr\u00e9lation produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PEARSON"},{"location":"functions/#percentile","text":"Renvoie la valeur \u00e0 un certain percentile d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERCENTILE"},{"location":"functions/#percentrank","text":"Renvoie le rang en pourcentage (percentile) d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERCENTRANK"},{"location":"functions/#percentrank_exc","text":"Renvoie le rang en pourcentage (percentile) de 0 \u00e0 1 exclusif d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERCENTRANK_EXC"},{"location":"functions/#percentrank_inc","text":"Renvoie le rang en pourcentage (percentile) de 0 \u00e0 1 inclusif d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERCENTRANK_INC"},{"location":"functions/#permut","text":"Renvoie le nombre de fa\u00e7ons de choisir un certain nombre d\u2019objets \u00e0 partir d\u2019un ensemble d\u2019une taille donn\u00e9e d\u2019objets, en tenant compte de l\u2019ordre. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PERMUT"},{"location":"functions/#poisson","text":"Renvoie la valeur de la fonction de distribution de Poisson (ou fonction de distribution cumulative de Poisson) pour une valeur et une moyenne sp\u00e9cifi\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"POISSON"},{"location":"functions/#prob","text":"\u00c9tant donn\u00e9 un ensemble de valeurs et des probabilit\u00e9s correspondantes, calcule la probabilit\u00e9 qu\u2019une valeur choisie au hasard tombe entre deux limites. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"PROB"},{"location":"functions/#quartile","text":"Renvoie une valeur la plus proche d\u2019un certain quartile d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"QUARTILE"},{"location":"functions/#rank_avg","text":"Renvoie le rang d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. S\u2019il y a plus d\u2019une entr\u00e9e de la m\u00eame valeur dans l\u2019ensemble de donn\u00e9es, le rang moyen des entr\u00e9es sera renvoy\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"RANK_AVG"},{"location":"functions/#rank_eq","text":"Renvoie le rang d\u2019une valeur sp\u00e9cifi\u00e9e dans un ensemble de donn\u00e9es. S\u2019il y a plus d\u2019une entr\u00e9e de la m\u00eame valeur dans l\u2019ensemble de donn\u00e9es, le meilleur rang des entr\u00e9es sera renvoy\u00e9. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"RANK_EQ"},{"location":"functions/#rsq","text":"Calcule le carr\u00e9 de r, le coefficient de corr\u00e9lation produit-moment de Pearson d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"RSQ"},{"location":"functions/#skew","text":"Calcule l\u2019asym\u00e9trie d\u2019un ensemble de donn\u00e9es, qui d\u00e9crit la sym\u00e9trie de cet ensemble de donn\u00e9es par rapport \u00e0 la moyenne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SKEW"},{"location":"functions/#slope","text":"Calcule la pente de la ligne r\u00e9sultant de la r\u00e9gression lin\u00e9aire d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SLOPE"},{"location":"functions/#small","text":"Renvoie le n-i\u00e8me plus petit \u00e9l\u00e9ment d\u2019un ensemble de donn\u00e9es, o\u00f9 n est d\u00e9fini par l\u2019utilisateur. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"SMALL"},{"location":"functions/#standardize","text":"Calcule l\u2019\u00e9quivalent normalis\u00e9 d\u2019une variable al\u00e9atoire donn\u00e9e la moyenne et l\u2019\u00e9cart type de la distribution. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"STANDARDIZE"},{"location":"functions/#stdev","text":"Calcule l\u2019\u00e9cart type bas\u00e9 sur un \u00e9chantillon, en ignorant les valeurs non num\u00e9riques. >>> STDEV([2, 5, 8, 13, 10]) 4.277849927241488 >>> STDEV([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.277849927241488 >>> STDEV([2, 5, 8, 13, 10], 3, 12, 15) 4.810702354423639 >>> STDEV([2, 5, 8, 13, 10], [3, 12, 15]) 4.810702354423639 >>> STDEV([5]) Traceback (most recent call last): ... ZeroDivisionError: float division by zero","title":"STDEV"},{"location":"functions/#stdeva","text":"Calcule l\u2019\u00e9cart type bas\u00e9 sur un \u00e9chantillon, en consid\u00e9rant le texte comme la valeur 0 . >>> STDEVA([2, 5, 8, 13, 10]) 4.277849927241488 >>> STDEVA([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.969550137731641 >>> STDEVA([2, 5, 8, 13, 10], 1, 0, 0) 4.969550137731641 >>> STDEVA([2, 5, 8, 13, 10], [1, 0, 0]) 4.969550137731641 >>> STDEVA([5]) Traceback (most recent call last): ... ZeroDivisionError: float division by zero","title":"STDEVA"},{"location":"functions/#stdevp","text":"Calcule l\u2019\u00e9cart type bas\u00e9 sur une population enti\u00e8re, en ignorant les valeurs non num\u00e9riques. >>> STDEVP([2, 5, 8, 13, 10]) 3.8262252939417984 >>> STDEVP([2, 5, 8, 13, 10, True, False, \"Test\"]) 3.8262252939417984 >>> STDEVP([2, 5, 8, 13, 10], 3, 12, 15) 4.5 >>> STDEVP([2, 5, 8, 13, 10], [3, 12, 15]) 4.5 >>> STDEVP([5]) 0.0","title":"STDEVP"},{"location":"functions/#stdevpa","text":"Calcule l\u2019\u00e9cart type bas\u00e9 sur une population enti\u00e8re, en consid\u00e9rant le texte comme la valeur 0 . >>> STDEVPA([2, 5, 8, 13, 10]) 3.8262252939417984 >>> STDEVPA([2, 5, 8, 13, 10, True, False, \"Test\"]) 4.648588495446763 >>> STDEVPA([2, 5, 8, 13, 10], 1, 0, 0) 4.648588495446763 >>> STDEVPA([2, 5, 8, 13, 10], [1, 0, 0]) 4.648588495446763 >>> STDEVPA([5]) 0.0","title":"STDEVPA"},{"location":"functions/#steyx","text":"Calcule l\u2019erreur standard de la valeur y pr\u00e9dite pour chaque x dans la r\u00e9gression d\u2019un ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"STEYX"},{"location":"functions/#tdist","text":"Calcule la probabilit\u00e9 pour la distribution t de Student avec une entr\u00e9e donn\u00e9e (x). Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TDIST"},{"location":"functions/#tinv","text":"Calcule l\u2019inverse de la fonction TDIST \u00e0 deux queues. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TINV"},{"location":"functions/#trimmean","text":"Calcule la moyenne d\u2019un ensemble de donn\u00e9es en excluant une certaine proportion de donn\u00e9es des extr\u00e9mit\u00e9s haute et basse de l\u2019ensemble de donn\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TRIMMEAN"},{"location":"functions/#ttest","text":"Renvoie la probabilit\u00e9 associ\u00e9e au test t. D\u00e9termine si deux \u00e9chantillons sont susceptibles de provenir des m\u00eames deux populations sous-jacentes ayant la m\u00eame moyenne. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TTEST"},{"location":"functions/#t_inv","text":"Calcule l\u2019inverse n\u00e9gatif de la fonction TDIST \u00e0 une queue. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"T_INV"},{"location":"functions/#t_inv_2t","text":"Calcule l\u2019inverse de la fonction TDIST \u00e0 deux queues. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"T_INV_2T"},{"location":"functions/#var","text":"Calcule la variance bas\u00e9e sur un \u00e9chantillon. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"VAR"},{"location":"functions/#vara","text":"Calcule une estimation de la variance bas\u00e9e sur un \u00e9chantillon, en consid\u00e9rant le texte comme la valeur 0 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"VARA"},{"location":"functions/#varp","text":"Calcule la variance bas\u00e9e sur une population enti\u00e8re. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"VARP"},{"location":"functions/#varpa","text":"Calcule la variance bas\u00e9e sur une population enti\u00e8re, en consid\u00e9rant le texte comme la valeur 0 . Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"VARPA"},{"location":"functions/#weibull","text":"Renvoie la valeur de la fonction de distribution de Weibull (ou fonction de distribution cumulative de Weibull) pour une forme et une \u00e9chelle sp\u00e9cifi\u00e9es. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"WEIBULL"},{"location":"functions/#ztest","text":"Renvoie la valeur P \u00e0 deux queues d\u2019un test Z avec distribution standard. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"ZTEST"},{"location":"functions/#texte","text":"","title":"Texte"},{"location":"functions/#char","text":"Convertit un nombre en un caract\u00e8re selon la table Unicode actuelle. Identique \u00e0 unichr(number) . >>> CHAR(65) u'A' >>> CHAR(33) u'!'","title":"CHAR"},{"location":"functions/#clean","text":"Renvoie le texte avec les caract\u00e8res non imprimables supprim\u00e9s. Cela supprime \u00e0 la fois les caract\u00e8res avec des valeurs de 0 \u00e0 31, et d\u2019autres caract\u00e8res Unicode dans la cat\u00e9gorie \u201ccaract\u00e8res de contr\u00f4le\u201d. >>> CLEAN(CHAR(9) + \"Rapport mensuel\" + CHAR(10)) u'Rapport mensuel'","title":"CLEAN"},{"location":"functions/#code","text":"Renvoie la valeur de la carte Unicode num\u00e9rique du premier caract\u00e8re de la cha\u00eene fournie. Identique \u00e0 ord(string[0]) . >>> CODE(\"A\") 65 >>> CODE(\"!\") 33 >>> CODE(\"!A\") 33","title":"CODE"},{"location":"functions/#concat","text":"Joint ensemble de cha\u00eenes de texte en une seule cha\u00eene. \u00c9galement disponible sous le nom CONCATENATE . Semblable \u00e0 l\u2019expression Python \"\".join(array_of_strings) . >>> CONCAT(\"Population de ruisseau pour \", \"truite\", \" \", \"esp\u00e8ces\", \" est \", 32, \"/mile.\") u'Population de ruisseau pour truite esp\u00e8ces est 32/mile.' >>> CONCAT(\"Dans \", 4, \" jours, c'est \", datetime.date(2016,1,1)) u'Dans 4 jours, c'est 2016-01-01' >>> CONCAT(\"abc\") u'abc' >>> CONCAT(0, \"abc\") u'0abc' >>> assert CONCAT(2, u\" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e'","title":"CONCAT"},{"location":"functions/#concatenate","text":"Joint ensemble de cha\u00eenes de texte en une seule cha\u00eene. \u00c9galement disponible sous le nom CONCAT . Semblable \u00e0 l\u2019expression Python \"\".join(array_of_strings) . >>> CONCATENATE(\"Population de ruisseau pour \", \"truite\", \" \", \"esp\u00e8ces\", \" est \", 32, \"/mile.\") u'Population de ruisseau pour truite esp\u00e8ces est 32/mile.' >>> CONCATENATE(\"Dans \", 4, \" jours, c'est \", datetime.date(2016,1,1)) u'Dans 4 jours, c'est 2016-01-01' >>> CONCATENATE(\"abc\") u'abc' >>> CONCATENATE(0, \"abc\") u'0abc' >>> assert CONCATENATE(2, u\" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' >>> assert CONCATENATE(2, \" cr\u00e8me \", u\"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e' >>> assert CONCATENATE(2, \" cr\u00e8me \", \"br\u00fbl\u00e9e\") == u'2 cr\u00e8me br\u00fbl\u00e9e'","title":"CONCATENATE"},{"location":"functions/#dollar","text":"Formate un nombre en un montant en dollars format\u00e9, avec des d\u00e9cimales arrondies \u00e0 la place sp\u00e9cifi\u00e9e (. Si la valeur des d\u00e9cimales est omise, elle est par d\u00e9faut \u00e0 2. >>> DOLLAR(1234.567) '$1,234.57' >>> DOLLAR(1234.567, -2) '$1,200' >>> DOLLAR(-1234.567, -2) '($1,200)' >>> DOLLAR(-0.123, 4) '($0.1230)' >>> DOLLAR(99.888) '$99.89' >>> DOLLAR(0) '$0.00' >>> DOLLAR(10, 0) '$10'","title":"DOLLAR"},{"location":"functions/#exact","text":"Teste si deux cha\u00eenes sont identiques. Identique \u00e0 string2 == string2 . >>> EXACT(\"mot\", \"mot\") True >>> EXACT(\"Mot\", \"mot\") False >>> EXACT(\"m ot\", \"mot\") False","title":"EXACT"},{"location":"functions/#find","text":"Renvoie la position \u00e0 laquelle une cha\u00eene est d\u2019abord trouv\u00e9e dans le texte. La recherche est sensible \u00e0 la casse. La position renvoy\u00e9e est 1 si within_text commence par find_text. start_num sp\u00e9cifie le caract\u00e8re \u00e0 partir duquel commencer la recherche, par d\u00e9faut \u00e0 1 (le premier caract\u00e8re de within_text). Si find_text n\u2019est pas trouv\u00e9, ou si start_num est invalide, l\u00e8ve une ValueError. >>> FIND(\"M\", \"Miriam McGovern\") 1 >>> FIND(\"m\", \"Miriam McGovern\") 6 >>> FIND(\"M\", \"Miriam McGovern\", 3) 8 >>> FIND(\" #\", \"Hello world # Test\") 12 >>> FIND(\"gle\", \"Google\", 1) 4 >>> FIND(\"GLE\", \"Google\", 1) Traceback (most recent call last): ... ValueError: substring not found >>> FIND(\"page\", \"homepage\") 5 >>> FIND(\"page\", \"homepage\", 6) Traceback (most recent call last): ... ValueError: substring not found","title":"FIND"},{"location":"functions/#fixed","text":"Formate un nombre avec un nombre fixe de d\u00e9cimales (2 par d\u00e9faut), et des virgules. Si no_commas est True, alors omet les virgules. >>> FIXED(1234.567, 1) '1,234.6' >>> FIXED(1234.567, -1) '1,230' >>> FIXED(-1234.567, -1, True) '-1230' >>> FIXED(44.332) '44.33' >>> FIXED(3521.478, 2, False) '3,521.48' >>> FIXED(-3521.478, 1, True) '-3521.5' >>> FIXED(3521.478, 0, True) '3521' >>> FIXED(3521.478, -2, True) '3500'","title":"FIXED"},{"location":"functions/#left","text":"Renvoie une sous-cha\u00eene de longueur num_chars \u00e0 partir du d\u00e9but de la cha\u00eene donn\u00e9e. Si num_chars est omise, elle est suppos\u00e9e \u00eatre 1. Identique \u00e0 string[:num_chars] . >>> LEFT(\"Prix de vente\", 4) 'Sale' >>> LEFT('Su\u00e8de') 'S' >>> LEFT('Texte', -1) Traceback (most recent call last): ... ValueError: num_chars invalid","title":"LEFT"},{"location":"functions/#len","text":"Renvoie le nombre de caract\u00e8res dans une cha\u00eene de texte, ou le nombre d\u2019\u00e9l\u00e9ments dans une liste. Identique \u00e0 len en python. Voir Ensemble d\u2019enregistrements pour un exemple d\u2019utilisation de len sur une liste d\u2019enregistrements. >>> LEN(\"Phoenix, AZ\") 11 >>> LEN(\"\") 0 >>> LEN(\" Un \") 11","title":"LEN"},{"location":"functions/#lower","text":"Convertit une cha\u00eene sp\u00e9cifi\u00e9e en minuscules. Identique \u00e0 text.lower() . >>> LOWER(\"E. E. Cummings\") 'e. e. cummings' >>> LOWER(\"Apt. 2B\") 'apt. 2b'","title":"LOWER"},{"location":"functions/#mid","text":"Renvoie un segment d\u2019une cha\u00eene, commen\u00e7ant \u00e0 start_num. Le premier caract\u00e8re dans le texte a start_num 1. >>> MID(\"Flux de fluide\", 1, 5) 'Fluid' >>> MID(\"Flux de fluide\", 7, 20) 'Flow' >>> MID(\"Flux de fluide\", 20, 5) '' >>> MID(\"Flux de fluide\", 0, 5) Traceback (most recent call last): ... ValueError: start_num invalid","title":"MID"},{"location":"functions/#phone_format","text":"Formate un num\u00e9ro de t\u00e9l\u00e9phone. Sans arguments optionnels, le num\u00e9ro doit commencer par \u201c+\u201d et le pr\u00e9fixe d\u2019appel international, et sera format\u00e9 comme un num\u00e9ro international, par exemple +12345678901 devient +1 234-567-8901 . L\u2019argument country permet de sp\u00e9cifier un code de pays \u00e0 2 lettres (par exemple \u201cUS\u201d ou \u201cGB\u201d) pour interpr\u00e9ter les num\u00e9ros de t\u00e9l\u00e9phone qui ne commencent pas par \u201c+\u201d. Par exemple, PHONE_FORMAT('2025555555', 'US') serait consid\u00e9r\u00e9 comme un num\u00e9ro am\u00e9ricain et format\u00e9 comme \u201c(202) 555-5555\u201d. Les num\u00e9ros de t\u00e9l\u00e9phone qui commencent par \u201c+\u201d ignorent country . Par exemple, PHONE_FORMAT('+33555555555', 'US') est un num\u00e9ro fran\u00e7ais car \u2018+33\u2019 est le pr\u00e9fixe international pour la France. L\u2019argument format sp\u00e9cifie le format de sortie, selon ce tableau : \"#\" ou \"NATL\" (par d\u00e9faut) - utilise le format national, sans le pr\u00e9fixe d\u2019appel international, lorsque c\u2019est possible. Par exemple (234) 567-8901 pour \u201cUS\u201d, ou 02 34 56 78 90 pour \u201cFR\u201d. Si country est omis, ou le num\u00e9ro ne correspond pas au pays donn\u00e9, le format international est utilis\u00e9 \u00e0 la place. \"+\" ou \"INTL\" - format international, par exemple +1 234-567-8901 ou +33 2 34 56 78 90 . \"*\" ou \"E164\" - format E164, comme international mais sans s\u00e9parateurs, par exemple +12345678901 . \"tel\" ou \"RFC3966\" - format adapt\u00e9 \u00e0 utiliser comme un hyperlien , par exemple \u2018tel:+1-234-567-8901\u2019. Lorsque vous sp\u00e9cifiez l\u2019argument format , vous pouvez omettre l\u2019argument country . C\u2019est-\u00e0-dire PHONE_FORMAT(value, \"tel\") est \u00e9quivalent \u00e0 PHONE_FORMAT(value, None, \"tel\") . Pour plus de d\u00e9tails, voir la biblioth\u00e8que Python phonenumbers qui sous-tend cette fonction. >>> PHONE_FORMAT(\"+12345678901\") u'+1 234-567-8901' >>> PHONE_FORMAT(\"2345678901\", \"US\") u'(234) 567-8901' >>> PHONE_FORMAT(\"2345678901\", \"GB\") u'023 4567 8901' >>> PHONE_FORMAT(\"2345678901\", \"GB\", \"+\") u'+44 23 4567 8901' >>> PHONE_FORMAT(\"+442345678901\", \"GB\") u'023 4567 8901' >>> PHONE_FORMAT(\"+12345678901\", \"GB\") u'+1 234-567-8901' >>> PHONE_FORMAT(\"(234) 567-8901\") Traceback (most recent call last): ... NumberParseException: (0) Missing or invalid default region. >>> PHONE_FORMAT(\"(234)567 89-01\", \"US\", \"tel\") u'tel:+1-234-567-8901' >>> PHONE_FORMAT(\"2/3456/7890\", \"FR\", '#') u'02 34 56 78 90' >>> PHONE_FORMAT(\"+33234567890\", '#') u'+33 2 34 56 78 90' >>> PHONE_FORMAT(\"+33234567890\", 'tel') u'tel:+33-2-34-56-78-90' >>> PHONE_FORMAT(\"tel:+1-234-567-8901\", country=\"US\", format=\"*\") u'+12345678901' >>> PHONE_FORMAT(33234567890) Traceback (most recent call last): ... TypeError: Le num\u00e9ro de t\u00e9l\u00e9phone doit \u00eatre une valeur textuelle. Si vous formatez une valeur d'une colonne Num\u00e9rique, convertissez d'abord cette colonne en Texte.","title":"PHONE_FORMAT"},{"location":"functions/#proper","text":"Met en majuscule chaque mot dans une cha\u00eene sp\u00e9cifi\u00e9e. Il convertit la premi\u00e8re lettre de chaque mot en majuscule, et toutes les autres lettres en minuscules. Identique \u00e0 text.title() . >>> PROPER('ceci est un TITRE') 'Ceci Est Un Titre' >>> PROPER('2-way street') '2-Way Street' >>> PROPER('76BudGet') '76Budget'","title":"PROPER"},{"location":"functions/#regexextract","text":"Extrait la premi\u00e8re partie du texte qui correspond \u00e0 l\u2019expression r\u00e9guli\u00e8re. >>> REGEXEXTRACT(\"Google Doc 101\", \"[0-9]+\") '101' >>> REGEXEXTRACT(\"Le prix aujourd'hui est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\") '826.25' S\u2019il y a une expression entre parenth\u00e8ses, elle est renvoy\u00e9e au lieu de la correspondance enti\u00e8re. >>> REGEXEXTRACT(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\") 'Content' >>> REGEXEXTRACT(\"Foo\", \"Bar\") Traceback (most recent call last): ... ValueError: REGEXEXTRACT text does not match","title":"REGEXEXTRACT"},{"location":"functions/#regexmatch","text":"Renvoie si un morceau de texte correspond \u00e0 une expression r\u00e9guli\u00e8re. >>> REGEXMATCH(\"Google Doc 101\", \"[0-9]+\") True >>> REGEXMATCH(\"Google Doc\", \"[0-9]+\") False >>> REGEXMATCH(\"Le prix aujourd'hui est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\") True >>> REGEXMATCH(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\") True >>> REGEXMATCH(\"Foo\", \"Bar\") False","title":"REGEXMATCH"},{"location":"functions/#regexreplace","text":"Remplace toutes les parties du texte correspondant \u00e0 l\u2019expression r\u00e9guli\u00e8re donn\u00e9e par le texte de remplacement. >>> REGEXREPLACE(\"Google Doc 101\", \"[0-9]+\", \"777\") 'Google Doc 777' >>> REGEXREPLACE(\"Google Doc\", \"[0-9]+\", \"777\") 'Google Doc' >>> REGEXREPLACE(\"Le prix est de $826.25\", \"[0-9]*\\.[0-9]+[0-9]+\", \"315.75\") 'Le prix est de $315.75' >>> REGEXREPLACE(\"(Contenu) entre crochets\", \"\\(([A-Za-z]+)\\)\", \"Mot\") 'Mot entre crochets' >>> REGEXREPLACE(\"Foo\", \"Bar\", \"Baz\") 'Foo'","title":"REGEXREPLACE"},{"location":"functions/#replace","text":"Remplace une partie d\u2019une cha\u00eene de texte par une cha\u00eene de texte diff\u00e9rente. La position est compt\u00e9e \u00e0 partir de 1. >>> REPLACE(\"abcdefghijk\", 6, 5, \"*\") 'abcde*k' >>> REPLACE(\"2009\", 3, 2, \"10\") '2010' >>> REPLACE('123456', 1, 3, '@') '@456' >>> REPLACE('foo', 1, 0, 'bar') 'barfoo' >>> REPLACE('foo', 0, 1, 'bar') Traceback (most recent call last): ... ValueError: position invalid","title":"REPLACE"},{"location":"functions/#rept","text":"Renvoie le texte sp\u00e9cifi\u00e9 r\u00e9p\u00e9t\u00e9 un certain nombre de fois. Identique \u00e0 text * number_times . Le r\u00e9sultat de la fonction REPT ne peut pas d\u00e9passer 32767 caract\u00e8res, sinon cela l\u00e8ve une ValueError. >>> REPT(\"*-\", 3) '*-*-*-' >>> REPT('-', 10) '----------' >>> REPT('-', 0) '' >>> len(REPT('---', 10000)) 30000 >>> REPT('---', 11000) Traceback (most recent call last): ... ValueError: number_times invalid >>> REPT('-', -1) Traceback (most recent call last): ... ValueError: number_times invalid","title":"REPT"},{"location":"functions/#right","text":"Renvoie une sous-cha\u00eene de longueur num_chars \u00e0 partir de la fin d\u2019une cha\u00eene sp\u00e9cifi\u00e9e. Si num_chars est omise, elle est suppos\u00e9e \u00eatre 1. Identique \u00e0 string[-num_chars:] . >>> RIGHT(\"Prix de vente\", 5) 'Price' >>> RIGHT('Num\u00e9ro de stock') 'r' >>> RIGHT('Texte', 100) 'Texte' >>> RIGHT('Texte', -1) Traceback (most recent call last): ... ValueError: num_chars invalid","title":"RIGHT"},{"location":"functions/#search","text":"Renvoie la position \u00e0 laquelle une cha\u00eene est d\u2019abord trouv\u00e9e dans le texte, en ignorant la casse. La recherche est sensible \u00e0 la casse. La position renvoy\u00e9e est 1 si within_text commence par find_text. start_num sp\u00e9cifie le caract\u00e8re \u00e0 partir duquel commencer la recherche, par d\u00e9faut \u00e0 1 (le premier caract\u00e8re de within_text). Si find_text n\u2019est pas trouv\u00e9, ou si start_num est invalide, l\u00e8ve une ValueError. >>> SEARCH(\"e\", \"D\u00e9clarations\", 6) 7 >>> SEARCH(\"marge\", \"Marge b\u00e9n\u00e9ficiaire\") 8 >>> SEARCH(\" \", \"Marge b\u00e9n\u00e9ficiaire\") 7 >>> SEARCH('\"', 'Le \"patron\" est ici.') 5 >>> SEARCH(\"gle\", \"Google\") 4 >>> SEARCH(\"GLE\", \"Google\") 4","title":"SEARCH"},{"location":"functions/#substitute","text":"Remplace le texte existant par du nouveau texte dans une cha\u00eene. Il est utile lorsque vous connaissez le sous-texte \u00e0 remplacer. Utilisez REPLACE lorsque vous connaissez la position du texte \u00e0 remplacer. Si instance_num est donn\u00e9, il sp\u00e9cifie quelle occurrence de old_text remplacer. Si omis, toutes les occurrences sont remplac\u00e9es. Identique \u00e0 text.replace(old_text, new_text) lorsque instance_num est omis. >>> SUBSTITUTE(\"Donn\u00e9es de vente\", \"Ventes\", \"Co\u00fbt\") u'Donn\u00e9es de co\u00fbt' >>> SUBSTITUTE(\"Trimestre 1, 2008\", \"1\", \"2\", 1) u'Trimestre 2, 2008' >>> SUBSTITUTE(\"Trimestre 1, 2011\", \"1\", \"2\", 3) u'Trimestre 1, 2012'","title":"SUBSTITUTE"},{"location":"functions/#t","text":"Renvoie la valeur si la valeur est du texte, ou la cha\u00eene vide lorsque la valeur n\u2019est pas du texte. >>> T('Texte') u'Texte' >>> T(826) u'' >>> T('826') u'826' >>> T(False) u'' >>> T('100 points') u'100 points' >>> T(AltText('Texte')) u'Texte' >>> T(float('nan')) u''","title":"T"},{"location":"functions/#tasteme","text":"Pour un morceau de texte donn\u00e9, d\u00e9cide s\u2019il est savoureux ou non. Ce n\u2019est pas s\u00e9rieux. Cela est apparu comme un \u0153uf de P\u00e2ques, et est conserv\u00e9 en tant que tel. C\u2019est en fait un puzzle pour comprendre la r\u00e8gle simple sous-jacente. Cela a \u00e9t\u00e9 \u00e9tonnamment rarement r\u00e9solu, m\u00eame apr\u00e8s avoir lu le code source, qui est librement disponible et peut divertir les fans de Python. >>> TASTEME('Banane') True >>> TASTEME('Ail') False","title":"TASTEME"},{"location":"functions/#text","text":"Convertit un nombre en texte selon un format sp\u00e9cifi\u00e9. Il n\u2019est pas encore impl\u00e9ment\u00e9 dans Grist. Vous pouvez utiliser les fonctions Python similaires str() pour convertir des nombres en cha\u00eenes, et optionnellement format() pour sp\u00e9cifier le format du nombre. Note Cette fonction n\u2019est pas actuellement impl\u00e9ment\u00e9e dans Grist.","title":"TEXT"},{"location":"functions/#trim","text":"Supprime tous les espaces du texte sauf pour les espaces simples entre les mots. Notez que TRIM ne supprime pas d\u2019autres espaces blancs tels que les caract\u00e8res de tabulation ou de nouvelle ligne. >>> TRIM(\" Premier trimestre\\n B\u00e9n\u00e9fices \") 'Premier trimestre\\n B\u00e9n\u00e9fices' >>> TRIM(\"\") ''","title":"TRIM"},{"location":"functions/#upper","text":"Convertit une cha\u00eene sp\u00e9cifi\u00e9e en majuscules. Identique \u00e0 text.upper() . >>> UPPER(\"e. e. cummings\") 'E. E. CUMMINGS' >>> UPPER(\"Apt. 2B\") 'APT. 2B'","title":"UPPER"},{"location":"functions/#value","text":"Convertit une cha\u00eene dans des formats de date, d\u2019heure ou de nombre accept\u00e9s en un nombre ou une date. >>> VALUE(\"$1,000\") 1000 >>> assert VALUE(\"16:48:00\") - VALUE(\"12:00:00\") == datetime.timedelta(0, 17280) >>> VALUE(\"01/01/2012\") datetime.datetime(2012, 1, 1, 0, 0) >>> VALUE(\"\") 0 >>> VALUE(0) 0 >>> VALUE(\"826\") 826 >>> VALUE(\"-826.123123123\") -826.123123123 >>> VALUE(float('nan')) nan >>> VALUE(\"Invalid\") Traceback (most recent call last): ... ValueError: le texte ne peut pas \u00eatre analys\u00e9 en un nombre >>> VALUE(\"13/13/13\") Traceback (most recent call last): ... ValueError: le texte ne peut pas \u00eatre analys\u00e9 en un nombre","title":"VALUE"},{"location":"glossary/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Glossaire # Diagramme \u00e0 Barres # Il s\u2019agit d\u2019un type de diagramme classique, o\u00f9 les valeurs d\u2019une colonne sont repr\u00e9sent\u00e9es par la hauteur d\u2019une s\u00e9rie de rectangles. Colonne # Une colonne est une s\u00e9rie verticale de cellules dans une table. Les colonnes dans Grist ont des noms. Chaque cellule d\u2019une colonne se trouve dans une ligne diff\u00e9rente. Lorsque les donn\u00e9es d\u2019une colonne sont pr\u00e9sentes dans une fiche, nous l\u2019appelons un champ. Lorsqu\u2019une table de donn\u00e9es est repr\u00e9sent\u00e9e sous forme de graphique, nous nous r\u00e9f\u00e9rons \u00e0 chaque colonne comme une s\u00e9rie. D\u2019un point de vue mod\u00e9lisation des donn\u00e9es, les colonnes contiennent g\u00e9n\u00e9ralement des donn\u00e9es sur un seul aspect de nombreuses entit\u00e9s du monde r\u00e9el, tandis que les lignes contiennent des donn\u00e9es sur de nombreux aspects d\u2019une seule entit\u00e9. Options de Colonne # L\u2019apparence et le comportement de chaque colonne peuvent \u00eatre personnalis\u00e9s en cliquant sur l\u2019en-t\u00eate de la colonne, en cliquant sur le menu d\u00e9roulant, et en s\u00e9lectionnant \u201cOptions de Colonne\u201d. Type de Colonne # Les colonnes ont des types, qui contr\u00f4lent l\u2019apparence des cellules dans cette colonne et la m\u00e9thode utilis\u00e9e pour les \u00e9diter. Vous pouvez changer le type de colonne \u00e0 volont\u00e9. Le Type de Colonne Texte est adapt\u00e9 aux cha\u00eenes de caract\u00e8res de toute longueur; le Type de Colonne Date est sp\u00e9cialis\u00e9 pour stocker et \u00e9diter des dates de calendrier; le Type de Colonne R\u00e9f\u00e9rence est destin\u00e9 \u00e0 stocker et \u00e9diter des liens vers d\u2019autres tables; le Type de Colonne Num\u00e9rique est pour tout type de nombre, etc. Panneau de Cr\u00e9ation # Le panneau de cr\u00e9ation est le menu de configuration \u00e0 droite pour les vues et les colonnes. Tableau de Bord # Un tableau de bord est simplement un autre nom pour une page, g\u00e9n\u00e9ralement organis\u00e9e pour donner un r\u00e9sum\u00e9 ou un aper\u00e7u des donn\u00e9es d\u2019un document. Grist est bien adapt\u00e9 \u00e0 la construction de tableaux de bord, en cr\u00e9ant des pages avec des vues li\u00e9es de mani\u00e8re appropri\u00e9e. Table de Donn\u00e9es # Les donn\u00e9es sont stock\u00e9es dans des tables. Les tables ont des colonnes nomm\u00e9es, et une s\u00e9quence de lignes contenant des valeurs pour ces colonnes. Chaque ligne a un identifiant num\u00e9rique (disponible sous la forme $id dans les formules) qui est unique dans cette table. La page des donn\u00e9es sources liste toutes les tables de donn\u00e9es dans votre document. Document # Un document Grist est une collection de donn\u00e9es connexes. Si vous travaillez avec des bases de donn\u00e9es, pensez-y comme une seule base de donn\u00e9es. Si vous travaillez avec des feuilles de calcul, pensez-y comme une seule feuille de calcul. Comme les bases de donn\u00e9es et les feuilles de calcul, les donn\u00e9es dans un document Grist sont organis\u00e9es en un ensemble de tables. La mani\u00e8re dont ces donn\u00e9es sont visualis\u00e9es et \u00e9dit\u00e9es est exceptionnellement flexible. Les documents Grist sont organis\u00e9s visuellement en pages. Les pages contiennent des vues qui offrent diff\u00e9rentes mani\u00e8res de visualiser et d\u2019\u00e9diter les tables. Pour travailler avec Grist, la premi\u00e8re \u00e9tape est g\u00e9n\u00e9ralement de cr\u00e9er un document . Poign\u00e9e de D\u00e9placement # C\u2019est une ic\u00f4ne pour faciliter la r\u00e9organisation visuelle des vues ou des listes. Sur un ordinateur de bureau, lorsque vous survolez une poign\u00e9e de d\u00e9placement, le curseur de la souris change. La poign\u00e9e de d\u00e9placement pour une vue est juste \u00e0 gauche du titre de la vue. Il y a un exemple d\u2019utilisation de cette poign\u00e9e de d\u00e9placement dans la d\u00e9monstration de recherche d\u2019investissement . Mode Fiddle # Le mode fiddle est un mode sp\u00e9cial dans lequel certains documents Grist, tels que ceux de la page des Exemples & Mod\u00e8les , s\u2019ouvrent. Un document ouvert en mode fiddle aura une \u00e9tiquette \u201cfiddle\u201d \u00e0 c\u00f4t\u00e9 du titre du document dans la barre sup\u00e9rieure. En mode fiddle, toute modification d\u2019un document entra\u00eenera la cr\u00e9ation d\u2019une nouvelle copie non enregistr\u00e9e (a.k.a \u201cfork\u201d) de ce document; le document original restera inchang\u00e9. La copie peut \u00eatre enregistr\u00e9e via le bouton ou l\u2019option de menu \u201cEnregistrer la Copie\u201d. Vous pouvez ajouter /m/fork \u00e0 la fin de l\u2019URL de n\u2019importe quel document pour ouvrir ce document en mode fiddle (par exemple https://public.getgrist.com/3NsoHE2mWtEp/Lead-list/m/fork ). Champ # Un champ est une colonne affich\u00e9e dans une Vue Fiche. Les termes colonne, champ et s\u00e9rie ne sont pas diff\u00e9rents en substance, mais sont des termes diff\u00e9rents qui ont plus de sens pour diff\u00e9rentes vues. Dans une Vue Tableau, nous parlons de colonnes. Dans une Vue Graphique, nous parlons de s\u00e9ries. Et dans une Vue Fiche, nous parlons de champs. Un champ a des propri\u00e9t\u00e9s de mise en page qui sont significatives dans une Fiche, mais qui ne seraient pas significatives dans d\u2019autres contextes. Importer # Importer dans Grist signifie prendre des donn\u00e9es d\u2019autres sources (sur votre ordinateur ou sur Internet) et placer ces donn\u00e9es dans un document Grist. Des exemples d\u2019importation incluent : Prendre un fichier CSV sur votre ordinateur et cr\u00e9er un document Grist avec le m\u00eame contenu (voir : commencer un nouveau document Grist ). Prendre un fichier Excel sur votre ordinateur et ajouter les donn\u00e9es de celui-ci \u00e0 un document Grist existant (voir : importer plus de donn\u00e9es ). Prendre un fichier JSON sur Internet et ajouter les donn\u00e9es de celui-ci \u00e0 un document Grist existant (voir : importer plus de donn\u00e9es ). Appeler l\u2019API de Grist depuis un programme et ajouter des donn\u00e9es lues \u00e0 partir d\u2019une autre source (voir : API Grist ). Recherches # Les formules de recherche vous permettent de \u201crechercher\u201d des donn\u00e9es dans d\u2019autres tables. lookupOne vous permet de rechercher un seul enregistrement dans une autre table en faisant correspondre certaines donn\u00e9es entre deux tables, similaire \u00e0 VLOOKUP d\u2019Excel. lookupRecords vous permet de rechercher plusieurs enregistrements dans une autre table en faisant correspondre certaines donn\u00e9es entre deux tables. Les recherches peuvent \u00eatre combin\u00e9es avec la notation point\u00e9e pour extraire des donn\u00e9es des enregistrements r\u00e9f\u00e9renc\u00e9s. Apprenez comment. Page # Les documents Grist sont organis\u00e9s visuellement en pages. Chaque page vous permet de visualiser ou d\u2019\u00e9diter une ou plusieurs tables. La nature de ces visualiseurs et \u00e9diteurs (appel\u00e9s \u201cvues de page\u201d) est flexible, tout comme leur disposition. Une seule table peut \u00eatre visualis\u00e9e (ou \u00e9dit\u00e9e) \u00e0 partir de plusieurs vues dans une ou plusieurs pages. Et une seule page peut contenir des vues pour visualiser (ou \u00e9diter) de nombreuses tables. Les pages sont list\u00e9es dans le document ( dans le panneau \u00e0 gauche ). Dans cette liste, elles peuvent \u00eatre r\u00e9organis\u00e9es et regroup\u00e9es, avec plusieurs \u201csous-pages\u201d imbriqu\u00e9es dans une seule page. Diagramme \u00e0 Secteurs # Il s\u2019agit d\u2019un type de diagramme classique, o\u00f9 un cercle est d\u00e9coup\u00e9 en tranches selon les valeurs d\u2019une colonne. Enregistrement # Un enregistrement est les donn\u00e9es d\u2019une ligne d\u2019une table, comprenant les donn\u00e9es dans les cellules individuelles de cette ligne. Il a un identifiant unique, g\u00e9n\u00e9ralement cach\u00e9 mais disponible dans les formules sous la forme id . Dans une Vue Fiche ou une Vue Liste de Fiches, un enregistrement est repr\u00e9sent\u00e9 par une seule fiche. Ligne # Une s\u00e9rie horizontale de cellules dans une table. Chaque cellule d\u2019une ligne appartient \u00e0 une colonne diff\u00e9rente. Les donn\u00e9es stock\u00e9es dans une ligne sont \u00e9galement appel\u00e9es un enregistrement. Typiquement, les lignes contiennent des donn\u00e9es sur diff\u00e9rents aspects d\u2019une seule entit\u00e9, tandis que les colonnes contiennent des donn\u00e9es sur un seul aspect de nombreuses entit\u00e9s. S\u00e9rie # Les donn\u00e9es d\u2019une seule colonne affich\u00e9es dans une Vue Graphique sont appel\u00e9es une s\u00e9rie. Les m\u00eames donn\u00e9es dans une Vue Fiche sont appel\u00e9es un champ, et dans une Vue Tableau sont appel\u00e9es une colonne. Trier # L\u2019ordre dans lequel les lignes d\u2019une table sont affich\u00e9es est appel\u00e9 l\u2019ordre de tri. Un exemple de changement de l\u2019ordre de tri d\u2019une table est donn\u00e9 dans le tutoriel CRM . Formules de D\u00e9clenchement # Une formule d\u2019initialisation est une formule qui recalcule vos donn\u00e9es en fonction d\u2019un ensemble de conditions que vous d\u00e9cidez. Elles permettent \u00e9galement de nettoyer les donn\u00e9es lorsqu\u2019une nouvelle valeur est entr\u00e9e ( regarder le webinaire ), de fournir une valeur par d\u00e9faut sens\u00e9e pour une colonne ou de cr\u00e9er des tampons de temps et d\u2019auteur . Menu Utilisateur # Le menu utilisateur est le menu qui s\u2019ouvre en cliquant sur votre ic\u00f4ne de profil en haut \u00e0 droite de Grist. De l\u00e0, vous pouvez g\u00e9rer votre profil, ajouter des comptes Grist suppl\u00e9mentaires que vous poss\u00e9dez, et voir une liste des espaces d\u2019\u00e9quipe auxquels vous avez acc\u00e8s. Selon l\u2019endroit o\u00f9 vous vous trouvez, le menu utilisateur contiendra des options suppl\u00e9mentaires. Par exemple, depuis un espace personnel vous verrez l\u2019option de mettre \u00e0 niveau votre plan vers un espace d\u2019\u00e9quipe . Depuis un espace d\u2019\u00e9quipe, selon votre r\u00f4le et vos permissions, vous pourrez peut-\u00eatre g\u00e9rer la facturation ou \u00e9diter les membres de l\u2019\u00e9quipe . Depuis un document, vous trouverez une option pour \u00e9diter les param\u00e8tres du document. Vue # Une page contient des sections, telles que des grilles de tableaux ou des graphiques, que nous appelons \u201cvues de page\u201d. Elles sont utilis\u00e9es pour visualiser ou \u00e9diter des donn\u00e9es dans des tables. Les types de vues de page incluent les Vues Fiche , les Vues Graphique , ainsi que la grille de tableau de style feuille de calcul classique (appel\u00e9e Vue Tableau ). Options de Vue # Chaque vue de page peut avoir son apparence et son comportement personnalis\u00e9s. La mani\u00e8re dont cela est fait varie selon la vue, mais peut toujours \u00eatre fait syst\u00e9matiquement en cliquant sur le menu \u00e0 trois points en haut \u00e0 droite d\u2019une vue et en s\u00e9lectionnant \u201cOptions de Vue\u201d. Retour \u00e0 la Ligne # Normalement, le contenu qui ne tient pas dans la largeur d\u2019une cellule est tronqu\u00e9, avec \u201c\u2026\u201d indiquant qu\u2019une partie des donn\u00e9es est cach\u00e9e. Lorsque le param\u00e8tre \u201cRetour \u00e0 la Ligne\u201d est activ\u00e9, les longues lignes seront renvoy\u00e9es \u00e0 la ligne suivante, et la cellule deviendra plus haute pour inclure tout le contenu. Un exemple de retour \u00e0 la ligne est donn\u00e9 dans le tutoriel CRM .","title":"Glossary"},{"location":"glossary/#glossaire","text":"","title":"Glossaire"},{"location":"glossary/#diagramme-a-barres","text":"Il s\u2019agit d\u2019un type de diagramme classique, o\u00f9 les valeurs d\u2019une colonne sont repr\u00e9sent\u00e9es par la hauteur d\u2019une s\u00e9rie de rectangles.","title":"Diagramme \u00e0 Barres"},{"location":"glossary/#colonne","text":"Une colonne est une s\u00e9rie verticale de cellules dans une table. Les colonnes dans Grist ont des noms. Chaque cellule d\u2019une colonne se trouve dans une ligne diff\u00e9rente. Lorsque les donn\u00e9es d\u2019une colonne sont pr\u00e9sentes dans une fiche, nous l\u2019appelons un champ. Lorsqu\u2019une table de donn\u00e9es est repr\u00e9sent\u00e9e sous forme de graphique, nous nous r\u00e9f\u00e9rons \u00e0 chaque colonne comme une s\u00e9rie. D\u2019un point de vue mod\u00e9lisation des donn\u00e9es, les colonnes contiennent g\u00e9n\u00e9ralement des donn\u00e9es sur un seul aspect de nombreuses entit\u00e9s du monde r\u00e9el, tandis que les lignes contiennent des donn\u00e9es sur de nombreux aspects d\u2019une seule entit\u00e9.","title":"Colonne"},{"location":"glossary/#options-de-colonne","text":"L\u2019apparence et le comportement de chaque colonne peuvent \u00eatre personnalis\u00e9s en cliquant sur l\u2019en-t\u00eate de la colonne, en cliquant sur le menu d\u00e9roulant, et en s\u00e9lectionnant \u201cOptions de Colonne\u201d.","title":"Options de Colonne"},{"location":"glossary/#type-de-colonne","text":"Les colonnes ont des types, qui contr\u00f4lent l\u2019apparence des cellules dans cette colonne et la m\u00e9thode utilis\u00e9e pour les \u00e9diter. Vous pouvez changer le type de colonne \u00e0 volont\u00e9. Le Type de Colonne Texte est adapt\u00e9 aux cha\u00eenes de caract\u00e8res de toute longueur; le Type de Colonne Date est sp\u00e9cialis\u00e9 pour stocker et \u00e9diter des dates de calendrier; le Type de Colonne R\u00e9f\u00e9rence est destin\u00e9 \u00e0 stocker et \u00e9diter des liens vers d\u2019autres tables; le Type de Colonne Num\u00e9rique est pour tout type de nombre, etc.","title":"Type de Colonne"},{"location":"glossary/#panneau-de-creation","text":"Le panneau de cr\u00e9ation est le menu de configuration \u00e0 droite pour les vues et les colonnes.","title":"Panneau de Cr\u00e9ation"},{"location":"glossary/#tableau-de-bord","text":"Un tableau de bord est simplement un autre nom pour une page, g\u00e9n\u00e9ralement organis\u00e9e pour donner un r\u00e9sum\u00e9 ou un aper\u00e7u des donn\u00e9es d\u2019un document. Grist est bien adapt\u00e9 \u00e0 la construction de tableaux de bord, en cr\u00e9ant des pages avec des vues li\u00e9es de mani\u00e8re appropri\u00e9e.","title":"Tableau de Bord"},{"location":"glossary/#table-de-donnees","text":"Les donn\u00e9es sont stock\u00e9es dans des tables. Les tables ont des colonnes nomm\u00e9es, et une s\u00e9quence de lignes contenant des valeurs pour ces colonnes. Chaque ligne a un identifiant num\u00e9rique (disponible sous la forme $id dans les formules) qui est unique dans cette table. La page des donn\u00e9es sources liste toutes les tables de donn\u00e9es dans votre document.","title":"Table de Donn\u00e9es"},{"location":"glossary/#document","text":"Un document Grist est une collection de donn\u00e9es connexes. Si vous travaillez avec des bases de donn\u00e9es, pensez-y comme une seule base de donn\u00e9es. Si vous travaillez avec des feuilles de calcul, pensez-y comme une seule feuille de calcul. Comme les bases de donn\u00e9es et les feuilles de calcul, les donn\u00e9es dans un document Grist sont organis\u00e9es en un ensemble de tables. La mani\u00e8re dont ces donn\u00e9es sont visualis\u00e9es et \u00e9dit\u00e9es est exceptionnellement flexible. Les documents Grist sont organis\u00e9s visuellement en pages. Les pages contiennent des vues qui offrent diff\u00e9rentes mani\u00e8res de visualiser et d\u2019\u00e9diter les tables. Pour travailler avec Grist, la premi\u00e8re \u00e9tape est g\u00e9n\u00e9ralement de cr\u00e9er un document .","title":"Document"},{"location":"glossary/#poignee-de-deplacement","text":"C\u2019est une ic\u00f4ne pour faciliter la r\u00e9organisation visuelle des vues ou des listes. Sur un ordinateur de bureau, lorsque vous survolez une poign\u00e9e de d\u00e9placement, le curseur de la souris change. La poign\u00e9e de d\u00e9placement pour une vue est juste \u00e0 gauche du titre de la vue. Il y a un exemple d\u2019utilisation de cette poign\u00e9e de d\u00e9placement dans la d\u00e9monstration de recherche d\u2019investissement .","title":"Poign\u00e9e de D\u00e9placement"},{"location":"glossary/#mode-fiddle","text":"Le mode fiddle est un mode sp\u00e9cial dans lequel certains documents Grist, tels que ceux de la page des Exemples & Mod\u00e8les , s\u2019ouvrent. Un document ouvert en mode fiddle aura une \u00e9tiquette \u201cfiddle\u201d \u00e0 c\u00f4t\u00e9 du titre du document dans la barre sup\u00e9rieure. En mode fiddle, toute modification d\u2019un document entra\u00eenera la cr\u00e9ation d\u2019une nouvelle copie non enregistr\u00e9e (a.k.a \u201cfork\u201d) de ce document; le document original restera inchang\u00e9. La copie peut \u00eatre enregistr\u00e9e via le bouton ou l\u2019option de menu \u201cEnregistrer la Copie\u201d. Vous pouvez ajouter /m/fork \u00e0 la fin de l\u2019URL de n\u2019importe quel document pour ouvrir ce document en mode fiddle (par exemple https://public.getgrist.com/3NsoHE2mWtEp/Lead-list/m/fork ).","title":"Mode Fiddle"},{"location":"glossary/#champ","text":"Un champ est une colonne affich\u00e9e dans une Vue Fiche. Les termes colonne, champ et s\u00e9rie ne sont pas diff\u00e9rents en substance, mais sont des termes diff\u00e9rents qui ont plus de sens pour diff\u00e9rentes vues. Dans une Vue Tableau, nous parlons de colonnes. Dans une Vue Graphique, nous parlons de s\u00e9ries. Et dans une Vue Fiche, nous parlons de champs. Un champ a des propri\u00e9t\u00e9s de mise en page qui sont significatives dans une Fiche, mais qui ne seraient pas significatives dans d\u2019autres contextes.","title":"Champ"},{"location":"glossary/#importer","text":"Importer dans Grist signifie prendre des donn\u00e9es d\u2019autres sources (sur votre ordinateur ou sur Internet) et placer ces donn\u00e9es dans un document Grist. Des exemples d\u2019importation incluent : Prendre un fichier CSV sur votre ordinateur et cr\u00e9er un document Grist avec le m\u00eame contenu (voir : commencer un nouveau document Grist ). Prendre un fichier Excel sur votre ordinateur et ajouter les donn\u00e9es de celui-ci \u00e0 un document Grist existant (voir : importer plus de donn\u00e9es ). Prendre un fichier JSON sur Internet et ajouter les donn\u00e9es de celui-ci \u00e0 un document Grist existant (voir : importer plus de donn\u00e9es ). Appeler l\u2019API de Grist depuis un programme et ajouter des donn\u00e9es lues \u00e0 partir d\u2019une autre source (voir : API Grist ).","title":"Importer"},{"location":"glossary/#recherches","text":"Les formules de recherche vous permettent de \u201crechercher\u201d des donn\u00e9es dans d\u2019autres tables. lookupOne vous permet de rechercher un seul enregistrement dans une autre table en faisant correspondre certaines donn\u00e9es entre deux tables, similaire \u00e0 VLOOKUP d\u2019Excel. lookupRecords vous permet de rechercher plusieurs enregistrements dans une autre table en faisant correspondre certaines donn\u00e9es entre deux tables. Les recherches peuvent \u00eatre combin\u00e9es avec la notation point\u00e9e pour extraire des donn\u00e9es des enregistrements r\u00e9f\u00e9renc\u00e9s. Apprenez comment.","title":"Recherches"},{"location":"glossary/#page","text":"Les documents Grist sont organis\u00e9s visuellement en pages. Chaque page vous permet de visualiser ou d\u2019\u00e9diter une ou plusieurs tables. La nature de ces visualiseurs et \u00e9diteurs (appel\u00e9s \u201cvues de page\u201d) est flexible, tout comme leur disposition. Une seule table peut \u00eatre visualis\u00e9e (ou \u00e9dit\u00e9e) \u00e0 partir de plusieurs vues dans une ou plusieurs pages. Et une seule page peut contenir des vues pour visualiser (ou \u00e9diter) de nombreuses tables. Les pages sont list\u00e9es dans le document ( dans le panneau \u00e0 gauche ). Dans cette liste, elles peuvent \u00eatre r\u00e9organis\u00e9es et regroup\u00e9es, avec plusieurs \u201csous-pages\u201d imbriqu\u00e9es dans une seule page.","title":"Page"},{"location":"glossary/#diagramme-a-secteurs","text":"Il s\u2019agit d\u2019un type de diagramme classique, o\u00f9 un cercle est d\u00e9coup\u00e9 en tranches selon les valeurs d\u2019une colonne.","title":"Diagramme \u00e0 Secteurs"},{"location":"glossary/#enregistrement","text":"Un enregistrement est les donn\u00e9es d\u2019une ligne d\u2019une table, comprenant les donn\u00e9es dans les cellules individuelles de cette ligne. Il a un identifiant unique, g\u00e9n\u00e9ralement cach\u00e9 mais disponible dans les formules sous la forme id . Dans une Vue Fiche ou une Vue Liste de Fiches, un enregistrement est repr\u00e9sent\u00e9 par une seule fiche.","title":"Enregistrement"},{"location":"glossary/#ligne","text":"Une s\u00e9rie horizontale de cellules dans une table. Chaque cellule d\u2019une ligne appartient \u00e0 une colonne diff\u00e9rente. Les donn\u00e9es stock\u00e9es dans une ligne sont \u00e9galement appel\u00e9es un enregistrement. Typiquement, les lignes contiennent des donn\u00e9es sur diff\u00e9rents aspects d\u2019une seule entit\u00e9, tandis que les colonnes contiennent des donn\u00e9es sur un seul aspect de nombreuses entit\u00e9s.","title":"Ligne"},{"location":"glossary/#serie","text":"Les donn\u00e9es d\u2019une seule colonne affich\u00e9es dans une Vue Graphique sont appel\u00e9es une s\u00e9rie. Les m\u00eames donn\u00e9es dans une Vue Fiche sont appel\u00e9es un champ, et dans une Vue Tableau sont appel\u00e9es une colonne.","title":"S\u00e9rie"},{"location":"glossary/#trier","text":"L\u2019ordre dans lequel les lignes d\u2019une table sont affich\u00e9es est appel\u00e9 l\u2019ordre de tri. Un exemple de changement de l\u2019ordre de tri d\u2019une table est donn\u00e9 dans le tutoriel CRM .","title":"Trier"},{"location":"glossary/#formules-de-declenchement","text":"Une formule d\u2019initialisation est une formule qui recalcule vos donn\u00e9es en fonction d\u2019un ensemble de conditions que vous d\u00e9cidez. Elles permettent \u00e9galement de nettoyer les donn\u00e9es lorsqu\u2019une nouvelle valeur est entr\u00e9e ( regarder le webinaire ), de fournir une valeur par d\u00e9faut sens\u00e9e pour une colonne ou de cr\u00e9er des tampons de temps et d\u2019auteur .","title":"Formules de D\u00e9clenchement"},{"location":"glossary/#menu-utilisateur","text":"Le menu utilisateur est le menu qui s\u2019ouvre en cliquant sur votre ic\u00f4ne de profil en haut \u00e0 droite de Grist. De l\u00e0, vous pouvez g\u00e9rer votre profil, ajouter des comptes Grist suppl\u00e9mentaires que vous poss\u00e9dez, et voir une liste des espaces d\u2019\u00e9quipe auxquels vous avez acc\u00e8s. Selon l\u2019endroit o\u00f9 vous vous trouvez, le menu utilisateur contiendra des options suppl\u00e9mentaires. Par exemple, depuis un espace personnel vous verrez l\u2019option de mettre \u00e0 niveau votre plan vers un espace d\u2019\u00e9quipe . Depuis un espace d\u2019\u00e9quipe, selon votre r\u00f4le et vos permissions, vous pourrez peut-\u00eatre g\u00e9rer la facturation ou \u00e9diter les membres de l\u2019\u00e9quipe . Depuis un document, vous trouverez une option pour \u00e9diter les param\u00e8tres du document.","title":"Menu Utilisateur"},{"location":"glossary/#vue","text":"Une page contient des sections, telles que des grilles de tableaux ou des graphiques, que nous appelons \u201cvues de page\u201d. Elles sont utilis\u00e9es pour visualiser ou \u00e9diter des donn\u00e9es dans des tables. Les types de vues de page incluent les Vues Fiche , les Vues Graphique , ainsi que la grille de tableau de style feuille de calcul classique (appel\u00e9e Vue Tableau ).","title":"Vue"},{"location":"glossary/#options-de-vue","text":"Chaque vue de page peut avoir son apparence et son comportement personnalis\u00e9s. La mani\u00e8re dont cela est fait varie selon la vue, mais peut toujours \u00eatre fait syst\u00e9matiquement en cliquant sur le menu \u00e0 trois points en haut \u00e0 droite d\u2019une vue et en s\u00e9lectionnant \u201cOptions de Vue\u201d.","title":"Options de Vue"},{"location":"glossary/#retour-a-la-ligne","text":"Normalement, le contenu qui ne tient pas dans la largeur d\u2019une cellule est tronqu\u00e9, avec \u201c\u2026\u201d indiquant qu\u2019une partie des donn\u00e9es est cach\u00e9e. Lorsque le param\u00e8tre \u201cRetour \u00e0 la Ligne\u201d est activ\u00e9, les longues lignes seront renvoy\u00e9es \u00e0 la ligne suivante, et la cellule deviendra plus haute pour inclure tout le contenu. Un exemple de retour \u00e0 la ligne est donn\u00e9 dans le tutoriel CRM .","title":"Retour \u00e0 la Ligne"},{"location":"imports/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Importer plus de donn\u00e9es # Vous pouvez importer un fichier pour cr\u00e9er un nouveau document Grist ou pour ajouter des donn\u00e9es \u00e0 un document existant. Grist prend en charge les importations de fichiers Excel, CSV, JSON, tabul\u00e9s et depuis Google Drive . Pour cr\u00e9er un nouveau document Grist, cliquez sur le bouton \u201cAjouter Nouveau\u201d sur l\u2019\u00e9cran d\u2019accueil et choisissez \u201cImporter un document\u201d, comme d\u00e9crit dans cr\u00e9er un nouveau document Grist . Pour ajouter \u00e0 un document existant, ouvrez ce document, cliquez sur le bouton \u201cAjouter Nouveau\u201d puis sur \u201cImporter depuis un fichier\u201d. Par d\u00e9faut, chaque table import\u00e9e est ajout\u00e9e comme une nouvelle table Grist, mais en examinant la bo\u00eete de dialogue de pr\u00e9visualisation pour une importation, vous avez la possibilit\u00e9 de changer la destination vers une table Grist existante. Vous pouvez \u00e9galement importer n\u2019importe lequel des m\u00eames formats depuis une URL, en utilisant l\u2019option \u201cImporter depuis une URL\u201d. La bo\u00eete de dialogue d\u2019importation # Lorsque vous importez des donn\u00e9es dans un document existant, Grist ouvre une bo\u00eete de dialogue d\u2019importation pour vous montrer ce qui sera import\u00e9. Cette bo\u00eete de dialogue offre des options d\u2019importation disponibles, vous permet de choisir de cr\u00e9er une nouvelle table ou d\u2019ajouter \u00e0 une table existante, et affiche un aper\u00e7u des donn\u00e9es. Le lien \u201cOptions d\u2019importation\u201d en haut \u00e0 droite est parfois utile lors de l\u2019importation de fichiers d\u00e9limit\u00e9s. Grist devine les param\u00e8tres pour analyser les donn\u00e9es (comme le d\u00e9limiteur de champ), mais si cela devine incorrectement, vous pouvez ajuster les param\u00e8tres. Deviner la structure des donn\u00e9es # Dans tous les cas, lorsque vous importez un fichier, Grist fait des suppositions sur la structure du fichier. Pour les fichiers Excel, Grist traite chaque feuille comme une table s\u00e9par\u00e9e. Pour les fichiers CSV et autres formats d\u00e9limit\u00e9s, un fichier devient une table. Pour les fichiers Excel et d\u00e9limit\u00e9s, Grist essaie de d\u00e9tecter si les en-t\u00eates sont inclus et \u00e0 quelle ligne ils se trouvent. Si Grist d\u00e9tecte qu\u2019il n\u2019y a pas d\u2019en-t\u00eates, il nommera les colonnes comme \u201cA\u201d, \u201cB\u201d, \u201cC\u201d, etc. Grist essaie automatiquement de parser les nombres, les dates et les champs bool\u00e9ens pour d\u00e9tecter le type le plus appropri\u00e9 pour chaque colonne. Il essaie d\u2019\u00eatre sans perte : par exemple, s\u2019il marque une colonne comme num\u00e9rique, toutes les valeurs textuelles qu\u2019elle contient (comme \u201cN/A\u201d) resteront dans la table import\u00e9e, mais seront mises en \u00e9vidence en raison de l\u2019incompatibilit\u00e9 de type. Vous pouvez toujours renommer les tables et les colonnes apr\u00e8s une importation, ainsi que convertir les types. Importer depuis Google Drive # Importer depuis Google Drive est aussi simple que d\u2019importer depuis un fichier Excel ou un fichier CSV. Vous pouvez soit fournir une URL d\u2019un fichier stock\u00e9 dans Google Drive, soit utiliser un s\u00e9lecteur de fichiers Google pour choisir un fichier de votre propre drive. Pour utiliser un s\u00e9lecteur, cliquez sur le bouton \u201cAjouter Nouveau\u201d et choisissez \u201cImporter depuis Google Drive\u201d. Pour importer, connectez-vous \u00e0 votre compte Google en cliquant sur le bouton \u201cSe connecter\u201d et en suivant le processus de connexion. Grist vous demandera l\u2019autorisation de lire le fichier que vous importerez depuis Google Drive. Nous ne lirons aucun autre fichier sur votre drive \u2014 juste le fichier unique que vous choisissez d\u2019importer. Une fois le fichier choisi, le reste du processus est le m\u00eame que pour importer depuis un fichier Excel. Dans la bo\u00eete de dialogue d\u2019importation , vous pouvez configurer quelles donn\u00e9es importer et dans quelle table de destination les ajouter. Si vous avez une URL vers un fichier ou une feuille de calcul stock\u00e9e sur votre Google Drive ou un fichier accessible publiquement, vous pouvez l\u2019importer directement en utilisant l\u2019option \u201cImporter depuis une URL\u201d du menu \u201cAjouter Nouveau\u201d. Si le fichier n\u2019est pas partag\u00e9 publiquement, Grist vous demandera l\u2019autorisation de lire les fichiers de votre Google Drive. Si vous ne souhaitez pas autoriser Grist \u00e0 lire vos fichiers, il ouvrira le s\u00e9lecteur de fichiers Google o\u00f9 vous pourrez s\u00e9lectionner le fichier que vous souhaitez importer. Importer dans une table existante # Par d\u00e9faut, Grist importe de nouvelles donn\u00e9es en tant que nouvelles tables, mais la bo\u00eete de dialogue d\u2019importation vous permet de changer la destination et d\u2019importer des donn\u00e9es dans une table existante. Lors de l\u2019importation dans une table existante, Grist tentera de faire correspondre les colonnes de votre fichier import\u00e9 aux colonnes de la table de destination. Pour sp\u00e9cifier manuellement la correspondance des colonnes, cliquez sur le menu d\u00e9roulant \u2018Colonne source\u2019 pour ouvrir un menu avec une liste de colonnes inutilis\u00e9es de votre fichier import\u00e9. Cliquez sur un nom de colonne pour le faire correspondre \u00e0 une colonne de destination, ou s\u00e9lectionnez \u2018Ignorer\u2019 pour ignorer l\u2019importation des donn\u00e9es de cette colonne. Vous pouvez \u00e9galement sp\u00e9cifier une formule pour chaque colonne import\u00e9e en cliquant sur \u2018Appliquer une formule\u2019 dans le menu d\u00e9roulant \u2018Colonne source\u2019. Les formules peuvent r\u00e9f\u00e9rencer une ou plusieurs colonnes import\u00e9es, et le r\u00e9sultat de l\u2019\u00e9valuation de la formule sera affich\u00e9 dans l\u2019aper\u00e7u apr\u00e8s la fermeture de l\u2019\u00e9diteur. L\u2019importation dans une table existante est mieux adapt\u00e9e pour importer plusieurs ensembles de donn\u00e9es contenant une structure similaire. Par exemple, vous pourriez importer un relev\u00e9 bancaire en tant que nouvelle table, puis importer d\u2019autres relev\u00e9s d\u2019autres mois dans la m\u00eame table. Pour les d\u00e9veloppeurs, l\u2019 API Grist offre un moyen plus puissant d\u2019ajouter des donn\u00e9es \u00e0 un document Grist. Mise \u00e0 jour des enregistrements existants # Supposons que la table dans laquelle nous importons contient d\u00e9j\u00e0 certaines des donn\u00e9es de notre fichier. Nous aimerions que Grist mette \u00e0 jour ces enregistrements existants plut\u00f4t que de les dupliquer. Nous pouvons dire \u00e0 Grist de mettre \u00e0 jour ces enregistrements en cochant l\u2019option \u201cMettre \u00e0 jour les enregistrements existants\u201d et en sp\u00e9cifiant quels champs utiliser pour faire correspondre les donn\u00e9es entrantes avec les enregistrements existants. Une ligne import\u00e9e et un enregistrement existant qui ont les m\u00eames valeurs pour tous les champs de fusion s\u00e9lectionn\u00e9s sont consid\u00e9r\u00e9s comme le m\u00eame enregistrement. Dans ce cas, l\u2019importation mettra \u00e0 jour les champs de l\u2019enregistrement avec les donn\u00e9es import\u00e9es. Les valeurs vides des donn\u00e9es import\u00e9es seront ignor\u00e9es, laissant les champs correspondants dans l\u2019enregistrement original inchang\u00e9s. Remarque : Si plusieurs lignes import\u00e9es ont les m\u00eames valeurs pour les champs de fusion s\u00e9lectionn\u00e9s, la derni\u00e8re ligne sera utilis\u00e9e pour la correspondance et la mise \u00e0 jour. Si plusieurs enregistrements existants ont les m\u00eames valeurs pour les champs de fusion s\u00e9lectionn\u00e9s, seul le premier enregistrement sera mis \u00e0 jour si une ligne import\u00e9e correspondante est trouv\u00e9e. Chaque fois que les champs de fusion sont modifi\u00e9s, Grist g\u00e9n\u00e9rera un aper\u00e7u des mises \u00e0 jour qui seront apport\u00e9es \u00e0 la table de destination et les affichera dans la table d\u2019aper\u00e7u. Les modifications sont mises en \u00e9vidence comme suit : Les nouveaux enregistrements ont tous leurs champs mis en \u00e9vidence en vert. Les enregistrements mis \u00e0 jour ont une mise en \u00e9vidence rouge et verte pour tous les champs modifi\u00e9s : rouge (avec une barre oblique) pour les valeurs existantes de la destination, et vert pour les nouvelles valeurs du fichier import\u00e9. Les enregistrements inchang\u00e9s n\u2019ont pas de mise en \u00e9vidence. Les valeurs des champs qui existent dans la table de destination, mais sont vides dans le fichier import\u00e9, sont distingu\u00e9es par une couleur de police gris clair.","title":"Importing more data"},{"location":"imports/#importer-plus-de-donnees","text":"Vous pouvez importer un fichier pour cr\u00e9er un nouveau document Grist ou pour ajouter des donn\u00e9es \u00e0 un document existant. Grist prend en charge les importations de fichiers Excel, CSV, JSON, tabul\u00e9s et depuis Google Drive . Pour cr\u00e9er un nouveau document Grist, cliquez sur le bouton \u201cAjouter Nouveau\u201d sur l\u2019\u00e9cran d\u2019accueil et choisissez \u201cImporter un document\u201d, comme d\u00e9crit dans cr\u00e9er un nouveau document Grist . Pour ajouter \u00e0 un document existant, ouvrez ce document, cliquez sur le bouton \u201cAjouter Nouveau\u201d puis sur \u201cImporter depuis un fichier\u201d. Par d\u00e9faut, chaque table import\u00e9e est ajout\u00e9e comme une nouvelle table Grist, mais en examinant la bo\u00eete de dialogue de pr\u00e9visualisation pour une importation, vous avez la possibilit\u00e9 de changer la destination vers une table Grist existante. Vous pouvez \u00e9galement importer n\u2019importe lequel des m\u00eames formats depuis une URL, en utilisant l\u2019option \u201cImporter depuis une URL\u201d.","title":"Importer plus de donn\u00e9es"},{"location":"imports/#la-boite-de-dialogue-dimportation","text":"Lorsque vous importez des donn\u00e9es dans un document existant, Grist ouvre une bo\u00eete de dialogue d\u2019importation pour vous montrer ce qui sera import\u00e9. Cette bo\u00eete de dialogue offre des options d\u2019importation disponibles, vous permet de choisir de cr\u00e9er une nouvelle table ou d\u2019ajouter \u00e0 une table existante, et affiche un aper\u00e7u des donn\u00e9es. Le lien \u201cOptions d\u2019importation\u201d en haut \u00e0 droite est parfois utile lors de l\u2019importation de fichiers d\u00e9limit\u00e9s. Grist devine les param\u00e8tres pour analyser les donn\u00e9es (comme le d\u00e9limiteur de champ), mais si cela devine incorrectement, vous pouvez ajuster les param\u00e8tres.","title":"La bo\u00eete de dialogue d’importation"},{"location":"imports/#deviner-la-structure-des-donnees","text":"Dans tous les cas, lorsque vous importez un fichier, Grist fait des suppositions sur la structure du fichier. Pour les fichiers Excel, Grist traite chaque feuille comme une table s\u00e9par\u00e9e. Pour les fichiers CSV et autres formats d\u00e9limit\u00e9s, un fichier devient une table. Pour les fichiers Excel et d\u00e9limit\u00e9s, Grist essaie de d\u00e9tecter si les en-t\u00eates sont inclus et \u00e0 quelle ligne ils se trouvent. Si Grist d\u00e9tecte qu\u2019il n\u2019y a pas d\u2019en-t\u00eates, il nommera les colonnes comme \u201cA\u201d, \u201cB\u201d, \u201cC\u201d, etc. Grist essaie automatiquement de parser les nombres, les dates et les champs bool\u00e9ens pour d\u00e9tecter le type le plus appropri\u00e9 pour chaque colonne. Il essaie d\u2019\u00eatre sans perte : par exemple, s\u2019il marque une colonne comme num\u00e9rique, toutes les valeurs textuelles qu\u2019elle contient (comme \u201cN/A\u201d) resteront dans la table import\u00e9e, mais seront mises en \u00e9vidence en raison de l\u2019incompatibilit\u00e9 de type. Vous pouvez toujours renommer les tables et les colonnes apr\u00e8s une importation, ainsi que convertir les types.","title":"Deviner la structure des donn\u00e9es"},{"location":"imports/#importer-depuis-google-drive","text":"Importer depuis Google Drive est aussi simple que d\u2019importer depuis un fichier Excel ou un fichier CSV. Vous pouvez soit fournir une URL d\u2019un fichier stock\u00e9 dans Google Drive, soit utiliser un s\u00e9lecteur de fichiers Google pour choisir un fichier de votre propre drive. Pour utiliser un s\u00e9lecteur, cliquez sur le bouton \u201cAjouter Nouveau\u201d et choisissez \u201cImporter depuis Google Drive\u201d. Pour importer, connectez-vous \u00e0 votre compte Google en cliquant sur le bouton \u201cSe connecter\u201d et en suivant le processus de connexion. Grist vous demandera l\u2019autorisation de lire le fichier que vous importerez depuis Google Drive. Nous ne lirons aucun autre fichier sur votre drive \u2014 juste le fichier unique que vous choisissez d\u2019importer. Une fois le fichier choisi, le reste du processus est le m\u00eame que pour importer depuis un fichier Excel. Dans la bo\u00eete de dialogue d\u2019importation , vous pouvez configurer quelles donn\u00e9es importer et dans quelle table de destination les ajouter. Si vous avez une URL vers un fichier ou une feuille de calcul stock\u00e9e sur votre Google Drive ou un fichier accessible publiquement, vous pouvez l\u2019importer directement en utilisant l\u2019option \u201cImporter depuis une URL\u201d du menu \u201cAjouter Nouveau\u201d. Si le fichier n\u2019est pas partag\u00e9 publiquement, Grist vous demandera l\u2019autorisation de lire les fichiers de votre Google Drive. Si vous ne souhaitez pas autoriser Grist \u00e0 lire vos fichiers, il ouvrira le s\u00e9lecteur de fichiers Google o\u00f9 vous pourrez s\u00e9lectionner le fichier que vous souhaitez importer.","title":"Importer depuis Google Drive"},{"location":"imports/#importer-dans-une-table-existante","text":"Par d\u00e9faut, Grist importe de nouvelles donn\u00e9es en tant que nouvelles tables, mais la bo\u00eete de dialogue d\u2019importation vous permet de changer la destination et d\u2019importer des donn\u00e9es dans une table existante. Lors de l\u2019importation dans une table existante, Grist tentera de faire correspondre les colonnes de votre fichier import\u00e9 aux colonnes de la table de destination. Pour sp\u00e9cifier manuellement la correspondance des colonnes, cliquez sur le menu d\u00e9roulant \u2018Colonne source\u2019 pour ouvrir un menu avec une liste de colonnes inutilis\u00e9es de votre fichier import\u00e9. Cliquez sur un nom de colonne pour le faire correspondre \u00e0 une colonne de destination, ou s\u00e9lectionnez \u2018Ignorer\u2019 pour ignorer l\u2019importation des donn\u00e9es de cette colonne. Vous pouvez \u00e9galement sp\u00e9cifier une formule pour chaque colonne import\u00e9e en cliquant sur \u2018Appliquer une formule\u2019 dans le menu d\u00e9roulant \u2018Colonne source\u2019. Les formules peuvent r\u00e9f\u00e9rencer une ou plusieurs colonnes import\u00e9es, et le r\u00e9sultat de l\u2019\u00e9valuation de la formule sera affich\u00e9 dans l\u2019aper\u00e7u apr\u00e8s la fermeture de l\u2019\u00e9diteur. L\u2019importation dans une table existante est mieux adapt\u00e9e pour importer plusieurs ensembles de donn\u00e9es contenant une structure similaire. Par exemple, vous pourriez importer un relev\u00e9 bancaire en tant que nouvelle table, puis importer d\u2019autres relev\u00e9s d\u2019autres mois dans la m\u00eame table. Pour les d\u00e9veloppeurs, l\u2019 API Grist offre un moyen plus puissant d\u2019ajouter des donn\u00e9es \u00e0 un document Grist.","title":"Importer dans une table existante"},{"location":"imports/#mise-a-jour-des-enregistrements-existants","text":"Supposons que la table dans laquelle nous importons contient d\u00e9j\u00e0 certaines des donn\u00e9es de notre fichier. Nous aimerions que Grist mette \u00e0 jour ces enregistrements existants plut\u00f4t que de les dupliquer. Nous pouvons dire \u00e0 Grist de mettre \u00e0 jour ces enregistrements en cochant l\u2019option \u201cMettre \u00e0 jour les enregistrements existants\u201d et en sp\u00e9cifiant quels champs utiliser pour faire correspondre les donn\u00e9es entrantes avec les enregistrements existants. Une ligne import\u00e9e et un enregistrement existant qui ont les m\u00eames valeurs pour tous les champs de fusion s\u00e9lectionn\u00e9s sont consid\u00e9r\u00e9s comme le m\u00eame enregistrement. Dans ce cas, l\u2019importation mettra \u00e0 jour les champs de l\u2019enregistrement avec les donn\u00e9es import\u00e9es. Les valeurs vides des donn\u00e9es import\u00e9es seront ignor\u00e9es, laissant les champs correspondants dans l\u2019enregistrement original inchang\u00e9s. Remarque : Si plusieurs lignes import\u00e9es ont les m\u00eames valeurs pour les champs de fusion s\u00e9lectionn\u00e9s, la derni\u00e8re ligne sera utilis\u00e9e pour la correspondance et la mise \u00e0 jour. Si plusieurs enregistrements existants ont les m\u00eames valeurs pour les champs de fusion s\u00e9lectionn\u00e9s, seul le premier enregistrement sera mis \u00e0 jour si une ligne import\u00e9e correspondante est trouv\u00e9e. Chaque fois que les champs de fusion sont modifi\u00e9s, Grist g\u00e9n\u00e9rera un aper\u00e7u des mises \u00e0 jour qui seront apport\u00e9es \u00e0 la table de destination et les affichera dans la table d\u2019aper\u00e7u. Les modifications sont mises en \u00e9vidence comme suit : Les nouveaux enregistrements ont tous leurs champs mis en \u00e9vidence en vert. Les enregistrements mis \u00e0 jour ont une mise en \u00e9vidence rouge et verte pour tous les champs modifi\u00e9s : rouge (avec une barre oblique) pour les valeurs existantes de la destination, et vert pour les nouvelles valeurs du fichier import\u00e9. Les enregistrements inchang\u00e9s n\u2019ont pas de mise en \u00e9vidence. Les valeurs des champs qui existent dans la table de destination, mais sont vides dans le fichier import\u00e9, sont distingu\u00e9es par une couleur de police gris clair.","title":"Mise \u00e0 jour des enregistrements existants"},{"location":"integrators/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Services d\u2019Int\u00e9gration # Grist peut \u00eatre connect\u00e9 \u00e0 des milliers d\u2019autres services via des int\u00e9grateurs avec le support de Grist. Ceux-ci incluent : Zapier Integrately Pabbly Connect KonnectzIT n8n Make Configuration des Int\u00e9grateurs # Chaque int\u00e9grateur fournit sa propre m\u00e9thode pour configurer la connexion entre Grist et d\u2019autres services. Pabbly Connect a cr\u00e9\u00e9 quelques vid\u00e9os expliquant comment configurer une int\u00e9gration avec Grist en utilisant Pabbly Connect. Pabbly Connect Youtube - Playlist Grist Ci-dessous est inclus un guide d\u2019exemple sur la fa\u00e7on dont une int\u00e9gration avec Grist peut \u00eatre configur\u00e9e en utilisant Zapier . Grist peut d\u00e9clencher un flux de travail chaque fois qu\u2019il y a un nouvel enregistrement ou une mise \u00e0 jour dans une table, entra\u00eenant une action dans un autre service. Inversement, les flux de travail d\u00e9clench\u00e9s par d\u2019autres services peuvent consulter, ajouter ou mettre \u00e0 jour des enregistrements dans les tables Grist. Exemple : Stockage des soumissions de formulaires # Supposons que nous ayons un formulaire pour collecter des votes sur la couleur d\u2019un nouveau hangar \u00e0 v\u00e9los propos\u00e9 : Le formulaire est configur\u00e9 en utilisant Google Forms (pour cet exemple), et nous voulons que les r\u00e9ponses soient stock\u00e9es dans un document Grist : Une fa\u00e7on de r\u00e9aliser cela est avec Zapier . Connectons-nous donc sur le site de Zapier, puis visitons la page d\u2019int\u00e9gration Grist : Nous aimerions associer Grist avec Google Forms. Zapier prend en charge plusieurs fournisseurs de formulaires, et le processus global d\u2019int\u00e9gration est similaire pour tous. Il suffit de taper le fournisseur que vous souhaitez. Pour ce tutoriel, nous choisissons Google Forms. Une fois que nous avons choisi le fournisseur \u00e0 int\u00e9grer, nous devons pr\u00e9ciser exactement ce que nous voulons qu\u2019il fasse, parmi les \u201cd\u00e9clencheurs\u201d et \u201cactions\u201d disponibles. Dans ce cas, nous choisissons que lorsqu\u2019il y a un d\u00e9clencheur Nouvelle R\u00e9ponse dans la Feuille de Calcul pour Google Forms, nous effectuerons l\u2019action Cr\u00e9er un Enregistrement dans Grist. Nous cliquons sur le bouton de construction pour commencer \u00e0 remplir les d\u00e9tails : \u00c9tant donn\u00e9 que l\u2019\u00e9v\u00e9nement d\u00e9clencheur pour l\u2019int\u00e9gration se produira dans Google Forms, nous sommes d\u2019abord invit\u00e9s \u00e0 donner \u00e0 Zapier certains droits d\u2019acc\u00e8s \u00e0 vos formulaires. Une fois cela fait, nous sommes invit\u00e9s \u00e0 confirmer quelle feuille de calcul utiliser : Ensuite, nous sp\u00e9cifions quelle feuille de travail au sein de la feuille de calcul utiliser (facile s\u2019il n\u2019y en a qu\u2019une). Pour le b\u00e9n\u00e9fice de Zapier \u00e0 une \u00e9tape ult\u00e9rieure, il est important qu\u2019il y ait au moins une r\u00e9ponse d\u2019exemple d\u00e9j\u00e0 dans la feuille de calcul. C\u2019est la partie Google termin\u00e9e. Maintenant pour la partie Grist. Nous sommes invit\u00e9s \u00e0 donner une cl\u00e9 API pour Grist, donc nous configurons une cl\u00e9 API si ce n\u2019est pas d\u00e9j\u00e0 fait. Pour donner des droits d\u2019acc\u00e8s pr\u00e9cis, nous pourrions configurer un compte utilisateur juste pour l\u2019int\u00e9gration, et lui donner acc\u00e8s uniquement \u00e0 ce dont il a besoin, et fournir sa cl\u00e9 API. Nous confirmons maintenant l\u2019\u00e9quipe \u00e0 utiliser - documents personnels ou un espace d\u2019\u00e9quipe auquel nous avons acc\u00e8s : Ensuite, nous choisissons le document Grist pour envoyer les r\u00e9ponses du formulaire : Et ensuite, nous choisissons la table \u00e0 utiliser dans ce document. Elle doit avoir des colonnes pour stocker les parties du formulaire que nous voulons conserver. Il est important de cr\u00e9er cette table si elle n\u2019existe pas d\u00e9j\u00e0 ; elle ne sera pas cr\u00e9\u00e9e automatiquement. Il n\u2019est pas important de faire correspondre les noms de colonnes avec les questions. Zapier permet une cartographie flexible des champs entre les services. Dans notre cas, une correspondance un-\u00e0-un fonctionne bien : Ok ! Maintenant, nous pouvons cliquer sur notre bouton pour que Zap teste notre int\u00e9gration. Tout va bien, nous pouvons activer le \u201cZap\u201d et le laisser fonctionner. Il est maintenant temps de faire quelques soumissions, et d\u2019aller prendre une tasse de quelque chose. Les \u201cZaps\u201d gratuits peuvent s\u2019ex\u00e9cuter p\u00e9riodiquement pour v\u00e9rifier les nouvelles soumissions, donc ne vous attendez pas \u00e0 des r\u00e9sultats imm\u00e9diats dans tous les cas. Mais finalement, vous devriez voir les votes affluer ! Exemple : Envoi d\u2019alertes par email # Nous avons vu un exemple de service externe envoyant des donn\u00e9es \u00e0 Grist. Maintenant, regardons un exemple de Grist envoyant des donn\u00e9es \u00e0 un service externe. En continuant notre exemple de formulaire, o\u00f9 un document Grist accumule des votes pour une couleur pr\u00e9f\u00e9r\u00e9e : supposons maintenant qu\u2019\u00e0 chaque fois qu\u2019un nouveau vote arrive, nous voulons envoyer un email r\u00e9sumant quelle option est en t\u00eate. Nous \u00e9crivons une formule pour pr\u00e9parer le texte dans une cellule Texte : Revenons \u00e0 nouveau \u00e0 la page d\u2019int\u00e9gration Grist sur Zapier. Il y a plusieurs int\u00e9grations de messagerie. Pour cet exemple, nous choisissons Gmail : Une fois que nous avons choisi le service \u00e0 connecter, nous choisissons maintenant exactement ce que nous voulons qu\u2019il fasse. Dans ce cas, nous choisissons que lorsqu\u2019il y a un Nouvel Enregistrement ou Enregistrement Mis \u00e0 Jour (Instantan\u00e9) dans Grist, nous Envoyons un Email dans Gmail. Notez le Instantan\u00e9 ici. Les d\u00e9clencheurs dans Zapier peuvent \u00eatre soit du type r\u00e9gulier o\u00f9 Zapier v\u00e9rifie p\u00e9riodiquement les changements (c\u2019est relativement lent), soit un type sp\u00e9cial \u201cinstantan\u00e9\u201d qui n\u00e9cessite un support sp\u00e9cial du service d\u00e9clencheur mais est beaucoup plus rapide. Grist prend en charge les deux types de d\u00e9clencheurs, et nous recommandons fortement \u201cinstantan\u00e9\u201d si vous pr\u00e9f\u00e9rez des r\u00e9sultats en secondes plut\u00f4t qu\u2019en minutes, et surtout si vous \u00eates du genre \u00e0 vous inqui\u00e9ter si quelqu\u2019un ne r\u00e9pond pas imm\u00e9diatement \u00e0 vos messages instantan\u00e9s. Une fois que nous avons choisi un compte Grist \u00e0 utiliser comme avant, nous pouvons choisir une table dans un document \u00e0 surveiller. Pour les d\u00e9clencheurs instantan\u00e9s, nous pouvons \u00e9ventuellement sp\u00e9cifier une colonne de \u201cdisponibilit\u00e9\u201d . Si nous laissons cela vide, chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9 ou modifi\u00e9 dans la table s\u00e9lectionn\u00e9e, Grist en informera Zapier. Si nous la configurons, elle devrait g\u00e9n\u00e9ralement \u00eatre une colonne de bascule , et Grist informera Zapier uniquement pour les enregistrements lorsque cette colonne est activ\u00e9e. Cela est pratique pour les enregistrements qui ont de nombreuses colonnes remplies manuellement, lorsque nous ne voulons pas d\u00e9clencher avant qu\u2019ils ne soient complets. Pour cet exemple, il est bien de laisser la colonne de disponibilit\u00e9 vide. (Pour les d\u00e9clencheurs non instantan\u00e9s r\u00e9guliers, nous devrions choisir une colonne sp\u00e9cifique \u00e0 surveiller. Id\u00e9alement, ce serait une colonne Mis \u00e0 Jour \u00c0 , voir Colonnes de Timestamp ). Du c\u00f4t\u00e9 de Gmail, nous pouvons envoyer des emails \u00e0 des adresses pr\u00e9d\u00e9finies, ou cela pourrait \u00eatre configur\u00e9 dynamiquement (nous verrons un exemple de comment dans un instant) : Nous choisissons de d\u00e9finir le corps de l\u2019email pour contenir du contenu \u201cPersonnalis\u00e9\u201d, dans ce cas la cellule Texte que nous avons calcul\u00e9e plus t\u00f4t. Et nous avons termin\u00e9 ! Zapier proposera de faire un test rapide pour v\u00e9rifier que les emails sont envoy\u00e9s correctement : Ensuite, vous pouvez faire quelques votes et regarder le syst\u00e8me fonctionner. Pour les d\u00e9clencheurs instantan\u00e9s, les r\u00e9sultats devraient appara\u00eetre assez rapidement. Sinon, Zapier dispose d\u2019une fonctionnalit\u00e9 \u201cex\u00e9cuter zap\u201d pour forcer une mise \u00e0 jour imm\u00e9diate de l\u2019int\u00e9gration : Et les emails devraient commencer \u00e0 appara\u00eetre dans les bo\u00eetes de r\u00e9ception souhait\u00e9es. Que le meilleur nuance presque indiscernable gagne ! Colonne de Disponibilit\u00e9 # Grist dispose d\u2019un m\u00e9canisme pour alerter d\u2019autres services lorsque des donn\u00e9es changent dans un document. Cela sert de base aux d\u00e9clencheurs instantan\u00e9s de Zapier. \u00c9tant donn\u00e9 que Grist est une feuille de calcul, il est courant que les enregistrements (lignes) soient cr\u00e9\u00e9s vides, et que les cellules soient ensuite remplies une par une. Cela cr\u00e9e une nuance importante pour les notifications. Habituellement, il ne sera pas souhaitable d\u2019envoyer une notification avant que l\u2019enregistrement ne soit en quelque sorte \u201cpr\u00eat\u201d, mais quand exactement est-ce ? Grist laisse l\u2019utilisateur d\u00e9cider par lui-m\u00eame, en cr\u00e9ant une colonne de bascule (bool\u00e9enne) qui est activ\u00e9e lorsque l\u2019enregistrement est pr\u00eat. La colonne peut \u00eatre d\u00e9finie manuellement ou via une formule. Cela s\u2019appelle une colonne de disponibilit\u00e9. Par exemple, si vous ne voulez activer un d\u00e9clencheur que lorsque les colonnes appel\u00e9es Nom et Email ne sont pas vides, votre colonne de disponibilit\u00e9 peut avoir la formule suivante : bool($Name and $Email) Vous feriez en sorte que la colonne prenne effet en la fournissant dans l\u2019option Colonne de Disponibilit\u00e9 d\u00e9crite dans l\u2019 exemple d\u2019alerte par email . D\u00e9clenchement (ou \u00e9vitement du d\u00e9clenchement) sur des enregistrements pr\u00e9existants # L\u2019ordre des \u00e9tapes est important lors de la configuration d\u2019une int\u00e9gration qui utilise une colonne de disponibilit\u00e9. Si vous avez des donn\u00e9es existantes, r\u00e9fl\u00e9chissez \u00e0 si vous voulez que l\u2019int\u00e9gration affecte toutes les donn\u00e9es existantes ou seulement les mises \u00e0 jour et nouvelles donn\u00e9es. Par exemple, si vous envoyez des donn\u00e9es de Grist \u00e0 Google Sheets en utilisant une int\u00e9gration Zapier, vous voudrez probablement envoyer vos donn\u00e9es existantes. Dans ce cas, configurez et activez d\u2019abord votre Zap avec une colonne de disponibilit\u00e9 vide, puis activez toutes les cellules de disponibilit\u00e9. Si vous voulez envoyer une notification uniquement lorsque quelque chose est ajout\u00e9 \u00e0 Grist, et non pour les enregistrements pr\u00e9existants, assurez-vous que toutes vos cellules de disponibilit\u00e9 sont activ\u00e9es avant d\u2019activer l\u2019int\u00e9gration, sinon une fois qu\u2019elles sont activ\u00e9es, des notifications seront envoy\u00e9es pour toutes. Cela peut \u00eatre beaucoup !","title":"Integrator services"},{"location":"integrators/#services-dintegration","text":"Grist peut \u00eatre connect\u00e9 \u00e0 des milliers d\u2019autres services via des int\u00e9grateurs avec le support de Grist. Ceux-ci incluent : Zapier Integrately Pabbly Connect KonnectzIT n8n Make","title":"Services d’Int\u00e9gration"},{"location":"integrators/#configuration-des-integrateurs","text":"Chaque int\u00e9grateur fournit sa propre m\u00e9thode pour configurer la connexion entre Grist et d\u2019autres services. Pabbly Connect a cr\u00e9\u00e9 quelques vid\u00e9os expliquant comment configurer une int\u00e9gration avec Grist en utilisant Pabbly Connect. Pabbly Connect Youtube - Playlist Grist Ci-dessous est inclus un guide d\u2019exemple sur la fa\u00e7on dont une int\u00e9gration avec Grist peut \u00eatre configur\u00e9e en utilisant Zapier . Grist peut d\u00e9clencher un flux de travail chaque fois qu\u2019il y a un nouvel enregistrement ou une mise \u00e0 jour dans une table, entra\u00eenant une action dans un autre service. Inversement, les flux de travail d\u00e9clench\u00e9s par d\u2019autres services peuvent consulter, ajouter ou mettre \u00e0 jour des enregistrements dans les tables Grist.","title":"Configuration des Int\u00e9grateurs"},{"location":"integrators/#exemple-stockage-des-soumissions-de-formulaires","text":"Supposons que nous ayons un formulaire pour collecter des votes sur la couleur d\u2019un nouveau hangar \u00e0 v\u00e9los propos\u00e9 : Le formulaire est configur\u00e9 en utilisant Google Forms (pour cet exemple), et nous voulons que les r\u00e9ponses soient stock\u00e9es dans un document Grist : Une fa\u00e7on de r\u00e9aliser cela est avec Zapier . Connectons-nous donc sur le site de Zapier, puis visitons la page d\u2019int\u00e9gration Grist : Nous aimerions associer Grist avec Google Forms. Zapier prend en charge plusieurs fournisseurs de formulaires, et le processus global d\u2019int\u00e9gration est similaire pour tous. Il suffit de taper le fournisseur que vous souhaitez. Pour ce tutoriel, nous choisissons Google Forms. Une fois que nous avons choisi le fournisseur \u00e0 int\u00e9grer, nous devons pr\u00e9ciser exactement ce que nous voulons qu\u2019il fasse, parmi les \u201cd\u00e9clencheurs\u201d et \u201cactions\u201d disponibles. Dans ce cas, nous choisissons que lorsqu\u2019il y a un d\u00e9clencheur Nouvelle R\u00e9ponse dans la Feuille de Calcul pour Google Forms, nous effectuerons l\u2019action Cr\u00e9er un Enregistrement dans Grist. Nous cliquons sur le bouton de construction pour commencer \u00e0 remplir les d\u00e9tails : \u00c9tant donn\u00e9 que l\u2019\u00e9v\u00e9nement d\u00e9clencheur pour l\u2019int\u00e9gration se produira dans Google Forms, nous sommes d\u2019abord invit\u00e9s \u00e0 donner \u00e0 Zapier certains droits d\u2019acc\u00e8s \u00e0 vos formulaires. Une fois cela fait, nous sommes invit\u00e9s \u00e0 confirmer quelle feuille de calcul utiliser : Ensuite, nous sp\u00e9cifions quelle feuille de travail au sein de la feuille de calcul utiliser (facile s\u2019il n\u2019y en a qu\u2019une). Pour le b\u00e9n\u00e9fice de Zapier \u00e0 une \u00e9tape ult\u00e9rieure, il est important qu\u2019il y ait au moins une r\u00e9ponse d\u2019exemple d\u00e9j\u00e0 dans la feuille de calcul. C\u2019est la partie Google termin\u00e9e. Maintenant pour la partie Grist. Nous sommes invit\u00e9s \u00e0 donner une cl\u00e9 API pour Grist, donc nous configurons une cl\u00e9 API si ce n\u2019est pas d\u00e9j\u00e0 fait. Pour donner des droits d\u2019acc\u00e8s pr\u00e9cis, nous pourrions configurer un compte utilisateur juste pour l\u2019int\u00e9gration, et lui donner acc\u00e8s uniquement \u00e0 ce dont il a besoin, et fournir sa cl\u00e9 API. Nous confirmons maintenant l\u2019\u00e9quipe \u00e0 utiliser - documents personnels ou un espace d\u2019\u00e9quipe auquel nous avons acc\u00e8s : Ensuite, nous choisissons le document Grist pour envoyer les r\u00e9ponses du formulaire : Et ensuite, nous choisissons la table \u00e0 utiliser dans ce document. Elle doit avoir des colonnes pour stocker les parties du formulaire que nous voulons conserver. Il est important de cr\u00e9er cette table si elle n\u2019existe pas d\u00e9j\u00e0 ; elle ne sera pas cr\u00e9\u00e9e automatiquement. Il n\u2019est pas important de faire correspondre les noms de colonnes avec les questions. Zapier permet une cartographie flexible des champs entre les services. Dans notre cas, une correspondance un-\u00e0-un fonctionne bien : Ok ! Maintenant, nous pouvons cliquer sur notre bouton pour que Zap teste notre int\u00e9gration. Tout va bien, nous pouvons activer le \u201cZap\u201d et le laisser fonctionner. Il est maintenant temps de faire quelques soumissions, et d\u2019aller prendre une tasse de quelque chose. Les \u201cZaps\u201d gratuits peuvent s\u2019ex\u00e9cuter p\u00e9riodiquement pour v\u00e9rifier les nouvelles soumissions, donc ne vous attendez pas \u00e0 des r\u00e9sultats imm\u00e9diats dans tous les cas. Mais finalement, vous devriez voir les votes affluer !","title":"Exemple : Stockage des soumissions de formulaires"},{"location":"integrators/#exemple-envoi-dalertes-par-email","text":"Nous avons vu un exemple de service externe envoyant des donn\u00e9es \u00e0 Grist. Maintenant, regardons un exemple de Grist envoyant des donn\u00e9es \u00e0 un service externe. En continuant notre exemple de formulaire, o\u00f9 un document Grist accumule des votes pour une couleur pr\u00e9f\u00e9r\u00e9e : supposons maintenant qu\u2019\u00e0 chaque fois qu\u2019un nouveau vote arrive, nous voulons envoyer un email r\u00e9sumant quelle option est en t\u00eate. Nous \u00e9crivons une formule pour pr\u00e9parer le texte dans une cellule Texte : Revenons \u00e0 nouveau \u00e0 la page d\u2019int\u00e9gration Grist sur Zapier. Il y a plusieurs int\u00e9grations de messagerie. Pour cet exemple, nous choisissons Gmail : Une fois que nous avons choisi le service \u00e0 connecter, nous choisissons maintenant exactement ce que nous voulons qu\u2019il fasse. Dans ce cas, nous choisissons que lorsqu\u2019il y a un Nouvel Enregistrement ou Enregistrement Mis \u00e0 Jour (Instantan\u00e9) dans Grist, nous Envoyons un Email dans Gmail. Notez le Instantan\u00e9 ici. Les d\u00e9clencheurs dans Zapier peuvent \u00eatre soit du type r\u00e9gulier o\u00f9 Zapier v\u00e9rifie p\u00e9riodiquement les changements (c\u2019est relativement lent), soit un type sp\u00e9cial \u201cinstantan\u00e9\u201d qui n\u00e9cessite un support sp\u00e9cial du service d\u00e9clencheur mais est beaucoup plus rapide. Grist prend en charge les deux types de d\u00e9clencheurs, et nous recommandons fortement \u201cinstantan\u00e9\u201d si vous pr\u00e9f\u00e9rez des r\u00e9sultats en secondes plut\u00f4t qu\u2019en minutes, et surtout si vous \u00eates du genre \u00e0 vous inqui\u00e9ter si quelqu\u2019un ne r\u00e9pond pas imm\u00e9diatement \u00e0 vos messages instantan\u00e9s. Une fois que nous avons choisi un compte Grist \u00e0 utiliser comme avant, nous pouvons choisir une table dans un document \u00e0 surveiller. Pour les d\u00e9clencheurs instantan\u00e9s, nous pouvons \u00e9ventuellement sp\u00e9cifier une colonne de \u201cdisponibilit\u00e9\u201d . Si nous laissons cela vide, chaque fois qu\u2019un enregistrement est cr\u00e9\u00e9 ou modifi\u00e9 dans la table s\u00e9lectionn\u00e9e, Grist en informera Zapier. Si nous la configurons, elle devrait g\u00e9n\u00e9ralement \u00eatre une colonne de bascule , et Grist informera Zapier uniquement pour les enregistrements lorsque cette colonne est activ\u00e9e. Cela est pratique pour les enregistrements qui ont de nombreuses colonnes remplies manuellement, lorsque nous ne voulons pas d\u00e9clencher avant qu\u2019ils ne soient complets. Pour cet exemple, il est bien de laisser la colonne de disponibilit\u00e9 vide. (Pour les d\u00e9clencheurs non instantan\u00e9s r\u00e9guliers, nous devrions choisir une colonne sp\u00e9cifique \u00e0 surveiller. Id\u00e9alement, ce serait une colonne Mis \u00e0 Jour \u00c0 , voir Colonnes de Timestamp ). Du c\u00f4t\u00e9 de Gmail, nous pouvons envoyer des emails \u00e0 des adresses pr\u00e9d\u00e9finies, ou cela pourrait \u00eatre configur\u00e9 dynamiquement (nous verrons un exemple de comment dans un instant) : Nous choisissons de d\u00e9finir le corps de l\u2019email pour contenir du contenu \u201cPersonnalis\u00e9\u201d, dans ce cas la cellule Texte que nous avons calcul\u00e9e plus t\u00f4t. Et nous avons termin\u00e9 ! Zapier proposera de faire un test rapide pour v\u00e9rifier que les emails sont envoy\u00e9s correctement : Ensuite, vous pouvez faire quelques votes et regarder le syst\u00e8me fonctionner. Pour les d\u00e9clencheurs instantan\u00e9s, les r\u00e9sultats devraient appara\u00eetre assez rapidement. Sinon, Zapier dispose d\u2019une fonctionnalit\u00e9 \u201cex\u00e9cuter zap\u201d pour forcer une mise \u00e0 jour imm\u00e9diate de l\u2019int\u00e9gration : Et les emails devraient commencer \u00e0 appara\u00eetre dans les bo\u00eetes de r\u00e9ception souhait\u00e9es. Que le meilleur nuance presque indiscernable gagne !","title":"Exemple : Envoi d’alertes par email"},{"location":"integrators/#colonne-de-disponibilite","text":"Grist dispose d\u2019un m\u00e9canisme pour alerter d\u2019autres services lorsque des donn\u00e9es changent dans un document. Cela sert de base aux d\u00e9clencheurs instantan\u00e9s de Zapier. \u00c9tant donn\u00e9 que Grist est une feuille de calcul, il est courant que les enregistrements (lignes) soient cr\u00e9\u00e9s vides, et que les cellules soient ensuite remplies une par une. Cela cr\u00e9e une nuance importante pour les notifications. Habituellement, il ne sera pas souhaitable d\u2019envoyer une notification avant que l\u2019enregistrement ne soit en quelque sorte \u201cpr\u00eat\u201d, mais quand exactement est-ce ? Grist laisse l\u2019utilisateur d\u00e9cider par lui-m\u00eame, en cr\u00e9ant une colonne de bascule (bool\u00e9enne) qui est activ\u00e9e lorsque l\u2019enregistrement est pr\u00eat. La colonne peut \u00eatre d\u00e9finie manuellement ou via une formule. Cela s\u2019appelle une colonne de disponibilit\u00e9. Par exemple, si vous ne voulez activer un d\u00e9clencheur que lorsque les colonnes appel\u00e9es Nom et Email ne sont pas vides, votre colonne de disponibilit\u00e9 peut avoir la formule suivante : bool($Name and $Email) Vous feriez en sorte que la colonne prenne effet en la fournissant dans l\u2019option Colonne de Disponibilit\u00e9 d\u00e9crite dans l\u2019 exemple d\u2019alerte par email .","title":"Colonne de Disponibilit\u00e9"},{"location":"integrators/#declenchement-ou-evitement-du-declenchement-sur-des-enregistrements-preexistants","text":"L\u2019ordre des \u00e9tapes est important lors de la configuration d\u2019une int\u00e9gration qui utilise une colonne de disponibilit\u00e9. Si vous avez des donn\u00e9es existantes, r\u00e9fl\u00e9chissez \u00e0 si vous voulez que l\u2019int\u00e9gration affecte toutes les donn\u00e9es existantes ou seulement les mises \u00e0 jour et nouvelles donn\u00e9es. Par exemple, si vous envoyez des donn\u00e9es de Grist \u00e0 Google Sheets en utilisant une int\u00e9gration Zapier, vous voudrez probablement envoyer vos donn\u00e9es existantes. Dans ce cas, configurez et activez d\u2019abord votre Zap avec une colonne de disponibilit\u00e9 vide, puis activez toutes les cellules de disponibilit\u00e9. Si vous voulez envoyer une notification uniquement lorsque quelque chose est ajout\u00e9 \u00e0 Grist, et non pour les enregistrements pr\u00e9existants, assurez-vous que toutes vos cellules de disponibilit\u00e9 sont activ\u00e9es avant d\u2019activer l\u2019int\u00e9gration, sinon une fois qu\u2019elles sont activ\u00e9es, des notifications seront envoy\u00e9es pour toutes. Cela peut \u00eatre beaucoup !","title":"D\u00e9clenchement (ou \u00e9vitement du d\u00e9clenchement) sur des enregistrements pr\u00e9existants"},{"location":"investment-research/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Comment analyser et visualiser des donn\u00e9es # Grist offre plusieurs moyens puissants d\u2019analyser et de visualiser des donn\u00e9es. Dans ce tutoriel, vous apprendrez \u00e0 : Cr\u00e9er des tables de synth\u00e8se Cr\u00e9er et configurer des graphiques Lier des graphiques de mani\u00e8re dynamique Pour expliquer ces fonctionnalit\u00e9s, nous utiliserons le document d\u2019exemple \u201cRecherche d\u2019Investissement\u201d 1 qui inclut des entreprises et les investissements dans celles-ci jusqu\u2019en 2013. Jetons un coup d\u2019\u0153il au document d\u2019exemple, puis nous parlerons de la mani\u00e8re de le construire afin que vous puissiez appliquer ces outils \u00e0 vos propres donn\u00e9es. Explorer l\u2019exemple # Ouvrez le document \u201c Recherche d\u2019Investissement \u201d, trouv\u00e9 dans Exemples & Mod\u00e8les sur votre page d\u2019accueil Grist. La premi\u00e8re chose que vous verrez est \u201cAper\u00e7u\u201d. Cette page contient deux graphiques \u00e0 c\u00f4t\u00e9 de deux tables. En haut \u00e0 gauche, il y a un graphique circulaire montrant la r\u00e9partition des investissements par cat\u00e9gorie. La table \u00e0 c\u00f4t\u00e9 contient les m\u00eames donn\u00e9es sous forme tabulaire. En dessous du graphique circulaire se trouve un graphique \u00e0 barres montrant le total des investissements lev\u00e9s par ann\u00e9e. Il est \u00e9galement accompagn\u00e9 des m\u00eames donn\u00e9es dans la table \u00e0 c\u00f4t\u00e9 sous forme tabulaire. Tous ces graphiques et tables sont des exemples de \u201ctables de synth\u00e8se\u201d, que nous d\u00e9crirons ci-dessous. La page suivante, \u201cR\u00e9partitions\u201d, contient \u00e9galement deux tables et deux graphiques, mais ceux-ci sont li\u00e9s de mani\u00e8re dynamique et offrent des informations beaucoup plus d\u00e9taill\u00e9es sur les donn\u00e9es. En haut \u00e0 gauche se trouve une table montrant le financement total par ann\u00e9e (la m\u00eame table que nous avons vue sur la page pr\u00e9c\u00e9dente). Cette table sert de moteur pour le graphique \u00e0 c\u00f4t\u00e9. Lorsque vous cliquez sur une ann\u00e9e dans la table, le graphique circulaire se met \u00e0 jour pour montrer la r\u00e9partition des investissements cette ann\u00e9e-l\u00e0. De m\u00eame, la table du bas montre les investissements par cat\u00e9gorie. Lorsque vous cliquez sur une cat\u00e9gorie, le graphique lin\u00e9aire \u00e0 c\u00f4t\u00e9 se met \u00e0 jour pour montrer l\u2019historique du financement dans cette cat\u00e9gorie au fil des ans. Notez \u00e0 quel point cela est puissant et combien d\u2019informations vous pouvez en tirer. Par exemple, vous pouvez voir que la cat\u00e9gorie Publicit\u00e9 a re\u00e7u beaucoup d\u2019investissements \u00e0 New York depuis 2007, mais a \u00e9t\u00e9 d\u00e9pass\u00e9e par le E-commerce en 2013, tandis que la cat\u00e9gorie Mode a connu un pic majeur en 2011. Sur la page suivante, \u201cD\u00e9tails de l\u2019Entreprise\u201d, nous pouvons voir les donn\u00e9es granulaires de cet ensemble de donn\u00e9es. Ici, nous voyons une liste d\u2019entreprises et les cat\u00e9gories auxquelles elles appartiennent. Chaque entreprise affich\u00e9e a un lien pointant vers son inscription sur le site Crunchbase. S\u00e9lectionner une entreprise affiche une fiche avec ses d\u00e9tails, ainsi qu\u2019une liste de tous les investissements qu\u2019elle a re\u00e7us. C\u2019est ici que nous commen\u00e7ons \u00e0 voir la puissance de Grist. L\u2019ensemble de donn\u00e9es original est une feuille de calcul plate d\u2019entreprises, et une feuille de calcul encore plus grande d\u2019investissements. En affichant les donn\u00e9es graphiquement, les donn\u00e9es prennent vie, les rendant puissantes et utiles. Comment puis-je faire cela ? # Avec Grist, pr\u00e9senter vos propres donn\u00e9es sous forme graphique est \u00e0 quelques \u00e9tapes faciles. Commen\u00e7ons par la premi\u00e8re \u00e9tape. Obtenir les donn\u00e9es # Importons les donn\u00e9es sources. Nous allons importer deux fichiers CSV, chacun devenant sa propre table. Pour suivre, enregistrez d\u2019abord les fichiers de crunchbase_companies_ny.csv et crunchbase_investments_ny.csv sur votre ordinateur. Ensuite, cr\u00e9ez un document Grist en important le premier fichier depuis la page d\u2019accueil. Ensuite, importez la deuxi\u00e8me table en utilisant le bouton \u201cAjouter Nouveau\u201d et l\u2019option \u201cImporter depuis un fichier\u201d. Dans la bo\u00eete de dialogue d\u2019importation, terminez en cliquant sur \u201cImporter\u201d en bas \u00e0 gauche. Les tables que vous avez import\u00e9es seront nomm\u00e9es \u201ccrunchbase_companies_ny\u201d et \u201ccrunchbase_investments_ny\u201d. Cliquez sur le nom en haut de la table pour ouvrir la bo\u00eete de dialogue et renommer chacune des tables en \u201cEntreprises\u201d et \u201cInvestissements\u201d. Rendre cela relationnel # La puissance de Grist provient de la structuration des donn\u00e9es. Regardez la table \u201cInvestissements\u201d. Triez par la premi\u00e8re colonne et vous remarquerez combien il y a de r\u00e9p\u00e9titions : chaque ligne contient les informations compl\u00e8tes de l\u2019entreprise, ce qui duplique les donn\u00e9es dans la table \u201cEntreprises\u201d et est r\u00e9p\u00e9t\u00e9 plusieurs fois lorsque plusieurs investissements s\u2019appliquent \u00e0 la m\u00eame entreprise. 2 La r\u00e9alit\u00e9 est que chaque investissement s\u2019applique \u00e0 une seule entreprise. Chaque ligne d\u2019investissement n\u2019a besoin de contenir qu\u2019une r\u00e9f\u00e9rence \u00e0 une entreprise, et les donn\u00e9es sp\u00e9cifiques \u00e0 cet investissement. Pour ce faire, trouvez une colonne qui identifie une entreprise de mani\u00e8re unique. Dans cet ensemble de donn\u00e9es, la premi\u00e8re colonne, \u201ccompany_permalink\u201d, le fait le mieux 3 . Cliquez sur la fl\u00e8che dans l\u2019en-t\u00eate de la colonne et cliquez sur \u201cOptions de colonne\u201d. Cliquez sur la fl\u00e8che \u00e0 c\u00f4t\u00e9 de \u201cTexte\u201d sous le \u201cType de colonne\u201d dans la bo\u00eete de dialogue \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cR\u00e9f\u00e9rence\u201d dans la liste. Grist sugg\u00e9rera automatiquement de le faire une \u201cR\u00e9f\u00e9rence\u201d \u00e0 la table \u201cEntreprises\u201d, et d\u2019afficher le \u201cpermalink\u201d de l\u2019entreprise r\u00e9f\u00e9renc\u00e9e. Cliquez sur \u201cAppliquer\u201d pour enregistrer cette conversion. Renommons \u00e9galement cette colonne en \u201cEntreprise\u201d. Dans Grist, les donn\u00e9es dupliqu\u00e9es ne sont pas n\u00e9cessaires et nous recommandons de les supprimer. Utiliser le raccourci Option-Minus (Mac) ou Alt-Minus (Windows) est un moyen rapide de supprimer des colonnes. Apr\u00e8s avoir supprim\u00e9 les colonnes de \u201ccompany_name\u201d \u00e0 \u201ccompany_city\u201d, voici ce qui reste : Les donn\u00e9es que vous avez supprim\u00e9es ne sont pas perdues puisqu\u2019elles \u00e9taient dupliqu\u00e9es \u2013 elles sont toujours disponibles dans la table \u201cEntreprises\u201d et peuvent \u00eatre utilis\u00e9es dans la formule d\u2019un enregistrement d\u2019Investissement comme, par exemple, $Company.company_xxx . En fait, il existe un moyen pratique de cr\u00e9er ce type de formule. Cr\u00e9ons-en une dont nous aurons besoin plus tard. Cliquez sur l\u2019en-t\u00eate de la colonne \u201cEntreprise\u201d. Dans l\u2019onglet Colonne du panneau de droite, vous verrez une section \u2018Ajouter des colonnes r\u00e9f\u00e9renc\u00e9es\u2019. Cliquez sur \u2018Ajouter une colonne\u2019 pour ajouter la colonne \u201ccategory_code\u201d. Une nouvelle colonne sera ajout\u00e9e \u00e0 la table avec la formule $Company.category_code . Pour chaque investissement, elle affiche le \u201ccategory_code\u201d de l\u2019entreprise li\u00e9e \u00e0 son enregistrement d\u2019investissement. R\u00e9sumer # La fonctionnalit\u00e9 puissante que vous attendiez est celle qui r\u00e9sume les donn\u00e9es. Les tables de synth\u00e8se r\u00e9sument chaque colonne num\u00e9rique dans une table de donn\u00e9es. Nous voulons trouver la somme pour la colonne funding_total_usd dans la table Entreprises. V\u00e9rifiez que le type de colonne est d\u00e9fini sur \u2018Num\u00e9rique\u2019 et format\u00e9 avec $ . Pour utiliser cela, ajoutons une table montrant les entreprises regroup\u00e9es par \u201ccategory_code\u201d. Dans le menu \u201cAjouter Nouveau\u201d en haut \u00e0 gauche, s\u00e9lectionnez \u201cAjouter une Page\u201d. Dans la bo\u00eete de dialogue, s\u00e9lectionnez \u201cTable\u201d et \u201cEntreprises\u201d, puis utilisez l\u2019ic\u00f4ne de sommation ( ) pour s\u00e9lectionner les colonnes \u201cGrouper par\u201d \u2013 c\u2019est-\u00e0-dire les colonnes par lesquelles r\u00e9sumer. Si vous ne s\u00e9lectionnez aucune colonne, vous obtiendrez simplement une seule ligne de totaux. Si vous r\u00e9sumez par \u201ccategory_code\u201d, vous obtiendrez une ligne pour chaque valeur distincte de \u201ccategory_code\u201d. Faisons cela puis cliquons sur \u201cAjouter Page\u201d. Ceci est similaire aux tableaux crois\u00e9s dynamiques d\u2019Excel. Chaque ligne repr\u00e9sente le groupe d\u2019enregistrements de la table source (\u201cEntreprises\u201d) qui ont une valeur particuli\u00e8re de \u201ccategory_code\u201d. Il y a un rappel de cela dans le titre de la table (\u201cENTREPRISES [par category_code]\u201d). De telles tables de synth\u00e8se peuvent (et doivent !) utiliser des formules. Les colonnes que vous choisissez lors de la cr\u00e9ation de la table sont les identifiants des groupes. Toutes les autres colonnes sont des colonnes de formule \u2013 elles sont calcul\u00e9es. Dans les formules, le groupe d\u2019enregistrements source r\u00e9sum\u00e9 par une ligne est disponible sous la valeur \u201c$group\u201d. Par exemple, vous verrez une colonne cr\u00e9\u00e9e automatiquement appel\u00e9e \u201ccount\u201d. Si vous appuyez sur \u201cEntr\u00e9e\u201d, vous verrez la formule qui s\u2019y trouve \u2013 len($group) \u2013 qui est juste le nombre d\u2019enregistrements dans ce groupe d\u2019enregistrements, c\u2019est-\u00e0-dire le nombre d\u2019entreprises dans cette cat\u00e9gorie. Pour les colonnes num\u00e9riques dans la table source, les tables de synth\u00e8se obtiennent automatiquement une colonne num\u00e9rique du m\u00eame nom contenant une somme, avec une formule telle que SUM($group.funding_total_usd) . Une note pour les fans de Python $group est un objet Python sp\u00e9cial. C\u2019est une collection it\u00e9rable d\u2019enregistrements. Utiliser un attribut comme $group.A est un raccourci pour la liste des valeurs dans la colonne A de tous les enregistrements du groupe, c\u2019est-\u00e0-dire que c\u2019est \u00e0 peu pr\u00e8s \u00e9quivalent \u00e0 [r.A for r in $group] . Parfois, ajouter les valeurs n\u2019a pas de sens. Par exemple, la somme de \u201cfounded_year\u201d est d\u00e9nu\u00e9e de sens. Il est pr\u00e9f\u00e9rable de supprimer cela et toute autre colonne dont nous n\u2019avons pas besoin, ce qui nous laisse avec la colonne \u201cfunding_total_usd\u201d. Puisque cette colonne contient de grands nombres, il est temps de regarder la section \u201cFormat de Nombre\u201d de sa configuration, et de cliquer sur , (ou peut-\u00eatre $ ) pour formater les nombres afin qu\u2019ils soient plus lisibles. Ajoutons une deuxi\u00e8me table de synth\u00e8se. S\u00e9lectionnez \u00e0 nouveau \u201cAjouter Nouveau\u201d pour \u201cAjouter un Widget \u00e0 la Page\u201d. Pour obtenir un r\u00e9sum\u00e9 par ann\u00e9e, s\u00e9lectionnez la table \u201cInvestissements\u201d sous \u201cS\u00e9lectionner les Donn\u00e9es\u201d, et utilisez \u00e0 nouveau son symbole de somme (\u2211) pour s\u00e9lectionner la colonne par laquelle r\u00e9sumer : \u201cfunded_year\u201d puis cliquez sur \u201cAjouter \u00e0 la page\u201d. Cela produit une deuxi\u00e8me table de synth\u00e8se qui montre un enregistrement pour chaque ann\u00e9e, chacun repr\u00e9sentant un groupe de lignes \u201cInvestissements\u201d pour cette ann\u00e9e. La colonne la plus utile est \u201craised_amount_usd\u201d, ajoutant tous les investissements r\u00e9alis\u00e9s cette ann\u00e9e-l\u00e0. Supprimons les colonnes non n\u00e9cessaires. Vous remarquerez des valeurs roses dans \u201craised_amount_usd\u201d. C\u2019est parce que Grist devine que le type de colonne est un entier. Les sommes roses sont des instances o\u00f9 les nombres d\u00e9passent la capacit\u00e9 de Javascript \u00e0 g\u00e9rer de grands entiers. Pour corriger cela, le type de la colonne doit \u00eatre chang\u00e9 en \u201cNum\u00e9rique\u201d (ce qui \u00e9change la pr\u00e9cision contre la capacit\u00e9 \u00e0 repr\u00e9senter des nombres tr\u00e8s grands et tr\u00e8s petits). Changez le type en \u201cNum\u00e9rique\u201c sous \u201cOptions de colonne\u201d. C\u2019est encore un bon moment pour choisir un format de nombre plus convivial pour la colonne, et pour l\u2019\u00e9largir afin d\u2019adapter les nombres plus longs. Graphique, diagramme, trac\u00e9 # Vous pouvez cr\u00e9er un graphique \u00e0 partir de n\u2019importe quelles donn\u00e9es. Pour cette page, nous voulons ajouter une version graphique de chaque table de synth\u00e8se. S\u00e9lectionnez \u00e0 nouveau le bouton \u201cAjouter Nouveau\u201d, choisissez \u201cAjouter un Widget \u00e0 la Page\u201d, s\u00e9lectionnez \u201cGraphique\u201d comme widget, et la m\u00eame table (Entreprises) et colonne de synth\u00e8se (category_code) qu\u2019auparavant. Puis cliquez sur \u201cAjouter \u00e0 la Page\u201d. Pour un graphique, vous devrez toujours le personnaliser par la suite. Ouvrez le panneau de droite, et s\u00e9lectionnez l\u2019onglet \u201cGraphique\u201d / sous-onglet \u201cWidget\u201d. Pour ce premier graphique, sous \u201cType de Graphique\u201d, s\u00e9lectionnez \u201cGraphique Circulaire\u201d. Pour construire ce graphique, s\u00e9lectionnez d\u2019abord une \u00e9tiquette, puis s\u00e9lectionnez une s\u00e9rie \u00e0 r\u00e9sumer dans le graphique circulaire. Puisque nous voulons que le graphique montre \u201ccategory_code\u201d comme \u00e9tiquettes, s\u00e9lectionnez cette s\u00e9rie dans le menu d\u00e9roulant \u201c\u00c9tiquette\u201d. Nous voulons utiliser \u201cfunding_total_usd\u201d comme valeurs, donc cela devrait \u00eatre list\u00e9 en haut de la liste \u201cs\u00e9ries\u201d dans le panneau de configuration. Lorsque vous d\u00e9placez votre souris sur les \u00e9l\u00e9ments de cette liste, utilisez les doubles barres verticales qui apparaissent pour faire glisser et d\u00e9poser une s\u00e9rie en haut de la liste. Alternativement, vous pouvez masquer les autres s\u00e9ries de la liste en cliquant sur l\u2019ic\u00f4ne de corbeille. Ajoutons maintenant un graphique montrant une tendance par ann\u00e9e. Ajoutez un autre \u201cWidget \u00e0 la page\u201d, s\u00e9lectionnez \u201cGraphique\u201d sous \u201cWidget\u201d, s\u00e9lectionnez \u201cInvestissements\u201d sous \u201cS\u00e9lectionner les Donn\u00e9es\u201d, cliquez sur la sommation ( ) pour grouper par \u201cfunded_year\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Pour personnaliser ce graphique, restez avec le type de graphique \u201cGraphique \u00e0 Barres\u201d. Dans le menu d\u00e9roulant \u201cAxe X\u201d, s\u00e9lectionnez la colonne \u00e0 utiliser pour les valeurs de l\u2019axe X (horizontal). Sous \u2018S\u00e9ries\u2019, s\u00e9lectionnez une deuxi\u00e8me (et \u00e9ventuellement d\u2019autres) colonne pour \u00eatre les valeurs de l\u2019axe Y (vertical). Vous pouvez r\u00e9organiser les sections \u00e0 l\u2019\u00e9cran dans une configuration que vous aimeriez voir pour un tableau de bord. D\u00e9placez votre souris vers le coin sup\u00e9rieur gauche de chaque section jusqu\u2019\u00e0 ce que vous voyiez une ic\u00f4ne \u201cpoign\u00e9e de tirage\u201d. Utilisez cette ic\u00f4ne pour faire glisser chaque section \u00e0 l\u2019endroit souhait\u00e9 par rapport aux autres sections. Une fois que vous avez termin\u00e9, renommez la page en survolant le nom de la page, puis en cliquant sur l\u2019ic\u00f4ne \u00e0 trois points pour ouvrir le menu. S\u00e9lectionnez \u201cRenommer\u201d et renommez en \u201cAper\u00e7u\u201d. Graphiques dynamiques # Si vous avez lu nos autres tutoriels sur le lien des donn\u00e9es, cela viendra naturellement. Les graphiques sont simplement une autre fa\u00e7on de montrer des donn\u00e9es, et ils peuvent \u00eatre li\u00e9s de la m\u00eame mani\u00e8re que les tables. Pour notre exemple, nous allons ajouter une nouvelle page avec une table de synth\u00e8se : s\u00e9lectionnez le widget \u201cTable\u201d, les donn\u00e9es \u201cInvestissements\u201d, groupez par \u201cfunded_year\u201d, cliquez sur \u201cAjouter Page\u201d. Renommons cette nouvelle page \u201cR\u00e9partitions\u201d. Ensuite, ajoutez un widget \u00e0 cette page, en s\u00e9lectionnant le widget \u201cGraphique\u201d, les donn\u00e9es \u201cInvestissements\u201d. Pour \u201cGrouper par\u201d, nous choisissons deux colonnes : \u201cCompany_category_code\u201d et \u201cfunded_year\u201d. C\u2019est pourquoi nous avons ajout\u00e9 la colonne \u201cCompany_category_code\u201d plus t\u00f4t. Nous ne pouvons grouper les enregistrements d\u2019investissement par le code de cat\u00e9gorie que si nous avons ce code pour chaque investissement. Le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d en bas \u00e0 gauche de la bo\u00eete de dialogue r\u00e9pertorie les widgets d\u00e9j\u00e0 \u00e0 l\u2019\u00e9cran qui peuvent contr\u00f4ler la s\u00e9lection des donn\u00e9es dans le graphique que nous ajoutons. Dans \u201cS\u00e9lectionner par\u201d, choisissez \u201cINVESTISSEMENTS [par funded_year]\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Remarque : Si vous devez apporter des modifications \u00e0 un widget que vous avez d\u00e9j\u00e0 ajout\u00e9, comme changer son type, ses param\u00e8tres \u201cGrouper par\u201d ou \u201cS\u00e9lectionner par\u201d, vous pouvez toujours le faire depuis l\u2019onglet \u201cDonn\u00e9es\u201d dans les param\u00e8tres du widget, en utilisant le bouton \u201cModifier la S\u00e9lection de Donn\u00e9es\u201d. Nous voulons pouvoir s\u00e9lectionner une ann\u00e9e, puis afficher un graphique circulaire pour cette ann\u00e9e qui affiche le total pour chaque code de cat\u00e9gorie. L\u2019option \u201cS\u00e9lectionner par\u201d que nous avons choisie garantit que seules les donn\u00e9es de l\u2019ann\u00e9e s\u00e9lectionn\u00e9e sont utilis\u00e9es. Tout ce qui reste est de changer le type de graphique en \u201cGraphique Circulaire\u201d, et de d\u00e9finir \u201c\u00c9tiquette\u201d sur \u201cCompany_category_code\u201d et \u201cS\u00e9rie\u201d sur \u201craised_amount_usd\u201d. Remarque : Les graphiques ont besoin de plus d\u2019espace \u00e0 l\u2019\u00e9cran, donc nos petites captures d\u2019\u00e9cran auront meilleure allure si nous fermons les panneaux lat\u00e9raux en cliquant sur les ic\u00f4nes d\u2019ouverture ( , ). Ajoutons \u00e9galement un tri de la table par \u201cfunded_year\u201d. En ce qui concerne le tri, le bouton mis en surbrillance au-dessus de la table vous rappelle que les param\u00e8tres de tri ne sont pas enregistr\u00e9s automatiquement. Cliquez sur le bouton vert et s\u00e9lectionnez \u201cEnregistrer\u201d pour le faire. Quel est le r\u00e9sultat ? Nous pouvons cliquer \u00e0 travers les ann\u00e9es (ou utiliser les touches fl\u00e9ch\u00e9es), et voir la r\u00e9partition par cat\u00e9gorie changer. Remarque : Si cliquer \u00e0 travers les ann\u00e9es n\u2019affecte pas le graphique, le graphique ne doit pas \u00eatre li\u00e9. Vous pouvez v\u00e9rifier et corriger cela en utilisant le menu \u201ctrois points\u201d en haut \u00e0 droite du graphique, en cliquant sur \u201cS\u00e9lection de donn\u00e9es\u201d, et en vous assurant que le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d affiche \u201cINVESTISSEMENTS [par funded_year]\u201d. Pour compl\u00e9ter l\u2019exemple, nous allons ajouter deux sections suppl\u00e9mentaires \u00e0 cette page \u201cR\u00e9partitions\u201d. L\u2019une sera une table r\u00e9pertoriant les cat\u00e9gories d\u2019entreprises, et li\u00e9e \u00e0 cela sera un graphique montrant le montant de l\u2019investissement dans cette cat\u00e9gorie au fil des ans. Pour ajouter la table des cat\u00e9gories, utilisez \u201cAjouter un Widget \u00e0 la Page\u201d, et s\u00e9lectionnez le widget \u201cTable\u201d, les donn\u00e9es \u201cInvestissements\u201d, regroup\u00e9es par \u201cCompany_category_code\u201d. La colonne \u201cfunded_year\u201d dans la table r\u00e9sultante est d\u00e9nu\u00e9e de sens et doit \u00eatre supprim\u00e9e. Pour la derni\u00e8re \u00e9tape, ajoutons un autre graphique. Nous devons nous rappeler de grouper par \u00e0 la fois \u201cCompany_category_code\u201d et \u201cfunded_year\u201d, et de d\u00e9finir un widget \u201cS\u00e9lectionner par\u201d appropri\u00e9 pour cela. Puisqu\u2019il y a deux tables sur cette page, vous avez le choix de laquelle contr\u00f4lera les donn\u00e9es dans ce graphique. Dans ce cas, choisissez le widget que nous venons d\u2019ajouter : \u201cINVESTISSEMENTS [par Company_category_code]\u201d. Comme dans la section pr\u00e9c\u00e9dente, nous configurons le graphique en s\u00e9lectionnant \u201cType de Graphique\u201d comme \u201cGraphique \u00e0 Barres\u201d, et dans le menu d\u00e9roulant \u201cAxe X\u201d, en s\u00e9lectionnant \u201cfunded_year\u201d et sous \u201cS\u00e9rie\u201d, en s\u00e9lectionnant \u201craised_amount_usd\u201d et en masquant le reste. Nous pouvons maintenant cliquer \u00e0 travers les cat\u00e9gories, et voir l\u2019historique des investissements dans chacune. Prochaines \u00e9tapes # Si vous n\u2019\u00eates pas familier avec la mani\u00e8re dont nous avons cr\u00e9\u00e9 la page \u201cD\u00e9tails de l\u2019Entreprise\u201d qui est pr\u00e9sente dans l\u2019exemple, visitez l\u2019un de ces tutoriels pr\u00e9c\u00e9dents pour apprendre comment : \u2018Comment construire un CRM l\u00e9ger\u2019, ou \u2018G\u00e9rer votre entreprise dans Grist\u2019. C\u2019est tout ! Maintenant, allez analyser des donn\u00e9es ! T\u00e9l\u00e9chargez crunchbase_companies_ny.csv et crunchbase_investments_ny.csv . Les donn\u00e9es d\u2019exemple incluent uniquement les donn\u00e9es sur les \u201centreprises\u201d et les \u201cinvestissements\u201d, et incluent uniquement des entreprises de New York pour les rendre plus petites et plus rapides. L\u2019ensemble de donn\u00e9es provient de Kaggle . \u21a9 Une telle duplication est couramment observ\u00e9e dans les feuilles de calcul. Les donn\u00e9es sous cette forme sont appel\u00e9es \u201cd\u00e9normalis\u00e9es\u201d. \u21a9 Si vous n\u2019avez pas de colonne d\u2019identification unique, vous pouvez en construire une avec une formule. \u21a9","title":"Analyze and visualize"},{"location":"investment-research/#comment-analyser-et-visualiser-des-donnees","text":"Grist offre plusieurs moyens puissants d\u2019analyser et de visualiser des donn\u00e9es. Dans ce tutoriel, vous apprendrez \u00e0 : Cr\u00e9er des tables de synth\u00e8se Cr\u00e9er et configurer des graphiques Lier des graphiques de mani\u00e8re dynamique Pour expliquer ces fonctionnalit\u00e9s, nous utiliserons le document d\u2019exemple \u201cRecherche d\u2019Investissement\u201d 1 qui inclut des entreprises et les investissements dans celles-ci jusqu\u2019en 2013. Jetons un coup d\u2019\u0153il au document d\u2019exemple, puis nous parlerons de la mani\u00e8re de le construire afin que vous puissiez appliquer ces outils \u00e0 vos propres donn\u00e9es.","title":""},{"location":"investment-research/#explorer-lexemple","text":"Ouvrez le document \u201c Recherche d\u2019Investissement \u201d, trouv\u00e9 dans Exemples & Mod\u00e8les sur votre page d\u2019accueil Grist. La premi\u00e8re chose que vous verrez est \u201cAper\u00e7u\u201d. Cette page contient deux graphiques \u00e0 c\u00f4t\u00e9 de deux tables. En haut \u00e0 gauche, il y a un graphique circulaire montrant la r\u00e9partition des investissements par cat\u00e9gorie. La table \u00e0 c\u00f4t\u00e9 contient les m\u00eames donn\u00e9es sous forme tabulaire. En dessous du graphique circulaire se trouve un graphique \u00e0 barres montrant le total des investissements lev\u00e9s par ann\u00e9e. Il est \u00e9galement accompagn\u00e9 des m\u00eames donn\u00e9es dans la table \u00e0 c\u00f4t\u00e9 sous forme tabulaire. Tous ces graphiques et tables sont des exemples de \u201ctables de synth\u00e8se\u201d, que nous d\u00e9crirons ci-dessous. La page suivante, \u201cR\u00e9partitions\u201d, contient \u00e9galement deux tables et deux graphiques, mais ceux-ci sont li\u00e9s de mani\u00e8re dynamique et offrent des informations beaucoup plus d\u00e9taill\u00e9es sur les donn\u00e9es. En haut \u00e0 gauche se trouve une table montrant le financement total par ann\u00e9e (la m\u00eame table que nous avons vue sur la page pr\u00e9c\u00e9dente). Cette table sert de moteur pour le graphique \u00e0 c\u00f4t\u00e9. Lorsque vous cliquez sur une ann\u00e9e dans la table, le graphique circulaire se met \u00e0 jour pour montrer la r\u00e9partition des investissements cette ann\u00e9e-l\u00e0. De m\u00eame, la table du bas montre les investissements par cat\u00e9gorie. Lorsque vous cliquez sur une cat\u00e9gorie, le graphique lin\u00e9aire \u00e0 c\u00f4t\u00e9 se met \u00e0 jour pour montrer l\u2019historique du financement dans cette cat\u00e9gorie au fil des ans. Notez \u00e0 quel point cela est puissant et combien d\u2019informations vous pouvez en tirer. Par exemple, vous pouvez voir que la cat\u00e9gorie Publicit\u00e9 a re\u00e7u beaucoup d\u2019investissements \u00e0 New York depuis 2007, mais a \u00e9t\u00e9 d\u00e9pass\u00e9e par le E-commerce en 2013, tandis que la cat\u00e9gorie Mode a connu un pic majeur en 2011. Sur la page suivante, \u201cD\u00e9tails de l\u2019Entreprise\u201d, nous pouvons voir les donn\u00e9es granulaires de cet ensemble de donn\u00e9es. Ici, nous voyons une liste d\u2019entreprises et les cat\u00e9gories auxquelles elles appartiennent. Chaque entreprise affich\u00e9e a un lien pointant vers son inscription sur le site Crunchbase. S\u00e9lectionner une entreprise affiche une fiche avec ses d\u00e9tails, ainsi qu\u2019une liste de tous les investissements qu\u2019elle a re\u00e7us. C\u2019est ici que nous commen\u00e7ons \u00e0 voir la puissance de Grist. L\u2019ensemble de donn\u00e9es original est une feuille de calcul plate d\u2019entreprises, et une feuille de calcul encore plus grande d\u2019investissements. En affichant les donn\u00e9es graphiquement, les donn\u00e9es prennent vie, les rendant puissantes et utiles.","title":"Explorer l’exemple"},{"location":"investment-research/#comment-puis-je-faire-cela","text":"Avec Grist, pr\u00e9senter vos propres donn\u00e9es sous forme graphique est \u00e0 quelques \u00e9tapes faciles. Commen\u00e7ons par la premi\u00e8re \u00e9tape.","title":""},{"location":"investment-research/#obtenir-les-donnees","text":"Importons les donn\u00e9es sources. Nous allons importer deux fichiers CSV, chacun devenant sa propre table. Pour suivre, enregistrez d\u2019abord les fichiers de crunchbase_companies_ny.csv et crunchbase_investments_ny.csv sur votre ordinateur. Ensuite, cr\u00e9ez un document Grist en important le premier fichier depuis la page d\u2019accueil. Ensuite, importez la deuxi\u00e8me table en utilisant le bouton \u201cAjouter Nouveau\u201d et l\u2019option \u201cImporter depuis un fichier\u201d. Dans la bo\u00eete de dialogue d\u2019importation, terminez en cliquant sur \u201cImporter\u201d en bas \u00e0 gauche. Les tables que vous avez import\u00e9es seront nomm\u00e9es \u201ccrunchbase_companies_ny\u201d et \u201ccrunchbase_investments_ny\u201d. Cliquez sur le nom en haut de la table pour ouvrir la bo\u00eete de dialogue et renommer chacune des tables en \u201cEntreprises\u201d et \u201cInvestissements\u201d.","title":"Obtenir les donn\u00e9es"},{"location":"investment-research/#rendre-cela-relationnel","text":"La puissance de Grist provient de la structuration des donn\u00e9es. Regardez la table \u201cInvestissements\u201d. Triez par la premi\u00e8re colonne et vous remarquerez combien il y a de r\u00e9p\u00e9titions : chaque ligne contient les informations compl\u00e8tes de l\u2019entreprise, ce qui duplique les donn\u00e9es dans la table \u201cEntreprises\u201d et est r\u00e9p\u00e9t\u00e9 plusieurs fois lorsque plusieurs investissements s\u2019appliquent \u00e0 la m\u00eame entreprise. 2 La r\u00e9alit\u00e9 est que chaque investissement s\u2019applique \u00e0 une seule entreprise. Chaque ligne d\u2019investissement n\u2019a besoin de contenir qu\u2019une r\u00e9f\u00e9rence \u00e0 une entreprise, et les donn\u00e9es sp\u00e9cifiques \u00e0 cet investissement. Pour ce faire, trouvez une colonne qui identifie une entreprise de mani\u00e8re unique. Dans cet ensemble de donn\u00e9es, la premi\u00e8re colonne, \u201ccompany_permalink\u201d, le fait le mieux 3 . Cliquez sur la fl\u00e8che dans l\u2019en-t\u00eate de la colonne et cliquez sur \u201cOptions de colonne\u201d. Cliquez sur la fl\u00e8che \u00e0 c\u00f4t\u00e9 de \u201cTexte\u201d sous le \u201cType de colonne\u201d dans la bo\u00eete de dialogue \u00e0 droite de l\u2019\u00e9cran et s\u00e9lectionnez \u201cR\u00e9f\u00e9rence\u201d dans la liste. Grist sugg\u00e9rera automatiquement de le faire une \u201cR\u00e9f\u00e9rence\u201d \u00e0 la table \u201cEntreprises\u201d, et d\u2019afficher le \u201cpermalink\u201d de l\u2019entreprise r\u00e9f\u00e9renc\u00e9e. Cliquez sur \u201cAppliquer\u201d pour enregistrer cette conversion. Renommons \u00e9galement cette colonne en \u201cEntreprise\u201d. Dans Grist, les donn\u00e9es dupliqu\u00e9es ne sont pas n\u00e9cessaires et nous recommandons de les supprimer. Utiliser le raccourci Option-Minus (Mac) ou Alt-Minus (Windows) est un moyen rapide de supprimer des colonnes. Apr\u00e8s avoir supprim\u00e9 les colonnes de \u201ccompany_name\u201d \u00e0 \u201ccompany_city\u201d, voici ce qui reste : Les donn\u00e9es que vous avez supprim\u00e9es ne sont pas perdues puisqu\u2019elles \u00e9taient dupliqu\u00e9es \u2013 elles sont toujours disponibles dans la table \u201cEntreprises\u201d et peuvent \u00eatre utilis\u00e9es dans la formule d\u2019un enregistrement d\u2019Investissement comme, par exemple, $Company.company_xxx . En fait, il existe un moyen pratique de cr\u00e9er ce type de formule. Cr\u00e9ons-en une dont nous aurons besoin plus tard. Cliquez sur l\u2019en-t\u00eate de la colonne \u201cEntreprise\u201d. Dans l\u2019onglet Colonne du panneau de droite, vous verrez une section \u2018Ajouter des colonnes r\u00e9f\u00e9renc\u00e9es\u2019. Cliquez sur \u2018Ajouter une colonne\u2019 pour ajouter la colonne \u201ccategory_code\u201d. Une nouvelle colonne sera ajout\u00e9e \u00e0 la table avec la formule $Company.category_code . Pour chaque investissement, elle affiche le \u201ccategory_code\u201d de l\u2019entreprise li\u00e9e \u00e0 son enregistrement d\u2019investissement.","title":"Rendre cela relationnel"},{"location":"investment-research/#resumer","text":"La fonctionnalit\u00e9 puissante que vous attendiez est celle qui r\u00e9sume les donn\u00e9es. Les tables de synth\u00e8se r\u00e9sument chaque colonne num\u00e9rique dans une table de donn\u00e9es. Nous voulons trouver la somme pour la colonne funding_total_usd dans la table Entreprises. V\u00e9rifiez que le type de colonne est d\u00e9fini sur \u2018Num\u00e9rique\u2019 et format\u00e9 avec $ . Pour utiliser cela, ajoutons une table montrant les entreprises regroup\u00e9es par \u201ccategory_code\u201d. Dans le menu \u201cAjouter Nouveau\u201d en haut \u00e0 gauche, s\u00e9lectionnez \u201cAjouter une Page\u201d. Dans la bo\u00eete de dialogue, s\u00e9lectionnez \u201cTable\u201d et \u201cEntreprises\u201d, puis utilisez l\u2019ic\u00f4ne de sommation ( ) pour s\u00e9lectionner les colonnes \u201cGrouper par\u201d \u2013 c\u2019est-\u00e0-dire les colonnes par lesquelles r\u00e9sumer. Si vous ne s\u00e9lectionnez aucune colonne, vous obtiendrez simplement une seule ligne de totaux. Si vous r\u00e9sumez par \u201ccategory_code\u201d, vous obtiendrez une ligne pour chaque valeur distincte de \u201ccategory_code\u201d. Faisons cela puis cliquons sur \u201cAjouter Page\u201d. Ceci est similaire aux tableaux crois\u00e9s dynamiques d\u2019Excel. Chaque ligne repr\u00e9sente le groupe d\u2019enregistrements de la table source (\u201cEntreprises\u201d) qui ont une valeur particuli\u00e8re de \u201ccategory_code\u201d. Il y a un rappel de cela dans le titre de la table (\u201cENTREPRISES [par category_code]\u201d). De telles tables de synth\u00e8se peuvent (et doivent !) utiliser des formules. Les colonnes que vous choisissez lors de la cr\u00e9ation de la table sont les identifiants des groupes. Toutes les autres colonnes sont des colonnes de formule \u2013 elles sont calcul\u00e9es. Dans les formules, le groupe d\u2019enregistrements source r\u00e9sum\u00e9 par une ligne est disponible sous la valeur \u201c$group\u201d. Par exemple, vous verrez une colonne cr\u00e9\u00e9e automatiquement appel\u00e9e \u201ccount\u201d. Si vous appuyez sur \u201cEntr\u00e9e\u201d, vous verrez la formule qui s\u2019y trouve \u2013 len($group) \u2013 qui est juste le nombre d\u2019enregistrements dans ce groupe d\u2019enregistrements, c\u2019est-\u00e0-dire le nombre d\u2019entreprises dans cette cat\u00e9gorie. Pour les colonnes num\u00e9riques dans la table source, les tables de synth\u00e8se obtiennent automatiquement une colonne num\u00e9rique du m\u00eame nom contenant une somme, avec une formule telle que SUM($group.funding_total_usd) . Une note pour les fans de Python $group est un objet Python sp\u00e9cial. C\u2019est une collection it\u00e9rable d\u2019enregistrements. Utiliser un attribut comme $group.A est un raccourci pour la liste des valeurs dans la colonne A de tous les enregistrements du groupe, c\u2019est-\u00e0-dire que c\u2019est \u00e0 peu pr\u00e8s \u00e9quivalent \u00e0 [r.A for r in $group] . Parfois, ajouter les valeurs n\u2019a pas de sens. Par exemple, la somme de \u201cfounded_year\u201d est d\u00e9nu\u00e9e de sens. Il est pr\u00e9f\u00e9rable de supprimer cela et toute autre colonne dont nous n\u2019avons pas besoin, ce qui nous laisse avec la colonne \u201cfunding_total_usd\u201d. Puisque cette colonne contient de grands nombres, il est temps de regarder la section \u201cFormat de Nombre\u201d de sa configuration, et de cliquer sur , (ou peut-\u00eatre $ ) pour formater les nombres afin qu\u2019ils soient plus lisibles. Ajoutons une deuxi\u00e8me table de synth\u00e8se. S\u00e9lectionnez \u00e0 nouveau \u201cAjouter Nouveau\u201d pour \u201cAjouter un Widget \u00e0 la Page\u201d. Pour obtenir un r\u00e9sum\u00e9 par ann\u00e9e, s\u00e9lectionnez la table \u201cInvestissements\u201d sous \u201cS\u00e9lectionner les Donn\u00e9es\u201d, et utilisez \u00e0 nouveau son symbole de somme (\u2211) pour s\u00e9lectionner la colonne par laquelle r\u00e9sumer : \u201cfunded_year\u201d puis cliquez sur \u201cAjouter \u00e0 la page\u201d. Cela produit une deuxi\u00e8me table de synth\u00e8se qui montre un enregistrement pour chaque ann\u00e9e, chacun repr\u00e9sentant un groupe de lignes \u201cInvestissements\u201d pour cette ann\u00e9e. La colonne la plus utile est \u201craised_amount_usd\u201d, ajoutant tous les investissements r\u00e9alis\u00e9s cette ann\u00e9e-l\u00e0. Supprimons les colonnes non n\u00e9cessaires. Vous remarquerez des valeurs roses dans \u201craised_amount_usd\u201d. C\u2019est parce que Grist devine que le type de colonne est un entier. Les sommes roses sont des instances o\u00f9 les nombres d\u00e9passent la capacit\u00e9 de Javascript \u00e0 g\u00e9rer de grands entiers. Pour corriger cela, le type de la colonne doit \u00eatre chang\u00e9 en \u201cNum\u00e9rique\u201d (ce qui \u00e9change la pr\u00e9cision contre la capacit\u00e9 \u00e0 repr\u00e9senter des nombres tr\u00e8s grands et tr\u00e8s petits). Changez le type en \u201cNum\u00e9rique\u201c sous \u201cOptions de colonne\u201d. C\u2019est encore un bon moment pour choisir un format de nombre plus convivial pour la colonne, et pour l\u2019\u00e9largir afin d\u2019adapter les nombres plus longs.","title":"R\u00e9sumer"},{"location":"investment-research/#graphique-diagramme-trace","text":"Vous pouvez cr\u00e9er un graphique \u00e0 partir de n\u2019importe quelles donn\u00e9es. Pour cette page, nous voulons ajouter une version graphique de chaque table de synth\u00e8se. S\u00e9lectionnez \u00e0 nouveau le bouton \u201cAjouter Nouveau\u201d, choisissez \u201cAjouter un Widget \u00e0 la Page\u201d, s\u00e9lectionnez \u201cGraphique\u201d comme widget, et la m\u00eame table (Entreprises) et colonne de synth\u00e8se (category_code) qu\u2019auparavant. Puis cliquez sur \u201cAjouter \u00e0 la Page\u201d. Pour un graphique, vous devrez toujours le personnaliser par la suite. Ouvrez le panneau de droite, et s\u00e9lectionnez l\u2019onglet \u201cGraphique\u201d / sous-onglet \u201cWidget\u201d. Pour ce premier graphique, sous \u201cType de Graphique\u201d, s\u00e9lectionnez \u201cGraphique Circulaire\u201d. Pour construire ce graphique, s\u00e9lectionnez d\u2019abord une \u00e9tiquette, puis s\u00e9lectionnez une s\u00e9rie \u00e0 r\u00e9sumer dans le graphique circulaire. Puisque nous voulons que le graphique montre \u201ccategory_code\u201d comme \u00e9tiquettes, s\u00e9lectionnez cette s\u00e9rie dans le menu d\u00e9roulant \u201c\u00c9tiquette\u201d. Nous voulons utiliser \u201cfunding_total_usd\u201d comme valeurs, donc cela devrait \u00eatre list\u00e9 en haut de la liste \u201cs\u00e9ries\u201d dans le panneau de configuration. Lorsque vous d\u00e9placez votre souris sur les \u00e9l\u00e9ments de cette liste, utilisez les doubles barres verticales qui apparaissent pour faire glisser et d\u00e9poser une s\u00e9rie en haut de la liste. Alternativement, vous pouvez masquer les autres s\u00e9ries de la liste en cliquant sur l\u2019ic\u00f4ne de corbeille. Ajoutons maintenant un graphique montrant une tendance par ann\u00e9e. Ajoutez un autre \u201cWidget \u00e0 la page\u201d, s\u00e9lectionnez \u201cGraphique\u201d sous \u201cWidget\u201d, s\u00e9lectionnez \u201cInvestissements\u201d sous \u201cS\u00e9lectionner les Donn\u00e9es\u201d, cliquez sur la sommation ( ) pour grouper par \u201cfunded_year\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Pour personnaliser ce graphique, restez avec le type de graphique \u201cGraphique \u00e0 Barres\u201d. Dans le menu d\u00e9roulant \u201cAxe X\u201d, s\u00e9lectionnez la colonne \u00e0 utiliser pour les valeurs de l\u2019axe X (horizontal). Sous \u2018S\u00e9ries\u2019, s\u00e9lectionnez une deuxi\u00e8me (et \u00e9ventuellement d\u2019autres) colonne pour \u00eatre les valeurs de l\u2019axe Y (vertical). Vous pouvez r\u00e9organiser les sections \u00e0 l\u2019\u00e9cran dans une configuration que vous aimeriez voir pour un tableau de bord. D\u00e9placez votre souris vers le coin sup\u00e9rieur gauche de chaque section jusqu\u2019\u00e0 ce que vous voyiez une ic\u00f4ne \u201cpoign\u00e9e de tirage\u201d. Utilisez cette ic\u00f4ne pour faire glisser chaque section \u00e0 l\u2019endroit souhait\u00e9 par rapport aux autres sections. Une fois que vous avez termin\u00e9, renommez la page en survolant le nom de la page, puis en cliquant sur l\u2019ic\u00f4ne \u00e0 trois points pour ouvrir le menu. S\u00e9lectionnez \u201cRenommer\u201d et renommez en \u201cAper\u00e7u\u201d.","title":"Graphique, diagramme, trac\u00e9"},{"location":"investment-research/#graphiques-dynamiques","text":"Si vous avez lu nos autres tutoriels sur le lien des donn\u00e9es, cela viendra naturellement. Les graphiques sont simplement une autre fa\u00e7on de montrer des donn\u00e9es, et ils peuvent \u00eatre li\u00e9s de la m\u00eame mani\u00e8re que les tables. Pour notre exemple, nous allons ajouter une nouvelle page avec une table de synth\u00e8se : s\u00e9lectionnez le widget \u201cTable\u201d, les donn\u00e9es \u201cInvestissements\u201d, groupez par \u201cfunded_year\u201d, cliquez sur \u201cAjouter Page\u201d. Renommons cette nouvelle page \u201cR\u00e9partitions\u201d. Ensuite, ajoutez un widget \u00e0 cette page, en s\u00e9lectionnant le widget \u201cGraphique\u201d, les donn\u00e9es \u201cInvestissements\u201d. Pour \u201cGrouper par\u201d, nous choisissons deux colonnes : \u201cCompany_category_code\u201d et \u201cfunded_year\u201d. C\u2019est pourquoi nous avons ajout\u00e9 la colonne \u201cCompany_category_code\u201d plus t\u00f4t. Nous ne pouvons grouper les enregistrements d\u2019investissement par le code de cat\u00e9gorie que si nous avons ce code pour chaque investissement. Le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d en bas \u00e0 gauche de la bo\u00eete de dialogue r\u00e9pertorie les widgets d\u00e9j\u00e0 \u00e0 l\u2019\u00e9cran qui peuvent contr\u00f4ler la s\u00e9lection des donn\u00e9es dans le graphique que nous ajoutons. Dans \u201cS\u00e9lectionner par\u201d, choisissez \u201cINVESTISSEMENTS [par funded_year]\u201d, et cliquez sur \u201cAjouter \u00e0 la Page\u201d. Remarque : Si vous devez apporter des modifications \u00e0 un widget que vous avez d\u00e9j\u00e0 ajout\u00e9, comme changer son type, ses param\u00e8tres \u201cGrouper par\u201d ou \u201cS\u00e9lectionner par\u201d, vous pouvez toujours le faire depuis l\u2019onglet \u201cDonn\u00e9es\u201d dans les param\u00e8tres du widget, en utilisant le bouton \u201cModifier la S\u00e9lection de Donn\u00e9es\u201d. Nous voulons pouvoir s\u00e9lectionner une ann\u00e9e, puis afficher un graphique circulaire pour cette ann\u00e9e qui affiche le total pour chaque code de cat\u00e9gorie. L\u2019option \u201cS\u00e9lectionner par\u201d que nous avons choisie garantit que seules les donn\u00e9es de l\u2019ann\u00e9e s\u00e9lectionn\u00e9e sont utilis\u00e9es. Tout ce qui reste est de changer le type de graphique en \u201cGraphique Circulaire\u201d, et de d\u00e9finir \u201c\u00c9tiquette\u201d sur \u201cCompany_category_code\u201d et \u201cS\u00e9rie\u201d sur \u201craised_amount_usd\u201d. Remarque : Les graphiques ont besoin de plus d\u2019espace \u00e0 l\u2019\u00e9cran, donc nos petites captures d\u2019\u00e9cran auront meilleure allure si nous fermons les panneaux lat\u00e9raux en cliquant sur les ic\u00f4nes d\u2019ouverture ( , ). Ajoutons \u00e9galement un tri de la table par \u201cfunded_year\u201d. En ce qui concerne le tri, le bouton mis en surbrillance au-dessus de la table vous rappelle que les param\u00e8tres de tri ne sont pas enregistr\u00e9s automatiquement. Cliquez sur le bouton vert et s\u00e9lectionnez \u201cEnregistrer\u201d pour le faire. Quel est le r\u00e9sultat ? Nous pouvons cliquer \u00e0 travers les ann\u00e9es (ou utiliser les touches fl\u00e9ch\u00e9es), et voir la r\u00e9partition par cat\u00e9gorie changer. Remarque : Si cliquer \u00e0 travers les ann\u00e9es n\u2019affecte pas le graphique, le graphique ne doit pas \u00eatre li\u00e9. Vous pouvez v\u00e9rifier et corriger cela en utilisant le menu \u201ctrois points\u201d en haut \u00e0 droite du graphique, en cliquant sur \u201cS\u00e9lection de donn\u00e9es\u201d, et en vous assurant que le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d affiche \u201cINVESTISSEMENTS [par funded_year]\u201d. Pour compl\u00e9ter l\u2019exemple, nous allons ajouter deux sections suppl\u00e9mentaires \u00e0 cette page \u201cR\u00e9partitions\u201d. L\u2019une sera une table r\u00e9pertoriant les cat\u00e9gories d\u2019entreprises, et li\u00e9e \u00e0 cela sera un graphique montrant le montant de l\u2019investissement dans cette cat\u00e9gorie au fil des ans. Pour ajouter la table des cat\u00e9gories, utilisez \u201cAjouter un Widget \u00e0 la Page\u201d, et s\u00e9lectionnez le widget \u201cTable\u201d, les donn\u00e9es \u201cInvestissements\u201d, regroup\u00e9es par \u201cCompany_category_code\u201d. La colonne \u201cfunded_year\u201d dans la table r\u00e9sultante est d\u00e9nu\u00e9e de sens et doit \u00eatre supprim\u00e9e. Pour la derni\u00e8re \u00e9tape, ajoutons un autre graphique. Nous devons nous rappeler de grouper par \u00e0 la fois \u201cCompany_category_code\u201d et \u201cfunded_year\u201d, et de d\u00e9finir un widget \u201cS\u00e9lectionner par\u201d appropri\u00e9 pour cela. Puisqu\u2019il y a deux tables sur cette page, vous avez le choix de laquelle contr\u00f4lera les donn\u00e9es dans ce graphique. Dans ce cas, choisissez le widget que nous venons d\u2019ajouter : \u201cINVESTISSEMENTS [par Company_category_code]\u201d. Comme dans la section pr\u00e9c\u00e9dente, nous configurons le graphique en s\u00e9lectionnant \u201cType de Graphique\u201d comme \u201cGraphique \u00e0 Barres\u201d, et dans le menu d\u00e9roulant \u201cAxe X\u201d, en s\u00e9lectionnant \u201cfunded_year\u201d et sous \u201cS\u00e9rie\u201d, en s\u00e9lectionnant \u201craised_amount_usd\u201d et en masquant le reste. Nous pouvons maintenant cliquer \u00e0 travers les cat\u00e9gories, et voir l\u2019historique des investissements dans chacune.","title":"Graphiques dynamiques"},{"location":"investment-research/#prochaines-etapes","text":"Si vous n\u2019\u00eates pas familier avec la mani\u00e8re dont nous avons cr\u00e9\u00e9 la page \u201cD\u00e9tails de l\u2019Entreprise\u201d qui est pr\u00e9sente dans l\u2019exemple, visitez l\u2019un de ces tutoriels pr\u00e9c\u00e9dents pour apprendre comment : \u2018Comment construire un CRM l\u00e9ger\u2019, ou \u2018G\u00e9rer votre entreprise dans Grist\u2019. C\u2019est tout ! Maintenant, allez analyser des donn\u00e9es ! T\u00e9l\u00e9chargez crunchbase_companies_ny.csv et crunchbase_investments_ny.csv . Les donn\u00e9es d\u2019exemple incluent uniquement les donn\u00e9es sur les \u201centreprises\u201d et les \u201cinvestissements\u201d, et incluent uniquement des entreprises de New York pour les rendre plus petites et plus rapides. L\u2019ensemble de donn\u00e9es provient de Kaggle . \u21a9 Une telle duplication est couramment observ\u00e9e dans les feuilles de calcul. Les donn\u00e9es sous cette forme sont appel\u00e9es \u201cd\u00e9normalis\u00e9es\u201d. \u21a9 Si vous n\u2019avez pas de colonne d\u2019identification unique, vous pouvez en construire une avec une formule. \u21a9","title":"Prochaines \u00e9tapes"},{"location":"keyboard-shortcuts/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Raccourcis Grist # G\u00e9n\u00e9ral # Touche (Mac) Touche (Windows) Description F1 , \u2318 / F1 , Ctrl + / Afficher le panneau des raccourcis \u2318 Z Ctrl + Z Annuler la derni\u00e8re action \u2318 \u21e7 Z , \u2303 Y Ctrl + Shift + Z , Ctrl + Y R\u00e9tablir la derni\u00e8re action \u2318 F Ctrl + F Rechercher \u2318 G Ctrl + G Trouver l\u2019occurrence suivante \u2318 \u21e7 G Ctrl + Shift + G Trouver l\u2019occurrence pr\u00e9c\u00e9dente Navigation # Touche (Mac) Touche (Windows) Description \u2193 \u2193 Descendre \u00e0 l\u2019enregistrement ou au champ suivant \u2191 \u2191 Monter \u00e0 l\u2019enregistrement ou au champ pr\u00e9c\u00e9dent \u2192 \u2192 Aller \u00e0 droite au champ suivant \u2190 \u2190 Aller \u00e0 gauche au champ pr\u00e9c\u00e9dent Tab Tab Aller au champ suivant, en enregistrant les modifications si une valeur est en cours d\u2019\u00e9dition \u21e7 Tab Shift + Tab Aller au champ pr\u00e9c\u00e9dent, en enregistrant les modifications si une valeur est en cours d\u2019\u00e9dition PageDown PageDown Descendre d\u2019une page d\u2019enregistrements, ou aller \u00e0 l\u2019enregistrement suivant dans une liste de fiches PageUp PageUp Monter d\u2019une page d\u2019enregistrements, ou aller \u00e0 l\u2019enregistrement pr\u00e9c\u00e9dent dans une liste de fiches \u2318 \u2191 Ctrl + \u2191 Monter au premier enregistrement \u2318 \u2193 Ctrl + \u2193 Descendre au dernier enregistrement Home Home Aller au premier champ ou au d\u00e9but d\u2019une ligne End End Aller au dernier champ ou \u00e0 la fin d\u2019une ligne \u2325 \u2193 Alt + \u2193 Ouvrir la page suivante \u2325 \u2191 Alt + \u2191 Ouvrir la page pr\u00e9c\u00e9dente \u2318 O Ctrl + O Activer la vue de la page suivante \u2318 \u21e7 O Ctrl + Shift + O Activer la vue de la page pr\u00e9c\u00e9dente Space Space Ouvrir une vue fiche dans une vue de table S\u00e9lection # Touche (Mac) Touche (Windows) Description \u21e7 \u2193 Shift + \u2193 Ajouter l\u2019\u00e9l\u00e9ment sous le curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2191 Shift + \u2191 Ajouter l\u2019\u00e9l\u00e9ment au-dessus du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2192 Shift + \u2192 Ajouter l\u2019\u00e9l\u00e9ment \u00e0 droite du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2190 Shift + \u2190 Ajouter l\u2019\u00e9l\u00e9ment \u00e0 gauche du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u2318 A Ctrl + A S\u00e9lectionner toutes les cellules actuellement affich\u00e9es \u2318 Shift \u2191 Ctrl + Shift + \u2191 S\u00e9lectionner les cellules au-dessus de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame colonne \u2318 Shift \u2193 Ctrl + Shift + \u2193 S\u00e9lectionner les cellules en dessous de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame colonne \u2318 Shift \u2192 Ctrl + Shift + \u2192 S\u00e9lectionner les cellules \u00e0 droite de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame ligne \u2318 Shift \u2190 Ctrl + Shift + \u2190 S\u00e9lectionner les cellules \u00e0 gauche de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame ligne \u2318 \u21e7 A Ctrl + Shift + A Copier le lien d\u2019ancrage \u00c9dition # Touche (Mac) Touche (Windows) Description Enter , F2 Enter , F2 Commencer \u00e0 \u00e9diter la cellule actuellement s\u00e9lectionn\u00e9e Enter Enter Terminer l\u2019\u00e9dition d\u2019une cellule, en enregistrant la valeur Escape Escape Annuler les modifications de la valeur d\u2019une cellule \u2318 D Ctrl + D Remplir la s\u00e9lection actuelle avec le contenu de la premi\u00e8re ligne de la s\u00e9lection Delete Backspace , Delete Effacer les cellules actuellement s\u00e9lectionn\u00e9es Enter Enter Basculer la valeur des cellules \u00e0 case \u00e0 cocher = = Lorsqu\u2019il est tap\u00e9 au d\u00e9but d\u2019une cellule, transformer cette colonne en colonne de formule \u2318 ; Ctrl + ; Ins\u00e9rer la date actuelle \u2318 \u21e7 ; Ctrl + Shift + ; Ins\u00e9rer la date et l\u2019heure actuelles Manipulation des donn\u00e9es # Touche (Mac) Touche (Windows) Description \u2318 \u21e7 Enter Ctrl + Shift + Enter Ins\u00e9rer un nouvel enregistrement, avant celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Enter Ctrl + Enter Ins\u00e9rer un nouvel enregistrement, apr\u00e8s celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 \u21e7 D Ctrl + Shift + D Dupliquer l\u2019(les) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) \u2318 Delete Ctrl + Backspace , Ctrl + Delete Supprimer l\u2019(les) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) \u2325 \u21e7 = Alt + Shift + = Ins\u00e9rer une nouvelle colonne, avant celle actuellement s\u00e9lectionn\u00e9e \u2325 = Alt + = Ins\u00e9rer une nouvelle colonne, apr\u00e8s celle actuellement s\u00e9lectionn\u00e9e \u2303 M Ctrl + M Renommer la colonne actuellement s\u00e9lectionn\u00e9e \u2325 \u21e7 - Alt + Shift + - Masquer la colonne actuellement s\u00e9lectionn\u00e9e \u2325 - Alt + - Supprimer les colonnes actuellement s\u00e9lectionn\u00e9es","title":"Keyboard shortcuts"},{"location":"keyboard-shortcuts/#raccourcis-grist","text":"","title":"Raccourcis Grist"},{"location":"keyboard-shortcuts/#general","text":"Touche (Mac) Touche (Windows) Description F1 , \u2318 / F1 , Ctrl + / Afficher le panneau des raccourcis \u2318 Z Ctrl + Z Annuler la derni\u00e8re action \u2318 \u21e7 Z , \u2303 Y Ctrl + Shift + Z , Ctrl + Y R\u00e9tablir la derni\u00e8re action \u2318 F Ctrl + F Rechercher \u2318 G Ctrl + G Trouver l\u2019occurrence suivante \u2318 \u21e7 G Ctrl + Shift + G Trouver l\u2019occurrence pr\u00e9c\u00e9dente","title":"G\u00e9n\u00e9ral"},{"location":"keyboard-shortcuts/#navigation","text":"Touche (Mac) Touche (Windows) Description \u2193 \u2193 Descendre \u00e0 l\u2019enregistrement ou au champ suivant \u2191 \u2191 Monter \u00e0 l\u2019enregistrement ou au champ pr\u00e9c\u00e9dent \u2192 \u2192 Aller \u00e0 droite au champ suivant \u2190 \u2190 Aller \u00e0 gauche au champ pr\u00e9c\u00e9dent Tab Tab Aller au champ suivant, en enregistrant les modifications si une valeur est en cours d\u2019\u00e9dition \u21e7 Tab Shift + Tab Aller au champ pr\u00e9c\u00e9dent, en enregistrant les modifications si une valeur est en cours d\u2019\u00e9dition PageDown PageDown Descendre d\u2019une page d\u2019enregistrements, ou aller \u00e0 l\u2019enregistrement suivant dans une liste de fiches PageUp PageUp Monter d\u2019une page d\u2019enregistrements, ou aller \u00e0 l\u2019enregistrement pr\u00e9c\u00e9dent dans une liste de fiches \u2318 \u2191 Ctrl + \u2191 Monter au premier enregistrement \u2318 \u2193 Ctrl + \u2193 Descendre au dernier enregistrement Home Home Aller au premier champ ou au d\u00e9but d\u2019une ligne End End Aller au dernier champ ou \u00e0 la fin d\u2019une ligne \u2325 \u2193 Alt + \u2193 Ouvrir la page suivante \u2325 \u2191 Alt + \u2191 Ouvrir la page pr\u00e9c\u00e9dente \u2318 O Ctrl + O Activer la vue de la page suivante \u2318 \u21e7 O Ctrl + Shift + O Activer la vue de la page pr\u00e9c\u00e9dente Space Space Ouvrir une vue fiche dans une vue de table","title":"Navigation"},{"location":"keyboard-shortcuts/#selection","text":"Touche (Mac) Touche (Windows) Description \u21e7 \u2193 Shift + \u2193 Ajouter l\u2019\u00e9l\u00e9ment sous le curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2191 Shift + \u2191 Ajouter l\u2019\u00e9l\u00e9ment au-dessus du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2192 Shift + \u2192 Ajouter l\u2019\u00e9l\u00e9ment \u00e0 droite du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u21e7 \u2190 Shift + \u2190 Ajouter l\u2019\u00e9l\u00e9ment \u00e0 gauche du curseur \u00e0 l\u2019intervalle s\u00e9lectionn\u00e9 \u2318 A Ctrl + A S\u00e9lectionner toutes les cellules actuellement affich\u00e9es \u2318 Shift \u2191 Ctrl + Shift + \u2191 S\u00e9lectionner les cellules au-dessus de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame colonne \u2318 Shift \u2193 Ctrl + Shift + \u2193 S\u00e9lectionner les cellules en dessous de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame colonne \u2318 Shift \u2192 Ctrl + Shift + \u2192 S\u00e9lectionner les cellules \u00e0 droite de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame ligne \u2318 Shift \u2190 Ctrl + Shift + \u2190 S\u00e9lectionner les cellules \u00e0 gauche de la cellule s\u00e9lectionn\u00e9e dans la m\u00eame ligne \u2318 \u21e7 A Ctrl + Shift + A Copier le lien d\u2019ancrage","title":"S\u00e9lection"},{"location":"keyboard-shortcuts/#edition","text":"Touche (Mac) Touche (Windows) Description Enter , F2 Enter , F2 Commencer \u00e0 \u00e9diter la cellule actuellement s\u00e9lectionn\u00e9e Enter Enter Terminer l\u2019\u00e9dition d\u2019une cellule, en enregistrant la valeur Escape Escape Annuler les modifications de la valeur d\u2019une cellule \u2318 D Ctrl + D Remplir la s\u00e9lection actuelle avec le contenu de la premi\u00e8re ligne de la s\u00e9lection Delete Backspace , Delete Effacer les cellules actuellement s\u00e9lectionn\u00e9es Enter Enter Basculer la valeur des cellules \u00e0 case \u00e0 cocher = = Lorsqu\u2019il est tap\u00e9 au d\u00e9but d\u2019une cellule, transformer cette colonne en colonne de formule \u2318 ; Ctrl + ; Ins\u00e9rer la date actuelle \u2318 \u21e7 ; Ctrl + Shift + ; Ins\u00e9rer la date et l\u2019heure actuelles","title":"\u00c9dition"},{"location":"keyboard-shortcuts/#manipulation-des-donnees","text":"Touche (Mac) Touche (Windows) Description \u2318 \u21e7 Enter Ctrl + Shift + Enter Ins\u00e9rer un nouvel enregistrement, avant celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Enter Ctrl + Enter Ins\u00e9rer un nouvel enregistrement, apr\u00e8s celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 \u21e7 D Ctrl + Shift + D Dupliquer l\u2019(les) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) \u2318 Delete Ctrl + Backspace , Ctrl + Delete Supprimer l\u2019(les) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) \u2325 \u21e7 = Alt + Shift + = Ins\u00e9rer une nouvelle colonne, avant celle actuellement s\u00e9lectionn\u00e9e \u2325 = Alt + = Ins\u00e9rer une nouvelle colonne, apr\u00e8s celle actuellement s\u00e9lectionn\u00e9e \u2303 M Ctrl + M Renommer la colonne actuellement s\u00e9lectionn\u00e9e \u2325 \u21e7 - Alt + Shift + - Masquer la colonne actuellement s\u00e9lectionn\u00e9e \u2325 - Alt + - Supprimer les colonnes actuellement s\u00e9lectionn\u00e9es","title":"Manipulation des donn\u00e9es"},{"location":"lightweight-crm/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Comment cr\u00e9er un CRM personnalis\u00e9 # Grist est aussi facile \u00e0 utiliser qu\u2019un tableur, mais vous donne de nouveaux pouvoirs lorsque les donn\u00e9es ne s\u2019int\u00e8grent pas dans une simple grille. Un bon exemple est le suivi des contacts et de nos conversations avec eux. Pour une entreprise, cela pourrait \u00eatre des clients, des prospects ou des candidats \u00e0 un emploi. Pour un particulier, cela pourrait \u00eatre des entreprises auxquelles il a postul\u00e9 dans le cadre d\u2019une recherche d\u2019emploi. Dans ce tutoriel, nous allons expliquer l\u2019exemple de \u201cCRM l\u00e9ger\u201d, que vous pouvez utiliser comme mod\u00e8le pour vos propres contacts, puis montrer comment le construire \u00e0 partir de z\u00e9ro. Vous apprendrez \u00e0 : Ajouter des tables Lier des donn\u00e9es D\u00e9finir des types de colonnes Cr\u00e9er des mises en page personnalis\u00e9es Explorer l\u2019exemple # Ouvrez le document CRM l\u00e9ger , trouv\u00e9 dans Exemples & Mod\u00e8les sur votre page d\u2019accueil Grist . Vous verrez la page \u201cContacts\u201d, listant les contacts sur la gauche de l\u2019\u00e9cran. Cliquez sur n\u2019importe quel contact pour le s\u00e9lectionner. Les deux sections \u00e0 droite montrent les d\u00e9tails et l\u2019historique des interactions avec le contact s\u00e9lectionn\u00e9. Comment cela se compare-t-il \u00e0 un tableur ? Ces captures d\u2019\u00e9cran montrent l\u2019exemple de CRM l\u00e9ger \u00e0 gauche, et un tableur ordinaire avec les m\u00eames donn\u00e9es \u00e0 droite. Pr\u00e9c\u00e9dent Suivant Pr\u00e9c\u00e9dent Suivant La difficult\u00e9 r\u00e9side dans l\u2019historique des notes pour un contact. Dans une grille bidimensionnelle, vous avez peu d\u2019options pour inclure plusieurs notes. Si vous les incluez sous forme de plusieurs colonnes, cela rend rapidement le tableur difficile \u00e0 g\u00e9rer et \u00e0 naviguer. Grist ressemble davantage \u00e0 une application, mais reste aussi polyvalent qu\u2019un tableur. L\u2019exemple de \u201cCRM l\u00e9ger\u201d peut \u00eatre utilis\u00e9 imm\u00e9diatement tel quel (avec les donn\u00e9es d\u2019exemple), ou comme mod\u00e8le (juste la structure sans les donn\u00e9es). Voici quelques points suppl\u00e9mentaires sur son utilisation en tant que CRM : Pour ajouter un nouveau contact, cliquez sur la ligne vide en bas de la liste des contacts, puis remplissez la section vide \u201cFiche CONTACTS\u201d qui appara\u00eet \u00e0 droite. Pour ajouter une nouvelle conversation, s\u00e9lectionnez un contact, puis cliquez sur la ligne vide \u00e0 la fin de la table Interactions. Vous pouvez entrer la date d\u2019aujourd\u2019hui en utilisant le raccourci \u2318 + ; (point-virgule) (Mac) ou Ctrl + ; (point-virgule) (Windows). Ensuite, s\u00e9lectionnez le type d\u2019interaction \u00e0 l\u2019aide de l\u2019auto-compl\u00e9tion et tapez vos notes. Vous pouvez ajouter des \u00e9l\u00e9ments \u00e0 faire pour un contact : dans la liste des Interactions, s\u00e9lectionnez \u201c\u00c0 faire\u201d dans la colonne \u201cType\u201d en tant que type sp\u00e9cial d\u2019interaction. Pensez \u00e0 la date associ\u00e9e comme \u00e0 la date d\u2019\u00e9ch\u00e9ance pour cette t\u00e2che. La table Contacts montre la liste des \u00e9l\u00e9ments \u00e0 faire \u00e0 venir, tri\u00e9s par leur date d\u2019\u00e9ch\u00e9ance. Si vous utilisez Gmail, le lien pratique \u201cRecherche Gmail\u201d dans la section \u201cFiche CONTACTS\u201d ouvrira une fen\u00eatre de navigateur avec les r\u00e9sultats de recherche Gmail pour l\u2019adresse e-mail de ce contact. Vous pouvez utiliser cet exemple comme mod\u00e8le pour vos propres contacts. Avec l\u2019exemple de \u201cCRM l\u00e9ger\u201d ouvert, cliquez sur le bouton \u201cEnregistrer une copie\u201d dans la barre sup\u00e9rieure, puis cochez la case \u201cEn tant que mod\u00e8le\u201d. Vous obtiendrez un document vide avec la m\u00eame mise en page, et pourrez commencer \u00e0 le remplir avec vos propres donn\u00e9es. Si vous n\u2019\u00eates pas connect\u00e9, vous devrez vous connecter pour faire une copie de l\u2019exemple. Cr\u00e9er le v\u00f4tre # Le reste de ce tutoriel vous montrera comment cr\u00e9er un tel document par vous-m\u00eame. C\u2019est un excellent exercice qui vous apprendra certaines des fonctionnalit\u00e9s cl\u00e9s de Grist. Pour commencer, nous allons importer un fichier avec des contacts d\u2019exemple depuis la page d\u2019accueil de Grist. Tout d\u2019abord, enregistrez ce fichier sur votre bureau : lightweight-crm-contacts.csv . Ensuite, cliquez sur le bouton \u201cAjouter nouveau\u201d en haut \u00e0 gauche de votre page d\u2019accueil Grist, cliquez sur \u201cImporter le document\u201d, et s\u00e9lectionnez le fichier sur votre bureau. Vous verrez une table de contacts avec des donn\u00e9es d\u2019exemple. Notez qu\u2019\u00e0 Grist, les colonnes ont des noms. Renommez cette table en \u201cContacts\u201d en cliquant sur son nom dans la barre sup\u00e9rieure et en tapant le nouveau nom. C\u2019est tout ce dont vous avez besoin pour une simple table de contacts. Vous pouvez ajouter des lignes ici, ou ajouter de nouvelles colonnes pour associer plus de donn\u00e9es \u00e0 chaque contact. Ajouter une autre table # Pour notre prochaine \u00e9tape, nous voulons pouvoir s\u00e9lectionner un contact et voir la liste des conversations avec ce contact. Ces conversations devraient \u00eatre une nouvelle table de donn\u00e9es. L\u2019indice est qu\u2019elle a un nombre de lignes diff\u00e9rent de la table des contacts. Cr\u00e9ez la nouvelle table en utilisant le bouton vert \u201cAjouter nouveau\u201d en haut \u00e0 gauche de votre \u00e9cran, et cliquez sur \u201cAjouter une table vide\u201d dans le menu. Cette table repr\u00e9sentera les interactions avec nos contacts, alors renommons-la \u201cInteractions\u201d en cliquant sur son nom par d\u00e9faut (\u201cTable1\u201d) en haut de l\u2019\u00e9cran, comme pr\u00e9c\u00e9demment. Il est judicieux de donner des noms significatifs aux colonnes. Dans ce cas, pour chaque interaction, nous devons savoir \u00e0 quel Contact elle se r\u00e9f\u00e8re, la date, le type et les notes de conversation. Pour renommer une colonne, cliquez sur son en-t\u00eate pour s\u00e9lectionner la colonne, puis cliquez \u00e0 nouveau sur l\u2019en-t\u00eate pour modifier son nom. Vous pouvez appuyer sur la touche Tab pour continuer \u00e0 renommer la colonne suivante. Enfin, appuyez sur le bouton \u201c+\u201d \u00e0 droite de la derni\u00e8re colonne pour cr\u00e9er une colonne suppl\u00e9mentaire, et nommez-la \u201cNotes\u201d. Lier les enregistrements de donn\u00e9es # Chaque enregistrement dans cette table appartiendra \u00e0 un contact particulier. Vous le configurez en transformant la colonne \u201cContact\u201d en une r\u00e9f\u00e9rence \u00e0 la table \u201cContacts\u201d. En utilisant le triangle dans l\u2019en-t\u00eate de la colonne \u201cContact\u201d, ouvrez le menu et s\u00e9lectionnez \u201cOptions de colonne\u201d. Dans le panneau de droite, utilisez le menu d\u00e9roulant \u201cType de colonne\u201d pour s\u00e9lectionner \u201cR\u00e9f\u00e9rence\u201d, puis sous \u201cDonn\u00e9es de la table\u201d, s\u00e9lectionnez \u201cContacts\u201d. Chaque cellule de cette colonne contiendra un pointeur vers une ligne dans la table \u201cContacts\u201d 1 . Bien qu\u2019elle fasse r\u00e9f\u00e9rence \u00e0 une ligne enti\u00e8re, il est utile de voir un identifiant particulier de cette ligne, donc sous \u201cAfficher la colonne\u201d, s\u00e9lectionnez \u201cSoci\u00e9t\u00e9\u201d. Vous verrez cela en action sous peu. D\u00e9finir d\u2019autres types # Dans Grist, chaque colonne a un type. Souvent, le type par d\u00e9faut de Texte ou Num\u00e9rique est correct. Pour notre colonne \u201cDate\u201d, un meilleur type est Date. Cliquez sur n\u2019importe quelle cellule dans la colonne \u201cDate\u201d, et dans le panneau de droite, cliquez dans le menu d\u00e9roulant \u201cType de colonne\u201d et s\u00e9lectionnez \u201cDate\u201d. Si vous le souhaitez, vous pouvez \u00e9galement choisir un format de date diff\u00e9rent juste en dessous du type. Maintenant, si vous cliquez sur une cellule dans la colonne \u201cDate\u201d et appuyez sur Entr\u00e9e, vous avez un s\u00e9lecteur de date pratique. Un autre type de colonne utile pour nous est \u201cChoix\u201d. Nos interactions seront soit \u201cT\u00e9l\u00e9phone\u201d, \u201cEmail\u201d ou \u201cEn personne\u201d, et il est utile de lister ces options. Cliquez dans la colonne \u201cType\u201d, et dans le panneau de droite, d\u00e9finissez \u201cType de colonne\u201d sur \u201cChoix\u201d. Vous verrez une zone de texte \u201cValeurs de choix\u201d en dessous. Cliquez dessus et entrez vos choix l\u00e0-bas, un par ligne : \u201cT\u00e9l\u00e9phone\u201d, \u201cEmail\u201d, \u201cEn personne\u201d. Maintenant, si vous cliquez sur une cellule dans la colonne \u201cType\u201d et appuyez sur Entr\u00e9e, vous pouvez choisir parmi les choix que vous avez d\u00e9finis, ou commencer \u00e0 taper et utiliser l\u2019auto-compl\u00e9tion. Lier visuellement les tables # La prochaine \u00e9tape consiste \u00e0 lier visuellement les deux tables. Ouvrez la page \u201cContacts\u201d, cliquez sur le bouton \u201cAjouter nouveau\u201d en haut du panneau de gauche, puis \u201cAjouter un widget \u00e0 la page\u201d. S\u00e9lectionnez le widget \u201cTable\u201d et les donn\u00e9es \u201cInteractions\u201d. Dans le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d en bas de la bo\u00eete de dialogue, s\u00e9lectionnez \u201cCONTACTS\u201d. Cela signifie que choisir un contact affichera uniquement les interactions avec ce contact. Cliquez sur \u201cAjouter \u00e0 la page\u201d pour terminer. Ensuite, s\u00e9lectionnons un contact dans la table \u00e0 gauche (utilisons \u201cDouglas LLC\u201d dans la quatri\u00e8me ligne) et ajoutons quelques notes pour celui-ci. Tapez une date (indice : le raccourci \u2318 + ; (point-virgule) sur Mac ou Ctrl + ; (point-virgule) sur Windows ins\u00e8re la date d\u2019aujourd\u2019hui), s\u00e9lectionnez un type, et entrez une note. D\u00e8s que cette ligne est cr\u00e9\u00e9e, la colonne \u201cContact\u201d est automatiquement remplie avec \u201cDouglas LLC\u201d, gr\u00e2ce aux sections \u00e9tant li\u00e9es. La note que nous avons ajout\u00e9e n\u2019est affich\u00e9e que lorsque \u201cDouglas LLC\u201d est s\u00e9lectionn\u00e9. Nous pouvons ajouter plus de notes pour \u201cDouglas LLC\u201d, ou ajouter des notes pour n\u2019importe lequel des autres contacts. Nous pouvons maintenant masquer la colonne \u201cContact\u201d dans la table \u201cInteractions\u201d : en utilisant le menu dans l\u2019en-t\u00eate de la colonne, s\u00e9lectionnez \u201cMasquer la colonne\u201d. Comme les tables sont li\u00e9es, nous voyons d\u00e9j\u00e0 pour qui sont les notes. Pour que les longues notes soient pratiques, redimensionnez la colonne \u201cNotes\u201d en faisant glisser le bord droit de son en-t\u00eate. Pour envelopper de longues notes, ouvrez les Options de colonne et cliquez sur l\u2019ic\u00f4ne de retour \u00e0 la ligne. Personnaliser la mise en page # Une fois que vous avez plusieurs tables sur un m\u00eame \u00e9cran, la mise en page de l\u2019\u00e9cran peut devenir un probl\u00e8me. Avoir de nombreuses colonnes dans la table Contacts peut ne plus \u00eatre pratique. Il est pr\u00e9f\u00e9rable de la disposer comme une application personnalis\u00e9e : s\u00e9lectionnez un contact dans une liste \u00e0 gauche et voyez les d\u00e9tails et les interactions de ce contact. Cela peut \u00eatre fait en utilisant \u00e0 nouveau \u201cAjouter un widget \u00e0 la page\u201d. Cette fois, nous allons s\u00e9lectionner le widget \u201cCarte\u201d pour la table \u201cContacts\u201d, et pour \u201cS\u00e9lectionner par\u201d, nous utiliserons \u00e0 nouveau \u201cCONTACTS\u201d. Vous pouvez d\u00e9placer les sections r\u00e9sultantes pour cr\u00e9er une mise en page pratique. D\u00e9placez votre souris vers le coin sup\u00e9rieur gauche de chaque section jusqu\u2019\u00e0 ce que vous voyiez une ic\u00f4ne de \u201cpoign\u00e9e de tirage\u201d. Utilisez cette ic\u00f4ne pour faire glisser chaque section \u00e0 l\u2019endroit d\u00e9sir\u00e9 par rapport aux autres sections. Vous pouvez \u00e9galement redimensionner les sections en d\u00e9pla\u00e7ant la souris entre elles pour trouver une ligne pointill\u00e9e. Faites glisser cette ligne pour redimensionner. Notez que les m\u00eames donn\u00e9es personnelles sont maintenant affich\u00e9es \u00e0 deux endroits sur l\u2019\u00e9cran. Ce ne sont pas des copies de donn\u00e9es, mais des pr\u00e9sentations diff\u00e9rentes des m\u00eames donn\u00e9es. Changer les donn\u00e9es \u00e0 un endroit les changera \u00e0 l\u2019autre. Personnaliser les champs # \u00c0 ce stade, nous pouvons faire un peu de nettoyage : masquer les colonnes inutiles dans la table principale \u201cContacts\u201d et r\u00e9organiser les champs dans le widget Carte. Un moyen rapide de masquer des colonnes est d\u2019utiliser le panneau de droite. En utilisant le menu \u00e0 trois points en haut \u00e0 droite de la table \u201cContacts\u201d, s\u00e9lectionnez \u201cOptions de widget\u201d. Dans le panneau qui s\u2019ouvre, trouvez une liste de \u201cColonnes visibles\u201d. D\u00e9placez la souris sur chaque colonne pour r\u00e9v\u00e9ler l\u2019ic\u00f4ne \u201c\u0153il\u201d. Cliquez dessus pour masquer toutes les colonnes sauf \u201cSoci\u00e9t\u00e9\u201d. Pour personnaliser le widget Carte, cliquez dessus. Le panneau de droite affichera les options pertinentes. Vous pouvez s\u00e9lectionner un th\u00e8me diff\u00e9rent, par exemple \u201cCompact\u201d. Pour r\u00e9organiser les champs, cliquez sur \u201cModifier la mise en page\u201d dans le panneau de droite. Vous pouvez maintenant faire glisser et d\u00e9poser des champs dans la carte, les redimensionner ou les supprimer. Cliquez sur \u201cEnregistrer\u201d une fois que vous avez termin\u00e9. En quelques \u00e9tapes, nous sommes pass\u00e9s d\u2019un tableur encombrant et difficile \u00e0 utiliser \u00e0 un enregistrement concis et \u00e9l\u00e9gant de vos interactions dans une application personnalis\u00e9e simple et efficace. T\u00e2ches \u00e0 faire pour les contacts # L\u2019exemple de \u201cCRM l\u00e9ger\u201d a un autre tour dans son sac. La colonne \u201cType\u201d dans la table des interactions a un choix suppl\u00e9mentaire, \u201c\u00c0 faire\u201d. Apr\u00e8s avoir parl\u00e9 \u00e0 un contact, vous pouvez ajouter une note suppl\u00e9mentaire sur ce que vous devez faire pour la prochaine conversation, et la date \u00e0 laquelle elle est due. La table \u201cContacts\u201d rend ces \u00e9l\u00e9ments \u00e0 faire visibles, et triables par date d\u2019\u00e9ch\u00e9ance. De cette fa\u00e7on, vous pouvez voir d\u2019un coup d\u2019\u0153il ce qui est \u00e0 venir. Si vous \u00eates int\u00e9ress\u00e9 par les d\u00e9tails de sa configuration, d\u00e9veloppez la section ci-dessous. Pour votre premi\u00e8re introduction \u00e0 Grist, vous \u00eates libre de l\u2019ignorer. > Configuration des t\u00e2ches \u00e0 faire # Pour configurer les \u00e9l\u00e9ments \u00e0 faire comme dans l\u2019exemple, s\u00e9lectionnez les Options de colonne pour la colonne \u201cType\u201d dans la table Interactions, et ajoutez un autre choix (\u201c\u00c0 faire\u201d) \u00e0 la liste des choix : Choisissons notre contact \u201cDouglas LLC\u201d et ajoutons un \u00e9l\u00e9ment \u00e0 faire : Dans la table \u201cContacts\u201d, ajoutez deux nouvelles colonnes : Renommez-les en \u201c\u00c9ch\u00e9ance\u201d et \u201c\u00c9l\u00e9ments \u00e0 faire\u201d. Les deux colonnes sont calcul\u00e9es \u00e0 l\u2019aide de formules. Grist a un excellent support pour les formules, permettant une syntaxe Python compl\u00e8te et de nombreuses fonctions Excel. Dans Grist, une formule s\u2019applique toujours \u00e0 l\u2019ensemble de la colonne de donn\u00e9es. Pour entrer une formule, cliquez sur une cellule dans la colonne \u201c\u00c9ch\u00e9ance\u201d, et appuyez sur la touche \u201c=\u201d : Dans cette formule, nous voulons rechercher toutes les Interactions pour le Contact actuel dont le Type est \u201c\u00c0 faire\u201d, puis s\u00e9lectionner celle avec la Date la plus ancienne. En utilisant la syntaxe Python, la formule est : items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return min(items.Date) if items else None Collez-la ou tapez-la. Lorsque vous tapez des formules multi-lignes, utilisez Shift+Enter pour ajouter de nouvelles lignes, et Enter pour enregistrer. Il est \u00e9galement temps de changer le type de colonne en \u201cDate\u201d. Ouvrez les Options de colonne, et s\u00e9lectionnez \u201cDate\u201d pour le type. Vous pouvez choisir le format de date directement en dessous du type. Pour les \u201c\u00c9l\u00e9ments \u00e0 faire\u201d, entrez une formule de mani\u00e8re similaire. En cas de plusieurs \u00e9l\u00e9ments \u00e0 faire, cette formule les concat\u00e9nera, s\u00e9par\u00e9s par des sauts de ligne. Cliquez dans la colonne \u201c\u00c9l\u00e9ments \u00e0 faire\u201d, appuyez sur \u201c=\u201d pour commencer \u00e0 taper la formule, et entrez items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return \"\\n\".join(items.Notes) Maintenant, l\u2019\u00e9l\u00e9ment \u00e0 faire que nous avons entr\u00e9 plus t\u00f4t est visible dans la table principale Contacts. Notez que les valeurs dans ces colonnes sont en lecture seule, car elles sont calcul\u00e9es. Pour changer la date d\u2019\u00e9ch\u00e9ance, trouvez l\u2019\u00e9l\u00e9ment \u00e0 faire dans la table Interactions o\u00f9 vous l\u2019avez cr\u00e9\u00e9. Trier les tables # Nous voulons que les contacts avec des \u00e9l\u00e9ments \u00e0 faire apparaissent en premier, par ordre de date d\u2019\u00e9ch\u00e9ance. Cliquez sur le triangle dans l\u2019en-t\u00eate de la colonne \u201c\u00c9ch\u00e9ance\u201d, et s\u00e9lectionnez \u201cTrier A-Z\u201d. Par d\u00e9faut, les param\u00e8tres de tri ne sont pas enregistr\u00e9s. Le bouton vert surlign\u00e9 en haut \u00e0 droite de la table \u201cContacts\u201d nous rappelle cela. Pour conserver cet ordre de tri lorsque vous rouvrez le document, enregistrez-le en cliquant sur ce bouton vert et en s\u00e9lectionnant \u201cEnregistrer\u201d. Vous pouvez \u00e9galement enregistrer en cliquant sur la coche verte, \u00e0 droite de l\u2019ic\u00f4ne de filtre. Autres fonctionnalit\u00e9s # Grist a d\u2019autres fonctionnalit\u00e9s int\u00e9ressantes, dont certaines sont utilis\u00e9es dans l\u2019exemple de document \u201cCRM l\u00e9ger\u201d. Pour en savoir plus \u00e0 leur sujet, suivez les liens vers leur documentation. Toute colonne de texte peut \u00eatre affich\u00e9e comme un hyperlien . L\u2019exemple de CRM l\u00e9ger l\u2019utilise deux fois : pour le champ \u201csite web\u201d, et pour un hyperlien construit par formule vers une page de recherche Gmail pour l\u2019adresse e-mail de ce contact. Ce dernier est pratique si vous utilisez Gmail. Grist prend en charge les pi\u00e8ces jointes . Dans l\u2019exemple, il y a un champ \u201cPi\u00e8ces jointes\u201d pour chaque contact qui peut \u00eatre utilis\u00e9 pour stocker une image d\u2019une carte de visite, par exemple. Dans une entreprise r\u00e9elle, vous aurez besoin de plus. Les produits CRM sp\u00e9cialis\u00e9s ont des tonnes de fonctionnalit\u00e9s. Leur probl\u00e8me est la complexit\u00e9 : essayer de satisfaire les besoins de nombreux clients diff\u00e9rents rend le produit compliqu\u00e9 \u00e0 utiliser. La beaut\u00e9 de Grist est que vous pouvez commencer simplement et ajouter uniquement le niveau de complexit\u00e9 dont vous avez besoin, et rien de plus. D\u2019autres tutoriels montrent comment mod\u00e9liser des donn\u00e9es plus complexes, analyser et repr\u00e9senter des donn\u00e9es, et plus encore. Dans le monde des bases de donn\u00e9es, ce type de r\u00e9f\u00e9rence ou de pointeur est connu sous le nom de \u201ccl\u00e9 \u00e9trang\u00e8re\u201d. \u21a9","title":"Create your own CRM"},{"location":"lightweight-crm/#comment-creer-un-crm-personnalise","text":"Grist est aussi facile \u00e0 utiliser qu\u2019un tableur, mais vous donne de nouveaux pouvoirs lorsque les donn\u00e9es ne s\u2019int\u00e8grent pas dans une simple grille. Un bon exemple est le suivi des contacts et de nos conversations avec eux. Pour une entreprise, cela pourrait \u00eatre des clients, des prospects ou des candidats \u00e0 un emploi. Pour un particulier, cela pourrait \u00eatre des entreprises auxquelles il a postul\u00e9 dans le cadre d\u2019une recherche d\u2019emploi. Dans ce tutoriel, nous allons expliquer l\u2019exemple de \u201cCRM l\u00e9ger\u201d, que vous pouvez utiliser comme mod\u00e8le pour vos propres contacts, puis montrer comment le construire \u00e0 partir de z\u00e9ro. Vous apprendrez \u00e0 : Ajouter des tables Lier des donn\u00e9es D\u00e9finir des types de colonnes Cr\u00e9er des mises en page personnalis\u00e9es","title":"Intro"},{"location":"lightweight-crm/#explorer-lexemple","text":"Ouvrez le document CRM l\u00e9ger , trouv\u00e9 dans Exemples & Mod\u00e8les sur votre page d\u2019accueil Grist . Vous verrez la page \u201cContacts\u201d, listant les contacts sur la gauche de l\u2019\u00e9cran. Cliquez sur n\u2019importe quel contact pour le s\u00e9lectionner. Les deux sections \u00e0 droite montrent les d\u00e9tails et l\u2019historique des interactions avec le contact s\u00e9lectionn\u00e9. Comment cela se compare-t-il \u00e0 un tableur ? Ces captures d\u2019\u00e9cran montrent l\u2019exemple de CRM l\u00e9ger \u00e0 gauche, et un tableur ordinaire avec les m\u00eames donn\u00e9es \u00e0 droite. Pr\u00e9c\u00e9dent Suivant Pr\u00e9c\u00e9dent Suivant La difficult\u00e9 r\u00e9side dans l\u2019historique des notes pour un contact. Dans une grille bidimensionnelle, vous avez peu d\u2019options pour inclure plusieurs notes. Si vous les incluez sous forme de plusieurs colonnes, cela rend rapidement le tableur difficile \u00e0 g\u00e9rer et \u00e0 naviguer. Grist ressemble davantage \u00e0 une application, mais reste aussi polyvalent qu\u2019un tableur. L\u2019exemple de \u201cCRM l\u00e9ger\u201d peut \u00eatre utilis\u00e9 imm\u00e9diatement tel quel (avec les donn\u00e9es d\u2019exemple), ou comme mod\u00e8le (juste la structure sans les donn\u00e9es). Voici quelques points suppl\u00e9mentaires sur son utilisation en tant que CRM : Pour ajouter un nouveau contact, cliquez sur la ligne vide en bas de la liste des contacts, puis remplissez la section vide \u201cFiche CONTACTS\u201d qui appara\u00eet \u00e0 droite. Pour ajouter une nouvelle conversation, s\u00e9lectionnez un contact, puis cliquez sur la ligne vide \u00e0 la fin de la table Interactions. Vous pouvez entrer la date d\u2019aujourd\u2019hui en utilisant le raccourci \u2318 + ; (point-virgule) (Mac) ou Ctrl + ; (point-virgule) (Windows). Ensuite, s\u00e9lectionnez le type d\u2019interaction \u00e0 l\u2019aide de l\u2019auto-compl\u00e9tion et tapez vos notes. Vous pouvez ajouter des \u00e9l\u00e9ments \u00e0 faire pour un contact : dans la liste des Interactions, s\u00e9lectionnez \u201c\u00c0 faire\u201d dans la colonne \u201cType\u201d en tant que type sp\u00e9cial d\u2019interaction. Pensez \u00e0 la date associ\u00e9e comme \u00e0 la date d\u2019\u00e9ch\u00e9ance pour cette t\u00e2che. La table Contacts montre la liste des \u00e9l\u00e9ments \u00e0 faire \u00e0 venir, tri\u00e9s par leur date d\u2019\u00e9ch\u00e9ance. Si vous utilisez Gmail, le lien pratique \u201cRecherche Gmail\u201d dans la section \u201cFiche CONTACTS\u201d ouvrira une fen\u00eatre de navigateur avec les r\u00e9sultats de recherche Gmail pour l\u2019adresse e-mail de ce contact. Vous pouvez utiliser cet exemple comme mod\u00e8le pour vos propres contacts. Avec l\u2019exemple de \u201cCRM l\u00e9ger\u201d ouvert, cliquez sur le bouton \u201cEnregistrer une copie\u201d dans la barre sup\u00e9rieure, puis cochez la case \u201cEn tant que mod\u00e8le\u201d. Vous obtiendrez un document vide avec la m\u00eame mise en page, et pourrez commencer \u00e0 le remplir avec vos propres donn\u00e9es. Si vous n\u2019\u00eates pas connect\u00e9, vous devrez vous connecter pour faire une copie de l\u2019exemple.","title":"Explorer l’exemple"},{"location":"lightweight-crm/#creer-le-votre","text":"Le reste de ce tutoriel vous montrera comment cr\u00e9er un tel document par vous-m\u00eame. C\u2019est un excellent exercice qui vous apprendra certaines des fonctionnalit\u00e9s cl\u00e9s de Grist. Pour commencer, nous allons importer un fichier avec des contacts d\u2019exemple depuis la page d\u2019accueil de Grist. Tout d\u2019abord, enregistrez ce fichier sur votre bureau : lightweight-crm-contacts.csv . Ensuite, cliquez sur le bouton \u201cAjouter nouveau\u201d en haut \u00e0 gauche de votre page d\u2019accueil Grist, cliquez sur \u201cImporter le document\u201d, et s\u00e9lectionnez le fichier sur votre bureau. Vous verrez une table de contacts avec des donn\u00e9es d\u2019exemple. Notez qu\u2019\u00e0 Grist, les colonnes ont des noms. Renommez cette table en \u201cContacts\u201d en cliquant sur son nom dans la barre sup\u00e9rieure et en tapant le nouveau nom. C\u2019est tout ce dont vous avez besoin pour une simple table de contacts. Vous pouvez ajouter des lignes ici, ou ajouter de nouvelles colonnes pour associer plus de donn\u00e9es \u00e0 chaque contact.","title":"Cr\u00e9er le v\u00f4tre"},{"location":"lightweight-crm/#ajouter-une-autre-table","text":"Pour notre prochaine \u00e9tape, nous voulons pouvoir s\u00e9lectionner un contact et voir la liste des conversations avec ce contact. Ces conversations devraient \u00eatre une nouvelle table de donn\u00e9es. L\u2019indice est qu\u2019elle a un nombre de lignes diff\u00e9rent de la table des contacts. Cr\u00e9ez la nouvelle table en utilisant le bouton vert \u201cAjouter nouveau\u201d en haut \u00e0 gauche de votre \u00e9cran, et cliquez sur \u201cAjouter une table vide\u201d dans le menu. Cette table repr\u00e9sentera les interactions avec nos contacts, alors renommons-la \u201cInteractions\u201d en cliquant sur son nom par d\u00e9faut (\u201cTable1\u201d) en haut de l\u2019\u00e9cran, comme pr\u00e9c\u00e9demment. Il est judicieux de donner des noms significatifs aux colonnes. Dans ce cas, pour chaque interaction, nous devons savoir \u00e0 quel Contact elle se r\u00e9f\u00e8re, la date, le type et les notes de conversation. Pour renommer une colonne, cliquez sur son en-t\u00eate pour s\u00e9lectionner la colonne, puis cliquez \u00e0 nouveau sur l\u2019en-t\u00eate pour modifier son nom. Vous pouvez appuyer sur la touche Tab pour continuer \u00e0 renommer la colonne suivante. Enfin, appuyez sur le bouton \u201c+\u201d \u00e0 droite de la derni\u00e8re colonne pour cr\u00e9er une colonne suppl\u00e9mentaire, et nommez-la \u201cNotes\u201d.","title":"Ajouter une autre table"},{"location":"lightweight-crm/#lier-les-enregistrements-de-donnees","text":"Chaque enregistrement dans cette table appartiendra \u00e0 un contact particulier. Vous le configurez en transformant la colonne \u201cContact\u201d en une r\u00e9f\u00e9rence \u00e0 la table \u201cContacts\u201d. En utilisant le triangle dans l\u2019en-t\u00eate de la colonne \u201cContact\u201d, ouvrez le menu et s\u00e9lectionnez \u201cOptions de colonne\u201d. Dans le panneau de droite, utilisez le menu d\u00e9roulant \u201cType de colonne\u201d pour s\u00e9lectionner \u201cR\u00e9f\u00e9rence\u201d, puis sous \u201cDonn\u00e9es de la table\u201d, s\u00e9lectionnez \u201cContacts\u201d. Chaque cellule de cette colonne contiendra un pointeur vers une ligne dans la table \u201cContacts\u201d 1 . Bien qu\u2019elle fasse r\u00e9f\u00e9rence \u00e0 une ligne enti\u00e8re, il est utile de voir un identifiant particulier de cette ligne, donc sous \u201cAfficher la colonne\u201d, s\u00e9lectionnez \u201cSoci\u00e9t\u00e9\u201d. Vous verrez cela en action sous peu.","title":"Lier les enregistrements de donn\u00e9es"},{"location":"lightweight-crm/#definir-dautres-types","text":"Dans Grist, chaque colonne a un type. Souvent, le type par d\u00e9faut de Texte ou Num\u00e9rique est correct. Pour notre colonne \u201cDate\u201d, un meilleur type est Date. Cliquez sur n\u2019importe quelle cellule dans la colonne \u201cDate\u201d, et dans le panneau de droite, cliquez dans le menu d\u00e9roulant \u201cType de colonne\u201d et s\u00e9lectionnez \u201cDate\u201d. Si vous le souhaitez, vous pouvez \u00e9galement choisir un format de date diff\u00e9rent juste en dessous du type. Maintenant, si vous cliquez sur une cellule dans la colonne \u201cDate\u201d et appuyez sur Entr\u00e9e, vous avez un s\u00e9lecteur de date pratique. Un autre type de colonne utile pour nous est \u201cChoix\u201d. Nos interactions seront soit \u201cT\u00e9l\u00e9phone\u201d, \u201cEmail\u201d ou \u201cEn personne\u201d, et il est utile de lister ces options. Cliquez dans la colonne \u201cType\u201d, et dans le panneau de droite, d\u00e9finissez \u201cType de colonne\u201d sur \u201cChoix\u201d. Vous verrez une zone de texte \u201cValeurs de choix\u201d en dessous. Cliquez dessus et entrez vos choix l\u00e0-bas, un par ligne : \u201cT\u00e9l\u00e9phone\u201d, \u201cEmail\u201d, \u201cEn personne\u201d. Maintenant, si vous cliquez sur une cellule dans la colonne \u201cType\u201d et appuyez sur Entr\u00e9e, vous pouvez choisir parmi les choix que vous avez d\u00e9finis, ou commencer \u00e0 taper et utiliser l\u2019auto-compl\u00e9tion.","title":"D\u00e9finir d’autres types"},{"location":"lightweight-crm/#lier-visuellement-les-tables","text":"La prochaine \u00e9tape consiste \u00e0 lier visuellement les deux tables. Ouvrez la page \u201cContacts\u201d, cliquez sur le bouton \u201cAjouter nouveau\u201d en haut du panneau de gauche, puis \u201cAjouter un widget \u00e0 la page\u201d. S\u00e9lectionnez le widget \u201cTable\u201d et les donn\u00e9es \u201cInteractions\u201d. Dans le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d en bas de la bo\u00eete de dialogue, s\u00e9lectionnez \u201cCONTACTS\u201d. Cela signifie que choisir un contact affichera uniquement les interactions avec ce contact. Cliquez sur \u201cAjouter \u00e0 la page\u201d pour terminer. Ensuite, s\u00e9lectionnons un contact dans la table \u00e0 gauche (utilisons \u201cDouglas LLC\u201d dans la quatri\u00e8me ligne) et ajoutons quelques notes pour celui-ci. Tapez une date (indice : le raccourci \u2318 + ; (point-virgule) sur Mac ou Ctrl + ; (point-virgule) sur Windows ins\u00e8re la date d\u2019aujourd\u2019hui), s\u00e9lectionnez un type, et entrez une note. D\u00e8s que cette ligne est cr\u00e9\u00e9e, la colonne \u201cContact\u201d est automatiquement remplie avec \u201cDouglas LLC\u201d, gr\u00e2ce aux sections \u00e9tant li\u00e9es. La note que nous avons ajout\u00e9e n\u2019est affich\u00e9e que lorsque \u201cDouglas LLC\u201d est s\u00e9lectionn\u00e9. Nous pouvons ajouter plus de notes pour \u201cDouglas LLC\u201d, ou ajouter des notes pour n\u2019importe lequel des autres contacts. Nous pouvons maintenant masquer la colonne \u201cContact\u201d dans la table \u201cInteractions\u201d : en utilisant le menu dans l\u2019en-t\u00eate de la colonne, s\u00e9lectionnez \u201cMasquer la colonne\u201d. Comme les tables sont li\u00e9es, nous voyons d\u00e9j\u00e0 pour qui sont les notes. Pour que les longues notes soient pratiques, redimensionnez la colonne \u201cNotes\u201d en faisant glisser le bord droit de son en-t\u00eate. Pour envelopper de longues notes, ouvrez les Options de colonne et cliquez sur l\u2019ic\u00f4ne de retour \u00e0 la ligne.","title":"Lier visuellement les tables"},{"location":"lightweight-crm/#personnaliser-la-mise-en-page","text":"Une fois que vous avez plusieurs tables sur un m\u00eame \u00e9cran, la mise en page de l\u2019\u00e9cran peut devenir un probl\u00e8me. Avoir de nombreuses colonnes dans la table Contacts peut ne plus \u00eatre pratique. Il est pr\u00e9f\u00e9rable de la disposer comme une application personnalis\u00e9e : s\u00e9lectionnez un contact dans une liste \u00e0 gauche et voyez les d\u00e9tails et les interactions de ce contact. Cela peut \u00eatre fait en utilisant \u00e0 nouveau \u201cAjouter un widget \u00e0 la page\u201d. Cette fois, nous allons s\u00e9lectionner le widget \u201cCarte\u201d pour la table \u201cContacts\u201d, et pour \u201cS\u00e9lectionner par\u201d, nous utiliserons \u00e0 nouveau \u201cCONTACTS\u201d. Vous pouvez d\u00e9placer les sections r\u00e9sultantes pour cr\u00e9er une mise en page pratique. D\u00e9placez votre souris vers le coin sup\u00e9rieur gauche de chaque section jusqu\u2019\u00e0 ce que vous voyiez une ic\u00f4ne de \u201cpoign\u00e9e de tirage\u201d. Utilisez cette ic\u00f4ne pour faire glisser chaque section \u00e0 l\u2019endroit d\u00e9sir\u00e9 par rapport aux autres sections. Vous pouvez \u00e9galement redimensionner les sections en d\u00e9pla\u00e7ant la souris entre elles pour trouver une ligne pointill\u00e9e. Faites glisser cette ligne pour redimensionner. Notez que les m\u00eames donn\u00e9es personnelles sont maintenant affich\u00e9es \u00e0 deux endroits sur l\u2019\u00e9cran. Ce ne sont pas des copies de donn\u00e9es, mais des pr\u00e9sentations diff\u00e9rentes des m\u00eames donn\u00e9es. Changer les donn\u00e9es \u00e0 un endroit les changera \u00e0 l\u2019autre.","title":"Personnaliser la mise en page"},{"location":"lightweight-crm/#personnaliser-les-champs","text":"\u00c0 ce stade, nous pouvons faire un peu de nettoyage : masquer les colonnes inutiles dans la table principale \u201cContacts\u201d et r\u00e9organiser les champs dans le widget Carte. Un moyen rapide de masquer des colonnes est d\u2019utiliser le panneau de droite. En utilisant le menu \u00e0 trois points en haut \u00e0 droite de la table \u201cContacts\u201d, s\u00e9lectionnez \u201cOptions de widget\u201d. Dans le panneau qui s\u2019ouvre, trouvez une liste de \u201cColonnes visibles\u201d. D\u00e9placez la souris sur chaque colonne pour r\u00e9v\u00e9ler l\u2019ic\u00f4ne \u201c\u0153il\u201d. Cliquez dessus pour masquer toutes les colonnes sauf \u201cSoci\u00e9t\u00e9\u201d. Pour personnaliser le widget Carte, cliquez dessus. Le panneau de droite affichera les options pertinentes. Vous pouvez s\u00e9lectionner un th\u00e8me diff\u00e9rent, par exemple \u201cCompact\u201d. Pour r\u00e9organiser les champs, cliquez sur \u201cModifier la mise en page\u201d dans le panneau de droite. Vous pouvez maintenant faire glisser et d\u00e9poser des champs dans la carte, les redimensionner ou les supprimer. Cliquez sur \u201cEnregistrer\u201d une fois que vous avez termin\u00e9. En quelques \u00e9tapes, nous sommes pass\u00e9s d\u2019un tableur encombrant et difficile \u00e0 utiliser \u00e0 un enregistrement concis et \u00e9l\u00e9gant de vos interactions dans une application personnalis\u00e9e simple et efficace.","title":"Personnaliser les champs"},{"location":"lightweight-crm/#taches-a-faire-pour-les-contacts","text":"L\u2019exemple de \u201cCRM l\u00e9ger\u201d a un autre tour dans son sac. La colonne \u201cType\u201d dans la table des interactions a un choix suppl\u00e9mentaire, \u201c\u00c0 faire\u201d. Apr\u00e8s avoir parl\u00e9 \u00e0 un contact, vous pouvez ajouter une note suppl\u00e9mentaire sur ce que vous devez faire pour la prochaine conversation, et la date \u00e0 laquelle elle est due. La table \u201cContacts\u201d rend ces \u00e9l\u00e9ments \u00e0 faire visibles, et triables par date d\u2019\u00e9ch\u00e9ance. De cette fa\u00e7on, vous pouvez voir d\u2019un coup d\u2019\u0153il ce qui est \u00e0 venir. Si vous \u00eates int\u00e9ress\u00e9 par les d\u00e9tails de sa configuration, d\u00e9veloppez la section ci-dessous. Pour votre premi\u00e8re introduction \u00e0 Grist, vous \u00eates libre de l\u2019ignorer.","title":"T\u00e2ches \u00e0 faire pour les contacts"},{"location":"lightweight-crm/#configuration-des-taches-a-faire","text":"Pour configurer les \u00e9l\u00e9ments \u00e0 faire comme dans l\u2019exemple, s\u00e9lectionnez les Options de colonne pour la colonne \u201cType\u201d dans la table Interactions, et ajoutez un autre choix (\u201c\u00c0 faire\u201d) \u00e0 la liste des choix : Choisissons notre contact \u201cDouglas LLC\u201d et ajoutons un \u00e9l\u00e9ment \u00e0 faire : Dans la table \u201cContacts\u201d, ajoutez deux nouvelles colonnes : Renommez-les en \u201c\u00c9ch\u00e9ance\u201d et \u201c\u00c9l\u00e9ments \u00e0 faire\u201d. Les deux colonnes sont calcul\u00e9es \u00e0 l\u2019aide de formules. Grist a un excellent support pour les formules, permettant une syntaxe Python compl\u00e8te et de nombreuses fonctions Excel. Dans Grist, une formule s\u2019applique toujours \u00e0 l\u2019ensemble de la colonne de donn\u00e9es. Pour entrer une formule, cliquez sur une cellule dans la colonne \u201c\u00c9ch\u00e9ance\u201d, et appuyez sur la touche \u201c=\u201d : Dans cette formule, nous voulons rechercher toutes les Interactions pour le Contact actuel dont le Type est \u201c\u00c0 faire\u201d, puis s\u00e9lectionner celle avec la Date la plus ancienne. En utilisant la syntaxe Python, la formule est : items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return min(items.Date) if items else None Collez-la ou tapez-la. Lorsque vous tapez des formules multi-lignes, utilisez Shift+Enter pour ajouter de nouvelles lignes, et Enter pour enregistrer. Il est \u00e9galement temps de changer le type de colonne en \u201cDate\u201d. Ouvrez les Options de colonne, et s\u00e9lectionnez \u201cDate\u201d pour le type. Vous pouvez choisir le format de date directement en dessous du type. Pour les \u201c\u00c9l\u00e9ments \u00e0 faire\u201d, entrez une formule de mani\u00e8re similaire. En cas de plusieurs \u00e9l\u00e9ments \u00e0 faire, cette formule les concat\u00e9nera, s\u00e9par\u00e9s par des sauts de ligne. Cliquez dans la colonne \u201c\u00c9l\u00e9ments \u00e0 faire\u201d, appuyez sur \u201c=\u201d pour commencer \u00e0 taper la formule, et entrez items = Interactions.lookupRecords(Contact=$id, Type=\"To-Do\") return \"\\n\".join(items.Notes) Maintenant, l\u2019\u00e9l\u00e9ment \u00e0 faire que nous avons entr\u00e9 plus t\u00f4t est visible dans la table principale Contacts. Notez que les valeurs dans ces colonnes sont en lecture seule, car elles sont calcul\u00e9es. Pour changer la date d\u2019\u00e9ch\u00e9ance, trouvez l\u2019\u00e9l\u00e9ment \u00e0 faire dans la table Interactions o\u00f9 vous l\u2019avez cr\u00e9\u00e9.","title":""},{"location":"lightweight-crm/#trier-les-tables","text":"Nous voulons que les contacts avec des \u00e9l\u00e9ments \u00e0 faire apparaissent en premier, par ordre de date d\u2019\u00e9ch\u00e9ance. Cliquez sur le triangle dans l\u2019en-t\u00eate de la colonne \u201c\u00c9ch\u00e9ance\u201d, et s\u00e9lectionnez \u201cTrier A-Z\u201d. Par d\u00e9faut, les param\u00e8tres de tri ne sont pas enregistr\u00e9s. Le bouton vert surlign\u00e9 en haut \u00e0 droite de la table \u201cContacts\u201d nous rappelle cela. Pour conserver cet ordre de tri lorsque vous rouvrez le document, enregistrez-le en cliquant sur ce bouton vert et en s\u00e9lectionnant \u201cEnregistrer\u201d. Vous pouvez \u00e9galement enregistrer en cliquant sur la coche verte, \u00e0 droite de l\u2019ic\u00f4ne de filtre.","title":""},{"location":"lightweight-crm/#autres-fonctionnalites","text":"Grist a d\u2019autres fonctionnalit\u00e9s int\u00e9ressantes, dont certaines sont utilis\u00e9es dans l\u2019exemple de document \u201cCRM l\u00e9ger\u201d. Pour en savoir plus \u00e0 leur sujet, suivez les liens vers leur documentation. Toute colonne de texte peut \u00eatre affich\u00e9e comme un hyperlien . L\u2019exemple de CRM l\u00e9ger l\u2019utilise deux fois : pour le champ \u201csite web\u201d, et pour un hyperlien construit par formule vers une page de recherche Gmail pour l\u2019adresse e-mail de ce contact. Ce dernier est pratique si vous utilisez Gmail. Grist prend en charge les pi\u00e8ces jointes . Dans l\u2019exemple, il y a un champ \u201cPi\u00e8ces jointes\u201d pour chaque contact qui peut \u00eatre utilis\u00e9 pour stocker une image d\u2019une carte de visite, par exemple. Dans une entreprise r\u00e9elle, vous aurez besoin de plus. Les produits CRM sp\u00e9cialis\u00e9s ont des tonnes de fonctionnalit\u00e9s. Leur probl\u00e8me est la complexit\u00e9 : essayer de satisfaire les besoins de nombreux clients diff\u00e9rents rend le produit compliqu\u00e9 \u00e0 utiliser. La beaut\u00e9 de Grist est que vous pouvez commencer simplement et ajouter uniquement le niveau de complexit\u00e9 dont vous avez besoin, et rien de plus. D\u2019autres tutoriels montrent comment mod\u00e9liser des donn\u00e9es plus complexes, analyser et repr\u00e9senter des donn\u00e9es, et plus encore. Dans le monde des bases de donn\u00e9es, ce type de r\u00e9f\u00e9rence ou de pointeur est connu sous le nom de \u201ccl\u00e9 \u00e9trang\u00e8re\u201d. \u21a9","title":"Autres fonctionnalit\u00e9s"},{"location":"limits/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Limites # Pour vous aider \u00e0 \u00e9valuer si Grist r\u00e9pondra \u00e0 vos besoins, voici une liste des limitations qui s\u2019appliquent \u00e0 son fonctionnement. Nombre de documents # Pour tous les plans, le nombre de documents n\u2019est pas limit\u00e9. Pour \u00e9viter l\u2019utilisation abusive du syst\u00e8me par des outils d\u2019automatisation, les espaces d\u2019\u00e9quipe peuvent \u00eatre limit\u00e9s \u00e0 1 000 documents. Si vous rencontrez cette limite pour une utilisation l\u00e9gitime, veuillez contacter le support pour l\u2019augmenter. Les anciens plans gratuits avaient une limite de dix documents. En savoir plus sur les limites h\u00e9rit\u00e9es . Nombre de collaborateurs # Pour les espaces d\u2019\u00e9quipe sur tous les plans, il n\u2019y a pas de limite au nombre de membres de l\u2019\u00e9quipe qui peuvent \u00eatre ajout\u00e9s \u00e0 l\u2019espace. Pour les plans payants, le nombre de membres de l\u2019\u00e9quipe d\u00e9termine le prix. Consultez notre page de tarification pour plus de d\u00e9tails. Les membres de l\u2019\u00e9quipe ajout\u00e9s \u00e0 votre espace d\u2019\u00e9quipe peuvent h\u00e9riter de l\u2019acc\u00e8s aux espaces de travail ou aux documents au sein de cette organisation. En savoir plus sur le partage d\u2019\u00e9quipe . Sur les espaces personnels et d\u2019\u00e9quipe, chaque document peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 2 invit\u00e9s gratuits qui n\u2019affectent pas le prix du plan, m\u00eame sur les plans payants. Nombre de tables par document # Il y a une limite de 500 tables autoris\u00e9es par document. C\u2019est une limite souple. Si vous vous retrouvez avec un grand nombre de tables, envisagez de fusionner celles qui ont la m\u00eame structure. Par exemple, si vous avez une table pour chaque type de produit, envisagez d\u2019utiliser une seule table avec le type de produit comme colonne suppl\u00e9mentaire. Lignes par document # Sur le plan gratuit, les documents ont une limite de 5 000 lignes. La limite pour les plans Pro et Business est de 100 000 et 150 000 lignes, respectivement. Les documents sont \u00e9galement soumis \u00e0 des limites de taille de donn\u00e9es, comme d\u00e9crit ci-dessous. Taille des donn\u00e9es # Il y a une limite stricte \u00e0 la taille totale des donn\u00e9es d\u2019un document, d\u00e9termin\u00e9e comme la limite de lignes multipli\u00e9e par 2KB. Cela signifie que les documents sur le plan gratuit ont une limite de taille de donn\u00e9es de 10MB, tandis que les documents des plans Pro et Business ont des limites de 200MB et 300MB, respectivement. Cette valeur correspond approximativement \u00e0 la taille des donn\u00e9es en format CSV. Vous pouvez voir la taille actuelle des donn\u00e9es d\u2019un document sur la page \u2018Donn\u00e9es sources\u2019 . Pour des raisons de m\u00e9moire et de performance, il est recommand\u00e9 de ne pas d\u00e9passer une taille de donn\u00e9es de 20MB. Les documents d\u00e9passant 20MB peuvent ralentir ou rencontrer des limites de m\u00e9moire en fonction de leur complexit\u00e9. Par exemple, un document avec 100 000 lignes et 24 colonnes num\u00e9riques atteindrait cette limite recommand\u00e9e. Pour aider \u00e0 optimiser les formules sur de grands documents, vous pouvez utiliser le chronom\u00e8tre de formule int\u00e9gr\u00e9. Les pi\u00e8ces jointes sont compt\u00e9es s\u00e9par\u00e9ment. Les pi\u00e8ces jointes plus les donn\u00e9es dans un seul document sont limit\u00e9es \u00e0 1GB pour tous les plans. T\u00e9l\u00e9chargements # Les t\u00e9l\u00e9chargements sont limit\u00e9s \u00e0 50MB, \u00e0 la fois pour les pi\u00e8ces jointes et pour importer des donn\u00e9es. Notez qu\u2019une importation dans cette limite peut entra\u00eener un document qui d\u00e9passe la limite de taille de document, auquel cas le t\u00e9l\u00e9chargement est toujours susceptible d\u2019\u00e9chouer. Limites de l\u2019API # Les plans gratuits sont limit\u00e9s \u00e0 5 000 appels API par document et par jour. Les plans Pro et Business augmentent la limite \u00e0 40 000 et 60 000 appels par document et par jour, respectivement. Les plans gratuits peuvent \u00eatre limit\u00e9s \u00e0 5 requ\u00eates API par seconde par document. Le plan d\u2019\u00e9quipe n\u2019impose pas une telle limite de d\u00e9bit. Par ailleurs, il y a une limite de concurrence de 10 pour tous les plans : si 10 requ\u00eates API autoris\u00e9es sont actuellement en cours de traitement pour un document particulier, toute autre requ\u00eate API sera rejet\u00e9e (avec le code d\u2019\u00e9tat HTTP 429) jusqu\u2019\u00e0 ce qu\u2019au moins une des requ\u00eates initiales soit termin\u00e9e. Un client qui attend qu\u2019une requ\u00eate soit termin\u00e9e avant d\u2019envoyer la suivante ne devrait pas atteindre cette limite (en supposant qu\u2019il est le seul client acc\u00e9dant au document). La taille du corps de toute requ\u00eate API individuelle est limit\u00e9e \u00e0 1MB. En particulier, cela signifie que les requ\u00eates ajoutant ou mettant \u00e0 jour plusieurs enregistrements peuvent devoir \u00eatre divis\u00e9es en lots qui tiennent dans cette limite. Disponibilit\u00e9 des documents # De temps en temps, lors des mises \u00e0 jour et des transitions op\u00e9rationnelles, les documents Grist individuels peuvent devenir inaccessibles pendant quelques secondes. Veuillez en tenir compte lors de l\u2019utilisation de l\u2019API de Grist. Limites h\u00e9rit\u00e9es # Les anciens plans personnels gratuits ont les limites suivantes : 10 documents par espace Pas d\u2019espaces de travail 100 000 lignes Pour d\u00e9terminer si vous \u00eates sur un espace personnel h\u00e9rit\u00e9, cliquez sur le nom de votre espace (@votre-nom) en haut \u00e0 gauche. Les espaces personnels sur le plan h\u00e9rit\u00e9 indiqueront \u201cEspace personnel (h\u00e9rit\u00e9)\u201d dans le menu d\u00e9roulant. Sur le plan gratuit actuel, tous les espaces personnels et d\u2019\u00e9quipe partagent les m\u00eames limites que celles d\u00e9crites ci-dessus et sur notre page de tarification .","title":"Limits"},{"location":"limits/#limites","text":"Pour vous aider \u00e0 \u00e9valuer si Grist r\u00e9pondra \u00e0 vos besoins, voici une liste des limitations qui s\u2019appliquent \u00e0 son fonctionnement.","title":"Limites"},{"location":"limits/#nombre-de-documents","text":"Pour tous les plans, le nombre de documents n\u2019est pas limit\u00e9. Pour \u00e9viter l\u2019utilisation abusive du syst\u00e8me par des outils d\u2019automatisation, les espaces d\u2019\u00e9quipe peuvent \u00eatre limit\u00e9s \u00e0 1 000 documents. Si vous rencontrez cette limite pour une utilisation l\u00e9gitime, veuillez contacter le support pour l\u2019augmenter. Les anciens plans gratuits avaient une limite de dix documents. En savoir plus sur les limites h\u00e9rit\u00e9es .","title":"Nombre de documents"},{"location":"limits/#nombre-de-collaborateurs","text":"Pour les espaces d\u2019\u00e9quipe sur tous les plans, il n\u2019y a pas de limite au nombre de membres de l\u2019\u00e9quipe qui peuvent \u00eatre ajout\u00e9s \u00e0 l\u2019espace. Pour les plans payants, le nombre de membres de l\u2019\u00e9quipe d\u00e9termine le prix. Consultez notre page de tarification pour plus de d\u00e9tails. Les membres de l\u2019\u00e9quipe ajout\u00e9s \u00e0 votre espace d\u2019\u00e9quipe peuvent h\u00e9riter de l\u2019acc\u00e8s aux espaces de travail ou aux documents au sein de cette organisation. En savoir plus sur le partage d\u2019\u00e9quipe . Sur les espaces personnels et d\u2019\u00e9quipe, chaque document peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 2 invit\u00e9s gratuits qui n\u2019affectent pas le prix du plan, m\u00eame sur les plans payants.","title":"Nombre de collaborateurs"},{"location":"limits/#nombre-de-tables-par-document","text":"Il y a une limite de 500 tables autoris\u00e9es par document. C\u2019est une limite souple. Si vous vous retrouvez avec un grand nombre de tables, envisagez de fusionner celles qui ont la m\u00eame structure. Par exemple, si vous avez une table pour chaque type de produit, envisagez d\u2019utiliser une seule table avec le type de produit comme colonne suppl\u00e9mentaire.","title":"Nombre de tables par document"},{"location":"limits/#lignes-par-document","text":"Sur le plan gratuit, les documents ont une limite de 5 000 lignes. La limite pour les plans Pro et Business est de 100 000 et 150 000 lignes, respectivement. Les documents sont \u00e9galement soumis \u00e0 des limites de taille de donn\u00e9es, comme d\u00e9crit ci-dessous.","title":"Lignes par document"},{"location":"limits/#taille-des-donnees","text":"Il y a une limite stricte \u00e0 la taille totale des donn\u00e9es d\u2019un document, d\u00e9termin\u00e9e comme la limite de lignes multipli\u00e9e par 2KB. Cela signifie que les documents sur le plan gratuit ont une limite de taille de donn\u00e9es de 10MB, tandis que les documents des plans Pro et Business ont des limites de 200MB et 300MB, respectivement. Cette valeur correspond approximativement \u00e0 la taille des donn\u00e9es en format CSV. Vous pouvez voir la taille actuelle des donn\u00e9es d\u2019un document sur la page \u2018Donn\u00e9es sources\u2019 . Pour des raisons de m\u00e9moire et de performance, il est recommand\u00e9 de ne pas d\u00e9passer une taille de donn\u00e9es de 20MB. Les documents d\u00e9passant 20MB peuvent ralentir ou rencontrer des limites de m\u00e9moire en fonction de leur complexit\u00e9. Par exemple, un document avec 100 000 lignes et 24 colonnes num\u00e9riques atteindrait cette limite recommand\u00e9e. Pour aider \u00e0 optimiser les formules sur de grands documents, vous pouvez utiliser le chronom\u00e8tre de formule int\u00e9gr\u00e9. Les pi\u00e8ces jointes sont compt\u00e9es s\u00e9par\u00e9ment. Les pi\u00e8ces jointes plus les donn\u00e9es dans un seul document sont limit\u00e9es \u00e0 1GB pour tous les plans.","title":"Taille des donn\u00e9es"},{"location":"limits/#telechargements","text":"Les t\u00e9l\u00e9chargements sont limit\u00e9s \u00e0 50MB, \u00e0 la fois pour les pi\u00e8ces jointes et pour importer des donn\u00e9es. Notez qu\u2019une importation dans cette limite peut entra\u00eener un document qui d\u00e9passe la limite de taille de document, auquel cas le t\u00e9l\u00e9chargement est toujours susceptible d\u2019\u00e9chouer.","title":"T\u00e9l\u00e9chargements"},{"location":"limits/#limites-de-lapi","text":"Les plans gratuits sont limit\u00e9s \u00e0 5 000 appels API par document et par jour. Les plans Pro et Business augmentent la limite \u00e0 40 000 et 60 000 appels par document et par jour, respectivement. Les plans gratuits peuvent \u00eatre limit\u00e9s \u00e0 5 requ\u00eates API par seconde par document. Le plan d\u2019\u00e9quipe n\u2019impose pas une telle limite de d\u00e9bit. Par ailleurs, il y a une limite de concurrence de 10 pour tous les plans : si 10 requ\u00eates API autoris\u00e9es sont actuellement en cours de traitement pour un document particulier, toute autre requ\u00eate API sera rejet\u00e9e (avec le code d\u2019\u00e9tat HTTP 429) jusqu\u2019\u00e0 ce qu\u2019au moins une des requ\u00eates initiales soit termin\u00e9e. Un client qui attend qu\u2019une requ\u00eate soit termin\u00e9e avant d\u2019envoyer la suivante ne devrait pas atteindre cette limite (en supposant qu\u2019il est le seul client acc\u00e9dant au document). La taille du corps de toute requ\u00eate API individuelle est limit\u00e9e \u00e0 1MB. En particulier, cela signifie que les requ\u00eates ajoutant ou mettant \u00e0 jour plusieurs enregistrements peuvent devoir \u00eatre divis\u00e9es en lots qui tiennent dans cette limite.","title":"Limites de l’API"},{"location":"limits/#disponibilite-des-documents","text":"De temps en temps, lors des mises \u00e0 jour et des transitions op\u00e9rationnelles, les documents Grist individuels peuvent devenir inaccessibles pendant quelques secondes. Veuillez en tenir compte lors de l\u2019utilisation de l\u2019API de Grist.","title":"Disponibilit\u00e9 des documents"},{"location":"limits/#limites-heritees","text":"Les anciens plans personnels gratuits ont les limites suivantes : 10 documents par espace Pas d\u2019espaces de travail 100 000 lignes Pour d\u00e9terminer si vous \u00eates sur un espace personnel h\u00e9rit\u00e9, cliquez sur le nom de votre espace (@votre-nom) en haut \u00e0 gauche. Les espaces personnels sur le plan h\u00e9rit\u00e9 indiqueront \u201cEspace personnel (h\u00e9rit\u00e9)\u201d dans le menu d\u00e9roulant. Sur le plan gratuit actuel, tous les espaces personnels et d\u2019\u00e9quipe partagent les m\u00eames limites que celles d\u00e9crites ci-dessus et sur notre page de tarification .","title":"Limites h\u00e9rit\u00e9es"},{"location":"linking-widgets/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Lier des vues sur la page # Une grande raison de placer plus d\u2019une vue sur une page est que les vues peuvent \u00eatre li\u00e9es. Lorsqu\u2019elles sont li\u00e9es, la s\u00e9lection d\u2019un enregistrement dans une vue entra\u00eenera la mise \u00e0 jour d\u2019une autre vue pour afficher uniquement les donn\u00e9es li\u00e9es \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Par exemple, disons que vous avez une table de D\u00e9partements dans une entreprise, et une table d\u2019 Employ\u00e9s , chaque employ\u00e9 \u00e9tant li\u00e9 \u00e0 un d\u00e9partement. Vous pouvez avoir une vue Table listant les d\u00e9partements et servant de s\u00e9lecteur pour une deuxi\u00e8me vue Table listant les employ\u00e9s : Pr\u00e9c\u00e9dent Suivant Pour cr\u00e9er cela, commencez par cr\u00e9er une page avec une vue Table pour les donn\u00e9es de D\u00e9partements , comme d\u00e9crit dans Vues sur la page . Ensuite, dans le menu \u201cAjouter nouveau\u201d, s\u00e9lectionnez l\u2019option \u201cAjouter une vue \u00e0 la page\u201d pour ajouter une autre vue Table pour les donn\u00e9es d\u2019 Employ\u00e9s . Dans le s\u00e9lecteur de vues, utilisez le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d et choisissez la vue \u201cD\u00c9PARTEMENTS\u201d ajout\u00e9e \u00e0 la premi\u00e8re \u00e9tape. C\u2019est tout ce qu\u2019il faut : maintenant, s\u00e9lectionner un d\u00e9partement dans la premi\u00e8re table fera en sorte que la deuxi\u00e8me table affiche uniquement les employ\u00e9s de ce d\u00e9partement. Notez que cela repose sur le fait que la table Employ\u00e9s ait une colonne de type R\u00e9f\u00e9rence avec la table cible D\u00e9partements . Voir Colonnes de r\u00e9f\u00e9rence . Types de liaison # Lier des vues ne fonctionne que lorsqu\u2019il existe une relation entre les enregistrements dans les donn\u00e9es sous-jacentes. Plusieurs types de relations sont pris en charge. Liaison sur le m\u00eame enregistrement # Le plus directement, vous pouvez lier deux vues qui affichent des donn\u00e9es de la m\u00eame table sous-jacente, g\u00e9n\u00e9ralement en liant une vue Table \u00e0 une vue Fiche. Cela vous permet de s\u00e9lectionner un enregistrement dans la vue Table et de voir plus de d\u00e9tails sur cet enregistrement dans la vue Fiche li\u00e9e. Par exemple, vous pouvez ajouter une Fiche des donn\u00e9es d\u2019 Employ\u00e9s et la lier \u00e0 une vue Table existante \u201cEMPLOY\u00c9S\u201d: Lorsque vous s\u00e9lectionnez un enregistrement dans la table, la nouvelle vue \u201cFiche EMPLOY\u00c9S\u201d affiche une fiche pour l\u2019enregistrement s\u00e9lectionn\u00e9. Pour un autre exemple de ce type de liaison, voir le document \u201cCRM l\u00e9ger\u201d dans \u201cExemples & Mod\u00e8les\u201d et la section Personnaliser la mise en page dans le tutoriel associ\u00e9. Liaison par filtre # Comme dans l\u2019exemple Employ\u00e9-D\u00e9partement, lorsqu\u2019une table a une r\u00e9f\u00e9rence \u00e0 une autre (c\u2019est-\u00e0-dire une colonne de type \u201cR\u00e9f\u00e9rence\u201d), la deuxi\u00e8me table peut servir de s\u00e9lecteur pour la premi\u00e8re. Essentiellement, s\u00e9lectionner un enregistrement peut automatiquement filtrer une autre vue pour n\u2019afficher que les enregistrements qui se r\u00e9f\u00e8rent \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Dans l\u2019exemple montr\u00e9 pr\u00e9c\u00e9demment, la table Employ\u00e9s a une colonne \u201cR\u00e9f\u00e9rence\u201d pointant vers la table D\u00e9partements , donc une liste de d\u00e9partements peut servir de s\u00e9lecteur pour les employ\u00e9s. Lorsqu\u2019un d\u00e9partement est s\u00e9lectionn\u00e9, seuls les employ\u00e9s de ce d\u00e9partement seront affich\u00e9s. Le document \u201cCRM l\u00e9ger\u201d dans \u201cExemples & Mod\u00e8les\u201d fournit un autre exemple, o\u00f9 la s\u00e9lection d\u2019un contact affiche uniquement les conversations avec ce contact. C\u2019est \u00e9galement d\u00e9crit dans le tutoriel . Lorsque la cible de la liaison est une vue Graphique, vous obtenez des graphiques dynamiques qui refl\u00e8tent les donn\u00e9es associ\u00e9es \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Par exemple, vous pourriez lier un graphique en secteurs \u00e0 un d\u00e9partement pour afficher la somme des salaires pour chaque poste dans le d\u00e9partement s\u00e9lectionn\u00e9. Pr\u00e9c\u00e9dent Suivant Liaison indirecte # Chaque fois qu\u2019une table A a une r\u00e9f\u00e9rence \u00e0 B , A peut \u00eatre utilis\u00e9e \u00e0 la place de B comme source de liaison. Au lieu de consid\u00e9rer l\u2019enregistrement actuellement s\u00e9lectionn\u00e9 dans A , la liaison consid\u00e9rera l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans B comme la s\u00e9lection. Par exemple, une vue Table affichant des Employ\u00e9s peut servir de s\u00e9lecteur pour une vue Fiche affichant des donn\u00e9es de D\u00e9partements , en utilisant le fait qu\u2019un enregistrement d\u2019employ\u00e9 contient une r\u00e9f\u00e9rence \u201cD\u00e9partement\u201d. Dans le s\u00e9lecteur de vues, si vous s\u00e9lectionnez des donn\u00e9es de D\u00e9partements , vous verrez une option \u201cS\u00e9lectionner par\u201d \u201cEMPLOY\u00c9S \u2022 D\u00e9partement\u201d: Lorsque vous s\u00e9lectionnez un employ\u00e9, vous verrez les d\u00e9tails du d\u00e9partement de cet employ\u00e9. Colonnes de r\u00e9f\u00e9rence multiples # Lorsqu\u2019une table cible de la liaison a plusieurs colonnes de r\u00e9f\u00e9rence, vous devrez peut-\u00eatre choisir laquelle utiliser pour la liaison. Par exemple, un enregistrement de Vol pourrait avoir les champs \u2018A\u00e9roport de d\u00e9part\u2019 et \u2018A\u00e9roport d\u2019arriv\u00e9e\u2019, chacun \u00e9tant une R\u00e9f\u00e9rence \u00e0 la table A\u00e9roports . Lorsque vous s\u00e9lectionnez un a\u00e9roport dans une table, vous pouvez avoir le choix d\u2019afficher tous les vols partant de cet a\u00e9roport ou tous les vols y arrivant. La vue \u201cS\u00e9lectionner par\u201d affichera les deux options \u00e0 choisir : Lier des tableaux r\u00e9capitulatifs # Lorsque des vues affichent des donn\u00e9es r\u00e9sum\u00e9es, comme d\u00e9crit dans Tableaux r\u00e9capitulatifs , elles peuvent \u00e9galement \u00eatre li\u00e9es aux donn\u00e9es sous-jacentes, aux donn\u00e9es qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes, et \u00e0 d\u2019autres tableaux r\u00e9capitulatifs. Par exemple, vous pouvez r\u00e9sumer la table Employ\u00e9s par poste, et inclure le nombre d\u2019employ\u00e9s pour chaque poste, le salaire moyen ou d\u2019autres donn\u00e9es r\u00e9capitulatives. Vous pouvez \u00e9galement lier la table Employ\u00e9s \u00e0 celle-ci, de sorte que la s\u00e9lection d\u2019un poste affiche tous les employ\u00e9s dans ce poste. De plus, vous pouvez lier un autre tableau r\u00e9capitulatif. Par exemple, vous pouvez r\u00e9sumer les employ\u00e9s par poste et par genre, et lier cela au r\u00e9sum\u00e9 par poste. En s\u00e9lectionnant un poste, vous pouvez alors voir un r\u00e9sum\u00e9 par genre pour ce poste. Cela est \u00e9galement pratique avec les graphiques. Dans cet exemple, vous voyez un graphique en secteurs avec le salaire moyen pour les hommes contre les femmes pour le poste s\u00e9lectionn\u00e9. En cliquant sur diff\u00e9rents postes, le graphique en secteurs se met \u00e0 jour pour refl\u00e9ter celui s\u00e9lectionn\u00e9. Plus d\u2019exemples de ce type de liaison peuvent \u00eatre trouv\u00e9s dans le tutoriel Analyser et visualiser . Enfin, les tables qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes d\u2019un tableau r\u00e9capitulatif peuvent maintenant \u00eatre li\u00e9es au tableau r\u00e9capitulatif lui-m\u00eame. Dans l\u2019image ci-dessous, la table des Chiens Champions a une colonne de r\u00e9f\u00e9rence vers la table des \u00c9leveurs. La table des \u00c9leveurs est r\u00e9sum\u00e9e dans la vue en haut \u00e0 droite par la colonne \u201cPays\u201d. Parce que le Chien Champion r\u00e9f\u00e9rence l\u2019\u00c9leveur, vous pouvez ajouter une vue des Chiens Champions qui s\u00e9lectionne par un tableau r\u00e9capitulatif des donn\u00e9es des \u00c9leveurs. Changer les param\u00e8tres de liaison # Apr\u00e8s qu\u2019une vue soit ajout\u00e9e, vous pouvez voir et changer ses param\u00e8tres de liaison depuis le panneau de droite. Une fa\u00e7on d\u2019y acc\u00e9der est de cliquer sur l\u2019ic\u00f4ne \u00e0 trois points en haut \u00e0 droite de la vue, et de cliquer sur l\u2019option de menu \u201cS\u00e9lection des donn\u00e9es\u201d: Cela ouvre le panneau lat\u00e9ral, qui montre quelles donn\u00e9es sont affich\u00e9es, et quelle vue, le cas \u00e9ch\u00e9ant, sert de s\u00e9lecteur. Vous pouvez changer le param\u00e8tre \u201cS\u00e9lectionner par\u201d ici, ou cliquer sur le bouton vert \u201cModifier la s\u00e9lection des donn\u00e9es\u201d, et le changer dans la bo\u00eete de dialogue du s\u00e9lecteur de vues.","title":"Linking widgets"},{"location":"linking-widgets/#lier-des-vues-sur-la-page","text":"Une grande raison de placer plus d\u2019une vue sur une page est que les vues peuvent \u00eatre li\u00e9es. Lorsqu\u2019elles sont li\u00e9es, la s\u00e9lection d\u2019un enregistrement dans une vue entra\u00eenera la mise \u00e0 jour d\u2019une autre vue pour afficher uniquement les donn\u00e9es li\u00e9es \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Par exemple, disons que vous avez une table de D\u00e9partements dans une entreprise, et une table d\u2019 Employ\u00e9s , chaque employ\u00e9 \u00e9tant li\u00e9 \u00e0 un d\u00e9partement. Vous pouvez avoir une vue Table listant les d\u00e9partements et servant de s\u00e9lecteur pour une deuxi\u00e8me vue Table listant les employ\u00e9s : Pr\u00e9c\u00e9dent Suivant Pour cr\u00e9er cela, commencez par cr\u00e9er une page avec une vue Table pour les donn\u00e9es de D\u00e9partements , comme d\u00e9crit dans Vues sur la page . Ensuite, dans le menu \u201cAjouter nouveau\u201d, s\u00e9lectionnez l\u2019option \u201cAjouter une vue \u00e0 la page\u201d pour ajouter une autre vue Table pour les donn\u00e9es d\u2019 Employ\u00e9s . Dans le s\u00e9lecteur de vues, utilisez le menu d\u00e9roulant \u201cS\u00e9lectionner par\u201d et choisissez la vue \u201cD\u00c9PARTEMENTS\u201d ajout\u00e9e \u00e0 la premi\u00e8re \u00e9tape. C\u2019est tout ce qu\u2019il faut : maintenant, s\u00e9lectionner un d\u00e9partement dans la premi\u00e8re table fera en sorte que la deuxi\u00e8me table affiche uniquement les employ\u00e9s de ce d\u00e9partement. Notez que cela repose sur le fait que la table Employ\u00e9s ait une colonne de type R\u00e9f\u00e9rence avec la table cible D\u00e9partements . Voir Colonnes de r\u00e9f\u00e9rence .","title":"Lier des vues sur la page"},{"location":"linking-widgets/#types-de-liaison","text":"Lier des vues ne fonctionne que lorsqu\u2019il existe une relation entre les enregistrements dans les donn\u00e9es sous-jacentes. Plusieurs types de relations sont pris en charge.","title":""},{"location":"linking-widgets/#liaison-sur-le-meme-enregistrement","text":"Le plus directement, vous pouvez lier deux vues qui affichent des donn\u00e9es de la m\u00eame table sous-jacente, g\u00e9n\u00e9ralement en liant une vue Table \u00e0 une vue Fiche. Cela vous permet de s\u00e9lectionner un enregistrement dans la vue Table et de voir plus de d\u00e9tails sur cet enregistrement dans la vue Fiche li\u00e9e. Par exemple, vous pouvez ajouter une Fiche des donn\u00e9es d\u2019 Employ\u00e9s et la lier \u00e0 une vue Table existante \u201cEMPLOY\u00c9S\u201d: Lorsque vous s\u00e9lectionnez un enregistrement dans la table, la nouvelle vue \u201cFiche EMPLOY\u00c9S\u201d affiche une fiche pour l\u2019enregistrement s\u00e9lectionn\u00e9. Pour un autre exemple de ce type de liaison, voir le document \u201cCRM l\u00e9ger\u201d dans \u201cExemples & Mod\u00e8les\u201d et la section Personnaliser la mise en page dans le tutoriel associ\u00e9.","title":"Liaison sur le m\u00eame enregistrement"},{"location":"linking-widgets/#liaison-par-filtre","text":"Comme dans l\u2019exemple Employ\u00e9-D\u00e9partement, lorsqu\u2019une table a une r\u00e9f\u00e9rence \u00e0 une autre (c\u2019est-\u00e0-dire une colonne de type \u201cR\u00e9f\u00e9rence\u201d), la deuxi\u00e8me table peut servir de s\u00e9lecteur pour la premi\u00e8re. Essentiellement, s\u00e9lectionner un enregistrement peut automatiquement filtrer une autre vue pour n\u2019afficher que les enregistrements qui se r\u00e9f\u00e8rent \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Dans l\u2019exemple montr\u00e9 pr\u00e9c\u00e9demment, la table Employ\u00e9s a une colonne \u201cR\u00e9f\u00e9rence\u201d pointant vers la table D\u00e9partements , donc une liste de d\u00e9partements peut servir de s\u00e9lecteur pour les employ\u00e9s. Lorsqu\u2019un d\u00e9partement est s\u00e9lectionn\u00e9, seuls les employ\u00e9s de ce d\u00e9partement seront affich\u00e9s. Le document \u201cCRM l\u00e9ger\u201d dans \u201cExemples & Mod\u00e8les\u201d fournit un autre exemple, o\u00f9 la s\u00e9lection d\u2019un contact affiche uniquement les conversations avec ce contact. C\u2019est \u00e9galement d\u00e9crit dans le tutoriel . Lorsque la cible de la liaison est une vue Graphique, vous obtenez des graphiques dynamiques qui refl\u00e8tent les donn\u00e9es associ\u00e9es \u00e0 l\u2019enregistrement s\u00e9lectionn\u00e9. Par exemple, vous pourriez lier un graphique en secteurs \u00e0 un d\u00e9partement pour afficher la somme des salaires pour chaque poste dans le d\u00e9partement s\u00e9lectionn\u00e9. Pr\u00e9c\u00e9dent Suivant","title":"Liaison par filtre"},{"location":"linking-widgets/#liaison-indirecte","text":"Chaque fois qu\u2019une table A a une r\u00e9f\u00e9rence \u00e0 B , A peut \u00eatre utilis\u00e9e \u00e0 la place de B comme source de liaison. Au lieu de consid\u00e9rer l\u2019enregistrement actuellement s\u00e9lectionn\u00e9 dans A , la liaison consid\u00e9rera l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans B comme la s\u00e9lection. Par exemple, une vue Table affichant des Employ\u00e9s peut servir de s\u00e9lecteur pour une vue Fiche affichant des donn\u00e9es de D\u00e9partements , en utilisant le fait qu\u2019un enregistrement d\u2019employ\u00e9 contient une r\u00e9f\u00e9rence \u201cD\u00e9partement\u201d. Dans le s\u00e9lecteur de vues, si vous s\u00e9lectionnez des donn\u00e9es de D\u00e9partements , vous verrez une option \u201cS\u00e9lectionner par\u201d \u201cEMPLOY\u00c9S \u2022 D\u00e9partement\u201d: Lorsque vous s\u00e9lectionnez un employ\u00e9, vous verrez les d\u00e9tails du d\u00e9partement de cet employ\u00e9.","title":"Liaison indirecte"},{"location":"linking-widgets/#colonnes-de-reference-multiples","text":"Lorsqu\u2019une table cible de la liaison a plusieurs colonnes de r\u00e9f\u00e9rence, vous devrez peut-\u00eatre choisir laquelle utiliser pour la liaison. Par exemple, un enregistrement de Vol pourrait avoir les champs \u2018A\u00e9roport de d\u00e9part\u2019 et \u2018A\u00e9roport d\u2019arriv\u00e9e\u2019, chacun \u00e9tant une R\u00e9f\u00e9rence \u00e0 la table A\u00e9roports . Lorsque vous s\u00e9lectionnez un a\u00e9roport dans une table, vous pouvez avoir le choix d\u2019afficher tous les vols partant de cet a\u00e9roport ou tous les vols y arrivant. La vue \u201cS\u00e9lectionner par\u201d affichera les deux options \u00e0 choisir :","title":"Colonnes de r\u00e9f\u00e9rence multiples"},{"location":"linking-widgets/#lier-des-tableaux-recapitulatifs","text":"Lorsque des vues affichent des donn\u00e9es r\u00e9sum\u00e9es, comme d\u00e9crit dans Tableaux r\u00e9capitulatifs , elles peuvent \u00e9galement \u00eatre li\u00e9es aux donn\u00e9es sous-jacentes, aux donn\u00e9es qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes, et \u00e0 d\u2019autres tableaux r\u00e9capitulatifs. Par exemple, vous pouvez r\u00e9sumer la table Employ\u00e9s par poste, et inclure le nombre d\u2019employ\u00e9s pour chaque poste, le salaire moyen ou d\u2019autres donn\u00e9es r\u00e9capitulatives. Vous pouvez \u00e9galement lier la table Employ\u00e9s \u00e0 celle-ci, de sorte que la s\u00e9lection d\u2019un poste affiche tous les employ\u00e9s dans ce poste. De plus, vous pouvez lier un autre tableau r\u00e9capitulatif. Par exemple, vous pouvez r\u00e9sumer les employ\u00e9s par poste et par genre, et lier cela au r\u00e9sum\u00e9 par poste. En s\u00e9lectionnant un poste, vous pouvez alors voir un r\u00e9sum\u00e9 par genre pour ce poste. Cela est \u00e9galement pratique avec les graphiques. Dans cet exemple, vous voyez un graphique en secteurs avec le salaire moyen pour les hommes contre les femmes pour le poste s\u00e9lectionn\u00e9. En cliquant sur diff\u00e9rents postes, le graphique en secteurs se met \u00e0 jour pour refl\u00e9ter celui s\u00e9lectionn\u00e9. Plus d\u2019exemples de ce type de liaison peuvent \u00eatre trouv\u00e9s dans le tutoriel Analyser et visualiser . Enfin, les tables qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes d\u2019un tableau r\u00e9capitulatif peuvent maintenant \u00eatre li\u00e9es au tableau r\u00e9capitulatif lui-m\u00eame. Dans l\u2019image ci-dessous, la table des Chiens Champions a une colonne de r\u00e9f\u00e9rence vers la table des \u00c9leveurs. La table des \u00c9leveurs est r\u00e9sum\u00e9e dans la vue en haut \u00e0 droite par la colonne \u201cPays\u201d. Parce que le Chien Champion r\u00e9f\u00e9rence l\u2019\u00c9leveur, vous pouvez ajouter une vue des Chiens Champions qui s\u00e9lectionne par un tableau r\u00e9capitulatif des donn\u00e9es des \u00c9leveurs.","title":"Lier des tableaux r\u00e9capitulatifs"},{"location":"linking-widgets/#changer-les-parametres-de-liaison","text":"Apr\u00e8s qu\u2019une vue soit ajout\u00e9e, vous pouvez voir et changer ses param\u00e8tres de liaison depuis le panneau de droite. Une fa\u00e7on d\u2019y acc\u00e9der est de cliquer sur l\u2019ic\u00f4ne \u00e0 trois points en haut \u00e0 droite de la vue, et de cliquer sur l\u2019option de menu \u201cS\u00e9lection des donn\u00e9es\u201d: Cela ouvre le panneau lat\u00e9ral, qui montre quelles donn\u00e9es sont affich\u00e9es, et quelle vue, le cas \u00e9ch\u00e9ant, sert de s\u00e9lecteur. Vous pouvez changer le param\u00e8tre \u201cS\u00e9lectionner par\u201d ici, ou cliquer sur le bouton vert \u201cModifier la s\u00e9lection des donn\u00e9es\u201d, et le changer dans la bo\u00eete de dialogue du s\u00e9lecteur de vues.","title":"Changer les param\u00e8tres de liaison"},{"location":"newsletters/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Grist pour le Moulin # Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. L\u2019expression \u201cGrist pour le moulin\u201d signifie \u201cexp\u00e9rience, mat\u00e9riel ou connaissance utile\u201d, refl\u00e9tant parfaitement son objectif. Pour recevoir le bulletin, inscrivez-vous \u00e0 Grist . Bulletin de Juillet 2024 : Fonctions cumulatives, nouveaux types de cibles, synchronisation de variables am\u00e9lior\u00e9e et un nouveau webinaire pour les utilisateurs ! Bulletin de Juin 2024 : Mod\u00e8les de recherche, ex\u00e9cution sans privil\u00e8ges root, et contributions de la communaut\u00e9 ! Bulletin de Mai 2024 : Nouveau plan Grist Business, utilitaire de minuterie de formules, conditionnels d\u00e9pla\u00e7ables et am\u00e9liorations de la console d\u2019administration ! Bulletin d\u2019Avril 2024 : Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rences et de choix, une console d\u2019administration pour les auto-h\u00e9bergeurs. Bulletin de Mars 2024 : Am\u00e9liorations des formulaires, nouveaux formats de fichiers, et une page de d\u00e9marrage pour les auto-h\u00e9bergeurs. Bulletin de F\u00e9vrier 2024 : Projecteur sur la communaut\u00e9 : nouvelles vues, exp\u00e9riences amusantes et explorations approfondies. Bulletin de Janvier 2024 : Les formulaires Grist sont l\u00e0 ! L\u2019importation de donn\u00e9es dans Grist est devenue plus facile. Bulletin de D\u00e9cembre 2023 : Bilan de l\u2019ann\u00e9e 2023 de Grist, tests utilisateurs des formulaires et vitrine de la communaut\u00e9. Bulletin de Novembre 2023 : Ouvrir les enregistrements r\u00e9f\u00e9renc\u00e9s d\u2019un clic, discuter avec nous sur Discord, et ajouter des types de colonnes plus facilement. Bulletin d\u2019Octobre 2023 : Nouveaux raccourcis de formules, deux vues exp\u00e9rimentales, \u00e9v\u00e9nements de calendrier color\u00e9s et bien plus encore ! Bulletin de Septembre 2023 : Vue calendrier, deux nouveaux mod\u00e8les, et point de terminaison API pour effectuer des requ\u00eates SQL. Bulletin d\u2019Ao\u00fbt 2023 : Visionneuse CSV Grist ! Support de Llama AI ! Bulletin de Juillet 2023 : Assistant de formule AI lanc\u00e9 ! Bulletin de Juin 2023 : Mise en \u00e9vidence des lignes, nouveaux mod\u00e8les, et contributions de la communaut\u00e9. Bulletin de Mai 2023 : Description des colonnes et des vues, webhooks, et un vote pour les meilleures cartes m\u00e9moire. Bulletin d\u2019Avril 2023 : Concours de cartes m\u00e9moire, une fa\u00e7on de faire des blagues \u00e0 des amis avec Grist, et une nouvelle exp\u00e9rience de publication de donn\u00e9es de tableur. Bulletin de Mars 2023 : Minimisation des vues, tutoriels int\u00e9gr\u00e9s, et une vue personnalis\u00e9e pour les cartes m\u00e9moire ! Bulletin de F\u00e9vrier 2023 : Grist dans plus de langues, et un aper\u00e7u des projets passion des d\u00e9veloppeurs. Bulletin de Janvier 2023 : Grist en Fran\u00e7ais, Espa\u00f1ol, Portugu\u00eas, et Deutsch ! Plus des vues extensibles et des am\u00e9liorations des permissions avanc\u00e9es. Bulletin de D\u00e9cembre 2022 : Nouveau filtre de date avec calendrier, et instantan\u00e9s dans grist-core. Bulletin de Novembre 2022 : Exp\u00e9rience Grist avec l\u2019\u00e9criture de formules AI, et tri et filtrage am\u00e9lior\u00e9s. Bulletin d\u2019Octobre 2022 : Sommes rapides, duplication de tables, et nouvelles m\u00e9thodes API. Bulletin de Septembre 2022 : Mode sombre \ud83d\udd76 + gestion des utilisateurs am\u00e9lior\u00e9e. Bulletin d\u2019Ao\u00fbt 2022 : Espaces d\u2019\u00e9quipe gratuits, styles conditionnels des lignes, et meilleure aide pour les formules. Bulletin de Juillet 2022 : Aide-m\u00e9moire des formules et tableaux r\u00e9capitulatifs dans les donn\u00e9es sources. Bulletin de Juin 2022 : Filtrage par intervalle, et nouvelle fonction PEEK() . Bulletin de Mai 2022 : Donn\u00e9es sources, et nouveau lien de tableau r\u00e9capitulatif. Bulletin d\u2019Avril 2022 : \u00c9diteur de texte enrichi, et plus de styles de cellules. Bulletin de Mars 2022 : Mise en forme conditionnelle, nouvelle m\u00e9thode API, et le nouveau programme Sprouts. Bulletin de F\u00e9vrier 2022 : Menu des vues personnalis\u00e9es, 2FA, am\u00e9liorations des permissions avanc\u00e9es, et menu contextuel des cellules. Bulletin de Janvier 2022 : Gestion des visites de documents mod\u00e8les, et 4 nouveaux mod\u00e8les, y compris un gestionnaire d\u2019inventaire. Bulletin de D\u00e9cembre 2021 : D\u00e9clencheurs instantan\u00e9s Zapier, et quatre nouveaux mod\u00e8les. Bulletin de Novembre 2021 : Mappage des colonnes d\u2019importation, filtrage sur les colonnes masqu\u00e9es, et plus d\u2019options de tri. Bulletin d\u2019Octobre 2021 : \u00c9dition des choix, liens en ligne, et aper\u00e7us d\u2019importation am\u00e9lior\u00e9s. Bulletin de Septembre 2021 : Importations am\u00e9lior\u00e9es, devises globales, et plus de fa\u00e7ons d\u2019int\u00e9grer. Bulletin d\u2019Ao\u00fbt 2021 : Listes de r\u00e9f\u00e9rences, int\u00e9gration, mod\u00e8les, Pabbly, et plus encore. Bulletin de Juillet 2021 : Couleurs, tampons de temps et d\u2019auteur, et int\u00e9gration Google Sheets. Bulletin de Juin 2021 : Introduction des colonnes fig\u00e9es et d\u2019un mod\u00e8le de suivi des feuilles de temps. Bulletin de Mai 2021 : Listes de choix, tutoriel en 3 \u00e9tapes sur les colonnes de r\u00e9f\u00e9rence. Bulletin d\u2019Avril 2021 : Guide en 4 \u00e9tapes pour les cl\u00e9s de lien. Bulletin de Mars 2021 : Permissions avanc\u00e9es. Bulletin de F\u00e9vrier 2021 : Support mobile am\u00e9lior\u00e9, totaux. Bulletin de Janvier 2021 : Gestion des t\u00e2ches, trouver un consultant, devenir consultant. Bulletin de D\u00e9cembre 2020 : Cartes, contr\u00f4le d\u2019acc\u00e8s, comparer les versions pr\u00e9c\u00e9dentes. Bulletin de Novembre 2020 : Open Source, pi\u00e8ces jointes am\u00e9lior\u00e9es, comparer les versions. Bulletin d\u2019Octobre 2020 : Support d\u2019impression, \u00e9tiquettes de courrier, b\u00eata Open Source. Bulletin de Septembre 2020 : Acc\u00e8s public, suivi de la paie. Bulletin d\u2019Ao\u00fbt 2020 : Factures, vues personnalis\u00e9es, listes de documents. Bulletin de Juillet 2020 : Options de format de nombre, pr\u00e9parer des e-mails avec des formules. Bulletin de Juin 2020 : Travailler sur des changements complexes, sauvegardes automatiques. Bulletin de Mai 2020 : Copier comme mod\u00e8le, meilleures URL, NY Tech Meetup.","title":"Newsletters"},{"location":"newsletters/#grist-pour-le-moulin","text":"Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. L\u2019expression \u201cGrist pour le moulin\u201d signifie \u201cexp\u00e9rience, mat\u00e9riel ou connaissance utile\u201d, refl\u00e9tant parfaitement son objectif. Pour recevoir le bulletin, inscrivez-vous \u00e0 Grist . Bulletin de Juillet 2024 : Fonctions cumulatives, nouveaux types de cibles, synchronisation de variables am\u00e9lior\u00e9e et un nouveau webinaire pour les utilisateurs ! Bulletin de Juin 2024 : Mod\u00e8les de recherche, ex\u00e9cution sans privil\u00e8ges root, et contributions de la communaut\u00e9 ! Bulletin de Mai 2024 : Nouveau plan Grist Business, utilitaire de minuterie de formules, conditionnels d\u00e9pla\u00e7ables et am\u00e9liorations de la console d\u2019administration ! Bulletin d\u2019Avril 2024 : Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rences et de choix, une console d\u2019administration pour les auto-h\u00e9bergeurs. Bulletin de Mars 2024 : Am\u00e9liorations des formulaires, nouveaux formats de fichiers, et une page de d\u00e9marrage pour les auto-h\u00e9bergeurs. Bulletin de F\u00e9vrier 2024 : Projecteur sur la communaut\u00e9 : nouvelles vues, exp\u00e9riences amusantes et explorations approfondies. Bulletin de Janvier 2024 : Les formulaires Grist sont l\u00e0 ! L\u2019importation de donn\u00e9es dans Grist est devenue plus facile. Bulletin de D\u00e9cembre 2023 : Bilan de l\u2019ann\u00e9e 2023 de Grist, tests utilisateurs des formulaires et vitrine de la communaut\u00e9. Bulletin de Novembre 2023 : Ouvrir les enregistrements r\u00e9f\u00e9renc\u00e9s d\u2019un clic, discuter avec nous sur Discord, et ajouter des types de colonnes plus facilement. Bulletin d\u2019Octobre 2023 : Nouveaux raccourcis de formules, deux vues exp\u00e9rimentales, \u00e9v\u00e9nements de calendrier color\u00e9s et bien plus encore ! Bulletin de Septembre 2023 : Vue calendrier, deux nouveaux mod\u00e8les, et point de terminaison API pour effectuer des requ\u00eates SQL. Bulletin d\u2019Ao\u00fbt 2023 : Visionneuse CSV Grist ! Support de Llama AI ! Bulletin de Juillet 2023 : Assistant de formule AI lanc\u00e9 ! Bulletin de Juin 2023 : Mise en \u00e9vidence des lignes, nouveaux mod\u00e8les, et contributions de la communaut\u00e9. Bulletin de Mai 2023 : Description des colonnes et des vues, webhooks, et un vote pour les meilleures cartes m\u00e9moire. Bulletin d\u2019Avril 2023 : Concours de cartes m\u00e9moire, une fa\u00e7on de faire des blagues \u00e0 des amis avec Grist, et une nouvelle exp\u00e9rience de publication de donn\u00e9es de tableur. Bulletin de Mars 2023 : Minimisation des vues, tutoriels int\u00e9gr\u00e9s, et une vue personnalis\u00e9e pour les cartes m\u00e9moire ! Bulletin de F\u00e9vrier 2023 : Grist dans plus de langues, et un aper\u00e7u des projets passion des d\u00e9veloppeurs. Bulletin de Janvier 2023 : Grist en Fran\u00e7ais, Espa\u00f1ol, Portugu\u00eas, et Deutsch ! Plus des vues extensibles et des am\u00e9liorations des permissions avanc\u00e9es. Bulletin de D\u00e9cembre 2022 : Nouveau filtre de date avec calendrier, et instantan\u00e9s dans grist-core. Bulletin de Novembre 2022 : Exp\u00e9rience Grist avec l\u2019\u00e9criture de formules AI, et tri et filtrage am\u00e9lior\u00e9s. Bulletin d\u2019Octobre 2022 : Sommes rapides, duplication de tables, et nouvelles m\u00e9thodes API. Bulletin de Septembre 2022 : Mode sombre \ud83d\udd76 + gestion des utilisateurs am\u00e9lior\u00e9e. Bulletin d\u2019Ao\u00fbt 2022 : Espaces d\u2019\u00e9quipe gratuits, styles conditionnels des lignes, et meilleure aide pour les formules. Bulletin de Juillet 2022 : Aide-m\u00e9moire des formules et tableaux r\u00e9capitulatifs dans les donn\u00e9es sources. Bulletin de Juin 2022 : Filtrage par intervalle, et nouvelle fonction PEEK() . Bulletin de Mai 2022 : Donn\u00e9es sources, et nouveau lien de tableau r\u00e9capitulatif. Bulletin d\u2019Avril 2022 : \u00c9diteur de texte enrichi, et plus de styles de cellules. Bulletin de Mars 2022 : Mise en forme conditionnelle, nouvelle m\u00e9thode API, et le nouveau programme Sprouts. Bulletin de F\u00e9vrier 2022 : Menu des vues personnalis\u00e9es, 2FA, am\u00e9liorations des permissions avanc\u00e9es, et menu contextuel des cellules. Bulletin de Janvier 2022 : Gestion des visites de documents mod\u00e8les, et 4 nouveaux mod\u00e8les, y compris un gestionnaire d\u2019inventaire. Bulletin de D\u00e9cembre 2021 : D\u00e9clencheurs instantan\u00e9s Zapier, et quatre nouveaux mod\u00e8les. Bulletin de Novembre 2021 : Mappage des colonnes d\u2019importation, filtrage sur les colonnes masqu\u00e9es, et plus d\u2019options de tri. Bulletin d\u2019Octobre 2021 : \u00c9dition des choix, liens en ligne, et aper\u00e7us d\u2019importation am\u00e9lior\u00e9s. Bulletin de Septembre 2021 : Importations am\u00e9lior\u00e9es, devises globales, et plus de fa\u00e7ons d\u2019int\u00e9grer. Bulletin d\u2019Ao\u00fbt 2021 : Listes de r\u00e9f\u00e9rences, int\u00e9gration, mod\u00e8les, Pabbly, et plus encore. Bulletin de Juillet 2021 : Couleurs, tampons de temps et d\u2019auteur, et int\u00e9gration Google Sheets. Bulletin de Juin 2021 : Introduction des colonnes fig\u00e9es et d\u2019un mod\u00e8le de suivi des feuilles de temps. Bulletin de Mai 2021 : Listes de choix, tutoriel en 3 \u00e9tapes sur les colonnes de r\u00e9f\u00e9rence. Bulletin d\u2019Avril 2021 : Guide en 4 \u00e9tapes pour les cl\u00e9s de lien. Bulletin de Mars 2021 : Permissions avanc\u00e9es. Bulletin de F\u00e9vrier 2021 : Support mobile am\u00e9lior\u00e9, totaux. Bulletin de Janvier 2021 : Gestion des t\u00e2ches, trouver un consultant, devenir consultant. Bulletin de D\u00e9cembre 2020 : Cartes, contr\u00f4le d\u2019acc\u00e8s, comparer les versions pr\u00e9c\u00e9dentes. Bulletin de Novembre 2020 : Open Source, pi\u00e8ces jointes am\u00e9lior\u00e9es, comparer les versions. Bulletin d\u2019Octobre 2020 : Support d\u2019impression, \u00e9tiquettes de courrier, b\u00eata Open Source. Bulletin de Septembre 2020 : Acc\u00e8s public, suivi de la paie. Bulletin d\u2019Ao\u00fbt 2020 : Factures, vues personnalis\u00e9es, listes de documents. Bulletin de Juillet 2020 : Options de format de nombre, pr\u00e9parer des e-mails avec des formules. Bulletin de Juin 2020 : Travailler sur des changements complexes, sauvegardes automatiques. Bulletin de Mai 2020 : Copier comme mod\u00e8le, meilleures URL, NY Tech Meetup.","title":"Grist pour le Moulin"},{"location":"on-demand-tables/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Tables \u00e0 la Demande # Les tables \u00e0 la demande sont une fonctionnalit\u00e9 exp\u00e9rimentale La conception des tables \u00e0 la demande peut changer. Par exemple, des options de configuration peuvent \u00eatre ajout\u00e9es, ou certains aspects du comportement des tables \u00e0 la demande peuvent \u00eatre enti\u00e8rement modifi\u00e9s. Une caract\u00e9ristique d\u00e9terminante des tableurs est la capacit\u00e9 de mettre \u00e0 jour instantan\u00e9ment les cellules lorsque les donn\u00e9es dont elles d\u00e9pendent changent. Mais parfois, une table n\u2019est qu\u2019un stockage de donn\u00e9es, sans besoin de calculs sophistiqu\u00e9s. Dans ce cas, vous pouvez choisir de marquer la table comme \u201c\u00c0 la Demande\u201d dans Grist. Grist peut alors servir les donn\u00e9es de cette table plus rapidement et effectuer certaines optimisations qui peuvent \u00eatre utiles lorsque la table devient grande et que les tables r\u00e9guli\u00e8res deviennent lentes. Lorsqu\u2019une table est marqu\u00e9e \u201c\u00c0 la Demande\u201d : Les donn\u00e9es de la table ne seront g\u00e9n\u00e9ralement pas disponibles pour une utilisation dans les formules. La table reste disponible pour la visualisation et l\u2019\u00e9dition, mais avec des mises en garde. Voici ce que vous devez savoir sur la visualisation des donn\u00e9es : La visualisation est limit\u00e9e \u00e0 10000 lignes \u00e0 la fois. Des sous-ensembles des lignes de la table peuvent \u00eatre s\u00e9lectionn\u00e9s en liant des vues , comme pour les tables r\u00e9guli\u00e8res. Vous pouvez vous attendre \u00e0 de bonnes performances des vues li\u00e9es lorsque le sous-ensemble des lignes de la table est inf\u00e9rieur \u00e0 10000 lignes, m\u00eame si la table compl\u00e8te est beaucoup plus grande. Voici ce que vous devez savoir sur l\u2019\u00e9dition des donn\u00e9es : Vous pouvez \u00e9diter les donn\u00e9es normalement dans une table \u00c0 la Demande. Les mises \u00e0 jour automatiques de tout ce qui d\u00e9pend de ces donn\u00e9es ne se produiront tout simplement pas. Apr\u00e8s les modifications, vous devez recharger la page web pour voir tout mis \u00e0 jour. Voici quelques raisons pour lesquelles vous pourriez rendre une table \u00c0 la Demande : Vous souhaitez cr\u00e9er des r\u00e9sum\u00e9s et des graphiques de tranches d\u2019un grand ensemble de donn\u00e9es en utilisant des vues li\u00e9es . Vous stockez beaucoup de donn\u00e9es dans la table, et tout ce que vous avez besoin de faire avec est de lire des parties de celles-ci via l\u2019API. Cr\u00e9er une Table \u00e0 la Demande # Pour convertir une table en table \u201c\u00c0 la Demande\u201d, ouvrez le panneau de droite, choisissez le panneau \u201cTable\u201d et la section \u201cDonn\u00e9es\u201d. Cliquez sur \u201cParam\u00e8tres Avanc\u00e9s\u201d et vous devriez voir un bouton \u201cRendre \u00c0 la Demande\u201d. Si vous changez d\u2019avis et ne voulez plus que la table soit \u201c\u00c0 la Demande\u201d, vous pouvez trouver un bouton pour annuler ce param\u00e8tre au m\u00eame endroit : Changer une table pour devenir \u201c\u00c0 la Demande\u201d ou pour cesser d\u2019\u00eatre \u201c\u00c0 la Demande\u201d forcera le document \u00e0 se recharger pour tous les utilisateurs le visualisant \u00e0 ce moment-l\u00e0. Formules, R\u00e9f\u00e9rences et Tables \u00e0 la Demande # En g\u00e9n\u00e9ral, les formules et les tables \u00e0 la demande ne vont pas ensemble. Cela dit, si vous \u00eates prudent, vous pouvez utiliser les formules tr\u00e8s simples suivantes : $colonne - o\u00f9 la colonne mentionn\u00e9e n\u2019est pas elle-m\u00eame une formule. Cela copie les donn\u00e9es d\u2019une autre colonne textuellement. $r\u00e9f\u00e9rence.colonne - o\u00f9 r\u00e9f\u00e9rence est une colonne de r\u00e9f\u00e9rence , et colonne n\u2019est pas elle-m\u00eame une formule. Ce support de formule est suffisant pour d\u00e9bloquer la fonctionnalit\u00e9 de vues li\u00e9es de Grist, c\u2019est pourquoi elle est pr\u00e9sente. En g\u00e9n\u00e9ral, si vous essayez d\u2019utiliser des formules et des tables \u00c0 la Demande, vous vous pr\u00e9parez \u00e0 \u00eatre d\u00e9\u00e7u. Rappelez-vous, comme toute modification d\u2019une table \u00c0 la Demande, lorsque vous ajoutez ou modifiez une colonne de formule, vous devrez g\u00e9n\u00e9ralement recharger pour voir les valeurs des cellules mises \u00e0 jour. Certaines conversions de type, comme la conversion d\u2019une colonne en r\u00e9f\u00e9rence, ne sont pas efficaces pour les tables \u00c0 la Demande. Il est donc important d\u2019effectuer ces conversions avant de rendre une table \u00c0 la Demande. Depuis les formules dans les tables r\u00e9guli\u00e8res, vous ne pouvez pas acc\u00e9der au contenu des tables \u00e0 la demande.","title":"On-demand tables"},{"location":"on-demand-tables/#tables-a-la-demande","text":"Les tables \u00e0 la demande sont une fonctionnalit\u00e9 exp\u00e9rimentale La conception des tables \u00e0 la demande peut changer. Par exemple, des options de configuration peuvent \u00eatre ajout\u00e9es, ou certains aspects du comportement des tables \u00e0 la demande peuvent \u00eatre enti\u00e8rement modifi\u00e9s. Une caract\u00e9ristique d\u00e9terminante des tableurs est la capacit\u00e9 de mettre \u00e0 jour instantan\u00e9ment les cellules lorsque les donn\u00e9es dont elles d\u00e9pendent changent. Mais parfois, une table n\u2019est qu\u2019un stockage de donn\u00e9es, sans besoin de calculs sophistiqu\u00e9s. Dans ce cas, vous pouvez choisir de marquer la table comme \u201c\u00c0 la Demande\u201d dans Grist. Grist peut alors servir les donn\u00e9es de cette table plus rapidement et effectuer certaines optimisations qui peuvent \u00eatre utiles lorsque la table devient grande et que les tables r\u00e9guli\u00e8res deviennent lentes. Lorsqu\u2019une table est marqu\u00e9e \u201c\u00c0 la Demande\u201d : Les donn\u00e9es de la table ne seront g\u00e9n\u00e9ralement pas disponibles pour une utilisation dans les formules. La table reste disponible pour la visualisation et l\u2019\u00e9dition, mais avec des mises en garde. Voici ce que vous devez savoir sur la visualisation des donn\u00e9es : La visualisation est limit\u00e9e \u00e0 10000 lignes \u00e0 la fois. Des sous-ensembles des lignes de la table peuvent \u00eatre s\u00e9lectionn\u00e9s en liant des vues , comme pour les tables r\u00e9guli\u00e8res. Vous pouvez vous attendre \u00e0 de bonnes performances des vues li\u00e9es lorsque le sous-ensemble des lignes de la table est inf\u00e9rieur \u00e0 10000 lignes, m\u00eame si la table compl\u00e8te est beaucoup plus grande. Voici ce que vous devez savoir sur l\u2019\u00e9dition des donn\u00e9es : Vous pouvez \u00e9diter les donn\u00e9es normalement dans une table \u00c0 la Demande. Les mises \u00e0 jour automatiques de tout ce qui d\u00e9pend de ces donn\u00e9es ne se produiront tout simplement pas. Apr\u00e8s les modifications, vous devez recharger la page web pour voir tout mis \u00e0 jour. Voici quelques raisons pour lesquelles vous pourriez rendre une table \u00c0 la Demande : Vous souhaitez cr\u00e9er des r\u00e9sum\u00e9s et des graphiques de tranches d\u2019un grand ensemble de donn\u00e9es en utilisant des vues li\u00e9es . Vous stockez beaucoup de donn\u00e9es dans la table, et tout ce que vous avez besoin de faire avec est de lire des parties de celles-ci via l\u2019API.","title":"Tables \u00e0 la Demande"},{"location":"on-demand-tables/#creer-une-table-a-la-demande","text":"Pour convertir une table en table \u201c\u00c0 la Demande\u201d, ouvrez le panneau de droite, choisissez le panneau \u201cTable\u201d et la section \u201cDonn\u00e9es\u201d. Cliquez sur \u201cParam\u00e8tres Avanc\u00e9s\u201d et vous devriez voir un bouton \u201cRendre \u00c0 la Demande\u201d. Si vous changez d\u2019avis et ne voulez plus que la table soit \u201c\u00c0 la Demande\u201d, vous pouvez trouver un bouton pour annuler ce param\u00e8tre au m\u00eame endroit : Changer une table pour devenir \u201c\u00c0 la Demande\u201d ou pour cesser d\u2019\u00eatre \u201c\u00c0 la Demande\u201d forcera le document \u00e0 se recharger pour tous les utilisateurs le visualisant \u00e0 ce moment-l\u00e0.","title":"Cr\u00e9er une Table \u00e0 la Demande"},{"location":"on-demand-tables/#formules-references-et-tables-a-la-demande","text":"En g\u00e9n\u00e9ral, les formules et les tables \u00e0 la demande ne vont pas ensemble. Cela dit, si vous \u00eates prudent, vous pouvez utiliser les formules tr\u00e8s simples suivantes : $colonne - o\u00f9 la colonne mentionn\u00e9e n\u2019est pas elle-m\u00eame une formule. Cela copie les donn\u00e9es d\u2019une autre colonne textuellement. $r\u00e9f\u00e9rence.colonne - o\u00f9 r\u00e9f\u00e9rence est une colonne de r\u00e9f\u00e9rence , et colonne n\u2019est pas elle-m\u00eame une formule. Ce support de formule est suffisant pour d\u00e9bloquer la fonctionnalit\u00e9 de vues li\u00e9es de Grist, c\u2019est pourquoi elle est pr\u00e9sente. En g\u00e9n\u00e9ral, si vous essayez d\u2019utiliser des formules et des tables \u00c0 la Demande, vous vous pr\u00e9parez \u00e0 \u00eatre d\u00e9\u00e7u. Rappelez-vous, comme toute modification d\u2019une table \u00c0 la Demande, lorsque vous ajoutez ou modifiez une colonne de formule, vous devrez g\u00e9n\u00e9ralement recharger pour voir les valeurs des cellules mises \u00e0 jour. Certaines conversions de type, comme la conversion d\u2019une colonne en r\u00e9f\u00e9rence, ne sont pas efficaces pour les tables \u00c0 la Demande. Il est donc important d\u2019effectuer ces conversions avant de rendre une table \u00c0 la Demande. Depuis les formules dans les tables r\u00e9guli\u00e8res, vous ne pouvez pas acc\u00e9der au contenu des tables \u00e0 la demande.","title":"Formules, R\u00e9f\u00e9rences et Tables \u00e0 la Demande"},{"location":"page-widgets/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Pages & widgets # Contrairement aux tableurs traditionnels, dans Grist, vous pouvez cr\u00e9er plusieurs vues des m\u00eames donn\u00e9es et afficher plusieurs ensembles de donn\u00e9es sur une seule page. Cela vous permet de cr\u00e9er des tableaux de bord utiles et des applications personnalis\u00e9es adapt\u00e9es \u00e0 vos besoins. Pages # Dans Grist, vous organisez votre document en \u201cpages\u201d. Celles-ci sont list\u00e9es dans le panneau de gauche, avec des groupes repliables. Vous pouvez r\u00e9organiser et regrouper les pages dans le panneau de gauche en les faisant glisser pour les adapter \u00e0 vos besoins. Vous pouvez renommer, supprimer ou dupliquer des pages en utilisant le menu \u00e0 trois points \u00e0 c\u00f4t\u00e9 du nom de la page dans la liste. Renommer la page ne modifie pas les noms des tables de donn\u00e9es ou les titres des widgets. Voir changer le widget ci-dessous pour apprendre comment modifier les noms des tables et des widgets. Dupliquer une page duplique les vues des donn\u00e9es et ne duplique pas les donn\u00e9es elles-m\u00eames. Supprimer une page ne supprime pas les donn\u00e9es. Lors de la suppression de la derni\u00e8re vue des donn\u00e9es, il vous sera demand\u00e9 si vous souhaitez supprimer uniquement la vue, mais pas les donn\u00e9es elles-m\u00eames ; ou si vous souhaitez supprimer \u00e0 la fois la page et la ou les tables de donn\u00e9es sous-jacentes. En savoir plus sur les donn\u00e9es de votre document dans la page des donn\u00e9es sources . Notez que les pages peuvent \u00e9galement \u00eatre renomm\u00e9es en cliquant sur le nom de la page en haut de l\u2019\u00e9cran. En utilisant l\u2019ic\u00f4ne d\u2019ouverture ( ) pr\u00e8s du haut du panneau de gauche, vous pouvez r\u00e9duire le panneau pour n\u2019afficher que les initiales de chaque page, laissant plus d\u2019espace \u00e0 l\u2019\u00e9cran pour visualiser vos donn\u00e9es. Pour ajouter une nouvelle page, utilisez le bouton \u201cAjouter Nouveau\u201d et cliquez sur \u201cAjouter Page\u201d. \u00c0 ce moment-l\u00e0, vous pourrez choisir le widget de page \u00e0 inclure dans la nouvelle page. Utilisation des \u00e9mojis dans les noms de pages et de widgets Vous pouvez ajouter n\u2019importe quel \u00e9moji \u00e0 un nom de Page ou de Widget. Le raccourci clavier pour ouvrir le clavier des \u00e9mojis est Logo Windows + . (point) sur PC ou Commande + Contr\u00f4le + Espace sur Mac. Vous pouvez \u00e9galement copier/coller une source en ligne comme Emojipedia . Lorsqu\u2019un nom de Page commence par un \u00e9moji, il remplacera l\u2019ic\u00f4ne de la page. Widgets de page # Une page contient des sections, telles que des tableaux ou des graphiques, que nous appelons \u201cwidgets de page\u201d. Chaque widget de page affiche des donn\u00e9es provenant d\u2019une table. Une page peut contenir plus d\u2019un widget de page, et vous pouvez les organiser et les lier pour cr\u00e9er des mises en page utiles. Voici les types de widgets de page pris en charge. Les caract\u00e9ristiques saillantes de chacun sont d\u00e9crites sur des pages s\u00e9par\u00e9es. Tableau : similaire \u00e0 la grille de tableur et un bon moyen de voir de nombreux enregistrements \u00e0 la fois. Fiche : affiche un seul enregistrement dans une mise en page de type formulaire que vous pouvez personnaliser. Liste de fiches : utilise les m\u00eames options de mise en page qu\u2019une fiche, affiche une liste d\u00e9roulante d\u2019enregistrements. Graphique : trace des donn\u00e9es sur un graphique avec prise en charge de plusieurs types de graphiques diff\u00e9rents. Calendrier : affiche les donn\u00e9es d\u2019\u00e9v\u00e9nements dans une vue calendrier. Personnalis\u00e9 : ins\u00e8re une page web personnalis\u00e9e, lui accordant \u00e9ventuellement l\u2019acc\u00e8s aux donn\u00e9es du document. Il existe une page sp\u00e9ciale appel\u00e9e donn\u00e9es sources qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document et r\u00e9sume les statistiques d\u2019utilisation de votre document. Acc\u00e9dez \u00e0 la page des donn\u00e9es sources en cliquant sur le lien Donn\u00e9es Sources en bas \u00e0 gauche du menu des pages. S\u00e9lecteur de widgets # Le menu ouvert par le bouton \u201cAjouter Nouveau\u201d propose les options \u201cAjouter Page\u201d et \u201cAjouter Widget \u00e0 la Page\u201d. Dans les deux cas, vous verrez le \u201cs\u00e9lecteur de widget de page\u201d o\u00f9 vous pourrez choisir le widget souhait\u00e9 : Vous pouvez s\u00e9lectionner le type de widget et la table de donn\u00e9es \u00e0 afficher (ou \u201cNouvelle Table\u201d pour cr\u00e9er une nouvelle table). L\u2019ic\u00f4ne \u201cr\u00e9sum\u00e9\u201d ( ) vous permet de r\u00e9sumer les donn\u00e9es . Lors de l\u2019ajout d\u2019un widget \u00e0 une page existante , vous verrez \u00e9galement une option \u201cS\u00e9lectionner Par\u201d, qui permet de lier ce widget \u00e0 un autre d\u00e9j\u00e0 pr\u00e9sent sur la page. Ce processus est d\u00e9crit plus en d\u00e9tail dans Lier les widgets . Une fois que vous avez ajout\u00e9 des widgets, ils peuvent \u00eatre d\u00e9plac\u00e9s et redimensionn\u00e9s, comme d\u00e9crit dans Mises en page personnalis\u00e9es . Changer le widget ou ses donn\u00e9es # Si vous souhaitez changer un widget ou les donn\u00e9es qu\u2019il affiche apr\u00e8s son ajout, vous pouvez le faire. Cliquez sur le bouton \u00e0 trois points en haut \u00e0 droite de votre widget et s\u00e9lectionnez \u201cOptions du widget\u201d. Cela ouvre le panneau de droite. Cliquez sur \u201cChanger le widget\u201d. Vous pouvez ensuite utiliser le s\u00e9lecteur de widget pour changer le widget ou les donn\u00e9es qu\u2019il affiche. Vous pouvez \u00e9galement modifier le titre du widget ou ajouter une description. Renommer les widgets # Vous pouvez renommer les widgets de plusieurs fa\u00e7ons. Nous avons vu dans la section ci-dessus que vous pouvez modifier le titre d\u2019un widget ou ajouter une description \u00e0 partir de l\u2019onglet Widget du panneau Cr\u00e9ateur. Une autre fa\u00e7on est de cliquer sur le titre du widget au-dessus d\u2019un widget. \u00c0 partir de l\u00e0, vous pouvez modifier le titre du widget, le nom de la table de donn\u00e9es sous-jacente ou ajouter une description. Par d\u00e9faut, le titre du widget est le nom de la table de donn\u00e9es. Pour remplacer cela, entrez un nouveau titre sous \u2018Titre du widget\u2019. En savoir plus sur les tables de donn\u00e9es dans la page des donn\u00e9es sources . Configurer les listes de champs # Bien que diff\u00e9rents types de widgets de page aient des apparences tr\u00e8s diff\u00e9rentes, ils repr\u00e9sentent tous une liste d\u2019enregistrements. N\u2019importe lequel des types de widgets peut \u00eatre utilis\u00e9 pour afficher les m\u00eames donn\u00e9es sous-jacentes. Dans un Tableau , chaque enregistrement est repr\u00e9sent\u00e9 par une ligne, et les colonnes repr\u00e9sentent le m\u00eame type de valeur pour chaque enregistrement. Notez que la page des donn\u00e9es sources r\u00e9pertorie toutes les tables de donn\u00e9es. Dans une Liste de fiches , chaque ligne des donn\u00e9es sous-jacentes est affich\u00e9e comme une fiche. Chaque colonne des donn\u00e9es correspond \u00e0 un champ dans cette fiche. En parlant d\u2019un widget Fiche, nous utiliserons le terme \u201cchamp\u201d , qui est conceptuellement le m\u00eame qu\u2019une \u201ccolonne\u201d dans un widget Tableau. Une Fiche est comme une Liste de fiches, mais affiche une seule ligne de donn\u00e9es \u00e0 la fois. Dans un Graphique , chaque ligne de la table de donn\u00e9es sous-jacente devient un \u00e9l\u00e9ment graphique, tel qu\u2019un point sur un graphique en ligne, une barre dans un graphique \u00e0 barres ou une tranche d\u2019un graphique circulaire. Dans ce contexte, les colonnes de notre table de donn\u00e9es sont mieux connues sous le nom de \u201cs\u00e9ries\u201d de donn\u00e9es. Cliquez sur l\u2019ic\u00f4ne d\u2019ouverture ( ) pour ouvrir le panneau de droite. En fonction du widget actuellement s\u00e9lectionn\u00e9, vous pourriez voir un onglet pour configurer une Colonne, un Champ ou une S\u00e9rie. Ces termes ne sont pas diff\u00e9rents en substance, mais des termes diff\u00e9rents ont plus de sens pour diff\u00e9rents widgets. En cliquant sur l\u2019onglet widget (surlign\u00e9 en vert dans les images ci-dessus), vous verrez des sous-onglets pour \u201cWidget\u201d, \u201cTrier & Filtrer\u201d et \u201cDonn\u00e9es\u201d. Nous nous concentrerons sur le premier : \u201cWidget\u201d. Vous verrez des options sp\u00e9cifiques au type de widget s\u00e9lectionn\u00e9, et en dessous de cela deux listes : \u201cColonnes visibles\u201d et \u201cColonnes cach\u00e9es\u201d. Les \u201cColonnes cach\u00e9es\u201d sont les colonnes disponibles dans les donn\u00e9es, mais non affich\u00e9es dans ce widget. Dans une Fiche, ces listes appara\u00eetraient comme \u201cChamps visibles\u201d / \u201cChamps cach\u00e9s\u201d. Dans un graphique, elles apparaissent comme \u201cS\u00e9ries visibles\u201d / \u201cS\u00e9ries cach\u00e9es\u201d. Ces listes vous permettent d\u2019inclure, d\u2019exclure ou de r\u00e9organiser les champs dans un widget. Lorsque vous d\u00e9placez votre souris sur les \u00e9l\u00e9ments de la liste, utilisez les ic\u00f4nes \u201c\u0153il\u201d qui apparaissent pour les afficher ou les masquer. Alternativement, vous pouvez s\u00e9lectionner plusieurs \u00e9l\u00e9ments en utilisant les cases \u00e0 cocher et les masquer ou les afficher ensemble. Cette liste ordonn\u00e9e de champs peut \u00eatre utilis\u00e9e pour personnaliser n\u2019importe lequel des types de widgets de page. Elle a une importance particuli\u00e8re dans le widget Graphique , o\u00f9 diff\u00e9rents types de graphiques et options vous obligent \u00e0 placer les s\u00e9ries dans un certain ordre dans la liste \u201cS\u00e9ries visibles\u201d pour garantir que vos donn\u00e9es sont trac\u00e9es correctement.","title":"Pages & widgets"},{"location":"page-widgets/#pages-widgets","text":"Contrairement aux tableurs traditionnels, dans Grist, vous pouvez cr\u00e9er plusieurs vues des m\u00eames donn\u00e9es et afficher plusieurs ensembles de donn\u00e9es sur une seule page. Cela vous permet de cr\u00e9er des tableaux de bord utiles et des applications personnalis\u00e9es adapt\u00e9es \u00e0 vos besoins.","title":""},{"location":"page-widgets/#pages","text":"Dans Grist, vous organisez votre document en \u201cpages\u201d. Celles-ci sont list\u00e9es dans le panneau de gauche, avec des groupes repliables. Vous pouvez r\u00e9organiser et regrouper les pages dans le panneau de gauche en les faisant glisser pour les adapter \u00e0 vos besoins. Vous pouvez renommer, supprimer ou dupliquer des pages en utilisant le menu \u00e0 trois points \u00e0 c\u00f4t\u00e9 du nom de la page dans la liste. Renommer la page ne modifie pas les noms des tables de donn\u00e9es ou les titres des widgets. Voir changer le widget ci-dessous pour apprendre comment modifier les noms des tables et des widgets. Dupliquer une page duplique les vues des donn\u00e9es et ne duplique pas les donn\u00e9es elles-m\u00eames. Supprimer une page ne supprime pas les donn\u00e9es. Lors de la suppression de la derni\u00e8re vue des donn\u00e9es, il vous sera demand\u00e9 si vous souhaitez supprimer uniquement la vue, mais pas les donn\u00e9es elles-m\u00eames ; ou si vous souhaitez supprimer \u00e0 la fois la page et la ou les tables de donn\u00e9es sous-jacentes. En savoir plus sur les donn\u00e9es de votre document dans la page des donn\u00e9es sources . Notez que les pages peuvent \u00e9galement \u00eatre renomm\u00e9es en cliquant sur le nom de la page en haut de l\u2019\u00e9cran. En utilisant l\u2019ic\u00f4ne d\u2019ouverture ( ) pr\u00e8s du haut du panneau de gauche, vous pouvez r\u00e9duire le panneau pour n\u2019afficher que les initiales de chaque page, laissant plus d\u2019espace \u00e0 l\u2019\u00e9cran pour visualiser vos donn\u00e9es. Pour ajouter une nouvelle page, utilisez le bouton \u201cAjouter Nouveau\u201d et cliquez sur \u201cAjouter Page\u201d. \u00c0 ce moment-l\u00e0, vous pourrez choisir le widget de page \u00e0 inclure dans la nouvelle page. Utilisation des \u00e9mojis dans les noms de pages et de widgets Vous pouvez ajouter n\u2019importe quel \u00e9moji \u00e0 un nom de Page ou de Widget. Le raccourci clavier pour ouvrir le clavier des \u00e9mojis est Logo Windows + . (point) sur PC ou Commande + Contr\u00f4le + Espace sur Mac. Vous pouvez \u00e9galement copier/coller une source en ligne comme Emojipedia . Lorsqu\u2019un nom de Page commence par un \u00e9moji, il remplacera l\u2019ic\u00f4ne de la page.","title":"Pages"},{"location":"page-widgets/#widgets-de-page","text":"Une page contient des sections, telles que des tableaux ou des graphiques, que nous appelons \u201cwidgets de page\u201d. Chaque widget de page affiche des donn\u00e9es provenant d\u2019une table. Une page peut contenir plus d\u2019un widget de page, et vous pouvez les organiser et les lier pour cr\u00e9er des mises en page utiles. Voici les types de widgets de page pris en charge. Les caract\u00e9ristiques saillantes de chacun sont d\u00e9crites sur des pages s\u00e9par\u00e9es. Tableau : similaire \u00e0 la grille de tableur et un bon moyen de voir de nombreux enregistrements \u00e0 la fois. Fiche : affiche un seul enregistrement dans une mise en page de type formulaire que vous pouvez personnaliser. Liste de fiches : utilise les m\u00eames options de mise en page qu\u2019une fiche, affiche une liste d\u00e9roulante d\u2019enregistrements. Graphique : trace des donn\u00e9es sur un graphique avec prise en charge de plusieurs types de graphiques diff\u00e9rents. Calendrier : affiche les donn\u00e9es d\u2019\u00e9v\u00e9nements dans une vue calendrier. Personnalis\u00e9 : ins\u00e8re une page web personnalis\u00e9e, lui accordant \u00e9ventuellement l\u2019acc\u00e8s aux donn\u00e9es du document. Il existe une page sp\u00e9ciale appel\u00e9e donn\u00e9es sources qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document et r\u00e9sume les statistiques d\u2019utilisation de votre document. Acc\u00e9dez \u00e0 la page des donn\u00e9es sources en cliquant sur le lien Donn\u00e9es Sources en bas \u00e0 gauche du menu des pages.","title":"Widgets de page"},{"location":"page-widgets/#selecteur-de-widgets","text":"Le menu ouvert par le bouton \u201cAjouter Nouveau\u201d propose les options \u201cAjouter Page\u201d et \u201cAjouter Widget \u00e0 la Page\u201d. Dans les deux cas, vous verrez le \u201cs\u00e9lecteur de widget de page\u201d o\u00f9 vous pourrez choisir le widget souhait\u00e9 : Vous pouvez s\u00e9lectionner le type de widget et la table de donn\u00e9es \u00e0 afficher (ou \u201cNouvelle Table\u201d pour cr\u00e9er une nouvelle table). L\u2019ic\u00f4ne \u201cr\u00e9sum\u00e9\u201d ( ) vous permet de r\u00e9sumer les donn\u00e9es . Lors de l\u2019ajout d\u2019un widget \u00e0 une page existante , vous verrez \u00e9galement une option \u201cS\u00e9lectionner Par\u201d, qui permet de lier ce widget \u00e0 un autre d\u00e9j\u00e0 pr\u00e9sent sur la page. Ce processus est d\u00e9crit plus en d\u00e9tail dans Lier les widgets . Une fois que vous avez ajout\u00e9 des widgets, ils peuvent \u00eatre d\u00e9plac\u00e9s et redimensionn\u00e9s, comme d\u00e9crit dans Mises en page personnalis\u00e9es .","title":"S\u00e9lecteur de widgets"},{"location":"page-widgets/#changer-le-widget-ou-ses-donnees","text":"Si vous souhaitez changer un widget ou les donn\u00e9es qu\u2019il affiche apr\u00e8s son ajout, vous pouvez le faire. Cliquez sur le bouton \u00e0 trois points en haut \u00e0 droite de votre widget et s\u00e9lectionnez \u201cOptions du widget\u201d. Cela ouvre le panneau de droite. Cliquez sur \u201cChanger le widget\u201d. Vous pouvez ensuite utiliser le s\u00e9lecteur de widget pour changer le widget ou les donn\u00e9es qu\u2019il affiche. Vous pouvez \u00e9galement modifier le titre du widget ou ajouter une description.","title":"Changer le widget ou ses donn\u00e9es"},{"location":"page-widgets/#renommer-les-widgets","text":"Vous pouvez renommer les widgets de plusieurs fa\u00e7ons. Nous avons vu dans la section ci-dessus que vous pouvez modifier le titre d\u2019un widget ou ajouter une description \u00e0 partir de l\u2019onglet Widget du panneau Cr\u00e9ateur. Une autre fa\u00e7on est de cliquer sur le titre du widget au-dessus d\u2019un widget. \u00c0 partir de l\u00e0, vous pouvez modifier le titre du widget, le nom de la table de donn\u00e9es sous-jacente ou ajouter une description. Par d\u00e9faut, le titre du widget est le nom de la table de donn\u00e9es. Pour remplacer cela, entrez un nouveau titre sous \u2018Titre du widget\u2019. En savoir plus sur les tables de donn\u00e9es dans la page des donn\u00e9es sources .","title":"Renommer les widgets"},{"location":"page-widgets/#configurer-les-listes-de-champs","text":"Bien que diff\u00e9rents types de widgets de page aient des apparences tr\u00e8s diff\u00e9rentes, ils repr\u00e9sentent tous une liste d\u2019enregistrements. N\u2019importe lequel des types de widgets peut \u00eatre utilis\u00e9 pour afficher les m\u00eames donn\u00e9es sous-jacentes. Dans un Tableau , chaque enregistrement est repr\u00e9sent\u00e9 par une ligne, et les colonnes repr\u00e9sentent le m\u00eame type de valeur pour chaque enregistrement. Notez que la page des donn\u00e9es sources r\u00e9pertorie toutes les tables de donn\u00e9es. Dans une Liste de fiches , chaque ligne des donn\u00e9es sous-jacentes est affich\u00e9e comme une fiche. Chaque colonne des donn\u00e9es correspond \u00e0 un champ dans cette fiche. En parlant d\u2019un widget Fiche, nous utiliserons le terme \u201cchamp\u201d , qui est conceptuellement le m\u00eame qu\u2019une \u201ccolonne\u201d dans un widget Tableau. Une Fiche est comme une Liste de fiches, mais affiche une seule ligne de donn\u00e9es \u00e0 la fois. Dans un Graphique , chaque ligne de la table de donn\u00e9es sous-jacente devient un \u00e9l\u00e9ment graphique, tel qu\u2019un point sur un graphique en ligne, une barre dans un graphique \u00e0 barres ou une tranche d\u2019un graphique circulaire. Dans ce contexte, les colonnes de notre table de donn\u00e9es sont mieux connues sous le nom de \u201cs\u00e9ries\u201d de donn\u00e9es. Cliquez sur l\u2019ic\u00f4ne d\u2019ouverture ( ) pour ouvrir le panneau de droite. En fonction du widget actuellement s\u00e9lectionn\u00e9, vous pourriez voir un onglet pour configurer une Colonne, un Champ ou une S\u00e9rie. Ces termes ne sont pas diff\u00e9rents en substance, mais des termes diff\u00e9rents ont plus de sens pour diff\u00e9rents widgets. En cliquant sur l\u2019onglet widget (surlign\u00e9 en vert dans les images ci-dessus), vous verrez des sous-onglets pour \u201cWidget\u201d, \u201cTrier & Filtrer\u201d et \u201cDonn\u00e9es\u201d. Nous nous concentrerons sur le premier : \u201cWidget\u201d. Vous verrez des options sp\u00e9cifiques au type de widget s\u00e9lectionn\u00e9, et en dessous de cela deux listes : \u201cColonnes visibles\u201d et \u201cColonnes cach\u00e9es\u201d. Les \u201cColonnes cach\u00e9es\u201d sont les colonnes disponibles dans les donn\u00e9es, mais non affich\u00e9es dans ce widget. Dans une Fiche, ces listes appara\u00eetraient comme \u201cChamps visibles\u201d / \u201cChamps cach\u00e9s\u201d. Dans un graphique, elles apparaissent comme \u201cS\u00e9ries visibles\u201d / \u201cS\u00e9ries cach\u00e9es\u201d. Ces listes vous permettent d\u2019inclure, d\u2019exclure ou de r\u00e9organiser les champs dans un widget. Lorsque vous d\u00e9placez votre souris sur les \u00e9l\u00e9ments de la liste, utilisez les ic\u00f4nes \u201c\u0153il\u201d qui apparaissent pour les afficher ou les masquer. Alternativement, vous pouvez s\u00e9lectionner plusieurs \u00e9l\u00e9ments en utilisant les cases \u00e0 cocher et les masquer ou les afficher ensemble. Cette liste ordonn\u00e9e de champs peut \u00eatre utilis\u00e9e pour personnaliser n\u2019importe lequel des types de widgets de page. Elle a une importance particuli\u00e8re dans le widget Graphique , o\u00f9 diff\u00e9rents types de graphiques et options vous obligent \u00e0 placer les s\u00e9ries dans un certain ordre dans la liste \u201cS\u00e9ries visibles\u201d pour garantir que vos donn\u00e9es sont trac\u00e9es correctement.","title":"Configurer les listes de champs"},{"location":"python/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Python # Les formules Grist sont \u00e9crites en Python, le langage le plus populaire pour la science des donn\u00e9es. L\u2019int\u00e9gralit\u00e9 de la biblioth\u00e8que standard de Python est disponible pour vous. Pour ceux ayant une exp\u00e9rience avec les tableurs, nous avons \u00e9galement ajout\u00e9 une suite de fonctions similaires \u00e0 Excel, avec des noms en majuscules. Voici la liste compl\u00e8te des fonctions . Les formules Python sont \u00e9valu\u00e9es dans un sandbox, sans acc\u00e8s \u00e0 Internet, et sans syst\u00e8me de fichiers persistant. Versions de Python support\u00e9es # Nous supportons actuellement deux versions de Python : Python 3 (sp\u00e9cifiquement 3.11 au moment de l\u2019\u00e9criture) Python 2 (sp\u00e9cifiquement 2.7) Les documents nouvellement cr\u00e9\u00e9s sur notre service h\u00e9berg\u00e9 utilisent Python 3 par d\u00e9faut, tandis que les documents plus anciens (cr\u00e9\u00e9s avant environ novembre 2021) utilisent Python 2 par d\u00e9faut. Pour savoir quelle version de Python un document sp\u00e9cifique utilise, regardez ses Param\u00e8tres du document . Le param\u00e8tre Engine peut \u00eatre python2 , python3 , ou vide. Un param\u00e8tre vide implique python2 . Si vous avez des droits d\u2019\u00e9dition sur un document, vous pouvez changer le param\u00e8tre Engine , et le document se rechargera alors avec toutes les formules maintenant interpr\u00e9t\u00e9es en utilisant la version de Python que vous avez sp\u00e9cifi\u00e9e. Nous recommandons la prudence en le faisant. Une formule qui fonctionne comme pr\u00e9vu dans une version de Python peut donner des erreurs dans une autre, ou (pire) donner de mauvais r\u00e9sultats. Avertissement Certaines formules peuvent \u00e9chouer ou donner de mauvais r\u00e9sultats si elles sont utilis\u00e9es avec une version de Python diff\u00e9rente de celle pour laquelle elles ont \u00e9t\u00e9 \u00e9crites. Python 2 a atteint sa fin de vie en janvier 2020, donc si vous cherchez de l\u2019aide en ligne pour Python, les r\u00e9ponses que vous trouvez sont de plus en plus susceptibles d\u2019\u00eatre pour Python 3. Si vous avez un document qui utilise Python 2, et que vous souhaitez le passer \u00e0 Python 3, nous vous recommandons de lire Tester l\u2019effet du changement de versions de Python et Diff\u00e9rences entre les versions de Python . Assurez-vous de v\u00e9rifier toutes les tables et colonnes, ainsi que les formules r\u00e9guli\u00e8res et les formules de d\u00e9clenchement. Nous serions int\u00e9ress\u00e9s d\u2019entendre votre exp\u00e9rience, et de vous aider avec tout probl\u00e8me, sur le forum communautaire . Grist auto-h\u00e9berg\u00e9 peut utiliser n\u2019importe quelle version de Python avec laquelle vous le configurez, mais gardez \u00e0 l\u2019esprit que nous testons activement uniquement les versions support\u00e9es. Tester l\u2019effet du changement de versions de Python # Grist dispose de certaines fonctionnalit\u00e9s qui peuvent vous aider \u00e0 \u00e9valuer les cons\u00e9quences du changement de la version de Python utilis\u00e9e par un document. La fonctionnalit\u00e9 Travailler sur une copie est utile pour exp\u00e9rimenter le changement de version de Python sans affecter votre document jusqu\u2019\u00e0 ce que vous soyez pr\u00eat. Il y a une option \u201cComparer avec l\u2019original\u201d qui vous permettra de visualiser quelles cellules ont chang\u00e9, le cas \u00e9ch\u00e9ant. Assurez-vous de v\u00e9rifier toutes les tables et colonnes. L\u2019 onglet Activit\u00e9 de l\u2019Historique du document (avec \u201cToutes les tables\u201d s\u00e9lectionn\u00e9) vous permet de revoir plus en d\u00e9tail ce qui a chang\u00e9. Soyez prudent pour tester toutes les formules de d\u00e9clenchement que vous pourriez avoir, car le code Python qu\u2019elles contiennent ne sera pas ex\u00e9cut\u00e9 tant que vous ne d\u00e9clencherez pas sp\u00e9cifiquement ces formules. Vous pouvez utiliser le visualiseur de code pour vous rappeler rapidement de toutes les formules dans un document, afin de pouvoir les v\u00e9rifier syst\u00e9matiquement. Diff\u00e9rences entre les versions de Python # Il existe des diff\u00e9rences importantes entre Python 2 et 3. Les formules peuvent n\u00e9cessiter d\u2019\u00eatre modifi\u00e9es pour donner les m\u00eames r\u00e9sultats lors du passage entre les versions de Python. Il existe de nombreuses ressources en ligne telles que cette feuille de triche de compatibilit\u00e9 qui peuvent aider \u00e0 comprendre quel est le probl\u00e8me lorsque vous rencontrez une diff\u00e9rence, et donner des id\u00e9es sur la fa\u00e7on de le r\u00e9soudre. Ici, nous listons des cas courants que nous avons vus dans les formules Grist. Division des nombres entiers # En Python 2, diviser des nombres entiers donne un nombre entier, donc 9 / 2 est 4 . En Python 3, c\u2019est 4.5 . Pour un tableur, c\u2019est une r\u00e9ponse beaucoup plus sens\u00e9e, mais si vous comptez sur le comportement de Python 2, nous vous sugg\u00e9rons de passer \u00e0 l\u2019op\u00e9rateur // qui est coh\u00e9rent entre les versions ( 9 // 2 est 4 pour les deux). Par exemple, le mod\u00e8le Grand Livre avait une formule Python 2 pour calculer le trimestre \u00e0 partir d\u2019une date (donc une Date de 2021-08-15 donnait un Trimestre de 2021 T3 ) comme suit : \"%s T%s\" % ($Date.year, CEILING($Date.month, 3) / 3) lors du passage \u00e0 Python 3, cela devait \u00eatre corrig\u00e9 en : \"%s T%s\" % ($Date.year, CEILING($Date.month, 3) // 3) Sinon, les trimestres devenaient fractionnels ! Certains imports sont r\u00e9organis\u00e9s # Python a une biblioth\u00e8que standard utile, mais certaines parties ont \u00e9t\u00e9 d\u00e9plac\u00e9es entre Python 2 et 3. Par exemple, plusieurs de nos mod\u00e8les ont des formules pour construire des URL, pour ouvrir des recherches personnalis\u00e9es par exemple, ou pour ouvrir un email pr\u00e9-rempli avec des valeurs calcul\u00e9es pour To , CC , et Subject . Python a des assistants pratiques pour construire des URL, mais ils ont \u00e9t\u00e9 d\u00e9plac\u00e9s un peu entre les versions de Python. Notre exemple CRM l\u00e9ger avait une formule Python 2 comme celle-ci pour lancer une recherche d\u2019emails dans Gmail : from urllib import quote_plus \"Gmail search https://mail.google.com/mail/u/0/#search/%s\" % quote_plus($Email) En Python 3, la ligne d\u2019importation devait \u00eatre chang\u00e9e en : from urllib.parse import quote_plus Changement subtil dans l\u2019arrondi # Python 3 change la fonction int\u00e9gr\u00e9e round() de l\u2019arrondi tel que beaucoup de gens l\u2019ont appris \u00e0 l\u2019\u00e9cole (o\u00f9 lors de l\u2019arrondi de .5 , vous arrondissez toujours vers le haut) \u00e0 ce qui est appel\u00e9 \u201cl\u2019arrondi bancaire\u201d (o\u00f9 vous arrondissez de .5 au nombre pair le plus proche). Cela est g\u00e9n\u00e9ralement accept\u00e9 comme une am\u00e9lioration, att\u00e9nuant un biais vers des nombres plus grands qui peut devenir significatif \u00e0 grande \u00e9chelle. Mais cela pourrait \u00eatre une surprise de voir les nombres changer ainsi dans un document \u00e9tabli. Si vous avez vraiment besoin de l\u2019arrondi de Python 2, remplacez tous les appels \u00e0 la fonction round de Python par la fonction compatible Excel ROUND . Par exemple : round($val, 2) serait remplac\u00e9 par : ROUND($val, 2) Gestion du texte Unicode # Python 2 n\u2019excelle pas dans la gestion du texte international et des emojis. Nous avons att\u00e9nu\u00e9 de nombreux probl\u00e8mes en d\u00e9finissant l\u2019encodage par d\u00e9faut \u00e0 utf8 pour tous les documents. N\u00e9anmoins, lors du passage de Python 2 \u00e0 Python 3, vous pouvez voir des changements de type ou des erreurs. Consid\u00e9rez cette formule Python 2 pour g\u00e9n\u00e9rer un hachage \u00e0 sens unique d\u2019une adresse email : import hashlib hashlib.sha256($Email).hexdigest() En Python 3, cela \u00e9choue avec TypeError: Unicode-objects must be encoded before hashing , ce qui peut \u00eatre r\u00e9solu en rempla\u00e7ant $Email par $Email.encode() : import hashlib hashlib.sha256($Email.encode()).hexdigest()","title":"Python versions"},{"location":"python/#python","text":"Les formules Grist sont \u00e9crites en Python, le langage le plus populaire pour la science des donn\u00e9es. L\u2019int\u00e9gralit\u00e9 de la biblioth\u00e8que standard de Python est disponible pour vous. Pour ceux ayant une exp\u00e9rience avec les tableurs, nous avons \u00e9galement ajout\u00e9 une suite de fonctions similaires \u00e0 Excel, avec des noms en majuscules. Voici la liste compl\u00e8te des fonctions . Les formules Python sont \u00e9valu\u00e9es dans un sandbox, sans acc\u00e8s \u00e0 Internet, et sans syst\u00e8me de fichiers persistant.","title":"Python"},{"location":"python/#versions-de-python-supportees","text":"Nous supportons actuellement deux versions de Python : Python 3 (sp\u00e9cifiquement 3.11 au moment de l\u2019\u00e9criture) Python 2 (sp\u00e9cifiquement 2.7) Les documents nouvellement cr\u00e9\u00e9s sur notre service h\u00e9berg\u00e9 utilisent Python 3 par d\u00e9faut, tandis que les documents plus anciens (cr\u00e9\u00e9s avant environ novembre 2021) utilisent Python 2 par d\u00e9faut. Pour savoir quelle version de Python un document sp\u00e9cifique utilise, regardez ses Param\u00e8tres du document . Le param\u00e8tre Engine peut \u00eatre python2 , python3 , ou vide. Un param\u00e8tre vide implique python2 . Si vous avez des droits d\u2019\u00e9dition sur un document, vous pouvez changer le param\u00e8tre Engine , et le document se rechargera alors avec toutes les formules maintenant interpr\u00e9t\u00e9es en utilisant la version de Python que vous avez sp\u00e9cifi\u00e9e. Nous recommandons la prudence en le faisant. Une formule qui fonctionne comme pr\u00e9vu dans une version de Python peut donner des erreurs dans une autre, ou (pire) donner de mauvais r\u00e9sultats. Avertissement Certaines formules peuvent \u00e9chouer ou donner de mauvais r\u00e9sultats si elles sont utilis\u00e9es avec une version de Python diff\u00e9rente de celle pour laquelle elles ont \u00e9t\u00e9 \u00e9crites. Python 2 a atteint sa fin de vie en janvier 2020, donc si vous cherchez de l\u2019aide en ligne pour Python, les r\u00e9ponses que vous trouvez sont de plus en plus susceptibles d\u2019\u00eatre pour Python 3. Si vous avez un document qui utilise Python 2, et que vous souhaitez le passer \u00e0 Python 3, nous vous recommandons de lire Tester l\u2019effet du changement de versions de Python et Diff\u00e9rences entre les versions de Python . Assurez-vous de v\u00e9rifier toutes les tables et colonnes, ainsi que les formules r\u00e9guli\u00e8res et les formules de d\u00e9clenchement. Nous serions int\u00e9ress\u00e9s d\u2019entendre votre exp\u00e9rience, et de vous aider avec tout probl\u00e8me, sur le forum communautaire . Grist auto-h\u00e9berg\u00e9 peut utiliser n\u2019importe quelle version de Python avec laquelle vous le configurez, mais gardez \u00e0 l\u2019esprit que nous testons activement uniquement les versions support\u00e9es.","title":"Versions de Python support\u00e9es"},{"location":"python/#tester-leffet-du-changement-de-versions-de-python","text":"Grist dispose de certaines fonctionnalit\u00e9s qui peuvent vous aider \u00e0 \u00e9valuer les cons\u00e9quences du changement de la version de Python utilis\u00e9e par un document. La fonctionnalit\u00e9 Travailler sur une copie est utile pour exp\u00e9rimenter le changement de version de Python sans affecter votre document jusqu\u2019\u00e0 ce que vous soyez pr\u00eat. Il y a une option \u201cComparer avec l\u2019original\u201d qui vous permettra de visualiser quelles cellules ont chang\u00e9, le cas \u00e9ch\u00e9ant. Assurez-vous de v\u00e9rifier toutes les tables et colonnes. L\u2019 onglet Activit\u00e9 de l\u2019Historique du document (avec \u201cToutes les tables\u201d s\u00e9lectionn\u00e9) vous permet de revoir plus en d\u00e9tail ce qui a chang\u00e9. Soyez prudent pour tester toutes les formules de d\u00e9clenchement que vous pourriez avoir, car le code Python qu\u2019elles contiennent ne sera pas ex\u00e9cut\u00e9 tant que vous ne d\u00e9clencherez pas sp\u00e9cifiquement ces formules. Vous pouvez utiliser le visualiseur de code pour vous rappeler rapidement de toutes les formules dans un document, afin de pouvoir les v\u00e9rifier syst\u00e9matiquement.","title":"Tester l’effet du changement de versions de Python"},{"location":"python/#differences-entre-les-versions-de-python","text":"Il existe des diff\u00e9rences importantes entre Python 2 et 3. Les formules peuvent n\u00e9cessiter d\u2019\u00eatre modifi\u00e9es pour donner les m\u00eames r\u00e9sultats lors du passage entre les versions de Python. Il existe de nombreuses ressources en ligne telles que cette feuille de triche de compatibilit\u00e9 qui peuvent aider \u00e0 comprendre quel est le probl\u00e8me lorsque vous rencontrez une diff\u00e9rence, et donner des id\u00e9es sur la fa\u00e7on de le r\u00e9soudre. Ici, nous listons des cas courants que nous avons vus dans les formules Grist.","title":"Diff\u00e9rences entre les versions de Python"},{"location":"python/#division-des-nombres-entiers","text":"En Python 2, diviser des nombres entiers donne un nombre entier, donc 9 / 2 est 4 . En Python 3, c\u2019est 4.5 . Pour un tableur, c\u2019est une r\u00e9ponse beaucoup plus sens\u00e9e, mais si vous comptez sur le comportement de Python 2, nous vous sugg\u00e9rons de passer \u00e0 l\u2019op\u00e9rateur // qui est coh\u00e9rent entre les versions ( 9 // 2 est 4 pour les deux). Par exemple, le mod\u00e8le Grand Livre avait une formule Python 2 pour calculer le trimestre \u00e0 partir d\u2019une date (donc une Date de 2021-08-15 donnait un Trimestre de 2021 T3 ) comme suit : \"%s T%s\" % ($Date.year, CEILING($Date.month, 3) / 3) lors du passage \u00e0 Python 3, cela devait \u00eatre corrig\u00e9 en : \"%s T%s\" % ($Date.year, CEILING($Date.month, 3) // 3) Sinon, les trimestres devenaient fractionnels !","title":"Division des nombres entiers"},{"location":"python/#certains-imports-sont-reorganises","text":"Python a une biblioth\u00e8que standard utile, mais certaines parties ont \u00e9t\u00e9 d\u00e9plac\u00e9es entre Python 2 et 3. Par exemple, plusieurs de nos mod\u00e8les ont des formules pour construire des URL, pour ouvrir des recherches personnalis\u00e9es par exemple, ou pour ouvrir un email pr\u00e9-rempli avec des valeurs calcul\u00e9es pour To , CC , et Subject . Python a des assistants pratiques pour construire des URL, mais ils ont \u00e9t\u00e9 d\u00e9plac\u00e9s un peu entre les versions de Python. Notre exemple CRM l\u00e9ger avait une formule Python 2 comme celle-ci pour lancer une recherche d\u2019emails dans Gmail : from urllib import quote_plus \"Gmail search https://mail.google.com/mail/u/0/#search/%s\" % quote_plus($Email) En Python 3, la ligne d\u2019importation devait \u00eatre chang\u00e9e en : from urllib.parse import quote_plus","title":"Certains imports sont r\u00e9organis\u00e9s"},{"location":"python/#changement-subtil-dans-larrondi","text":"Python 3 change la fonction int\u00e9gr\u00e9e round() de l\u2019arrondi tel que beaucoup de gens l\u2019ont appris \u00e0 l\u2019\u00e9cole (o\u00f9 lors de l\u2019arrondi de .5 , vous arrondissez toujours vers le haut) \u00e0 ce qui est appel\u00e9 \u201cl\u2019arrondi bancaire\u201d (o\u00f9 vous arrondissez de .5 au nombre pair le plus proche). Cela est g\u00e9n\u00e9ralement accept\u00e9 comme une am\u00e9lioration, att\u00e9nuant un biais vers des nombres plus grands qui peut devenir significatif \u00e0 grande \u00e9chelle. Mais cela pourrait \u00eatre une surprise de voir les nombres changer ainsi dans un document \u00e9tabli. Si vous avez vraiment besoin de l\u2019arrondi de Python 2, remplacez tous les appels \u00e0 la fonction round de Python par la fonction compatible Excel ROUND . Par exemple : round($val, 2) serait remplac\u00e9 par : ROUND($val, 2)","title":"Changement subtil dans l’arrondi"},{"location":"python/#gestion-du-texte-unicode","text":"Python 2 n\u2019excelle pas dans la gestion du texte international et des emojis. Nous avons att\u00e9nu\u00e9 de nombreux probl\u00e8mes en d\u00e9finissant l\u2019encodage par d\u00e9faut \u00e0 utf8 pour tous les documents. N\u00e9anmoins, lors du passage de Python 2 \u00e0 Python 3, vous pouvez voir des changements de type ou des erreurs. Consid\u00e9rez cette formule Python 2 pour g\u00e9n\u00e9rer un hachage \u00e0 sens unique d\u2019une adresse email : import hashlib hashlib.sha256($Email).hexdigest() En Python 3, cela \u00e9choue avec TypeError: Unicode-objects must be encoded before hashing , ce qui peut \u00eatre r\u00e9solu en rempla\u00e7ant $Email par $Email.encode() : import hashlib hashlib.sha256($Email.encode()).hexdigest()","title":"Gestion du texte Unicode"},{"location":"raw-data/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Donn\u00e9es sources # La page des donn\u00e9es sources est une page sp\u00e9ciale qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document et r\u00e9sume les statistiques d\u2019utilisation de votre document. Depuis votre document, acc\u00e9dez \u00e0 la page des donn\u00e9es sources en cliquant sur le lien \u2018Donn\u00e9es Sources\u2019 en bas \u00e0 gauche du menu des pages. Contrairement aux autres pages , la mise en page de la page des donn\u00e9es sources ne peut pas \u00eatre personnalis\u00e9e. \u00c0 partir de la liste des tables de donn\u00e9es, vous pouvez trouver le nom et l\u2019identifiant de la table de donn\u00e9es, et supprimer des donn\u00e9es. Notez que supprimer une table de donn\u00e9es depuis cette page supprimera les donn\u00e9es et les retirera de toutes les pages. Cela diff\u00e8re des autres pages o\u00f9 il est possible de supprimer une vue des donn\u00e9es sans supprimer les donn\u00e9es elles-m\u00eames. Cliquez sur une table de donn\u00e9es pour l\u2019ouvrir. Notez que dans le panneau de cr\u00e9ation, le type de vue ne peut pas \u00eatre modifi\u00e9. Renommer la vue renomme \u00e9galement la table de donn\u00e9es. \u00c9tant donn\u00e9 que les donn\u00e9es sources sont destin\u00e9es \u00e0 montrer toutes les donn\u00e9es, les colonnes ne peuvent pas \u00eatre masqu\u00e9es non plus. Cependant, les colonnes peuvent \u00eatre r\u00e9organis\u00e9es, supprim\u00e9es, cr\u00e9\u00e9es et modifi\u00e9es. Pour les cr\u00e9ateurs, cette vue peut faciliter la modification de la structure des donn\u00e9es, l\u2019ajout de formules , de mise en forme conditionnelle , etc. Dupliquer des Donn\u00e9es # Les tables peuvent \u00eatre dupliqu\u00e9es depuis la page \u2018Donn\u00e9es Sources\u2019. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite de la table que vous souhaitez dupliquer, puis s\u00e9lectionnez \u2018Dupliquer la Table\u2019 dans le menu. Par d\u00e9faut, une table dupliqu\u00e9e ne contiendra que la structure de la table, pas les donn\u00e9es. Si vous souhaitez copier toutes les donn\u00e9es en plus de la structure de la table, assurez-vous de cocher la case avant de cliquer sur \u2018Enregistrer\u2019. Si la table d\u2019origine a des permissions avanc\u00e9es, ces r\u00e8gles ne seront pas dupliqu\u00e9es. Seules les r\u00e8gles par d\u00e9faut du document s\u2019appliqueront \u00e0 la table copi\u00e9e. La table dupliqu\u00e9e est une nouvelle table qui n\u2019est pas li\u00e9e \u00e0 l\u2019originale. Cela signifie que si vous mettez \u00e0 jour les donn\u00e9es dans la copie, la table originale ne sera pas mise \u00e0 jour, et vice versa. Notez qu\u2019au lieu de dupliquer des tables, il est g\u00e9n\u00e9ralement pr\u00e9f\u00e9rable de segmenter les donn\u00e9es en ajoutant une nouvelle colonne. Prenons l\u2019exemple des d\u00e9penses. Plut\u00f4t que d\u2019avoir des tables s\u00e9par\u00e9es pour les d\u00e9penses de chaque mois, il est pr\u00e9f\u00e9rable d\u2019inclure toutes les donn\u00e9es dans une seule table et de cr\u00e9er une nouvelle colonne appel\u00e9e Mois pour segmenter les lignes par mois. En g\u00e9n\u00e9ral, si vous avez plusieurs tables avec des colonnes presque identiques, cela indique que les donn\u00e9es pourraient toutes \u00eatre dans la m\u00eame table. Cela peut faciliter l\u2019analyse des donn\u00e9es. Utilisation # Les statistiques d\u2019utilisation sont r\u00e9sum\u00e9es sous la liste des tables de donn\u00e9es. Notez que l\u2019utilisation s\u2019applique \u00e0 l\u2019ensemble du document, et non aux tables individuelles. En savoir plus sur les limites du document.","title":"Raw data"},{"location":"raw-data/#donnees-sources","text":"La page des donn\u00e9es sources est une page sp\u00e9ciale qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document et r\u00e9sume les statistiques d\u2019utilisation de votre document. Depuis votre document, acc\u00e9dez \u00e0 la page des donn\u00e9es sources en cliquant sur le lien \u2018Donn\u00e9es Sources\u2019 en bas \u00e0 gauche du menu des pages. Contrairement aux autres pages , la mise en page de la page des donn\u00e9es sources ne peut pas \u00eatre personnalis\u00e9e. \u00c0 partir de la liste des tables de donn\u00e9es, vous pouvez trouver le nom et l\u2019identifiant de la table de donn\u00e9es, et supprimer des donn\u00e9es. Notez que supprimer une table de donn\u00e9es depuis cette page supprimera les donn\u00e9es et les retirera de toutes les pages. Cela diff\u00e8re des autres pages o\u00f9 il est possible de supprimer une vue des donn\u00e9es sans supprimer les donn\u00e9es elles-m\u00eames. Cliquez sur une table de donn\u00e9es pour l\u2019ouvrir. Notez que dans le panneau de cr\u00e9ation, le type de vue ne peut pas \u00eatre modifi\u00e9. Renommer la vue renomme \u00e9galement la table de donn\u00e9es. \u00c9tant donn\u00e9 que les donn\u00e9es sources sont destin\u00e9es \u00e0 montrer toutes les donn\u00e9es, les colonnes ne peuvent pas \u00eatre masqu\u00e9es non plus. Cependant, les colonnes peuvent \u00eatre r\u00e9organis\u00e9es, supprim\u00e9es, cr\u00e9\u00e9es et modifi\u00e9es. Pour les cr\u00e9ateurs, cette vue peut faciliter la modification de la structure des donn\u00e9es, l\u2019ajout de formules , de mise en forme conditionnelle , etc.","title":"Donn\u00e9es sources"},{"location":"raw-data/#dupliquer-des-donnees","text":"Les tables peuvent \u00eatre dupliqu\u00e9es depuis la page \u2018Donn\u00e9es Sources\u2019. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite de la table que vous souhaitez dupliquer, puis s\u00e9lectionnez \u2018Dupliquer la Table\u2019 dans le menu. Par d\u00e9faut, une table dupliqu\u00e9e ne contiendra que la structure de la table, pas les donn\u00e9es. Si vous souhaitez copier toutes les donn\u00e9es en plus de la structure de la table, assurez-vous de cocher la case avant de cliquer sur \u2018Enregistrer\u2019. Si la table d\u2019origine a des permissions avanc\u00e9es, ces r\u00e8gles ne seront pas dupliqu\u00e9es. Seules les r\u00e8gles par d\u00e9faut du document s\u2019appliqueront \u00e0 la table copi\u00e9e. La table dupliqu\u00e9e est une nouvelle table qui n\u2019est pas li\u00e9e \u00e0 l\u2019originale. Cela signifie que si vous mettez \u00e0 jour les donn\u00e9es dans la copie, la table originale ne sera pas mise \u00e0 jour, et vice versa. Notez qu\u2019au lieu de dupliquer des tables, il est g\u00e9n\u00e9ralement pr\u00e9f\u00e9rable de segmenter les donn\u00e9es en ajoutant une nouvelle colonne. Prenons l\u2019exemple des d\u00e9penses. Plut\u00f4t que d\u2019avoir des tables s\u00e9par\u00e9es pour les d\u00e9penses de chaque mois, il est pr\u00e9f\u00e9rable d\u2019inclure toutes les donn\u00e9es dans une seule table et de cr\u00e9er une nouvelle colonne appel\u00e9e Mois pour segmenter les lignes par mois. En g\u00e9n\u00e9ral, si vous avez plusieurs tables avec des colonnes presque identiques, cela indique que les donn\u00e9es pourraient toutes \u00eatre dans la m\u00eame table. Cela peut faciliter l\u2019analyse des donn\u00e9es.","title":"Dupliquer des Donn\u00e9es"},{"location":"raw-data/#utilisation","text":"Les statistiques d\u2019utilisation sont r\u00e9sum\u00e9es sous la liste des tables de donn\u00e9es. Notez que l\u2019utilisation s\u2019applique \u00e0 l\u2019ensemble du document, et non aux tables individuelles. En savoir plus sur les limites du document.","title":"Utilisation"},{"location":"record-cards/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue Fiche # Les vues fiche sont un moyen rapide et facile de visualiser les d\u00e9tails d\u2019un enregistrement. Pour voir les d\u00e9tails d\u2019un enregistrement sous forme de fiche, survolez le num\u00e9ro de la ligne et cliquez sur l\u2019ic\u00f4ne de fl\u00e8che qui appara\u00eet. S\u00e9lectionnez \u2018Voir en tant que fiche\u2019 dans le menu d\u00e9roulant. Cela ouvre une vue fiche modifiable des d\u00e9tails de l\u2019enregistrement. Si votre table contient une colonne de r\u00e9f\u00e9rence ou de liste de r\u00e9f\u00e9rences , vous pouvez cliquer sur l\u2019ic\u00f4ne de lien pour ouvrir la fiche de l\u2019enregistrement li\u00e9. Une vue fiche s\u2019ouvrira pour afficher les donn\u00e9es de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9. Modifier la mise en page d\u2019une vue fiche # Vous pouvez modifier la mise en page d\u2019une vue fiche depuis la page des donn\u00e9es sources . Cette nouvelle mise en page s\u2019appliquera \u00e0 toutes les nouvelles vues utilisant la m\u00eame table comme donn\u00e9es sources. Cliquez sur l\u2019ic\u00f4ne de fiche pour ouvrir. Vous pouvez glisser-d\u00e9poser les champs pour les r\u00e9organiser, redimensionner et ajouter/supprimer des champs de la vue. En savoir plus sur la modification des mises en page des fiches . D\u00e9sactiver une vue fiche # Vous pouvez \u00e9galement d\u00e9sactiver une vue fiche depuis la page des donn\u00e9es sources . Pour d\u00e9sactiver une vue fiche pour une table particuli\u00e8re, cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom de la table, puis s\u00e9lectionnez \u2018D\u00e9sactiver la vue fiche\u2019 dans le menu d\u00e9roulant.","title":"Record cards"},{"location":"record-cards/#vue-fiche","text":"Les vues fiche sont un moyen rapide et facile de visualiser les d\u00e9tails d\u2019un enregistrement. Pour voir les d\u00e9tails d\u2019un enregistrement sous forme de fiche, survolez le num\u00e9ro de la ligne et cliquez sur l\u2019ic\u00f4ne de fl\u00e8che qui appara\u00eet. S\u00e9lectionnez \u2018Voir en tant que fiche\u2019 dans le menu d\u00e9roulant. Cela ouvre une vue fiche modifiable des d\u00e9tails de l\u2019enregistrement. Si votre table contient une colonne de r\u00e9f\u00e9rence ou de liste de r\u00e9f\u00e9rences , vous pouvez cliquer sur l\u2019ic\u00f4ne de lien pour ouvrir la fiche de l\u2019enregistrement li\u00e9. Une vue fiche s\u2019ouvrira pour afficher les donn\u00e9es de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9.","title":"Vue Fiche"},{"location":"record-cards/#modifier-la-mise-en-page-dune-vue-fiche","text":"Vous pouvez modifier la mise en page d\u2019une vue fiche depuis la page des donn\u00e9es sources . Cette nouvelle mise en page s\u2019appliquera \u00e0 toutes les nouvelles vues utilisant la m\u00eame table comme donn\u00e9es sources. Cliquez sur l\u2019ic\u00f4ne de fiche pour ouvrir. Vous pouvez glisser-d\u00e9poser les champs pour les r\u00e9organiser, redimensionner et ajouter/supprimer des champs de la vue. En savoir plus sur la modification des mises en page des fiches .","title":"Modifier la mise en page d’une vue fiche"},{"location":"record-cards/#desactiver-une-vue-fiche","text":"Vous pouvez \u00e9galement d\u00e9sactiver une vue fiche depuis la page des donn\u00e9es sources . Pour d\u00e9sactiver une vue fiche pour une table particuli\u00e8re, cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom de la table, puis s\u00e9lectionnez \u2018D\u00e9sactiver la vue fiche\u2019 dans le menu d\u00e9roulant.","title":"D\u00e9sactiver une vue fiche"},{"location":"references-lookups/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Utiliser des r\u00e9f\u00e9rences et des recherches dans les formules # Les colonnes R\u00e9f\u00e9rence et Liste de R\u00e9f\u00e9rences dans Grist permettent \u00e0 une table de cr\u00e9er une r\u00e9f\u00e9rence explicite \u00e0 une autre. Un exemple courant de cela est visible dans le mod\u00e8le Inscription en Classe . Sur la page du Personnel, nous avons une liste de membres du personnel. Sur la page des classes, nous avons une colonne de r\u00e9f\u00e9rence \u00e9tiquet\u00e9e Instructeur qui fait r\u00e9f\u00e9rence aux enregistrements de notre page du Personnel. Gardez \u00e0 l\u2019esprit qu\u2019il ne s\u2019agit pas seulement de r\u00e9f\u00e9rencer la colonne Nom Complet, mais l\u2019ensemble de l\u2019enregistrement associ\u00e9 \u00e0 l\u2019instructeur s\u00e9lectionn\u00e9. Colonnes de r\u00e9f\u00e9rence et notation par points # Utiliser une colonne de R\u00e9f\u00e9rence dans une formule peut faciliter l\u2019obtention de donn\u00e9es de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9. Pour ce faire, nous utilisons la notation par points. Elle utilise le format $A.B o\u00f9 A est le nom de la colonne de r\u00e9f\u00e9rence et B est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e dont nous voulons extraire des donn\u00e9es. Voyons cela en action sur la page Vue d\u2019Inscription du mod\u00e8le d\u2019Inscription en Classe. La notation par points est utilis\u00e9e dans la colonne Class_Times de la table INSCRIPTIONS, situ\u00e9e en bas \u00e0 droite de la page de la Vue d\u2019Inscription. Nous pouvons voir que la colonne Class_Times utilise une formule avec la notation par points. En utilisant le format $A.B d\u00e9crit ci-dessus, nous pouvons comprendre que Class est le nom de la colonne de r\u00e9f\u00e9rence et Times est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e. Retrouvons cela \u00e0 l\u2019endroit d\u2019o\u00f9 cela provient - puisque la colonne de r\u00e9f\u00e9rence est Class, nous pouvons consulter les informations de cette colonne pour d\u00e9couvrir de quelle table elle provient. La colonne Class fait r\u00e9f\u00e9rence aux donn\u00e9es de la table Classes. Par cons\u00e9quent, la colonne Class_Times extrait des donn\u00e9es de la colonne Times de la table Classes. Cha\u00eenage # Si la recherche de r\u00e9f\u00e9rence renvoie une r\u00e9f\u00e9rence, cela peut \u00eatre cha\u00een\u00e9. Peut-\u00eatre voulons-nous ajouter le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur \u00e0 la table des Inscriptions. Nous pouvons utiliser la colonne de r\u00e9f\u00e9rence Class pour extraire les informations de l\u2019instructeur de la table Classes. Comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessus, la colonne de l\u2019instructeur est elle-m\u00eame une colonne de r\u00e9f\u00e9rence. Si nous suivons le format pr\u00e9c\u00e9dent, notre notation par points serait $Class.Instructor mais la colonne de l\u2019instructeur pointe vers l\u2019ensemble de l\u2019enregistrement de l\u2019instructeur, donc nous devons lui indiquer quelle information nous voulons de cet enregistrement, cr\u00e9ant ainsi une cha\u00eene. La colonne de l\u2019instructeur fait r\u00e9f\u00e9rence \u00e0 la table du Personnel, donc nous y naviguons pour d\u00e9couvrir quelle colonne nous devons utiliser pour obtenir le num\u00e9ro de t\u00e9l\u00e9phone. La colonne qui contient le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur est T\u00e9l\u00e9phone. En rassemblant tout cela, notre notation par points pour le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur serait $Class.Instructor.Phone Que se passe-t-il si nous laissons nos formules comme $Class.Instructor ? Vous verrez un ID d\u2019enregistrement num\u00e9rique de l\u2019enregistrement dans la table du Personnel auquel la colonne de l\u2019instructeur pointe. C\u2019est ce qu\u2019une colonne de r\u00e9f\u00e9rence stocke r\u00e9ellement. Si vous changez le type de cette colonne de formule en R\u00e9f\u00e9rence, vous pourrez s\u00e9lectionner une colonne \u00e0 afficher, comme le Nom Complet. Une autre fa\u00e7on de voir le nom est de cha\u00eener la notation par points, comme nous l\u2019avons fait pour le t\u00e9l\u00e9phone : $Class.Instructor.Full_Name . lookupOne # Une autre fa\u00e7on de pointer vers un enregistrement est d\u2019utiliser la fonction Table.lookupOne(...) . lookupOne vous permet de rechercher un enregistrement par certains champs, similaire \u00e0 la fonction VLOOKUP d\u2019Excel. En fait, la version de Grist de VLOOKUP est simplement un alias pour lookupOne. lookupOne est rarement utile dans Grist, car l\u2019utilisation d\u2019une colonne de type R\u00e9f\u00e9rence est g\u00e9n\u00e9ralement la solution pr\u00e9f\u00e9r\u00e9e pour connecter des enregistrements. Cependant, dans certaines occasions, lookupOne peut \u00eatre utile. Une situation est lorsque vous avez deux ensembles de donn\u00e9es qui se chevauchent m\u00eame s\u2019ils repr\u00e9sentent quelque chose de diff\u00e9rent et proviennent peut-\u00eatre de sources diff\u00e9rentes. Un exemple de cela peut \u00eatre trouv\u00e9 dans notre document Sponsors et Participants d\u2019\u00c9v\u00e9nements (R\u00e9f\u00e9rences et Recherches) qui est une version modifi\u00e9e du mod\u00e8le Sponsors et Participants d\u2019\u00c9v\u00e9nements, disponible dans notre galerie de mod\u00e8les . Disons que vous organisez un \u00e9v\u00e9nement et que vous avez une liste de participants inscrits, ainsi que des Sponsors. Les participants inscrits sont stock\u00e9s dans la table Toutes les Inscriptions, peut-\u00eatre peupl\u00e9e via une int\u00e9gration de formulaire. Les sponsors sont list\u00e9s dans une table s\u00e9par\u00e9e, avec des champs li\u00e9s \u00e0 leur parrainage, et peut-\u00eatre maintenue par une autre \u00e9quipe. Les deux tables contiennent des adresses e-mail qui identifient les participants et les sponsors. Parfois, un sponsor peut s\u2019inscrire pour assister \u00e0 l\u2019\u00e9v\u00e9nement. Dans ce cas, vous aurez un enregistrement de Participant avec une adresse e-mail qui appara\u00eet \u00e9galement dans la table des Sponsors. C\u2019est utile \u00e0 savoir pour quelqu\u2019un qui consulte la liste des participants. Vous pouvez rechercher un enregistrement dans la table des sponsors par adresse e-mail en utilisant une formule lookupOne. La colonne Sponsor dans la table Toutes les Inscriptions fait exactement cela en utilisant cette formule : Sponsors.lookupOne(Contact_Email=$Registration_Email) Cette formule v\u00e9rifie si un Contact Email de la table des Sponsors correspond \u00e0 un Registration Email de la table Toutes les Inscriptions. Le format g\u00e9n\u00e9ral pour une formule lookupOne est : [Table_Name].lookupOne([A]=$[B]) [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table qui est recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Une telle formule renvoie une r\u00e9f\u00e9rence. Dans la capture d\u2019\u00e9cran ci-dessus, vous pouvez voir que le r\u00e9sultat de la recherche renvoie Sponsors[#] . Le num\u00e9ro qu\u2019il renvoie entre crochets est l\u2019ID d\u2019enregistrement du r\u00e9sultat de la recherche. Lorsqu\u2019il renvoie Sponsors[0] , aucune correspondance n\u2019a \u00e9t\u00e9 trouv\u00e9e. Il est souvent judicieux de cr\u00e9er une colonne pour le r\u00e9sultat de la recherche et de changer son type en R\u00e9f\u00e9rence, comme vous le voyez dans la capture d\u2019\u00e9cran ci-dessous. Ensuite, s\u2019il y a une correspondance, la colonne de r\u00e9f\u00e9rence pointera vers l\u2019ensemble de l\u2019enregistrement correspondant. Comme toute colonne de r\u00e9f\u00e9rence, vous pouvez s\u00e9lectionner quel champ de cet enregistrement afficher. Dans cet exemple, il montre le champ Soci\u00e9t\u00e9 de l\u2019enregistrement correspondant dans la table des Sponsors. lookupOne et notation par points # Parce que lookupOne cr\u00e9e une r\u00e9f\u00e9rence \u00e0 un enregistrement, nous pouvons utiliser la notation par points pour rechercher des champs suppl\u00e9mentaires dans cet enregistrement. Dans l\u2019 exemple ci-dessus, Sponsors.lookupOne(Contact_Email=$Registration_Email) v\u00e9rifie si un Contact Email de la table des Sponsors correspond \u00e0 un Registration Email de la table Toutes les Inscriptions. Que se passerait-il si nous voulions \u00e9galement rechercher le niveau de sponsor ? Nous pouvons ajouter .Sponsor_Level \u00e0 la formule lookupOne, et, si une correspondance est trouv\u00e9e, rechercher la valeur dans la colonne de niveau de sponsor pour l\u2019enregistrement correspondant. La formule compl\u00e8te serait Sponsors.lookupOne(Contact_Email=$Registration_Email).Sponsor_Level . Maintenant, nous avons le Niveau de Sponsor list\u00e9 dans la table Toutes les Inscriptions pour ces participants dont les e-mails apparaissent \u00e9galement sur la liste des sponsors. lookupOne et sort_by # Lorsque la fonction lookupOne rencontre plusieurs r\u00e9sultats correspondants, elle renvoie le premier par ID de ligne. Le param\u00e8tre optionnel sort_by peut \u00eatre utilis\u00e9 pour trier ces r\u00e9sultats par un autre champ, afin de d\u00e9terminer lequel serait renvoy\u00e9 comme premi\u00e8re correspondance. Vous pouvez \u00e9galement pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Par exemple, consid\u00e9rons cet exemple du mod\u00e8le Inscription en Classe . Ce mod\u00e8le suit l\u2019inscription \u00e0 des cours extrascolaires et autres - enregistrant des informations pour les \u00e9tudiants, les familles et le personnel. Sur cette page, nous avons une liste d\u2019\u00e9tudiants et leurs informations respectives. De plus, nous avons une page Familles qui d\u00e9crit le parent de chaque \u00e9tudiant et nous aimerions savoir quel \u00e9tudiant dans chaque famille est le plus \u00e2g\u00e9. Nous cr\u00e9erions donc une colonne \u00e9tudiant le plus \u00e2g\u00e9. Ensuite, la formule suivante examinerait la table des \u00c9tudiants, trouverait les \u00e9tudiants sp\u00e9cifiques associ\u00e9s \u00e0 chaque famille, les trierait par leur date de naissance et renverrait l\u2019\u00e9tudiant ayant la date de naissance la plus ancienne : Students.lookupOne(Family=$id, sort_by=\"Birthday\") Dans ce cas, cela renverrait : Raddon, Brockie. Alternativement, si nous voulons trouver l\u2019\u00e9tudiant le plus jeune, la formule inclurait \u201c-\u201c: Students.lookupOne(Family=$id, sort_by=\"-Birthday\u201d) Dans ce cas, cela renverrait : Raddon, Care. Comprendre les ensembles d\u2019enregistrements # Parfois, un enregistrement peut r\u00e9f\u00e9rencer plusieurs enregistrements dans une autre table. Plusieurs r\u00e9f\u00e9rences peuvent \u00eatre faites avec une Colonne de Liste de R\u00e9f\u00e9rences. Un excellent exemple de cela est visible dans le mod\u00e8le Suivi d\u2019Habitudes . Sur la page Habitudes + Objectifs, nous avons une liste d\u2019habitudes et un objectif sur la fr\u00e9quence \u00e0 laquelle nous souhaitons accomplir cette habitude. Sur la page Suivi d\u2019Habitudes, nous avons une colonne de Liste de R\u00e9f\u00e9rences \u00e9tiquet\u00e9e Habitudes Compl\u00e9t\u00e9es qui fait r\u00e9f\u00e9rence aux enregistrements de notre page Habitudes + Objectifs. La seule diff\u00e9rence entre une colonne de R\u00e9f\u00e9rence et une colonne de Liste de R\u00e9f\u00e9rences est la capacit\u00e9 de s\u00e9lectionner plusieurs r\u00e9f\u00e9rences. Cela cr\u00e9e un ensemble d\u2019enregistrements qui peuvent \u00eatre utilis\u00e9s dans des formules. Listes de r\u00e9f\u00e9rences et notation par points # Tout comme avec les r\u00e9f\u00e9rences, vous pouvez utiliser la Notation par Points avec les listes de r\u00e9f\u00e9rences. En s\u2019appuyant sur notre pr\u00e9c\u00e9dent exemple de participants \u00e0 une conf\u00e9rence, supposons que nous avons une liste de personnes inscrites \u00e0 un \u00e9v\u00e9nement et que nous voulons trouver le solde pour chaque inscrit. Pour ce faire, nous pouvons utiliser la notation par points. Ici, $Registrants est une liste de r\u00e9f\u00e9rences. Notre Great Outdoors Expo a 4 inscrits. Nous pouvons voir la liste des inscrits dans la colonne Registrants. Cette liste est une r\u00e9f\u00e9rence \u00e0 la colonne Nom de la table Toutes les Inscriptions. Avec une liste de r\u00e9f\u00e9rences, la notation par points renvoie une liste de tous les champs s\u00e9lectionn\u00e9s ; $Registrants.Balance est une liste des Soldes pour chaque participant dans la liste de $Registrants . Cela suit le format $[A].[B] o\u00f9 [A] est le nom de la colonne de Liste de R\u00e9f\u00e9rences et [B] est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e dont vous souhaitez extraire des donn\u00e9es. Nous apprendrons comment trouver la somme de ces soldes dans Travailler avec des ensembles d\u2019enregistrements . lookupRecords # Vous pouvez \u00e9galement obtenir une liste de r\u00e9f\u00e9rences en utilisant lookupRecords . La formule pour lookupRecords suit ce format : [Table_Name].lookupRecords([A]=$[B]) [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table qui est recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Supposons que nous souhaitions obtenir une liste des \u00e9v\u00e9nements auxquels chaque personne de notre Liste d\u2019E-mails a assist\u00e9. Nous pouvons utiliser lookupRecords pour cela. Tout d\u2019abord, nous devons rechercher des enregistrements o\u00f9 l\u2019e-mail figurant dans la table Toutes les Inscriptions correspond \u00e0 un e-mail de cette liste. Ensuite, trouver l\u2019\u00e9v\u00e9nement associ\u00e9 \u00e0 chacun de ces enregistrements. En suivant le format ci-dessus, notre formule initiale est : All_Registrations.lookupRecords(Registration_Email=$Email) All_Registrations.lookupRecords(Registration_Email=$Email) renvoie une liste d\u2019ID d\u2019enregistrement pour chaque enregistrement dans la table Toutes les Inscriptions o\u00f9 l\u2019Email d\u2019Inscription correspond \u00e0 l\u2019Email dans cette ligne de la table Liste d\u2019E-mails. Ensuite, nous devons trouver l\u2019\u00c9v\u00e9nement associ\u00e9 \u00e0 chacun de ces enregistrements. Pour ce faire, nous pouvons utiliser la notation par points. All_Registrations.lookupRecords(Registration_Email=$Email).Event renverra la valeur de la colonne \u00c9v\u00e9nement pour chaque enregistrement trouv\u00e9. Nous avons vu des r\u00e9sultats similaires en utilisant la fonction lookupOne . Il est utile de changer le type de colonne en Liste de R\u00e9f\u00e9rences, comme vous le voyez dans la capture d\u2019\u00e9cran ci-dessous. Ensuite, s\u2019il y a une correspondance, la colonne de liste de r\u00e9f\u00e9rences pointera vers l\u2019ensemble de l\u2019enregistrement pour chaque correspondance. Comme toute colonne de liste de r\u00e9f\u00e9rences, vous pouvez s\u00e9lectionner quel champ vous souhaitez afficher pour les enregistrements correspondants. Dans cet exemple, il montre le champ \u00c9v\u00e9nement de la table des \u00c9v\u00e9nements pour chaque enregistrement correspondant dans la table des Participants. Recherches invers\u00e9es # lookupRecords fonctionne un peu diff\u00e9remment si une r\u00e9f\u00e9rence existe entre deux tables. Avec une recherche invers\u00e9e, nous pouvons utiliser l\u2019ID d\u2019enregistrement pour trouver un enregistrement. Chaque ligne a un ID num\u00e9rique (disponible en tant que $id dans les formules) qui est unique dans cette table. Vous pouvez r\u00e9v\u00e9ler l\u2019ID en ajoutant une colonne de formule o\u00f9 la formule est $id Jetons un \u0153il \u00e0 la colonne des Inscrits de la table \u00c9v\u00e9nements . La formule utilis\u00e9e ici est All_Registrations.lookupRecords(Event=$id) . Nous utilisons l\u2019ID pour trouver une correspondance car dans la table Toutes les Inscriptions, la colonne \u00c9v\u00e9nement est une colonne de r\u00e9f\u00e9rence, ce qui signifie que sa valeur est l\u2019ID d\u2019un enregistrement. Parce que All_Registrations.Event est une colonne de r\u00e9f\u00e9rence pointant vers un enregistrement d\u2019\u00c9v\u00e9nement dans la table \u00c9v\u00e9nements, nous pouvons faire correspondre l\u2019ID stock\u00e9 dans la colonne de r\u00e9f\u00e9rence avec les ID des enregistrements dans la table \u00c9v\u00e9nements. C\u2019est pourquoi l\u2019argument dans la formule est Event=$id . Nous utilisons la r\u00e9f\u00e9rence existante, juste \u00e0 l\u2019envers - d\u2019o\u00f9 le nom, Recherche Invers\u00e9e. Si vous souhaitez une vid\u00e9o explicative d\u2019une recherche invers\u00e9e, nous avons un exemple dans notre Webinaire Construire avec Grist - Formules d\u2019Initialisation vs Formules . Travailler avec des ensembles d\u2019enregistrements # lookupRecords peut \u00e9galement \u00eatre utilis\u00e9 dans d\u2019autres formules. SUM() peut \u00eatre utile pour trouver la somme de tous les nombres dans une liste d\u2019enregistrements. Une fois que vous avez trouv\u00e9 votre liste d\u2019enregistrements en utilisant la fonction lookupRecords et la notation par points, vous pouvez utiliser SUM() pour additionner toutes les valeurs renvoy\u00e9es, comme vous le voyez dans cette formule : SUM(Table.lookupRecords(Column_A=$Column_B).Column_C) Vous pouvez \u00e9galement le faire sur une liste de r\u00e9f\u00e9rences car une liste de r\u00e9f\u00e9rences est la m\u00eame chose, une liste d\u2019enregistrements. SUM($RefList.Column) Dans la section Listes de r\u00e9f\u00e9rences et notation par points , nous avons utilis\u00e9 la colonne Registrants et la notation par points pour trouver le solde pour chaque personne de notre liste d\u2019Inscrits. Nous pouvons utiliser SUM() avec notre formule pr\u00e9c\u00e9dente pour trouver le solde total. SUM($Registrants.Balance) Nous pouvons \u00e9galement utiliser lookupRecords pour obtenir la liste des r\u00e9f\u00e9rences, plut\u00f4t que d\u2019utiliser une colonne de liste de r\u00e9f\u00e9rences, puis trouver la somme du solde pour tous les inscrits. Cette m\u00e9thode est utilis\u00e9e dans la colonne des Revenus des Billets de la table \u00c9v\u00e9nements en utilisant la formule suivante : SUM(All_Registrations.lookupRecords(Event=$id).Balance) All_Registrations.lookupRecords(Event=$id).Balance trouve tous les enregistrements dans la table Toutes les Inscriptions o\u00f9 la colonne \u00c9v\u00e9nement correspond \u00e0 l\u2019ID de la ligne dans cette table, \u00c9v\u00e9nements. En utilisant la notation par points, nous trouvons le Solde pour chacun des enregistrements trouv\u00e9s. Ensuite, SUM() additionne les soldes de tous les enregistrements trouv\u00e9s. Vous pouvez \u00e9galement it\u00e9rer \u00e0 travers une Liste de R\u00e9f\u00e9rences en utilisant une boucle for en Python. Un exemple de cela peut \u00eatre vu dans la colonne Solde (\u2018for\u2019 loop) dans la table \u00c9v\u00e9nements. Lors de l\u2019it\u00e9ration, chaque \u00e9l\u00e9ment est une R\u00e9f\u00e9rence, donc la notation par points peut \u00e9galement \u00eatre utilis\u00e9e ici. Pour trouver la somme du solde pour tous les inscrits, nous utilisons la formule suivante : SUM(person.Balance for person in $Registrants) Cela fait la m\u00eame chose que notre formule lookupRecords que nous avons vue ci-dessus. $Registrants est notre liste de r\u00e9f\u00e9rences. Pour chaque enregistrement ( person ) dans notre liste d\u2019Inscrits, nous trouvons le Solde. Ensuite, nous additionnons tous les soldes ensemble. Dans cette formule, person est une variable qui repr\u00e9sente chaque \u00e9l\u00e9ment de notre liste et pourrait \u00eatre remplac\u00e9e par n\u2019importe quelle autre variable. Si vous souhaitez en savoir plus sur Structures de Donn\u00e9es et Compr\u00e9hension de Liste en Python 3, Python.org est une excellente ressource. len() peut \u00eatre utile pour obtenir le nombre d\u2019\u00e9l\u00e9ments dans une liste. Une fois que vous avez trouv\u00e9 votre liste d\u2019enregistrements en utilisant la fonction lookupRecords, vous pouvez utiliser len() pour compter le nombre d\u2019enregistrements renvoy\u00e9s, comme vous le voyez dans cette formule : len(Table.lookupRecords(Column_A=$Column_B)) Vous pouvez \u00e9galement le faire sur une liste de r\u00e9f\u00e9rences. len($RefList) Nous voulons voir combien d\u2019\u00e9v\u00e9nements nos Sponsors ont assist\u00e9. Nous pouvons utiliser lookupRecords pour cela. La formule suivante est utilis\u00e9e dans la colonne \u00c9v\u00e9nements Assist\u00e9s de la table Sponsors . len(All_Registrations.lookupRecords(Sponsor=$id)) D\u00e9composons les deux parties de cette formule, en travaillant de l\u2019int\u00e9rieur vers l\u2019ext\u00e9rieur. All_Registrations.lookupRecords(Sponsor=$id) recherche des correspondances o\u00f9 l\u2019enregistrement dans la colonne Sponsor de la table Toutes les Inscriptions a le m\u00eame ID que l\u2019enregistrement dans cette ligne de la table Sponsors. Tous les enregistrements dans la table Toutes les Inscriptions qui correspondent sont ajout\u00e9s \u00e0 une liste d\u2019enregistrements. Essayez d\u2019\u00e9crire la formule sans len() pour voir ce que Grist renvoie. Cela devrait ressembler \u00e0 quelque chose comme \u00e7a. C\u2019est une liste d\u2019enregistrements. len() compte combien d\u2019enregistrements se trouvent dans cette liste. Nous pouvons \u00e9galement inclure plusieurs arguments dans une formule lookupRecords. Un exemple de cela peut \u00eatre trouv\u00e9 dans la colonne Compte de la table Classes du mod\u00e8le Inscription en Classe . Cette colonne nous montre combien d\u2019\u00e9tudiants sont inscrits dans chaque classe. La formule utilis\u00e9e ici est : len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) Cette recherche utilise deux champs. Elle recherchera des enregistrements dans la table des Inscriptions o\u00f9 le Statut est \u201cConfirm\u00e9\u201d et la colonne Class correspond \u00e0 l\u2019ID de la ligne dans cette table. Comme la colonne Class fait r\u00e9f\u00e9rence \u00e0 la table Classes, nous utilisons l\u2019ID d\u2019enregistrement $id dans la recherche. Enfin, len() compte les \u00e9l\u00e9ments dans la liste renvoy\u00e9e par Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\") . La moyenne, le minimum et le maximum sont quelques-unes des autres fonctions qui peuvent \u00eatre utilis\u00e9es avec les formules lookupRecords. Consultez toutes les fonctions disponibles sur notre page R\u00e9f\u00e9rence des fonctions .","title":"References and lookups"},{"location":"references-lookups/#utiliser-des-references-et-des-recherches-dans-les-formules","text":"Les colonnes R\u00e9f\u00e9rence et Liste de R\u00e9f\u00e9rences dans Grist permettent \u00e0 une table de cr\u00e9er une r\u00e9f\u00e9rence explicite \u00e0 une autre. Un exemple courant de cela est visible dans le mod\u00e8le Inscription en Classe . Sur la page du Personnel, nous avons une liste de membres du personnel. Sur la page des classes, nous avons une colonne de r\u00e9f\u00e9rence \u00e9tiquet\u00e9e Instructeur qui fait r\u00e9f\u00e9rence aux enregistrements de notre page du Personnel. Gardez \u00e0 l\u2019esprit qu\u2019il ne s\u2019agit pas seulement de r\u00e9f\u00e9rencer la colonne Nom Complet, mais l\u2019ensemble de l\u2019enregistrement associ\u00e9 \u00e0 l\u2019instructeur s\u00e9lectionn\u00e9.","title":"Utiliser des r\u00e9f\u00e9rences et des recherches dans les formules"},{"location":"references-lookups/#colonnes-de-reference-et-notation-par-points","text":"Utiliser une colonne de R\u00e9f\u00e9rence dans une formule peut faciliter l\u2019obtention de donn\u00e9es de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9. Pour ce faire, nous utilisons la notation par points. Elle utilise le format $A.B o\u00f9 A est le nom de la colonne de r\u00e9f\u00e9rence et B est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e dont nous voulons extraire des donn\u00e9es. Voyons cela en action sur la page Vue d\u2019Inscription du mod\u00e8le d\u2019Inscription en Classe. La notation par points est utilis\u00e9e dans la colonne Class_Times de la table INSCRIPTIONS, situ\u00e9e en bas \u00e0 droite de la page de la Vue d\u2019Inscription. Nous pouvons voir que la colonne Class_Times utilise une formule avec la notation par points. En utilisant le format $A.B d\u00e9crit ci-dessus, nous pouvons comprendre que Class est le nom de la colonne de r\u00e9f\u00e9rence et Times est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e. Retrouvons cela \u00e0 l\u2019endroit d\u2019o\u00f9 cela provient - puisque la colonne de r\u00e9f\u00e9rence est Class, nous pouvons consulter les informations de cette colonne pour d\u00e9couvrir de quelle table elle provient. La colonne Class fait r\u00e9f\u00e9rence aux donn\u00e9es de la table Classes. Par cons\u00e9quent, la colonne Class_Times extrait des donn\u00e9es de la colonne Times de la table Classes.","title":"Colonnes de r\u00e9f\u00e9rence et notation par points"},{"location":"references-lookups/#chainage","text":"Si la recherche de r\u00e9f\u00e9rence renvoie une r\u00e9f\u00e9rence, cela peut \u00eatre cha\u00een\u00e9. Peut-\u00eatre voulons-nous ajouter le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur \u00e0 la table des Inscriptions. Nous pouvons utiliser la colonne de r\u00e9f\u00e9rence Class pour extraire les informations de l\u2019instructeur de la table Classes. Comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessus, la colonne de l\u2019instructeur est elle-m\u00eame une colonne de r\u00e9f\u00e9rence. Si nous suivons le format pr\u00e9c\u00e9dent, notre notation par points serait $Class.Instructor mais la colonne de l\u2019instructeur pointe vers l\u2019ensemble de l\u2019enregistrement de l\u2019instructeur, donc nous devons lui indiquer quelle information nous voulons de cet enregistrement, cr\u00e9ant ainsi une cha\u00eene. La colonne de l\u2019instructeur fait r\u00e9f\u00e9rence \u00e0 la table du Personnel, donc nous y naviguons pour d\u00e9couvrir quelle colonne nous devons utiliser pour obtenir le num\u00e9ro de t\u00e9l\u00e9phone. La colonne qui contient le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur est T\u00e9l\u00e9phone. En rassemblant tout cela, notre notation par points pour le num\u00e9ro de t\u00e9l\u00e9phone de l\u2019instructeur serait $Class.Instructor.Phone Que se passe-t-il si nous laissons nos formules comme $Class.Instructor ? Vous verrez un ID d\u2019enregistrement num\u00e9rique de l\u2019enregistrement dans la table du Personnel auquel la colonne de l\u2019instructeur pointe. C\u2019est ce qu\u2019une colonne de r\u00e9f\u00e9rence stocke r\u00e9ellement. Si vous changez le type de cette colonne de formule en R\u00e9f\u00e9rence, vous pourrez s\u00e9lectionner une colonne \u00e0 afficher, comme le Nom Complet. Une autre fa\u00e7on de voir le nom est de cha\u00eener la notation par points, comme nous l\u2019avons fait pour le t\u00e9l\u00e9phone : $Class.Instructor.Full_Name .","title":"Cha\u00eenage"},{"location":"references-lookups/#lookupone","text":"Une autre fa\u00e7on de pointer vers un enregistrement est d\u2019utiliser la fonction Table.lookupOne(...) . lookupOne vous permet de rechercher un enregistrement par certains champs, similaire \u00e0 la fonction VLOOKUP d\u2019Excel. En fait, la version de Grist de VLOOKUP est simplement un alias pour lookupOne. lookupOne est rarement utile dans Grist, car l\u2019utilisation d\u2019une colonne de type R\u00e9f\u00e9rence est g\u00e9n\u00e9ralement la solution pr\u00e9f\u00e9r\u00e9e pour connecter des enregistrements. Cependant, dans certaines occasions, lookupOne peut \u00eatre utile. Une situation est lorsque vous avez deux ensembles de donn\u00e9es qui se chevauchent m\u00eame s\u2019ils repr\u00e9sentent quelque chose de diff\u00e9rent et proviennent peut-\u00eatre de sources diff\u00e9rentes. Un exemple de cela peut \u00eatre trouv\u00e9 dans notre document Sponsors et Participants d\u2019\u00c9v\u00e9nements (R\u00e9f\u00e9rences et Recherches) qui est une version modifi\u00e9e du mod\u00e8le Sponsors et Participants d\u2019\u00c9v\u00e9nements, disponible dans notre galerie de mod\u00e8les . Disons que vous organisez un \u00e9v\u00e9nement et que vous avez une liste de participants inscrits, ainsi que des Sponsors. Les participants inscrits sont stock\u00e9s dans la table Toutes les Inscriptions, peut-\u00eatre peupl\u00e9e via une int\u00e9gration de formulaire. Les sponsors sont list\u00e9s dans une table s\u00e9par\u00e9e, avec des champs li\u00e9s \u00e0 leur parrainage, et peut-\u00eatre maintenue par une autre \u00e9quipe. Les deux tables contiennent des adresses e-mail qui identifient les participants et les sponsors. Parfois, un sponsor peut s\u2019inscrire pour assister \u00e0 l\u2019\u00e9v\u00e9nement. Dans ce cas, vous aurez un enregistrement de Participant avec une adresse e-mail qui appara\u00eet \u00e9galement dans la table des Sponsors. C\u2019est utile \u00e0 savoir pour quelqu\u2019un qui consulte la liste des participants. Vous pouvez rechercher un enregistrement dans la table des sponsors par adresse e-mail en utilisant une formule lookupOne. La colonne Sponsor dans la table Toutes les Inscriptions fait exactement cela en utilisant cette formule : Sponsors.lookupOne(Contact_Email=$Registration_Email) Cette formule v\u00e9rifie si un Contact Email de la table des Sponsors correspond \u00e0 un Registration Email de la table Toutes les Inscriptions. Le format g\u00e9n\u00e9ral pour une formule lookupOne est : [Table_Name].lookupOne([A]=$[B]) [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table qui est recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Une telle formule renvoie une r\u00e9f\u00e9rence. Dans la capture d\u2019\u00e9cran ci-dessus, vous pouvez voir que le r\u00e9sultat de la recherche renvoie Sponsors[#] . Le num\u00e9ro qu\u2019il renvoie entre crochets est l\u2019ID d\u2019enregistrement du r\u00e9sultat de la recherche. Lorsqu\u2019il renvoie Sponsors[0] , aucune correspondance n\u2019a \u00e9t\u00e9 trouv\u00e9e. Il est souvent judicieux de cr\u00e9er une colonne pour le r\u00e9sultat de la recherche et de changer son type en R\u00e9f\u00e9rence, comme vous le voyez dans la capture d\u2019\u00e9cran ci-dessous. Ensuite, s\u2019il y a une correspondance, la colonne de r\u00e9f\u00e9rence pointera vers l\u2019ensemble de l\u2019enregistrement correspondant. Comme toute colonne de r\u00e9f\u00e9rence, vous pouvez s\u00e9lectionner quel champ de cet enregistrement afficher. Dans cet exemple, il montre le champ Soci\u00e9t\u00e9 de l\u2019enregistrement correspondant dans la table des Sponsors.","title":"lookupOne"},{"location":"references-lookups/#lookupone-et-notation-par-points","text":"Parce que lookupOne cr\u00e9e une r\u00e9f\u00e9rence \u00e0 un enregistrement, nous pouvons utiliser la notation par points pour rechercher des champs suppl\u00e9mentaires dans cet enregistrement. Dans l\u2019 exemple ci-dessus, Sponsors.lookupOne(Contact_Email=$Registration_Email) v\u00e9rifie si un Contact Email de la table des Sponsors correspond \u00e0 un Registration Email de la table Toutes les Inscriptions. Que se passerait-il si nous voulions \u00e9galement rechercher le niveau de sponsor ? Nous pouvons ajouter .Sponsor_Level \u00e0 la formule lookupOne, et, si une correspondance est trouv\u00e9e, rechercher la valeur dans la colonne de niveau de sponsor pour l\u2019enregistrement correspondant. La formule compl\u00e8te serait Sponsors.lookupOne(Contact_Email=$Registration_Email).Sponsor_Level . Maintenant, nous avons le Niveau de Sponsor list\u00e9 dans la table Toutes les Inscriptions pour ces participants dont les e-mails apparaissent \u00e9galement sur la liste des sponsors.","title":"lookupOne et notation par points"},{"location":"references-lookups/#lookupone-et-sort_by","text":"Lorsque la fonction lookupOne rencontre plusieurs r\u00e9sultats correspondants, elle renvoie le premier par ID de ligne. Le param\u00e8tre optionnel sort_by peut \u00eatre utilis\u00e9 pour trier ces r\u00e9sultats par un autre champ, afin de d\u00e9terminer lequel serait renvoy\u00e9 comme premi\u00e8re correspondance. Vous pouvez \u00e9galement pr\u00e9fixer l\u2019ID de colonne avec \u201c-\u201d pour inverser l\u2019ordre. Par exemple, consid\u00e9rons cet exemple du mod\u00e8le Inscription en Classe . Ce mod\u00e8le suit l\u2019inscription \u00e0 des cours extrascolaires et autres - enregistrant des informations pour les \u00e9tudiants, les familles et le personnel. Sur cette page, nous avons une liste d\u2019\u00e9tudiants et leurs informations respectives. De plus, nous avons une page Familles qui d\u00e9crit le parent de chaque \u00e9tudiant et nous aimerions savoir quel \u00e9tudiant dans chaque famille est le plus \u00e2g\u00e9. Nous cr\u00e9erions donc une colonne \u00e9tudiant le plus \u00e2g\u00e9. Ensuite, la formule suivante examinerait la table des \u00c9tudiants, trouverait les \u00e9tudiants sp\u00e9cifiques associ\u00e9s \u00e0 chaque famille, les trierait par leur date de naissance et renverrait l\u2019\u00e9tudiant ayant la date de naissance la plus ancienne : Students.lookupOne(Family=$id, sort_by=\"Birthday\") Dans ce cas, cela renverrait : Raddon, Brockie. Alternativement, si nous voulons trouver l\u2019\u00e9tudiant le plus jeune, la formule inclurait \u201c-\u201c: Students.lookupOne(Family=$id, sort_by=\"-Birthday\u201d) Dans ce cas, cela renverrait : Raddon, Care.","title":"lookupOne et sort_by"},{"location":"references-lookups/#comprendre-les-ensembles-denregistrements","text":"Parfois, un enregistrement peut r\u00e9f\u00e9rencer plusieurs enregistrements dans une autre table. Plusieurs r\u00e9f\u00e9rences peuvent \u00eatre faites avec une Colonne de Liste de R\u00e9f\u00e9rences. Un excellent exemple de cela est visible dans le mod\u00e8le Suivi d\u2019Habitudes . Sur la page Habitudes + Objectifs, nous avons une liste d\u2019habitudes et un objectif sur la fr\u00e9quence \u00e0 laquelle nous souhaitons accomplir cette habitude. Sur la page Suivi d\u2019Habitudes, nous avons une colonne de Liste de R\u00e9f\u00e9rences \u00e9tiquet\u00e9e Habitudes Compl\u00e9t\u00e9es qui fait r\u00e9f\u00e9rence aux enregistrements de notre page Habitudes + Objectifs. La seule diff\u00e9rence entre une colonne de R\u00e9f\u00e9rence et une colonne de Liste de R\u00e9f\u00e9rences est la capacit\u00e9 de s\u00e9lectionner plusieurs r\u00e9f\u00e9rences. Cela cr\u00e9e un ensemble d\u2019enregistrements qui peuvent \u00eatre utilis\u00e9s dans des formules.","title":"Comprendre les ensembles d’enregistrements"},{"location":"references-lookups/#listes-de-references-et-notation-par-points","text":"Tout comme avec les r\u00e9f\u00e9rences, vous pouvez utiliser la Notation par Points avec les listes de r\u00e9f\u00e9rences. En s\u2019appuyant sur notre pr\u00e9c\u00e9dent exemple de participants \u00e0 une conf\u00e9rence, supposons que nous avons une liste de personnes inscrites \u00e0 un \u00e9v\u00e9nement et que nous voulons trouver le solde pour chaque inscrit. Pour ce faire, nous pouvons utiliser la notation par points. Ici, $Registrants est une liste de r\u00e9f\u00e9rences. Notre Great Outdoors Expo a 4 inscrits. Nous pouvons voir la liste des inscrits dans la colonne Registrants. Cette liste est une r\u00e9f\u00e9rence \u00e0 la colonne Nom de la table Toutes les Inscriptions. Avec une liste de r\u00e9f\u00e9rences, la notation par points renvoie une liste de tous les champs s\u00e9lectionn\u00e9s ; $Registrants.Balance est une liste des Soldes pour chaque participant dans la liste de $Registrants . Cela suit le format $[A].[B] o\u00f9 [A] est le nom de la colonne de Liste de R\u00e9f\u00e9rences et [B] est le nom de la colonne dans la table r\u00e9f\u00e9renc\u00e9e dont vous souhaitez extraire des donn\u00e9es. Nous apprendrons comment trouver la somme de ces soldes dans Travailler avec des ensembles d\u2019enregistrements .","title":"Listes de r\u00e9f\u00e9rences et notation par points"},{"location":"references-lookups/#lookuprecords","text":"Vous pouvez \u00e9galement obtenir une liste de r\u00e9f\u00e9rences en utilisant lookupRecords . La formule pour lookupRecords suit ce format : [Table_Name].lookupRecords([A]=$[B]) [Table_Name] est le nom de la table dans laquelle vous souhaitez rechercher des donn\u00e9es. [A] est la colonne dans la table qui est recherch\u00e9e (nomm\u00e9e au d\u00e9but de la formule) et [B] est la colonne dans la table actuelle / la table dans laquelle vous entrez la formule. Supposons que nous souhaitions obtenir une liste des \u00e9v\u00e9nements auxquels chaque personne de notre Liste d\u2019E-mails a assist\u00e9. Nous pouvons utiliser lookupRecords pour cela. Tout d\u2019abord, nous devons rechercher des enregistrements o\u00f9 l\u2019e-mail figurant dans la table Toutes les Inscriptions correspond \u00e0 un e-mail de cette liste. Ensuite, trouver l\u2019\u00e9v\u00e9nement associ\u00e9 \u00e0 chacun de ces enregistrements. En suivant le format ci-dessus, notre formule initiale est : All_Registrations.lookupRecords(Registration_Email=$Email) All_Registrations.lookupRecords(Registration_Email=$Email) renvoie une liste d\u2019ID d\u2019enregistrement pour chaque enregistrement dans la table Toutes les Inscriptions o\u00f9 l\u2019Email d\u2019Inscription correspond \u00e0 l\u2019Email dans cette ligne de la table Liste d\u2019E-mails. Ensuite, nous devons trouver l\u2019\u00c9v\u00e9nement associ\u00e9 \u00e0 chacun de ces enregistrements. Pour ce faire, nous pouvons utiliser la notation par points. All_Registrations.lookupRecords(Registration_Email=$Email).Event renverra la valeur de la colonne \u00c9v\u00e9nement pour chaque enregistrement trouv\u00e9. Nous avons vu des r\u00e9sultats similaires en utilisant la fonction lookupOne . Il est utile de changer le type de colonne en Liste de R\u00e9f\u00e9rences, comme vous le voyez dans la capture d\u2019\u00e9cran ci-dessous. Ensuite, s\u2019il y a une correspondance, la colonne de liste de r\u00e9f\u00e9rences pointera vers l\u2019ensemble de l\u2019enregistrement pour chaque correspondance. Comme toute colonne de liste de r\u00e9f\u00e9rences, vous pouvez s\u00e9lectionner quel champ vous souhaitez afficher pour les enregistrements correspondants. Dans cet exemple, il montre le champ \u00c9v\u00e9nement de la table des \u00c9v\u00e9nements pour chaque enregistrement correspondant dans la table des Participants.","title":"lookupRecords"},{"location":"references-lookups/#recherches-inversees","text":"lookupRecords fonctionne un peu diff\u00e9remment si une r\u00e9f\u00e9rence existe entre deux tables. Avec une recherche invers\u00e9e, nous pouvons utiliser l\u2019ID d\u2019enregistrement pour trouver un enregistrement. Chaque ligne a un ID num\u00e9rique (disponible en tant que $id dans les formules) qui est unique dans cette table. Vous pouvez r\u00e9v\u00e9ler l\u2019ID en ajoutant une colonne de formule o\u00f9 la formule est $id Jetons un \u0153il \u00e0 la colonne des Inscrits de la table \u00c9v\u00e9nements . La formule utilis\u00e9e ici est All_Registrations.lookupRecords(Event=$id) . Nous utilisons l\u2019ID pour trouver une correspondance car dans la table Toutes les Inscriptions, la colonne \u00c9v\u00e9nement est une colonne de r\u00e9f\u00e9rence, ce qui signifie que sa valeur est l\u2019ID d\u2019un enregistrement. Parce que All_Registrations.Event est une colonne de r\u00e9f\u00e9rence pointant vers un enregistrement d\u2019\u00c9v\u00e9nement dans la table \u00c9v\u00e9nements, nous pouvons faire correspondre l\u2019ID stock\u00e9 dans la colonne de r\u00e9f\u00e9rence avec les ID des enregistrements dans la table \u00c9v\u00e9nements. C\u2019est pourquoi l\u2019argument dans la formule est Event=$id . Nous utilisons la r\u00e9f\u00e9rence existante, juste \u00e0 l\u2019envers - d\u2019o\u00f9 le nom, Recherche Invers\u00e9e. Si vous souhaitez une vid\u00e9o explicative d\u2019une recherche invers\u00e9e, nous avons un exemple dans notre Webinaire Construire avec Grist - Formules d\u2019Initialisation vs Formules .","title":"Recherches invers\u00e9es"},{"location":"references-lookups/#travailler-avec-des-ensembles-denregistrements","text":"lookupRecords peut \u00e9galement \u00eatre utilis\u00e9 dans d\u2019autres formules. SUM() peut \u00eatre utile pour trouver la somme de tous les nombres dans une liste d\u2019enregistrements. Une fois que vous avez trouv\u00e9 votre liste d\u2019enregistrements en utilisant la fonction lookupRecords et la notation par points, vous pouvez utiliser SUM() pour additionner toutes les valeurs renvoy\u00e9es, comme vous le voyez dans cette formule : SUM(Table.lookupRecords(Column_A=$Column_B).Column_C) Vous pouvez \u00e9galement le faire sur une liste de r\u00e9f\u00e9rences car une liste de r\u00e9f\u00e9rences est la m\u00eame chose, une liste d\u2019enregistrements. SUM($RefList.Column) Dans la section Listes de r\u00e9f\u00e9rences et notation par points , nous avons utilis\u00e9 la colonne Registrants et la notation par points pour trouver le solde pour chaque personne de notre liste d\u2019Inscrits. Nous pouvons utiliser SUM() avec notre formule pr\u00e9c\u00e9dente pour trouver le solde total. SUM($Registrants.Balance) Nous pouvons \u00e9galement utiliser lookupRecords pour obtenir la liste des r\u00e9f\u00e9rences, plut\u00f4t que d\u2019utiliser une colonne de liste de r\u00e9f\u00e9rences, puis trouver la somme du solde pour tous les inscrits. Cette m\u00e9thode est utilis\u00e9e dans la colonne des Revenus des Billets de la table \u00c9v\u00e9nements en utilisant la formule suivante : SUM(All_Registrations.lookupRecords(Event=$id).Balance) All_Registrations.lookupRecords(Event=$id).Balance trouve tous les enregistrements dans la table Toutes les Inscriptions o\u00f9 la colonne \u00c9v\u00e9nement correspond \u00e0 l\u2019ID de la ligne dans cette table, \u00c9v\u00e9nements. En utilisant la notation par points, nous trouvons le Solde pour chacun des enregistrements trouv\u00e9s. Ensuite, SUM() additionne les soldes de tous les enregistrements trouv\u00e9s. Vous pouvez \u00e9galement it\u00e9rer \u00e0 travers une Liste de R\u00e9f\u00e9rences en utilisant une boucle for en Python. Un exemple de cela peut \u00eatre vu dans la colonne Solde (\u2018for\u2019 loop) dans la table \u00c9v\u00e9nements. Lors de l\u2019it\u00e9ration, chaque \u00e9l\u00e9ment est une R\u00e9f\u00e9rence, donc la notation par points peut \u00e9galement \u00eatre utilis\u00e9e ici. Pour trouver la somme du solde pour tous les inscrits, nous utilisons la formule suivante : SUM(person.Balance for person in $Registrants) Cela fait la m\u00eame chose que notre formule lookupRecords que nous avons vue ci-dessus. $Registrants est notre liste de r\u00e9f\u00e9rences. Pour chaque enregistrement ( person ) dans notre liste d\u2019Inscrits, nous trouvons le Solde. Ensuite, nous additionnons tous les soldes ensemble. Dans cette formule, person est une variable qui repr\u00e9sente chaque \u00e9l\u00e9ment de notre liste et pourrait \u00eatre remplac\u00e9e par n\u2019importe quelle autre variable. Si vous souhaitez en savoir plus sur Structures de Donn\u00e9es et Compr\u00e9hension de Liste en Python 3, Python.org est une excellente ressource. len() peut \u00eatre utile pour obtenir le nombre d\u2019\u00e9l\u00e9ments dans une liste. Une fois que vous avez trouv\u00e9 votre liste d\u2019enregistrements en utilisant la fonction lookupRecords, vous pouvez utiliser len() pour compter le nombre d\u2019enregistrements renvoy\u00e9s, comme vous le voyez dans cette formule : len(Table.lookupRecords(Column_A=$Column_B)) Vous pouvez \u00e9galement le faire sur une liste de r\u00e9f\u00e9rences. len($RefList) Nous voulons voir combien d\u2019\u00e9v\u00e9nements nos Sponsors ont assist\u00e9. Nous pouvons utiliser lookupRecords pour cela. La formule suivante est utilis\u00e9e dans la colonne \u00c9v\u00e9nements Assist\u00e9s de la table Sponsors . len(All_Registrations.lookupRecords(Sponsor=$id)) D\u00e9composons les deux parties de cette formule, en travaillant de l\u2019int\u00e9rieur vers l\u2019ext\u00e9rieur. All_Registrations.lookupRecords(Sponsor=$id) recherche des correspondances o\u00f9 l\u2019enregistrement dans la colonne Sponsor de la table Toutes les Inscriptions a le m\u00eame ID que l\u2019enregistrement dans cette ligne de la table Sponsors. Tous les enregistrements dans la table Toutes les Inscriptions qui correspondent sont ajout\u00e9s \u00e0 une liste d\u2019enregistrements. Essayez d\u2019\u00e9crire la formule sans len() pour voir ce que Grist renvoie. Cela devrait ressembler \u00e0 quelque chose comme \u00e7a. C\u2019est une liste d\u2019enregistrements. len() compte combien d\u2019enregistrements se trouvent dans cette liste. Nous pouvons \u00e9galement inclure plusieurs arguments dans une formule lookupRecords. Un exemple de cela peut \u00eatre trouv\u00e9 dans la colonne Compte de la table Classes du mod\u00e8le Inscription en Classe . Cette colonne nous montre combien d\u2019\u00e9tudiants sont inscrits dans chaque classe. La formule utilis\u00e9e ici est : len(Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\")) Cette recherche utilise deux champs. Elle recherchera des enregistrements dans la table des Inscriptions o\u00f9 le Statut est \u201cConfirm\u00e9\u201d et la colonne Class correspond \u00e0 l\u2019ID de la ligne dans cette table. Comme la colonne Class fait r\u00e9f\u00e9rence \u00e0 la table Classes, nous utilisons l\u2019ID d\u2019enregistrement $id dans la recherche. Enfin, len() compte les \u00e9l\u00e9ments dans la liste renvoy\u00e9e par Enrollments.lookupRecords(Class=$id, Status=\"Confirmed\") . La moyenne, le minimum et le maximum sont quelques-unes des autres fonctions qui peuvent \u00eatre utilis\u00e9es avec les formules lookupRecords. Consultez toutes les fonctions disponibles sur notre page R\u00e9f\u00e9rence des fonctions .","title":"Travailler avec des ensembles d’enregistrements"},{"location":"register-as-consultant/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Inscrivez-vous pour devenir consultant Grist # .creg-form { line-height: initial; } .form-group .control-label { font-weight: normal; } .creg-button { margin: 24px 0; background-color: #11b683; border: none; color: white; } .creg-button:hover { background-color: #009058; border: none; color: white; } #creg-submitted, #creg-error { display: none; margin-top: 40px; } \u00cates-vous un freelance ? Aimez-vous construire dans Grist et organiser des donn\u00e9es ? Nous serions ravis de vous soutenir et de vous ajouter \u00e0 notre liste de consultants Grist ind\u00e9pendants. Veuillez remplir les informations ci-dessous, et nous vous contacterons. Votre nom : Email : T\u00e9l\u00e9phone : Entreprise : Site web : < div","title":"Register as consultant"},{"location":"register-as-consultant/#inscrivez-vous-pour-devenir-consultant-grist","text":".creg-form { line-height: initial; } .form-group .control-label { font-weight: normal; } .creg-button { margin: 24px 0; background-color: #11b683; border: none; color: white; } .creg-button:hover { background-color: #009058; border: none; color: white; } #creg-submitted, #creg-error { display: none; margin-top: 40px; } \u00cates-vous un freelance ? Aimez-vous construire dans Grist et organiser des donn\u00e9es ? Nous serions ravis de vous soutenir et de vous ajouter \u00e0 notre liste de consultants Grist ind\u00e9pendants. Veuillez remplir les informations ci-dessous, et nous vous contacterons. Votre nom : Email : T\u00e9l\u00e9phone : Entreprise : Site web : < div","title":"Inscrivez-vous pour devenir consultant Grist"},{"location":"rest-api/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Utilisation de l\u2019API Grist # Grist dispose d\u2019une API pour manipuler des documents, des espaces de travail et des espaces d\u2019\u00e9quipe. R\u00e9f\u00e9rence de l\u2019API montre la documentation de tous les points de terminaison disponibles. Console API interactive vous permet de faire des appels API en utilisant votre connexion Grist. Authentification # Pour acc\u00e9der \u00e0 l\u2019API Grist, vous aurez besoin d\u2019une cl\u00e9 API. Une cl\u00e9 API est d\u00e9tenue par un seul utilisateur et poss\u00e8de les m\u00eames permissions que cet utilisateur. Pour activer l\u2019acc\u00e8s \u00e0 l\u2019API pour vous-m\u00eame, visitez vos Param\u00e8tres de Profil . Vous pouvez toujours trouver cette page en cliquant sur votre photo de profil ou initiale en haut \u00e0 droite de l\u2019\u00e9cran pour ouvrir le menu du compte. Ensuite, s\u00e9lectionnez l\u2019option \u201cParam\u00e8tres de Profil\u201d: Cela affiche une bo\u00eete de dialogue avec toutes vos options de param\u00e8tres de profil. Faites d\u00e9filer vers le bas jusqu\u2019\u00e0 la section \u201cAPI\u201d. Cliquez sur le bouton \u201cCr\u00e9er\u201d pour cr\u00e9er une cl\u00e9 API. Vous pouvez maintenant copier cette cl\u00e9 pour l\u2019utiliser lors de vos appels API. Pour \u00eatre clair, copiez la cl\u00e9 dans vos param\u00e8tres de profil, pas la cl\u00e9 dans la capture d\u2019\u00e9cran ci-dessus, qui n\u2019est pas une vraie. Vous pouvez r\u00e9voquer votre cl\u00e9 API en cliquant sur \u201cSupprimer\u201d dans les Param\u00e8tres de Profil \u00e0 tout moment. Vous aurez alors la possibilit\u00e9 d\u2019en cr\u00e9er une nouvelle si vous le souhaitez. Pour tester votre cl\u00e9 API, essayez ceci depuis la ligne de commande (en substituant votre cl\u00e9 API): curl -H \"Authorization: Bearer \" https://docs.getgrist.com/api/orgs Cela devrait renvoyer une liste d\u2019organisations, ce que l\u2019API appelle des espaces d\u2019\u00e9quipe et votre espace personnel. Votre espace personnel est accessible \u00e0 docs.getgrist.com . Les espaces d\u2019\u00e9quipe sont accessibles \u00e0 .getgrist.com . Utilisation # Pour acc\u00e9der aux documents sur votre espace personnel via l\u2019API, continuez simplement \u00e0 utiliser le domaine docs.getgrist.com . Pour acc\u00e9der aux documents et aux espaces de travail sur un espace d\u2019\u00e9quipe, utilisez .getgrist.com . Par exemple, pour lister tous les espaces de travail et documents auxquels vous avez acc\u00e8s sur un site, faites : curl -H \"Authorization: Bearer \" \\ https://.getgrist.com/api/orgs/current/workspaces Lorsque vous apportez des modifications via l\u2019API et que vous passez des donn\u00e9es via le corps de la requ\u00eate, assurez-vous de d\u00e9finir l\u2019en-t\u00eate Content-Type \u00e0 application/json . Par exemple, pour changer le nom d\u2019un document, vous pourriez faire : curl -XPATCH \\ -H \"Authorization: Bearer \" \\ -H \"Content-Type: application/json\" \\ -d '{\"name\": \"Plans de Le\u00e7on\"}' \\ https://.getgrist.com/api/docs/ Pour plus de d\u00e9tails sur les points de terminaison disponibles, consultez notre documentation API ou la console API interactive . Des biblioth\u00e8ques clientes sont \u00e9galement disponibles : Biblioth\u00e8que cliente JavaScript/TypeScript Biblioth\u00e8que cliente Python","title":"REST API usage"},{"location":"rest-api/#utilisation-de-lapi-grist","text":"Grist dispose d\u2019une API pour manipuler des documents, des espaces de travail et des espaces d\u2019\u00e9quipe. R\u00e9f\u00e9rence de l\u2019API montre la documentation de tous les points de terminaison disponibles. Console API interactive vous permet de faire des appels API en utilisant votre connexion Grist.","title":"Utilisation de l’API Grist"},{"location":"rest-api/#authentification","text":"Pour acc\u00e9der \u00e0 l\u2019API Grist, vous aurez besoin d\u2019une cl\u00e9 API. Une cl\u00e9 API est d\u00e9tenue par un seul utilisateur et poss\u00e8de les m\u00eames permissions que cet utilisateur. Pour activer l\u2019acc\u00e8s \u00e0 l\u2019API pour vous-m\u00eame, visitez vos Param\u00e8tres de Profil . Vous pouvez toujours trouver cette page en cliquant sur votre photo de profil ou initiale en haut \u00e0 droite de l\u2019\u00e9cran pour ouvrir le menu du compte. Ensuite, s\u00e9lectionnez l\u2019option \u201cParam\u00e8tres de Profil\u201d: Cela affiche une bo\u00eete de dialogue avec toutes vos options de param\u00e8tres de profil. Faites d\u00e9filer vers le bas jusqu\u2019\u00e0 la section \u201cAPI\u201d. Cliquez sur le bouton \u201cCr\u00e9er\u201d pour cr\u00e9er une cl\u00e9 API. Vous pouvez maintenant copier cette cl\u00e9 pour l\u2019utiliser lors de vos appels API. Pour \u00eatre clair, copiez la cl\u00e9 dans vos param\u00e8tres de profil, pas la cl\u00e9 dans la capture d\u2019\u00e9cran ci-dessus, qui n\u2019est pas une vraie. Vous pouvez r\u00e9voquer votre cl\u00e9 API en cliquant sur \u201cSupprimer\u201d dans les Param\u00e8tres de Profil \u00e0 tout moment. Vous aurez alors la possibilit\u00e9 d\u2019en cr\u00e9er une nouvelle si vous le souhaitez. Pour tester votre cl\u00e9 API, essayez ceci depuis la ligne de commande (en substituant votre cl\u00e9 API): curl -H \"Authorization: Bearer \" https://docs.getgrist.com/api/orgs Cela devrait renvoyer une liste d\u2019organisations, ce que l\u2019API appelle des espaces d\u2019\u00e9quipe et votre espace personnel. Votre espace personnel est accessible \u00e0 docs.getgrist.com . Les espaces d\u2019\u00e9quipe sont accessibles \u00e0 .getgrist.com .","title":"Authentification"},{"location":"rest-api/#utilisation","text":"Pour acc\u00e9der aux documents sur votre espace personnel via l\u2019API, continuez simplement \u00e0 utiliser le domaine docs.getgrist.com . Pour acc\u00e9der aux documents et aux espaces de travail sur un espace d\u2019\u00e9quipe, utilisez .getgrist.com . Par exemple, pour lister tous les espaces de travail et documents auxquels vous avez acc\u00e8s sur un site, faites : curl -H \"Authorization: Bearer \" \\ https://.getgrist.com/api/orgs/current/workspaces Lorsque vous apportez des modifications via l\u2019API et que vous passez des donn\u00e9es via le corps de la requ\u00eate, assurez-vous de d\u00e9finir l\u2019en-t\u00eate Content-Type \u00e0 application/json . Par exemple, pour changer le nom d\u2019un document, vous pourriez faire : curl -XPATCH \\ -H \"Authorization: Bearer \" \\ -H \"Content-Type: application/json\" \\ -d '{\"name\": \"Plans de Le\u00e7on\"}' \\ https://.getgrist.com/api/docs/ Pour plus de d\u00e9tails sur les points de terminaison disponibles, consultez notre documentation API ou la console API interactive . Des biblioth\u00e8ques clientes sont \u00e9galement disponibles : Biblioth\u00e8que cliente JavaScript/TypeScript Biblioth\u00e8que cliente Python","title":"Utilisation"},{"location":"search-sort-filter/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Recherche, Tri et Filtrage # Grist offre plusieurs fa\u00e7ons de rechercher dans vos donn\u00e9es, ou d\u2019organiser les donn\u00e9es pour les avoir \u00e0 port\u00e9e de main. Recherche # En haut de l\u2019\u00e9cran du document, vous verrez une ic\u00f4ne de loupe ( ) qui ouvre une recherche de type tableur. Vous pouvez \u00e9galement commencer \u00e0 rechercher en utilisant le raccourci clavier \u2318 F (Mac) ou Ctrl + F (Windows). Lorsque vous tapez dans la zone de texte de recherche, Grist d\u00e9placera le curseur vers la cellule suivante contenant votre texte de recherche. S\u2019il n\u2019y a plus de correspondances dans la vue ou la page actuelle, le curseur se d\u00e9placera vers la vue suivante ou passera \u00e0 la page suivante. Tri # Il est facile de trouver un mot dans un dictionnaire, mais ce ne serait pas le cas si les mots n\u2019\u00e9taient pas tri\u00e9s ! Grist offre des options de tri flexibles et pratiques, qui sont assez diff\u00e9rentes d\u2019un tableur traditionnel. Pour trier une table dans Grist par une colonne, ouvrez le menu \u00e0 partir de l\u2019en-t\u00eate de la colonne et s\u00e9lectionnez \u201cTrier\u201d: Dans le m\u00eame \u00e9l\u00e9ment de menu, vous pouvez choisir de trier par ordre croissant ou d\u00e9croissant. Diff\u00e9rence par rapport \u00e0 Excel : Il est important de noter que le tri ne change aucun calcul de formule, il ne change que l\u2019ordre dans lequel vous voyez les enregistrements. Cela est diff\u00e9rent des tableurs comme Excel. Une autre diff\u00e9rence est que le param\u00e8tre de tri est \u201cactif\u201d : si vous ajoutez un enregistrement ou modifiez une cellule utilis\u00e9e pour le tri, l\u2019enregistrement se d\u00e9placera \u00e0 sa position correcte dans l\u2019ordre de tri. Voir Enregistrer les positions des lignes ci-dessous pour une option plus similaire au comportement d\u2019Excel. Colonnes Multiples # Lorsque vous triez une table, vous pouvez cliquer sur une autre colonne pour l\u2019ajouter au tri : La deuxi\u00e8me colonne d\u00e9termine l\u2019ordre des enregistrements dont les valeurs dans la premi\u00e8re colonne sont les m\u00eames. Vous pouvez ajouter plus de colonnes au tri. Par exemple, vous pourriez : Trier les employ\u00e9s d\u2019abord par D\u00e9partement, puis par Nom de famille, puis par Pr\u00e9nom. Trier les transactions d\u2019abord par Date, puis par Montant. Trier les t\u00e2ches d\u2019abord par la colonne \u2018Est Compl\u00e9t\u00e9\u2019, puis par Priorit\u00e9. Enregistrer les Param\u00e8tres de Tri # Comme le tri n\u2019affecte que votre vue des donn\u00e9es, vous pouvez trier les donn\u00e9es dans un document Grist m\u00eame si vous n\u2019avez pas acc\u00e8s en \u00e9criture \u00e0 celui-ci. Si vous pouvez \u00e9crire dans un document, vous pouvez \u00e9galement enregistrer les param\u00e8tres de tri. Lorsque vous modifiez le tri sur une table, l\u2019ic\u00f4ne en haut de celle-ci devient verte. Cliquez dessus pour voir le param\u00e8tre actuellement actif, ainsi que les options pour les manipuler (par exemple, supprimer une colonne du tri), enregistrer le param\u00e8tre ou annuler vos modifications : Lorsque vous enregistrez les param\u00e8tres de tri, ils s\u2019appliqueront \u00e0 la vue chaque fois que cette page sera ouverte, que ce soit par vous ou d\u2019autres collaborateurs. Vues Multiples : Tout comme vous pouvez cr\u00e9er plusieurs pages affichant les donn\u00e9es de la m\u00eame table, vous pouvez avoir diff\u00e9rents param\u00e8tres de tri sur chaque vue des donn\u00e9es. Par exemple, vous pourriez avoir une vue affichant les transactions de carte de cr\u00e9dit tri\u00e9es par date, et une autre les affichant tri\u00e9es par montant. Tri \u00e0 partir du Panneau Lat\u00e9ral # Vous pouvez trier des vues autres que la Table, telles que la Liste de Fiches ou le Graphique, en utilisant l\u2019onglet \u201cTrier & Filtrer\u201d dans le panneau lat\u00e9ral : Vous pouvez ajouter une ou plusieurs colonnes, enregistrer ou annuler les param\u00e8tres et utiliser des options de tri avanc\u00e9es. Options de tri avanc\u00e9es # L\u2019onglet \u201cTrier & Filtrer\u201d expose des options de tri suppl\u00e9mentaires qui peuvent \u00eatre utiles pour divers types de colonnes : Utiliser la position des choix \u2013 disponible sur les colonnes Choix , trie les enregistrements en utilisant l\u2019ordre configur\u00e9 des \u00e9l\u00e9ments de choix, plut\u00f4t que leurs noms. Valeurs vides en dernier \u2013 dans l\u2019ordre alphab\u00e9tique, les valeurs vides sont affich\u00e9es en premier par d\u00e9faut, utilisez cette option pour les mettre \u00e0 la fin. Tri naturel \u2013 pour la colonne Texte, traitera les nombres \u00e0 plusieurs chiffres dans les cha\u00eenes comme s\u2019ils \u00e9taient un seul caract\u00e8re, permettant un ordre plus convivial. Par exemple, en utilisant le tri naturel , Produit10 sera positionn\u00e9 apr\u00e8s Produit2 . Enregistrer les Positions des Lignes # Lorsque vous utilisez le panneau lat\u00e9ral, vous remarquerez un bouton suppl\u00e9mentaire : \u201cMettre \u00e0 jour les donn\u00e9es\u201d. Si vous cliquez dessus, la position actuelle des enregistrements les uns par rapport aux autres est enregistr\u00e9e, et le tri actif par vos colonnes s\u00e9lectionn\u00e9es est d\u00e9sactiv\u00e9. En d\u2019autres termes, les lignes ne sauteront plus en place selon les valeurs de certaines colonnes, mais resteront \u00e0 leur place. Vous pourrez \u00e9galement r\u00e9organiser les lignes manuellement en les faisant glisser. Filtrage # Vous pouvez choisir de voir seulement un sous-ensemble de donn\u00e9es dans une table en filtrant pour certaines valeurs dans une colonne. Ouvrez le menu de la colonne \u00e0 partir de l\u2019en-t\u00eate de la colonne et cliquez sur \u201cFiltrer les donn\u00e9es\u201d. Vous verrez une bo\u00eete de dialogue listant les valeurs dans la colonne : D\u00e9cochez les valeurs que vous ne voulez pas voir, ou cliquez sur \u201cAucune\u201d puis cochez seulement les valeurs que vous voulez voir. La barre de recherche en haut de la bo\u00eete de dialogue vous permet de trouver des valeurs d\u2019int\u00e9r\u00eat si la liste est longue. Cliquez sur \u201cAppliquer\u201d pour appliquer votre param\u00e8tre. Vous pouvez filtrer par plus d\u2019une colonne. Seules les lignes correspondant \u00e0 tous les filtres appara\u00eetront. Comme pour le tri, vous pouvez enregistrer les filtres dans la vue. Cliquez sur l\u2019ic\u00f4ne \u201cTrier & Filtrer\u201d en surbrillance en haut de la table : Vous verrez les colonnes pour lesquelles il y a des filtres actifs, et des options pour enregistrer le filtre ou revenir aux param\u00e8tres enregistr\u00e9s. Comme pour le tri, vous pouvez cr\u00e9er diff\u00e9rentes vues ou pages affichant la m\u00eame table avec des param\u00e8tres de filtre diff\u00e9rents. Par exemple, vous pourriez avoir une page affichant les participants \u00e0 un \u00e9v\u00e9nement avec le statut \u201cConfirm\u00e9\u201d et une autre affichant ceux avec le statut \u201cEn attente\u201d. Filtrage par Intervalle # Certains types de colonnes permettent de filtrer dans un intervalle de valeurs. Lors du filtrage d\u2019une colonne de type num\u00e9rique ou entier, vous avez la possibilit\u00e9 de filtrer dans un intervalle de nombres. Par exemple, si vous ne voulez voir que les achats de grande valeur dans une table des transactions par carte de cr\u00e9dit , vous pouvez ajouter un filtre pour la colonne montant et entrer une valeur minimale de 500 $. La table sera filtr\u00e9e pour afficher toutes les transactions avec un montant de 500 $ ou plus. Lors du filtrage d\u2019une colonne de type date ou datetime, vous avez la possibilit\u00e9 de filtrer dans un intervalle de dates sp\u00e9cifi\u00e9. L\u2019intervalle peut \u00eatre entr\u00e9 dans les champs \u201cD\u00e9but\u201d et \u201cFin\u201d, ou s\u00e9lectionn\u00e9 sur un calendrier. Peut-\u00eatre \u00eates-vous parti en vacances et souhaitez voir toutes les transactions pendant cette p\u00e9riode. Nous pourrions ajouter un filtre \u00e0 la colonne Date pour voir toutes les transactions dans l\u2019intervalle de dates du voyage. Vous pouvez \u00e9galement filtrer les colonnes de type date et datetime par un intervalle relatif, qui est un intervalle relatif \u00e0 la date d\u2019aujourd\u2019hui. Par exemple, vous pourriez vouloir filtrer les t\u00e2ches \u00e0 r\u00e9aliser dans les 14 prochains jours. Ce filtre se mettra \u00e0 jour chaque jour de sorte qu\u2019il filtre toujours sur 14 jours dans le futur, par rapport \u00e0 la date d\u2019aujourd\u2019hui. Lors du filtrage d\u2019une colonne de type date ou datetime, plusieurs intervalles relatifs sont sugg\u00e9r\u00e9s comme raccourci, comme le montre l\u2019image ci-dessous. Si vous utilisez le calendrier pour s\u00e9lectionner un intervalle de dates, vous pouvez \u00e9galement convertir chaque date absolue en une date relative en s\u00e9lectionnant dans la liste des dates relatives disponibles. \u00c9pingler les Filtres # Les filtres peuvent \u00eatre \u00e9pingl\u00e9s en haut d\u2019une table pour un filtrage rapide. Par d\u00e9faut, les filtres seront \u00e9pingl\u00e9s lorsqu\u2019ils sont appliqu\u00e9s pour la premi\u00e8re fois \u00e0 une table. Pour d\u00e9s\u00e9pingler un filtre, cliquez sur le bouton de filtre puis cliquez sur l\u2019ic\u00f4ne d\u2019\u00e9pingle. Si vous d\u00e9s\u00e9pingler un bouton de filtre, tous les filtres enregistr\u00e9s seront toujours appliqu\u00e9s mais le bouton ne sera plus visible. Il peut \u00eatre utile d\u2019enregistrer les boutons sans aucun filtrage pour cr\u00e9er une barre d\u2019outils de filtrage rapide. Si vous enregistrez les param\u00e8tres avec des filtres appliqu\u00e9s, cela les enregistre pour les sessions futures et les autres membres de l\u2019\u00e9quipe verront la m\u00eame chose. Filtres Complexes # Pour filtrer des conditions plus complexes, cr\u00e9ez une nouvelle colonne de formule et filtrez cette colonne pour les valeurs \u201ctrue\u201d. Par exemple, pour filtrer \u201cPersonnes avec un salaire sup\u00e9rieur \u00e0 100 000 $ ou un poste de \u2018Membre du Conseil\u2019\u201c, vous pouvez utiliser une formule comme celle-ci : $Salary > 100000 or $Position == 'Board Member' Cela produira une colonne de valeurs vraies et fausses, que vous pouvez filtrer pour la valeur true .","title":"Search, sort & filter"},{"location":"search-sort-filter/#recherche-tri-et-filtrage","text":"Grist offre plusieurs fa\u00e7ons de rechercher dans vos donn\u00e9es, ou d\u2019organiser les donn\u00e9es pour les avoir \u00e0 port\u00e9e de main.","title":"Recherche, Tri et Filtrage"},{"location":"search-sort-filter/#recherche","text":"En haut de l\u2019\u00e9cran du document, vous verrez une ic\u00f4ne de loupe ( ) qui ouvre une recherche de type tableur. Vous pouvez \u00e9galement commencer \u00e0 rechercher en utilisant le raccourci clavier \u2318 F (Mac) ou Ctrl + F (Windows). Lorsque vous tapez dans la zone de texte de recherche, Grist d\u00e9placera le curseur vers la cellule suivante contenant votre texte de recherche. S\u2019il n\u2019y a plus de correspondances dans la vue ou la page actuelle, le curseur se d\u00e9placera vers la vue suivante ou passera \u00e0 la page suivante.","title":"Recherche"},{"location":"search-sort-filter/#tri","text":"Il est facile de trouver un mot dans un dictionnaire, mais ce ne serait pas le cas si les mots n\u2019\u00e9taient pas tri\u00e9s ! Grist offre des options de tri flexibles et pratiques, qui sont assez diff\u00e9rentes d\u2019un tableur traditionnel. Pour trier une table dans Grist par une colonne, ouvrez le menu \u00e0 partir de l\u2019en-t\u00eate de la colonne et s\u00e9lectionnez \u201cTrier\u201d: Dans le m\u00eame \u00e9l\u00e9ment de menu, vous pouvez choisir de trier par ordre croissant ou d\u00e9croissant. Diff\u00e9rence par rapport \u00e0 Excel : Il est important de noter que le tri ne change aucun calcul de formule, il ne change que l\u2019ordre dans lequel vous voyez les enregistrements. Cela est diff\u00e9rent des tableurs comme Excel. Une autre diff\u00e9rence est que le param\u00e8tre de tri est \u201cactif\u201d : si vous ajoutez un enregistrement ou modifiez une cellule utilis\u00e9e pour le tri, l\u2019enregistrement se d\u00e9placera \u00e0 sa position correcte dans l\u2019ordre de tri. Voir Enregistrer les positions des lignes ci-dessous pour une option plus similaire au comportement d\u2019Excel.","title":"Tri"},{"location":"search-sort-filter/#colonnes-multiples","text":"Lorsque vous triez une table, vous pouvez cliquer sur une autre colonne pour l\u2019ajouter au tri : La deuxi\u00e8me colonne d\u00e9termine l\u2019ordre des enregistrements dont les valeurs dans la premi\u00e8re colonne sont les m\u00eames. Vous pouvez ajouter plus de colonnes au tri. Par exemple, vous pourriez : Trier les employ\u00e9s d\u2019abord par D\u00e9partement, puis par Nom de famille, puis par Pr\u00e9nom. Trier les transactions d\u2019abord par Date, puis par Montant. Trier les t\u00e2ches d\u2019abord par la colonne \u2018Est Compl\u00e9t\u00e9\u2019, puis par Priorit\u00e9.","title":"Colonnes Multiples"},{"location":"search-sort-filter/#enregistrer-les-parametres-de-tri","text":"Comme le tri n\u2019affecte que votre vue des donn\u00e9es, vous pouvez trier les donn\u00e9es dans un document Grist m\u00eame si vous n\u2019avez pas acc\u00e8s en \u00e9criture \u00e0 celui-ci. Si vous pouvez \u00e9crire dans un document, vous pouvez \u00e9galement enregistrer les param\u00e8tres de tri. Lorsque vous modifiez le tri sur une table, l\u2019ic\u00f4ne en haut de celle-ci devient verte. Cliquez dessus pour voir le param\u00e8tre actuellement actif, ainsi que les options pour les manipuler (par exemple, supprimer une colonne du tri), enregistrer le param\u00e8tre ou annuler vos modifications : Lorsque vous enregistrez les param\u00e8tres de tri, ils s\u2019appliqueront \u00e0 la vue chaque fois que cette page sera ouverte, que ce soit par vous ou d\u2019autres collaborateurs. Vues Multiples : Tout comme vous pouvez cr\u00e9er plusieurs pages affichant les donn\u00e9es de la m\u00eame table, vous pouvez avoir diff\u00e9rents param\u00e8tres de tri sur chaque vue des donn\u00e9es. Par exemple, vous pourriez avoir une vue affichant les transactions de carte de cr\u00e9dit tri\u00e9es par date, et une autre les affichant tri\u00e9es par montant.","title":"Enregistrer les Param\u00e8tres de Tri"},{"location":"search-sort-filter/#tri-a-partir-du-panneau-lateral","text":"Vous pouvez trier des vues autres que la Table, telles que la Liste de Fiches ou le Graphique, en utilisant l\u2019onglet \u201cTrier & Filtrer\u201d dans le panneau lat\u00e9ral : Vous pouvez ajouter une ou plusieurs colonnes, enregistrer ou annuler les param\u00e8tres et utiliser des options de tri avanc\u00e9es.","title":"Tri \u00e0 partir du Panneau Lat\u00e9ral"},{"location":"search-sort-filter/#options-de-tri-avancees","text":"L\u2019onglet \u201cTrier & Filtrer\u201d expose des options de tri suppl\u00e9mentaires qui peuvent \u00eatre utiles pour divers types de colonnes : Utiliser la position des choix \u2013 disponible sur les colonnes Choix , trie les enregistrements en utilisant l\u2019ordre configur\u00e9 des \u00e9l\u00e9ments de choix, plut\u00f4t que leurs noms. Valeurs vides en dernier \u2013 dans l\u2019ordre alphab\u00e9tique, les valeurs vides sont affich\u00e9es en premier par d\u00e9faut, utilisez cette option pour les mettre \u00e0 la fin. Tri naturel \u2013 pour la colonne Texte, traitera les nombres \u00e0 plusieurs chiffres dans les cha\u00eenes comme s\u2019ils \u00e9taient un seul caract\u00e8re, permettant un ordre plus convivial. Par exemple, en utilisant le tri naturel , Produit10 sera positionn\u00e9 apr\u00e8s Produit2 .","title":"Options de tri avanc\u00e9es"},{"location":"search-sort-filter/#enregistrer-les-positions-des-lignes","text":"Lorsque vous utilisez le panneau lat\u00e9ral, vous remarquerez un bouton suppl\u00e9mentaire : \u201cMettre \u00e0 jour les donn\u00e9es\u201d. Si vous cliquez dessus, la position actuelle des enregistrements les uns par rapport aux autres est enregistr\u00e9e, et le tri actif par vos colonnes s\u00e9lectionn\u00e9es est d\u00e9sactiv\u00e9. En d\u2019autres termes, les lignes ne sauteront plus en place selon les valeurs de certaines colonnes, mais resteront \u00e0 leur place. Vous pourrez \u00e9galement r\u00e9organiser les lignes manuellement en les faisant glisser.","title":"Enregistrer les Positions des Lignes"},{"location":"search-sort-filter/#filtrage","text":"Vous pouvez choisir de voir seulement un sous-ensemble de donn\u00e9es dans une table en filtrant pour certaines valeurs dans une colonne. Ouvrez le menu de la colonne \u00e0 partir de l\u2019en-t\u00eate de la colonne et cliquez sur \u201cFiltrer les donn\u00e9es\u201d. Vous verrez une bo\u00eete de dialogue listant les valeurs dans la colonne : D\u00e9cochez les valeurs que vous ne voulez pas voir, ou cliquez sur \u201cAucune\u201d puis cochez seulement les valeurs que vous voulez voir. La barre de recherche en haut de la bo\u00eete de dialogue vous permet de trouver des valeurs d\u2019int\u00e9r\u00eat si la liste est longue. Cliquez sur \u201cAppliquer\u201d pour appliquer votre param\u00e8tre. Vous pouvez filtrer par plus d\u2019une colonne. Seules les lignes correspondant \u00e0 tous les filtres appara\u00eetront. Comme pour le tri, vous pouvez enregistrer les filtres dans la vue. Cliquez sur l\u2019ic\u00f4ne \u201cTrier & Filtrer\u201d en surbrillance en haut de la table : Vous verrez les colonnes pour lesquelles il y a des filtres actifs, et des options pour enregistrer le filtre ou revenir aux param\u00e8tres enregistr\u00e9s. Comme pour le tri, vous pouvez cr\u00e9er diff\u00e9rentes vues ou pages affichant la m\u00eame table avec des param\u00e8tres de filtre diff\u00e9rents. Par exemple, vous pourriez avoir une page affichant les participants \u00e0 un \u00e9v\u00e9nement avec le statut \u201cConfirm\u00e9\u201d et une autre affichant ceux avec le statut \u201cEn attente\u201d.","title":"Filtrage"},{"location":"search-sort-filter/#filtrage-par-intervalle","text":"Certains types de colonnes permettent de filtrer dans un intervalle de valeurs. Lors du filtrage d\u2019une colonne de type num\u00e9rique ou entier, vous avez la possibilit\u00e9 de filtrer dans un intervalle de nombres. Par exemple, si vous ne voulez voir que les achats de grande valeur dans une table des transactions par carte de cr\u00e9dit , vous pouvez ajouter un filtre pour la colonne montant et entrer une valeur minimale de 500 $. La table sera filtr\u00e9e pour afficher toutes les transactions avec un montant de 500 $ ou plus. Lors du filtrage d\u2019une colonne de type date ou datetime, vous avez la possibilit\u00e9 de filtrer dans un intervalle de dates sp\u00e9cifi\u00e9. L\u2019intervalle peut \u00eatre entr\u00e9 dans les champs \u201cD\u00e9but\u201d et \u201cFin\u201d, ou s\u00e9lectionn\u00e9 sur un calendrier. Peut-\u00eatre \u00eates-vous parti en vacances et souhaitez voir toutes les transactions pendant cette p\u00e9riode. Nous pourrions ajouter un filtre \u00e0 la colonne Date pour voir toutes les transactions dans l\u2019intervalle de dates du voyage. Vous pouvez \u00e9galement filtrer les colonnes de type date et datetime par un intervalle relatif, qui est un intervalle relatif \u00e0 la date d\u2019aujourd\u2019hui. Par exemple, vous pourriez vouloir filtrer les t\u00e2ches \u00e0 r\u00e9aliser dans les 14 prochains jours. Ce filtre se mettra \u00e0 jour chaque jour de sorte qu\u2019il filtre toujours sur 14 jours dans le futur, par rapport \u00e0 la date d\u2019aujourd\u2019hui. Lors du filtrage d\u2019une colonne de type date ou datetime, plusieurs intervalles relatifs sont sugg\u00e9r\u00e9s comme raccourci, comme le montre l\u2019image ci-dessous. Si vous utilisez le calendrier pour s\u00e9lectionner un intervalle de dates, vous pouvez \u00e9galement convertir chaque date absolue en une date relative en s\u00e9lectionnant dans la liste des dates relatives disponibles.","title":"Filtrage par Intervalle"},{"location":"search-sort-filter/#epingler-les-filtres","text":"Les filtres peuvent \u00eatre \u00e9pingl\u00e9s en haut d\u2019une table pour un filtrage rapide. Par d\u00e9faut, les filtres seront \u00e9pingl\u00e9s lorsqu\u2019ils sont appliqu\u00e9s pour la premi\u00e8re fois \u00e0 une table. Pour d\u00e9s\u00e9pingler un filtre, cliquez sur le bouton de filtre puis cliquez sur l\u2019ic\u00f4ne d\u2019\u00e9pingle. Si vous d\u00e9s\u00e9pingler un bouton de filtre, tous les filtres enregistr\u00e9s seront toujours appliqu\u00e9s mais le bouton ne sera plus visible. Il peut \u00eatre utile d\u2019enregistrer les boutons sans aucun filtrage pour cr\u00e9er une barre d\u2019outils de filtrage rapide. Si vous enregistrez les param\u00e8tres avec des filtres appliqu\u00e9s, cela les enregistre pour les sessions futures et les autres membres de l\u2019\u00e9quipe verront la m\u00eame chose.","title":"\u00c9pingler les Filtres"},{"location":"search-sort-filter/#filtres-complexes","text":"Pour filtrer des conditions plus complexes, cr\u00e9ez une nouvelle colonne de formule et filtrez cette colonne pour les valeurs \u201ctrue\u201d. Par exemple, pour filtrer \u201cPersonnes avec un salaire sup\u00e9rieur \u00e0 100 000 $ ou un poste de \u2018Membre du Conseil\u2019\u201c, vous pouvez utiliser une formule comme celle-ci : $Salary > 100000 or $Position == 'Board Member' Cela produira une colonne de valeurs vraies et fausses, que vous pouvez filtrer pour la valeur true .","title":"Filtres Complexes"},{"location":"self-managed/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . description: Les \u00e9l\u00e9ments essentiels pour cr\u00e9er et maintenir une installation Grist autog\u00e9r\u00e9e. # Grist Autog\u00e9r\u00e9 # description: Les \u00e9l\u00e9ments essentiels pour cr\u00e9er et maintenir une installation Grist autog\u00e9r\u00e9e. Grist Autog\u00e9r\u00e9 Les essentiels Qu\u2019est-ce que Grist Autog\u00e9r\u00e9 ? Comment installer Grist ? Grist sur AWS Comment sandboxer des documents ? XSAVE non disponible PTRACE non disponible Comment ex\u00e9cuter Grist sur un serveur ? Comment configurer une \u00e9quipe ? Comment configurer l\u2019authentification ? Existe-t-il d\u2019autres m\u00e9thodes d\u2019authentification ? Comment activer Grist Entreprise ? Personnalisation Comment personnaliser le style ? Comment lister des widgets personnalis\u00e9s ? Comment configurer des notifications par e-mail ? Comment ajouter plus de packages python ? Comment configurer des webhooks ? Op\u00e9rations Quelles sont les exigences mat\u00e9rielles pour h\u00e9berger Grist ? Quels fichiers Grist stocke-t-il ? Qu\u2019est-ce qu\u2019une base de donn\u00e9es \u201cprincipale\u201d ? Qu\u2019est-ce qu\u2019un magasin d\u2019\u00e9tat ? Comment configurer des snapshots ? Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? Comment mettre \u00e0 jour mon installation ? Que faire si j\u2019ai besoin d\u2019une haute disponibilit\u00e9 ? Les essentiels # Qu\u2019est-ce que Grist Autog\u00e9r\u00e9 ? # Il existe quatre variantes de Grist : SaaS (Software as a Service) : Grist est disponible en tant que service h\u00e9berg\u00e9 sur docs.getgrist.com . Aucune installation n\u00e9cessaire. Plans gratuits et payants, avec des limites d\u2019utilisation. Application de bureau : Grist est disponible en tant qu\u2019application de bureau, construite avec Electron. Elle est disponible en t\u00e9l\u00e9chargement sur https://github.com/gristlabs/grist-desktop/releases . Cette application de bureau n\u2019a pas besoin d\u2019internet et n\u2019est li\u00e9e \u00e0 aucun compte ou service en ligne. Entreprise Autog\u00e9r\u00e9e : Grist est disponible en tant qu\u2019application sous licence install\u00e9e par des entreprises sur leur propre infrastructure avec notre support et assistance. Contient des fonctionnalit\u00e9s propri\u00e9taires d\u00e9velopp\u00e9es pour des entreprises avec des besoins particuliers. Noyau Autog\u00e9r\u00e9 : Grist est disponible en tant qu\u2019application gratuite install\u00e9e par des d\u00e9veloppeurs citoyens sur leur propre infrastructure avec le soutien de la communaut\u00e9. Les documents Grist cr\u00e9\u00e9s avec nos offres SaaS et Entreprise peuvent \u00eatre ouverts et modifi\u00e9s avec le Noyau, et vice versa. Cela \u00e9tablit les documents Grist comme un format fiable pour l\u2019archivage et l\u2019\u00e9change. Grist Autog\u00e9r\u00e9, qu\u2019il s\u2019agisse de l\u2019Entreprise ou du Noyau, est install\u00e9 et configur\u00e9 de la m\u00eame mani\u00e8re, comme d\u00e9crit dans les sections suivantes. Pour plus de clart\u00e9, les sections sont \u00e9tiquet\u00e9es avec la variante \u00e0 laquelle elles s\u2019appliquent, par exemple : Le code source complet de Grist Noyau est toujours disponible sur github.com/gristlabs/grist-core et est sous une licence Apache-2.0. Vous pouvez utiliser et redistribuer le Noyau librement, selon les termes de la licence de logiciel libre. Le code source complet de Grist Entreprise est \u00e9galement disponible, sur github.com/gristlabs/grist-ee , sous une licence propri\u00e9taire qui ne conf\u00e8re aucun droit automatique d\u2019utiliser ou de redistribuer le logiciel. Vous pouvez \u00e9valuer l\u2019Entreprise pendant 30 jours en utilisant les instructions dans les sections suivantes, ou vous inscrire \u00e0 notre plan Grist Entreprise et obtenir du support. Comment installer Grist ? # Le moyen le plus simple d\u2019installer Grist est en tant que conteneur. Nous allons d\u00e9crire comment faire en utilisant Docker , mais il existe de nombreux autres outils et services pour ex\u00e9cuter des conteneurs. Pour essayer Grist avec Docker, cr\u00e9ez un r\u00e9pertoire vide pour que Grist y stocke des donn\u00e9es (par exemple ~/grist ) et ensuite vous pouvez faire : docker run -p 8484:8484 \\ -v ~/grist:/persist \\ -e GRIST_SESSION_SECRET=inventez-un-secret-ici \\ -it gristlabs/grist Vous devriez alors pouvoir visiter http://localhost:8484 dans votre navigateur. Vous pourrez d\u00e9j\u00e0 cr\u00e9er et modifier des documents Grist, et ouvrir et modifier des documents t\u00e9l\u00e9charg\u00e9s depuis une autre installation Grist (comme notre SaaS). Si vous utilisez un autre outil ou service, voici les points importants : Le nom de l\u2019image principale est gristlabs/grist , qui est notre image Docker combin\u00e9e Noyau et Entreprise. L\u2019image gristlabs/grist-oss existe \u00e9galement, qui utilise uniquement du code libre et open source. Cette image utilise uniquement Grist Noyau, et n\u2019a pas de fonctionnalit\u00e9s d\u2019entreprise disponibles. (Pour certains outils comme Podman, vous devrez peut-\u00eatre pr\u00e9fixer ces noms d\u2019image avec docker.io/ .) Un volume (ou montage, ou r\u00e9pertoire) doit \u00eatre disponible \u00e0 l\u2019emplacement /persist dans le conteneur. Il peut \u00eatre initialement vide - Grist le remplira. Sans ce volume, rien de ce que vous faites ne sera stock\u00e9 \u00e0 long terme. Le port 8484 sur le conteneur doit \u00eatre expos\u00e9. Cela peut \u00eatre chang\u00e9 si vous d\u00e9finissez \u00e9galement la variable d\u2019environnement PORT pour le conteneur. La variable d\u2019environnement GRIST_SESSION_SECRET doit \u00eatre d\u00e9finie sur quelque chose de secret pour le conteneur. Install\u00e9 de cette mani\u00e8re, Grist est accessible uniquement par vous. En g\u00e9n\u00e9ral, vous voudrez prendre au moins les \u00e9tapes suivantes : Configurer le sandboxing - cela est important pour limiter ce que les formules peuvent faire. Servir depuis un h\u00f4te public afin de pouvoir collaborer en direct avec d\u2019autres. Activer une m\u00e9thode d\u2019authentification afin que les utilisateurs puissent se connecter. Souvent, vous voudrez connecter Grist \u00e0 un service \u201cSSO\u201d (Single Sign-On) que vous utilisez d\u00e9j\u00e0. Nous supportons certaines m\u00e9thodes d\u2019authentification tr\u00e8s g\u00e9n\u00e9rales qui couvrent de nombreux cas, et une m\u00e9thode d\u2019authentification sp\u00e9ciale pour des cas personnalis\u00e9s. Envisager d\u2019activer le support des snapshots si vous souhaitez que Grist g\u00e8re les sauvegardes de documents. Grist sur AWS # Vous pouvez \u00e9galement h\u00e9berger Grist sur AWS. Des instructions compl\u00e8tes sur cette m\u00e9thode d\u2019h\u00e9bergement sont disponibles sur la page Grist AWS Marketplace . Comment sandboxer des documents ? # Grist permet des formules tr\u00e8s puissantes, utilisant Python. Nous recommandons de d\u00e9finir la variable d\u2019environnement GRIST_SANDBOX_FLAVOR sur gvisor si votre mat\u00e9riel le prend en charge (la plupart le feront), pour ex\u00e9cuter des formules dans chaque document dans un sandbox isol\u00e9 des autres documents et isol\u00e9 du r\u00e9seau. docker run ... -e GRIST_SANDBOX_FLAVOR=gvisor \\ ... Pour v\u00e9rifier que les formules sont \u00e9valu\u00e9es dans un sandbox, vous pouvez cr\u00e9er un document et ensuite v\u00e9rifier que cette formule donne un r\u00e9sultat vide : import glob glob.glob('/etc/*') Voici quelques raisons pour lesquelles le sandboxing gvisor , tel que configur\u00e9 pour Grist, peut \u00e9chouer, et ce que vous pouvez faire pour diagnostiquer le probl\u00e8me. XSAVE non disponible # Votre processeur peut ne pas \u00eatre pris en charge. Sur x86_64 , Sandy Bridge ou plus r\u00e9cent est n\u00e9cessaire. V\u00e9rifiez que le drapeau processeur XSAVE est d\u00e9fini. Voici un moyen rapide de tester cela : grep -q '\\bxsave\\b' /proc/cpuinfo && echo \"XSAVE activ\u00e9\" || echo \"XSAVE manquant\" PTRACE non disponible # La capacit\u00e9 SYS_PTRACE peut ne pas \u00eatre disponible. Si vous ex\u00e9cutez dans docker, vous pourriez essayer de l\u2019accorder explicitement, si vous \u00eates \u00e0 l\u2019aise avec sa mise \u00e0 disposition : docker run ... --cap-add=SYS_PTRACE ... Dans certains environnements cloud tels que AWS ECS, vous devrez peut-\u00eatre \u00e9num\u00e9rer explicitement cette capacit\u00e9 dans votre configuration de conteneur. Comment ex\u00e9cuter Grist sur un serveur ? # Nous vous sugg\u00e9rons de vous familiariser avec tous les autres aspects de l\u2019autogestion sur cette page avant de servir Grist depuis un h\u00f4te public (surtout Sandboxing ). Lorsque vous le ferez, il est important de dire \u00e0 Grist d\u2019o\u00f9 il sera servi, en utilisant la variable APP_HOME_URL . Par exemple, si vous allez servir depuis https://grist.example.com , faites savoir \u00e0 Grist comme ceci : docker run ... -e APP_HOME_URL=\"https://grist.example.com\" \\ ... Vous devrez placer un \u201cproxy inverse\u201d devant Grist pour g\u00e9rer la \u201cterminaison SSL\u201d (d\u00e9cryptage du trafic chiffr\u00e9) en utilisant un certificat qui \u00e9tablit la propri\u00e9t\u00e9 du site. Si vous ne savez pas ce que cela signifie, vous pourriez essayer d\u2019utiliser le Grist Omnibus qui emballe Grist avec un proxy inverse qui utilisera Let\u2019s Encrypt pour obtenir un certificat pour vous automatiquement. Un travail important d\u2019un tel proxy est de rediriger correctement les connexions websocket . Cela repr\u00e9sente deux exigences : Assurez-vous que le proxy utilise HTTP 1.1 Passez les en-t\u00eates HTTP n\u00e9cessaires Upgrade, Connection et Host afin qu\u2019une connexion HTTP puisse \u00eatre mise \u00e0 niveau vers une connexion websocket. Par exemple, voici une configuration minimale pour nginx , un choix possible pour un proxy inverse. server { server_name grist.example.com; location / { proxy_pass http://localhost:8484; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Support WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; } } Cette configuration g\u00e9rera le trafic HTTP de base et les websockets. Elle n\u00e9cessite encore une configuration SSL/TLS suppl\u00e9mentaire. Une option simple pour l\u2019auto-h\u00e9bergement \u00e0 petite \u00e9chelle est d\u2019utiliser certbot par l\u2019EFF . Comment configurer une \u00e9quipe ? # Grist a un concept de \u201csites d\u2019\u00e9quipe\u201d qui sont des zones ind\u00e9pendamment g\u00e9r\u00e9es et nomm\u00e9es contenant leurs propres espaces de travail et documents. Les sites d\u2019\u00e9quipe peuvent avoir des sous-domaines distincts (comme sur les sites d\u2019\u00e9quipe h\u00e9berg\u00e9s de notre SaaS), ou \u00eatre distingu\u00e9s par un pr\u00e9fixe de chemin sp\u00e9cial. Cela n\u2019a souvent pas de sens pour les installations autog\u00e9r\u00e9es, o\u00f9 il y a une seule \u00e9quipe. Avec un seul domaine et une seule \u00e9quipe, le pr\u00e9fixe de chemin sp\u00e9cial (qui ressemble \u00e0 /o/ ) est un gaspillage d\u2019espace peu \u00e9l\u00e9gant dans les URL. Vous pouvez donc indiquer \u00e0 Grist d\u2019utiliser une seule \u00e9quipe en d\u00e9finissant GRIST_SINGLE_ORG (\u201corg\u201d ou \u201corganisation\u201d est un synonyme pour \u00e9quipe) : docker run ... -e GRIST_SINGLE_ORG=cool-beans Le nom de l\u2019\u00e9quipe ne doit utiliser que des caract\u00e8res minuscules a-z, des chiffres 0-9, et le tiret ( - ). Vous voudrez \u00e9galement peut-\u00eatre vous pencher sur Personnalisation du style pour cacher les \u00e9l\u00e9ments d\u2019interface utilisateur dont vous n\u2019avez pas besoin. Comment configurer l\u2019authentification ? # L\u2019authentification peut \u00eatre configur\u00e9e de plusieurs mani\u00e8res pour Grist Noyau et Entreprise, en utilisant SAML, OpenID Connect ou des en-t\u00eates transf\u00e9r\u00e9s. Entre les deux, de nombreux SSO populaires peuvent \u00eatre connect\u00e9s comme les connexions Google ou Microsoft. SAML . OpenID Connect En-t\u00eates transf\u00e9r\u00e9s . Pour toute m\u00e9thode d\u2019authentification, vous voudrez \u00e9galement envisager de d\u00e9finir les variables suivantes : COOKIE_MAX_AGE : (optionnel) date d\u2019expiration pour le cookie de session Grist, lorsqu\u2019il est d\u00e9fini sur none , le cookie de session sera en mode Session - il doit \u00eatre supprim\u00e9 apr\u00e8s la fermeture d\u2019un navigateur. S\u2019il est d\u00e9fini sur un nombre, les unit\u00e9s de ce nombre sont des millisecondes. GRIST_FORCE_LOGIN : (optionnel) lorsqu\u2019il est d\u00e9fini sur true , cela indiquera \u00e0 Grist de rediriger les utilisateurs anonymes vers une page de connexion. Pour notre SaaS, nous utilisons un syst\u00e8me d\u2019authentification personnalis\u00e9 bas\u00e9 sur AWS Cognito. Actuellement, nous n\u2019avons pas de plans pour le publier dans le Noyau ou l\u2019Entreprise. Existe-t-il d\u2019autres m\u00e9thodes d\u2019authentification ? # Si les utilisateurs de votre site se connectent via WordPress, ou via un m\u00e9canisme personnalis\u00e9 que vous avez d\u00e9velopp\u00e9, vous voudrez peut-\u00eatre envisager GristConnect , disponible pour Grist Entreprise. Comment activer Grist Entreprise ? # Grist Entreprise peut \u00eatre activ\u00e9 en visitant le panneau d\u2019administration et en cliquant sur le bouton \u2018Activer les fonctionnalit\u00e9s Grist Entreprise\u2019. Cela fera red\u00e9marrer Grist automatiquement. Vous devriez maintenant avoir une version non activ\u00e9e de Grist Entreprise, avec une p\u00e9riode d\u2019essai de 30 jours. Les cl\u00e9s d\u2019activation sont utilis\u00e9es pour ex\u00e9cuter Grist Entreprise apr\u00e8s une p\u00e9riode d\u2019essai de 30 jours \u00e9coul\u00e9e. Obtenez une cl\u00e9 d\u2019activation en vous inscrivant \u00e0 Grist Entreprise . Vous n\u2019avez pas besoin d\u2019une cl\u00e9 d\u2019activation pour ex\u00e9cuter Grist Noyau, et pouvez revenir au Noyau \u00e0 tout moment en utilisant le bouton dans le panneau d\u2019administration. Placez le contenu de votre cl\u00e9 d\u2019activation dans une variable d\u2019environnement appel\u00e9e GRIST_ACTIVATION , ou placez-la dans un r\u00e9pertoire accessible \u00e0 Grist et fournissez le chemin complet vers le fichier avec la variable d\u2019environnement GRIST_ACTIVATION_FILE . Sans la cl\u00e9 d\u2019activation, il y aura une banni\u00e8re indiquant que Grist est en mode d\u2019essai. Une fois la cl\u00e9 d\u2019activation d\u00e9tect\u00e9e, cette banni\u00e8re dispara\u00eetra. Le remplacement de la cl\u00e9 d\u2019activation n\u00e9cessitera un red\u00e9marrage de Grist. docker run ... -e GRIST_ACTIVATION= \\ -it gristlabs/grist Personnalisation # Comment personnaliser le style ? # L\u2019interface utilisateur de Grist a de nombreux \u00e9l\u00e9ments, dont certains peuvent ne pas \u00eatre pertinents pour vous. Pour les installations autog\u00e9r\u00e9es de Grist, vous pouvez d\u00e9sactiver de nombreux \u00e9l\u00e9ments en utilisant GRIST_HIDE_UI_ELEMENTS . Ceci est une liste s\u00e9par\u00e9e par des virgules des parties de l\u2019interface utilisateur \u00e0 cacher. Les noms autoris\u00e9s des parties sont : helpCenter,billing,templates,multiSite,multiAccounts . Les \u00e9l\u00e9ments de l\u2019interface utilisateur pr\u00e9sents sont \u00e9galement affect\u00e9s par le fait que GRIST_SINGLE_ORG soit d\u00e9fini. docker run ... -e GRIST_HIDE_UI_ELEMENTS=helpCenter,billing,templates,multiSite,multiAccounts \\ ... Par d\u00e9faut, les pages de l\u2019interface utilisateur de Grist ont - Grist ajout\u00e9 \u00e0 leur titre. Vous pouvez changer cela en d\u00e9finissant GRIST_PAGE_TITLE_SUFFIX : docker run ... -e GRIST_PAGE_TITLE_SUFFIX=\" - Cool Beans\" \\ ... Vous pouvez d\u00e9finir le suffixe sur \"_blank\" pour le supprimer compl\u00e8tement. Vous pouvez \u00e9galement remplacer le style CSS du site si vous d\u00e9finissez APP_STATIC_INCLUDE_CUSTOM_CSS sur true . docker run ... -e APP_STATIC_INCLUDE_CUSTOM_CSS=true \\ ... Cela chargera un fichier custom.css suppl\u00e9mentaire. Vous pouvez trouver un exemple de tel fichier dans le d\u00e9p\u00f4t Grist Noyau . Le fichier inclut la plupart de nos variables CSS globales pour les couleurs, et quelques variables pour le logo affich\u00e9 dans le coin sup\u00e9rieur gauche. Il n\u2019y a vraiment aucune limite \u00e0 ce qui peut figurer dans le fichier, donc la sp\u00e9cification de styles arbitraires est possible. Notez que toutes les r\u00e8gles CSS doivent utiliser !important pour s\u2019assurer qu\u2019elles ont la plus haute priorit\u00e9. Sinon, il est possible que des r\u00e8gles plus sp\u00e9cifiques incluses par notre framework prennent le pas. Pour remplacer custom.css , vous pouvez faire votre propre copie et vous assurer que Grist l\u2019utilise. Si le fichier CSS est dans votre r\u00e9pertoire actuel, alors faites : docker run ... -v $PWD/custom.css:/grist/static/custom.css ... Il est possible de diriger Grist pour charger des ressources statiques depuis un CDN en d\u00e9finissant APP_STATIC_URL . Si vous le faites, et que vous utilisez du CSS personnalis\u00e9, vous devrez vous assurer que le CSS personnalis\u00e9 est disponible depuis cette URL de base. Comment lister des widgets personnalis\u00e9s ? # Dans notre SaaS, Grist a une liste de widgets personnalis\u00e9s pr\u00e9construits disponibles dans l\u2019interface utilisateur. Vous pouvez faire en sorte que votre installation autog\u00e9r\u00e9e propose la m\u00eame liste en d\u00e9finissant ce qui suit : docker run ... -e GRIST_WIDGET_LIST_URL=\"https://github.com/gristlabs/grist-widget/releases/download/latest/manifest.json\" \\ ... C\u2019est optionnel. Si vous laissez la variable non d\u00e9finie, les documents avec des widgets personnalis\u00e9s fonctionneront toujours bien, mais vous devrez entrer une URL compl\u00e8te lorsque vous ajoutez des widgets personnalis\u00e9s plut\u00f4t que de choisir une option dans un menu d\u00e9roulant. Vous pouvez rendre votre propre liste de widgets disponible en forkant github.com/gristlabs/grist-widget ou en pr\u00e9parant manuellement un fichier .json sur un serveur public dans le m\u00eame format que notre manifest.json . Comment configurer des notifications par e-mail ? # Dans Grist SaaS, nous envoyons des e-mails tels que des invitations \u00e0 partager un document en utilisant SendGrid . Le m\u00eame m\u00e9canisme est disponible dans Grist Entreprise. Il n\u2019y a pas encore d\u2019\u00e9quivalent dans Grist Noyau. Vous devrez d\u00e9finir une cl\u00e9 API SendGrid : docker run ... -e SENDGRID_API_KEY=SG.XXXXXXX.XXXXX \\ ... Vous devrez rendre un fichier config.json disponible \u00e0 la racine du volume mapp\u00e9 \u00e0 /persist . Son contenu doit \u00eatre le suivant : { \"sendgrid\": { \"api\": { \"prefix\": \"https://api.sendgrid.com/v3\", \"enroll\": \"/marketing/contacts\", \"search\": \"/marketing/contacts/search\", \"searchByEmail\": \"/marketing/contacts/search/emails\", \"listRemove\": \"/marketing/lists/{{id}}/contacts\", \"send\": \"/mail/send\" }, \"address\": { \"from\": { \"email\": \"\", \"name\": \"le nom \u00e0 afficher avec l'e-mail\" } }, \"template\": { \"invite\": \"d-f9.....\", \"billingManagerInvite\": \"d-f9.....\", \"memberChange\": \"d-b3.....\" }, \"list\": { \"singleUserOnboarding\": \"b22...\" }, \"unsubscribeGroup\": { \"invites\": 19..., \"billingManagers\": 19.... } } } Voici la signification des cl\u00e9s dans ce fichier : sendgrid.api - Les valeurs doivent rester inchang\u00e9es par rapport \u00e0 ce qui est d\u00e9fini dans l\u2019exemple. Cela contr\u00f4le la version de l\u2019API et les points de terminaison. Grist cible actuellement la v3 de l\u2019API web de SendGrid. sendgrid.address - Doit \u00eatre d\u00e9fini sur une adresse e-mail v\u00e9rifi\u00e9e et le nom d\u2019un exp\u00e9diteur SendGrid. Cela contr\u00f4le l\u2019adresse \u201cDe\u201d de tous les e-mails envoy\u00e9s via SendGrid (par exemple, les invitations envoy\u00e9es au nom des utilisateurs Grist). sendgrid.template - Mappe les actions Grist aux identifiants de mod\u00e8les d\u2019e-mail SendGrid. Ceux-ci sont pour les e-mails transactionnels qui sont envoy\u00e9s \u00e0 la suite d\u2019une action se produisant dans Grist. sendgrid.template.invite - Ceci est pour les e-mails envoy\u00e9s aux utilisateurs qui sont invit\u00e9s \u00e0 des documents, des espaces de travail ou des sites. sendgrid.template.memberChange - Ceci est pour les e-mails envoy\u00e9s aux responsables de la facturation lorsque des utilisateurs sont ajout\u00e9s/retir\u00e9s des sites. sendgrid.list - Mappe les actions Grist aux identifiants de listes de marketing SendGrid. Ceux-ci sont pour des e-mails automatis\u00e9s en cours qui sont envoy\u00e9s \u00e0 tous les utilisateurs qui sont inscrits dans une liste particuli\u00e8re. sendgrid.list.singleUserOnboarding - Les nouveaux utilisateurs Grist sont automatiquement ajout\u00e9s \u00e0 cette liste lors de leur premi\u00e8re connexion. Cela est adapt\u00e9 pour envoyer des e-mails d\u2019int\u00e9gration r\u00e9guliers aux utilisateurs. sendgrid.unsubscribeGroup - Mappe les types d\u2019e-mails aux identifiants de groupes de d\u00e9sinscription SendGrid. Ceux-ci permettent aux utilisateurs de se d\u00e9sinscrire de la r\u00e9ception de certains types d\u2019e-mails (via le lien dans l\u2019e-mail). sendgrid.unsubscribeGrist.invites - Si d\u00e9fini, les e-mails d\u2019invitation peuvent \u00eatre supprim\u00e9s via le lien de d\u00e9sinscription dans les e-mails. sendgrid.unsubscribeGrist.billingManagers - Si d\u00e9fini, les e-mails envoy\u00e9s sp\u00e9cifiquement aux responsables de la facturation (par exemple, changements d\u2019adh\u00e9sion) peuvent \u00eatre supprim\u00e9s via le lien de d\u00e9sinscription dans les e-mails. Pour r\u00e9f\u00e9rence, il existe des exemples de mod\u00e8les SendGrid dans example-sendgrid-templates.zip bas\u00e9s sur une exportation des mod\u00e8les SendGrid pour notre SaaS. Comment ajouter plus de packages python ? # L\u2019ensemble des packages python disponibles pour une utilisation dans les formules n\u2019est actuellement pas configurable. Vous pouvez ajouter des packages de toute fa\u00e7on si vous \u00eates pr\u00eat \u00e0 construire et installer votre propre version de Grist. Avertissement Les documents Grist cr\u00e9\u00e9s sur une installation avec des packages python personnalis\u00e9s ne ram\u00e8neront pas ces packages s\u2019ils sont copi\u00e9s vers une autre installation. Les formules utilisant des packages python personnalis\u00e9s donneront des erreurs lorsque ces packages ne seront pas disponibles. Cr\u00e9ez un r\u00e9pertoire vide et ajoutez ce qui suit, dans un fichier appel\u00e9 Dockerfile : FROM gristlabs/grist # ou grist-oss ou grist-omnibus RUN \\ apt update && apt install -y openssl && \\ python3 -m pip install phonenumbers Remplacez phonenumbers par le package python ou les packages que vous souhaitez installer. Vous pouvez maintenant construire votre image Grist personnalis\u00e9e en ex\u00e9cutant un docker build dans le r\u00e9pertoire contenant le Dockerfile : # remplacez \"custom\" par un nom d'utilisateur ou de l'organisation. docker build -t custom/grist . Une fois termin\u00e9, vous pouvez utiliser custom/grist \u00e0 la place de gristlabs/grist(-ee) dans Comment installer Grist , et votre biblioth\u00e8que python sera d\u00e9sormais disponible \u00e0 l\u2019importation dans les formules. Si vous souhaitez que l\u2019importation soit effectu\u00e9e automatiquement, afin de ne pas avoir \u00e0 le faire dans les formules, cela n\u00e9cessite actuellement un changement de code dans sandbox/grist/gencode.py . Si vous \u00eates \u00e0 l\u2019aise avec les modifications de code, alors les instructions de construction du d\u00e9p\u00f4t grist-core sont l\u2019endroit o\u00f9 commencer. Comment configurer des webhooks ? # Il est possible d\u2019utiliser des webhooks pour activer des int\u00e9grations avec des services externes. La documentation des webhooks contient plus de d\u00e9tails. Notez que lors de l\u2019auto-h\u00e9bergement, seuls les services externes autoris\u00e9s par la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS sont autoris\u00e9s. Il y a des pr\u00e9occupations de s\u00e9curit\u00e9 avec l\u2019autorisation de tout domaine, car les services internes de Grist peuvent devenir vuln\u00e9rables \u00e0 la manipulation. Op\u00e9rations # Quelles sont les exigences mat\u00e9rielles pour h\u00e9berger Grist ? # Pour h\u00e9berger Grist en tant que conteneur Linux, voici une configuration connue pour une vari\u00e9t\u00e9 de charges de travail mod\u00e9r\u00e9es : 8 Go de RAM 2 CPU 20 Go de disque Grist est emball\u00e9 pour les architectures CPU suivantes : x86_64 (Sandy Bridge ou plus r\u00e9cent si le sandboxing est activ\u00e9) ARM64 Chaque document Grist est une base de donn\u00e9es s\u00e9par\u00e9e, donc il est difficile de d\u00e9clarer des exigences minimales absolues sans savoir quels documents seront utilis\u00e9s. Dans les tests, le mod\u00e8le de recherche d\u2019investissement fonctionne confortablement servi depuis un conteneur Grist avec : 100 Mo de RAM sans sandboxing activ\u00e9. 200 Mo de RAM avec sandboxing activ\u00e9. 1 CPU. Les exigences en m\u00e9moire et en CPU \u00e9volueront avec le nombre de documents utilis\u00e9s simultan\u00e9ment par votre \u00e9quipe. Le sandboxing est un probl\u00e8me important pour servir Grist. Il est r\u00e9alis\u00e9 en utilisant gvisor . Le sandboxing d\u00e9pend de la disponibilit\u00e9 de certaines capacit\u00e9s, et peut \u00eatre indisponible dans des environnements qui n\u2019autorisent pas ou manquent ces capacit\u00e9s. Le sandboxing de Grist est connu pour fonctionner dans les environnements suivants : Conteneurs docker r\u00e9guliers non privil\u00e9gi\u00e9s avec les param\u00e8tres de s\u00e9curit\u00e9 par d\u00e9faut. Instances AWS EC2. Conteneurs AWS Fargate, avec SYS_PTRACE d\u00e9fini dans linuxParameters.capabilities . Le sandboxing de Grist a \u00e9t\u00e9 signal\u00e9 comme \u00e9chouant \u00e0 s\u2019initialiser sur des processeurs Intel plus anciens qui ne prennent pas en charge la fonctionnalit\u00e9 XSAVE (prise en charge par Sandy Bridge et ult\u00e9rieur). Quels fichiers Grist stocke-t-il ? # Lorsqu\u2019il est install\u00e9 en tant que conteneur, Grist s\u2019attend \u00e0 avoir acc\u00e8s \u00e0 un volume persistant, ou \u00e0 un r\u00e9pertoire partag\u00e9 avec l\u2019h\u00f4te, dans lequel il stocke tout ce qui doit durer au-del\u00e0 d\u2019un red\u00e9marrage de conteneur. Concr\u00e8tement, si vous avez d\u00e9marr\u00e9 Grist exactement comme d\u00e9crit dans Comment installer Grist , ce r\u00e9pertoire serait ~/grist . Voici ce que vous y trouveriez : Un sous-r\u00e9pertoire appel\u00e9 docs , contenant des fichiers *.grist . Ce sont des documents Grist. Les documents Grist sont des bases de donn\u00e9es SQLite, donc vous pouvez inspecter ces fichiers avec l\u2019utilitaire standard sqlite3 . Vous pouvez \u00e9galement les t\u00e9l\u00e9charger sur une autre installation de Grist (comme notre service h\u00e9berg\u00e9) et les visualiser/\u00e9diter l\u00e0-bas. Si vous d\u00e9placez ou renommez ces fichiers, Grist ne les reconna\u00eetra plus. Si le support des snapshots est configur\u00e9, il y aura des fichiers suppl\u00e9mentaires \u00e0 c\u00f4t\u00e9 de chaque fichier .grist pour suivre son \u00e9tat de stockage. Un fichier appel\u00e9 grist-sessions.db . Cela contient des informations pour prendre en charge les sessions de navigateur avec Grist. C\u2019est une base de donn\u00e9es SQLite. Si redis est configur\u00e9 , cela est utilis\u00e9 \u00e0 la place de ce fichier. Un fichier appel\u00e9 home.sqlite3 . Cela contient des informations sur les \u00e9quipes, les espaces de travail et les documents (m\u00e9tadonn\u00e9es uniquement, telles que les noms, plut\u00f4t que le contenu des documents tels que les tables et les cellules). C\u2019est une base de donn\u00e9es SQLite. Elle est appel\u00e9e la base de donn\u00e9es principale et si PostgreSQL est configur\u00e9, cela est utilis\u00e9 \u00e0 la place de ce fichier. Si vous utilisez Grist Omnibus, il y a d\u2019autres fichiers, y compris : Un r\u00e9pertoire auth , avec une base de donn\u00e9es SQLite pour suivre l\u2019\u00e9tat de connexion, et un stockage de tous les certificats cr\u00e9\u00e9s. Un r\u00e9pertoire param , avec des secrets invent\u00e9s pour l\u2019installation. Qu\u2019est-ce qu\u2019une base de donn\u00e9es \u201cprincipale\u201d ? # Grist stocke des m\u00e9tadonn\u00e9es sur les utilisateurs, les documents, les espaces de travail, etc. dans une base de donn\u00e9es appel\u00e9e la \u201cbase de donn\u00e9es principale\u201d. Cela ne contient pas le mat\u00e9riel \u00e0 l\u2019int\u00e9rieur des documents tels que les tables et les colonnes, mais contient des noms de documents et des heures de cr\u00e9ation, par exemple. Par d\u00e9faut, Grist cr\u00e9era une base de donn\u00e9es principale dans un fichier Sqlite dans le r\u00e9pertoire /persist . Pour utiliser \u00e0 la place une base de donn\u00e9es PostgreSQL, cr\u00e9ez la base de donn\u00e9es ainsi qu\u2019un utilisateur ayant un acc\u00e8s suffisant pour cr\u00e9er des tables, et d\u00e9finissez les variables suivantes : TYPEORM_TYPE - d\u00e9fini sur postgres TYPEORM_DATABASE - d\u00e9fini sur le nom de la base de donn\u00e9es, par exemple home TYPEORM_USERNAME - d\u00e9fini sur le nom d\u2019utilisateur postgres ayant des droits sur la base de donn\u00e9es TYPEORM_PASSWORD - d\u00e9fini sur le mot de passe postgres ayant des droits sur la base de donn\u00e9es TYPEORM_HOST - d\u00e9fini sur le nom d\u2019h\u00f4te de la base de donn\u00e9es, par exemple grist.mumble.rds.amazonaws.com TYPEORM_PORT - d\u00e9fini sur le num\u00e9ro de port de la base de donn\u00e9es si ce n\u2019est pas le d\u00e9faut pour PostgreSQL Grist est connu pour fonctionner avec PostgreSQL des versions 10 \u00e0 14 (les versions ult\u00e9rieures devraient \u00e9galement fonctionner, mais n\u2019ont pas \u00e9t\u00e9 sp\u00e9cifiquement test\u00e9es au moment de la r\u00e9daction). Qu\u2019est-ce qu\u2019un magasin d\u2019\u00e9tat ? # Grist peut \u00eatre configur\u00e9 pour utiliser Redis comme cache d\u2019\u00e9tat externe. Pour la plupart des fonctionnalit\u00e9s de Grist, cela est optionnel. Il est requis pour le support des webhooks, et recommand\u00e9 pour le support des snapshots. Pour l\u2019utiliser, il suffit de d\u00e9finir REDIS_URL sur quelque chose comme redis://hostname/N o\u00f9 N est un num\u00e9ro de base de donn\u00e9es redis. docker run ... -e REDIS_URL=\"redis://hostname/N\" ... Comment configurer des snapshots ? # La fonctionnalit\u00e9 de stockage cloud de Grist permet la synchronisation automatique des documents Grist et des versions de documents vers un bucket compatible S3 (disponible pour toutes les versions de Grist) ou vers un stockage Azure (dans Grist Entreprise). Voici un exemple d\u2019ex\u00e9cution de Grist localement, avec des snapshots stock\u00e9s dans une instance MinIO de test : # Cr\u00e9er un r\u00e9seau docker network create grist # D\u00e9marrer Redis dans notre r\u00e9seau (recommand\u00e9 pour les snapshots) docker run --rm --network grist --name redis redis # D\u00e9marrer MinIO dans notre r\u00e9seau docker run --rm --network grist --name minio \\ -v /tmp/minio:/data \\ -p 9000:9000 -p 9001:9001 \\ -e MINIO_ROOT_USER=grist -e MINIO_ROOT_PASSWORD=admingrist \\ -it minio/minio server /data -console-address \":9001\" # Visitez http://localhost:9000 et configurez un bucket appel\u00e9 grist-docs. # Assurez-vous d'activer la versioning sur le bucket. # Connectez Grist \u00e0 Redis et MinIO docker run --rm --network grist \\ -e GRIST_DOCS_MINIO_ACCESS_KEY=grist \\ -e GRIST_DOCS_MINIO_SECRET_KEY=admingrist \\ -e GRIST_DOCS_MINIO_USE_SSL=0 \\ -e GRIST_DOCS_MINIO_BUCKET=grist-docs \\ -e GRIST_DOCS_MINIO_ENDPOINT=minio \\ -e GRIST_DOCS_MINIO_PORT=9000 \\ -e REDIS_URL=redis://redis \\ -v /tmp/grist:/persist -p 8484:8484 -it gristlabs/grist Voici des drapeaux pour faire parler Grist \u00e0 un bucket AWS S3 en utilisant le client MinIO : ... -e GRIST_DOCS_MINIO_ACCESS_KEY=$AWS_ACCESS_KEY_ID \\ -e GRIST_DOCS_MINIO_SECRET_KEY=$AWS_SECRET_ACCESS_KEY \\ -e GRIST_DOCS_MINIO_ENDPOINT=s3.amazonaws.com \\ -e GRIST_DOCS_MINIO_BUCKET=grist-docs \\ ... Selon les sp\u00e9cifications de MinIO , la r\u00e9gion par d\u00e9faut du bucket est us-east-1 . Cette r\u00e9gion par d\u00e9faut peut \u00eatre remplac\u00e9e en utilisant le drapeau GRIST_DOCS_MINIO_BUCKET_REGION . Pour plus de d\u00e9tails, et d\u2019autres options, voir Stockage Cloud . Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? # Par d\u00e9faut, les installations Grist ne \u201ct\u00e9l\u00e9phonent pas\u201d \u00e0 un service central. Il est utile de leur permettre de le faire, pour donner \u00e0 Grist Labs un aper\u00e7u limit\u00e9 de votre utilisation, \u00e0 travers des mesures appel\u00e9es t\u00e9l\u00e9m\u00e9trie. Cela aidera \u00e0 guider le d\u00e9veloppement et \u00e0 attirer l\u2019attention sur les utilisateurs autog\u00e9r\u00e9s en tant que groupe. Le moyen le plus simple pour un propri\u00e9taire d\u2019une installation Grist de choisir d\u2019envoyer la t\u00e9l\u00e9m\u00e9trie \u00e0 Grist Labs est de cliquer sur le bouton \u201cOpter pour la t\u00e9l\u00e9m\u00e9trie\u201d sur la banni\u00e8re \u201cSupport Grist\u201d sur la page principale de l\u2019installation. Si vous ne souhaitez pas opter pour cela, vous pouvez ignorer la banni\u00e8re. La banni\u00e8re est affich\u00e9e uniquement au propri\u00e9taire de l\u2019installation. Le propri\u00e9taire de l\u2019installation est l\u2019utilisateur dont l\u2019adresse e-mail correspond \u00e0 la variable d\u2019environnement GRIST_DEFAULT_EMAIL (si d\u00e9finie). Vous pouvez contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie \u00e0 tout moment en utilisant la page \u201cSupport Grist\u201d, si vous \u00eates le propri\u00e9taire de l\u2019installation. Plut\u00f4t que d\u2019utiliser des boutons pour opter pour la t\u00e9l\u00e9m\u00e9trie, vous pouvez d\u00e9finir la variable d\u2019environnement GRIST_TELEMETRY_LEVEL sur limited . Cela a le m\u00eame effet que le bouton \u201cOpter pour la t\u00e9l\u00e9m\u00e9trie\u201d. La variable d\u2019environnement GRIST_TELEMETRY_LEVEL , si d\u00e9finie, prend la priorit\u00e9 sur tout param\u00e8tre effectu\u00e9 de mani\u00e8re interactive. Les valeurs recommand\u00e9es sont limited ou off . Dans tous les cas, lisez t\u00e9l\u00e9m\u00e9trie limit\u00e9e pour des d\u00e9tails exacts sur les donn\u00e9es envoy\u00e9es, et aper\u00e7u de la t\u00e9l\u00e9m\u00e9trie pour plus d\u2019explications. Une m\u00e9thode interactive pour contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie n\u2019est actuellement disponible que pour les versions Grist Noyau. Dans tous les cas, le d\u00e9faut est de ne pas envoyer de t\u00e9l\u00e9m\u00e9trie. Comment mettre \u00e0 jour mon installation ? # Nous publions actuellement de nouvelles images Grist Noyau et Entreprise \u00e0 environ des intervalles hebdomadaires. Grist g\u00e8re toutes les migrations qui peuvent \u00eatre n\u00e9cessaires pour les documents ou les bases de donn\u00e9es qu\u2019il utilise. Des utilitaires tels que Watchtower peuvent maintenir votre version de Grist \u00e0 jour pour vous. Que faire si j\u2019ai besoin d\u2019une haute disponibilit\u00e9 ? # Nous avons d\u00e9velopp\u00e9 une expertise dans l\u2019h\u00e9bergement d\u2019installations Grist tr\u00e8s occup\u00e9es, avec de nombreux utilisateurs, y compris comment mettre \u00e0 jour avec un minimum de perturbation, et comment \u00e9voluer pour g\u00e9rer une charge lourde. Nous serions heureux d\u2019aider les clients Entreprise ayant des besoins de cette nature.","title":"Self-managed Grist"},{"location":"self-managed/#description-les-elements-essentiels-pour-creer-et-maintenir-une-installation-grist-autogeree","text":"","title":"description: Les \u00e9l\u00e9ments essentiels pour cr\u00e9er et maintenir une installation Grist autog\u00e9r\u00e9e."},{"location":"self-managed/#grist-autogere","text":"description: Les \u00e9l\u00e9ments essentiels pour cr\u00e9er et maintenir une installation Grist autog\u00e9r\u00e9e. Grist Autog\u00e9r\u00e9 Les essentiels Qu\u2019est-ce que Grist Autog\u00e9r\u00e9 ? Comment installer Grist ? Grist sur AWS Comment sandboxer des documents ? XSAVE non disponible PTRACE non disponible Comment ex\u00e9cuter Grist sur un serveur ? Comment configurer une \u00e9quipe ? Comment configurer l\u2019authentification ? Existe-t-il d\u2019autres m\u00e9thodes d\u2019authentification ? Comment activer Grist Entreprise ? Personnalisation Comment personnaliser le style ? Comment lister des widgets personnalis\u00e9s ? Comment configurer des notifications par e-mail ? Comment ajouter plus de packages python ? Comment configurer des webhooks ? Op\u00e9rations Quelles sont les exigences mat\u00e9rielles pour h\u00e9berger Grist ? Quels fichiers Grist stocke-t-il ? Qu\u2019est-ce qu\u2019une base de donn\u00e9es \u201cprincipale\u201d ? Qu\u2019est-ce qu\u2019un magasin d\u2019\u00e9tat ? Comment configurer des snapshots ? Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? Comment mettre \u00e0 jour mon installation ? Que faire si j\u2019ai besoin d\u2019une haute disponibilit\u00e9 ?","title":"Grist Autog\u00e9r\u00e9"},{"location":"self-managed/#les-essentiels","text":"","title":"Les essentiels"},{"location":"self-managed/#quest-ce-que-grist-autogere","text":"Il existe quatre variantes de Grist : SaaS (Software as a Service) : Grist est disponible en tant que service h\u00e9berg\u00e9 sur docs.getgrist.com . Aucune installation n\u00e9cessaire. Plans gratuits et payants, avec des limites d\u2019utilisation. Application de bureau : Grist est disponible en tant qu\u2019application de bureau, construite avec Electron. Elle est disponible en t\u00e9l\u00e9chargement sur https://github.com/gristlabs/grist-desktop/releases . Cette application de bureau n\u2019a pas besoin d\u2019internet et n\u2019est li\u00e9e \u00e0 aucun compte ou service en ligne. Entreprise Autog\u00e9r\u00e9e : Grist est disponible en tant qu\u2019application sous licence install\u00e9e par des entreprises sur leur propre infrastructure avec notre support et assistance. Contient des fonctionnalit\u00e9s propri\u00e9taires d\u00e9velopp\u00e9es pour des entreprises avec des besoins particuliers. Noyau Autog\u00e9r\u00e9 : Grist est disponible en tant qu\u2019application gratuite install\u00e9e par des d\u00e9veloppeurs citoyens sur leur propre infrastructure avec le soutien de la communaut\u00e9. Les documents Grist cr\u00e9\u00e9s avec nos offres SaaS et Entreprise peuvent \u00eatre ouverts et modifi\u00e9s avec le Noyau, et vice versa. Cela \u00e9tablit les documents Grist comme un format fiable pour l\u2019archivage et l\u2019\u00e9change. Grist Autog\u00e9r\u00e9, qu\u2019il s\u2019agisse de l\u2019Entreprise ou du Noyau, est install\u00e9 et configur\u00e9 de la m\u00eame mani\u00e8re, comme d\u00e9crit dans les sections suivantes. Pour plus de clart\u00e9, les sections sont \u00e9tiquet\u00e9es avec la variante \u00e0 laquelle elles s\u2019appliquent, par exemple : Le code source complet de Grist Noyau est toujours disponible sur github.com/gristlabs/grist-core et est sous une licence Apache-2.0. Vous pouvez utiliser et redistribuer le Noyau librement, selon les termes de la licence de logiciel libre. Le code source complet de Grist Entreprise est \u00e9galement disponible, sur github.com/gristlabs/grist-ee , sous une licence propri\u00e9taire qui ne conf\u00e8re aucun droit automatique d\u2019utiliser ou de redistribuer le logiciel. Vous pouvez \u00e9valuer l\u2019Entreprise pendant 30 jours en utilisant les instructions dans les sections suivantes, ou vous inscrire \u00e0 notre plan Grist Entreprise et obtenir du support.","title":"Qu’est-ce que Grist Autog\u00e9r\u00e9 ?"},{"location":"self-managed/#comment-installer-grist","text":"Le moyen le plus simple d\u2019installer Grist est en tant que conteneur. Nous allons d\u00e9crire comment faire en utilisant Docker , mais il existe de nombreux autres outils et services pour ex\u00e9cuter des conteneurs. Pour essayer Grist avec Docker, cr\u00e9ez un r\u00e9pertoire vide pour que Grist y stocke des donn\u00e9es (par exemple ~/grist ) et ensuite vous pouvez faire : docker run -p 8484:8484 \\ -v ~/grist:/persist \\ -e GRIST_SESSION_SECRET=inventez-un-secret-ici \\ -it gristlabs/grist Vous devriez alors pouvoir visiter http://localhost:8484 dans votre navigateur. Vous pourrez d\u00e9j\u00e0 cr\u00e9er et modifier des documents Grist, et ouvrir et modifier des documents t\u00e9l\u00e9charg\u00e9s depuis une autre installation Grist (comme notre SaaS). Si vous utilisez un autre outil ou service, voici les points importants : Le nom de l\u2019image principale est gristlabs/grist , qui est notre image Docker combin\u00e9e Noyau et Entreprise. L\u2019image gristlabs/grist-oss existe \u00e9galement, qui utilise uniquement du code libre et open source. Cette image utilise uniquement Grist Noyau, et n\u2019a pas de fonctionnalit\u00e9s d\u2019entreprise disponibles. (Pour certains outils comme Podman, vous devrez peut-\u00eatre pr\u00e9fixer ces noms d\u2019image avec docker.io/ .) Un volume (ou montage, ou r\u00e9pertoire) doit \u00eatre disponible \u00e0 l\u2019emplacement /persist dans le conteneur. Il peut \u00eatre initialement vide - Grist le remplira. Sans ce volume, rien de ce que vous faites ne sera stock\u00e9 \u00e0 long terme. Le port 8484 sur le conteneur doit \u00eatre expos\u00e9. Cela peut \u00eatre chang\u00e9 si vous d\u00e9finissez \u00e9galement la variable d\u2019environnement PORT pour le conteneur. La variable d\u2019environnement GRIST_SESSION_SECRET doit \u00eatre d\u00e9finie sur quelque chose de secret pour le conteneur. Install\u00e9 de cette mani\u00e8re, Grist est accessible uniquement par vous. En g\u00e9n\u00e9ral, vous voudrez prendre au moins les \u00e9tapes suivantes : Configurer le sandboxing - cela est important pour limiter ce que les formules peuvent faire. Servir depuis un h\u00f4te public afin de pouvoir collaborer en direct avec d\u2019autres. Activer une m\u00e9thode d\u2019authentification afin que les utilisateurs puissent se connecter. Souvent, vous voudrez connecter Grist \u00e0 un service \u201cSSO\u201d (Single Sign-On) que vous utilisez d\u00e9j\u00e0. Nous supportons certaines m\u00e9thodes d\u2019authentification tr\u00e8s g\u00e9n\u00e9rales qui couvrent de nombreux cas, et une m\u00e9thode d\u2019authentification sp\u00e9ciale pour des cas personnalis\u00e9s. Envisager d\u2019activer le support des snapshots si vous souhaitez que Grist g\u00e8re les sauvegardes de documents.","title":"Comment installer Grist ?"},{"location":"self-managed/#grist-sur-aws","text":"Vous pouvez \u00e9galement h\u00e9berger Grist sur AWS. Des instructions compl\u00e8tes sur cette m\u00e9thode d\u2019h\u00e9bergement sont disponibles sur la page Grist AWS Marketplace .","title":"Grist sur AWS"},{"location":"self-managed/#comment-sandboxer-des-documents","text":"Grist permet des formules tr\u00e8s puissantes, utilisant Python. Nous recommandons de d\u00e9finir la variable d\u2019environnement GRIST_SANDBOX_FLAVOR sur gvisor si votre mat\u00e9riel le prend en charge (la plupart le feront), pour ex\u00e9cuter des formules dans chaque document dans un sandbox isol\u00e9 des autres documents et isol\u00e9 du r\u00e9seau. docker run ... -e GRIST_SANDBOX_FLAVOR=gvisor \\ ... Pour v\u00e9rifier que les formules sont \u00e9valu\u00e9es dans un sandbox, vous pouvez cr\u00e9er un document et ensuite v\u00e9rifier que cette formule donne un r\u00e9sultat vide : import glob glob.glob('/etc/*') Voici quelques raisons pour lesquelles le sandboxing gvisor , tel que configur\u00e9 pour Grist, peut \u00e9chouer, et ce que vous pouvez faire pour diagnostiquer le probl\u00e8me.","title":"Comment sandboxer des documents ?"},{"location":"self-managed/#xsave-non-disponible","text":"Votre processeur peut ne pas \u00eatre pris en charge. Sur x86_64 , Sandy Bridge ou plus r\u00e9cent est n\u00e9cessaire. V\u00e9rifiez que le drapeau processeur XSAVE est d\u00e9fini. Voici un moyen rapide de tester cela : grep -q '\\bxsave\\b' /proc/cpuinfo && echo \"XSAVE activ\u00e9\" || echo \"XSAVE manquant\"","title":"XSAVE non disponible"},{"location":"self-managed/#ptrace-non-disponible","text":"La capacit\u00e9 SYS_PTRACE peut ne pas \u00eatre disponible. Si vous ex\u00e9cutez dans docker, vous pourriez essayer de l\u2019accorder explicitement, si vous \u00eates \u00e0 l\u2019aise avec sa mise \u00e0 disposition : docker run ... --cap-add=SYS_PTRACE ... Dans certains environnements cloud tels que AWS ECS, vous devrez peut-\u00eatre \u00e9num\u00e9rer explicitement cette capacit\u00e9 dans votre configuration de conteneur.","title":"PTRACE non disponible"},{"location":"self-managed/#comment-executer-grist-sur-un-serveur","text":"Nous vous sugg\u00e9rons de vous familiariser avec tous les autres aspects de l\u2019autogestion sur cette page avant de servir Grist depuis un h\u00f4te public (surtout Sandboxing ). Lorsque vous le ferez, il est important de dire \u00e0 Grist d\u2019o\u00f9 il sera servi, en utilisant la variable APP_HOME_URL . Par exemple, si vous allez servir depuis https://grist.example.com , faites savoir \u00e0 Grist comme ceci : docker run ... -e APP_HOME_URL=\"https://grist.example.com\" \\ ... Vous devrez placer un \u201cproxy inverse\u201d devant Grist pour g\u00e9rer la \u201cterminaison SSL\u201d (d\u00e9cryptage du trafic chiffr\u00e9) en utilisant un certificat qui \u00e9tablit la propri\u00e9t\u00e9 du site. Si vous ne savez pas ce que cela signifie, vous pourriez essayer d\u2019utiliser le Grist Omnibus qui emballe Grist avec un proxy inverse qui utilisera Let\u2019s Encrypt pour obtenir un certificat pour vous automatiquement. Un travail important d\u2019un tel proxy est de rediriger correctement les connexions websocket . Cela repr\u00e9sente deux exigences : Assurez-vous que le proxy utilise HTTP 1.1 Passez les en-t\u00eates HTTP n\u00e9cessaires Upgrade, Connection et Host afin qu\u2019une connexion HTTP puisse \u00eatre mise \u00e0 niveau vers une connexion websocket. Par exemple, voici une configuration minimale pour nginx , un choix possible pour un proxy inverse. server { server_name grist.example.com; location / { proxy_pass http://localhost:8484; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Support WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; } } Cette configuration g\u00e9rera le trafic HTTP de base et les websockets. Elle n\u00e9cessite encore une configuration SSL/TLS suppl\u00e9mentaire. Une option simple pour l\u2019auto-h\u00e9bergement \u00e0 petite \u00e9chelle est d\u2019utiliser certbot par l\u2019EFF .","title":"Comment ex\u00e9cuter Grist sur un serveur ?"},{"location":"self-managed/#comment-configurer-une-equipe","text":"Grist a un concept de \u201csites d\u2019\u00e9quipe\u201d qui sont des zones ind\u00e9pendamment g\u00e9r\u00e9es et nomm\u00e9es contenant leurs propres espaces de travail et documents. Les sites d\u2019\u00e9quipe peuvent avoir des sous-domaines distincts (comme sur les sites d\u2019\u00e9quipe h\u00e9berg\u00e9s de notre SaaS), ou \u00eatre distingu\u00e9s par un pr\u00e9fixe de chemin sp\u00e9cial. Cela n\u2019a souvent pas de sens pour les installations autog\u00e9r\u00e9es, o\u00f9 il y a une seule \u00e9quipe. Avec un seul domaine et une seule \u00e9quipe, le pr\u00e9fixe de chemin sp\u00e9cial (qui ressemble \u00e0 /o/ ) est un gaspillage d\u2019espace peu \u00e9l\u00e9gant dans les URL. Vous pouvez donc indiquer \u00e0 Grist d\u2019utiliser une seule \u00e9quipe en d\u00e9finissant GRIST_SINGLE_ORG (\u201corg\u201d ou \u201corganisation\u201d est un synonyme pour \u00e9quipe) : docker run ... -e GRIST_SINGLE_ORG=cool-beans Le nom de l\u2019\u00e9quipe ne doit utiliser que des caract\u00e8res minuscules a-z, des chiffres 0-9, et le tiret ( - ). Vous voudrez \u00e9galement peut-\u00eatre vous pencher sur Personnalisation du style pour cacher les \u00e9l\u00e9ments d\u2019interface utilisateur dont vous n\u2019avez pas besoin.","title":"Comment configurer une \u00e9quipe ?"},{"location":"self-managed/#comment-configurer-lauthentification","text":"L\u2019authentification peut \u00eatre configur\u00e9e de plusieurs mani\u00e8res pour Grist Noyau et Entreprise, en utilisant SAML, OpenID Connect ou des en-t\u00eates transf\u00e9r\u00e9s. Entre les deux, de nombreux SSO populaires peuvent \u00eatre connect\u00e9s comme les connexions Google ou Microsoft. SAML . OpenID Connect En-t\u00eates transf\u00e9r\u00e9s . Pour toute m\u00e9thode d\u2019authentification, vous voudrez \u00e9galement envisager de d\u00e9finir les variables suivantes : COOKIE_MAX_AGE : (optionnel) date d\u2019expiration pour le cookie de session Grist, lorsqu\u2019il est d\u00e9fini sur none , le cookie de session sera en mode Session - il doit \u00eatre supprim\u00e9 apr\u00e8s la fermeture d\u2019un navigateur. S\u2019il est d\u00e9fini sur un nombre, les unit\u00e9s de ce nombre sont des millisecondes. GRIST_FORCE_LOGIN : (optionnel) lorsqu\u2019il est d\u00e9fini sur true , cela indiquera \u00e0 Grist de rediriger les utilisateurs anonymes vers une page de connexion. Pour notre SaaS, nous utilisons un syst\u00e8me d\u2019authentification personnalis\u00e9 bas\u00e9 sur AWS Cognito. Actuellement, nous n\u2019avons pas de plans pour le publier dans le Noyau ou l\u2019Entreprise.","title":"Comment configurer l’authentification ?"},{"location":"self-managed/#existe-t-il-dautres-methodes-dauthentification","text":"Si les utilisateurs de votre site se connectent via WordPress, ou via un m\u00e9canisme personnalis\u00e9 que vous avez d\u00e9velopp\u00e9, vous voudrez peut-\u00eatre envisager GristConnect , disponible pour Grist Entreprise.","title":"Existe-t-il d’autres m\u00e9thodes d’authentification ?"},{"location":"self-managed/#comment-activer-grist-entreprise","text":"Grist Entreprise peut \u00eatre activ\u00e9 en visitant le panneau d\u2019administration et en cliquant sur le bouton \u2018Activer les fonctionnalit\u00e9s Grist Entreprise\u2019. Cela fera red\u00e9marrer Grist automatiquement. Vous devriez maintenant avoir une version non activ\u00e9e de Grist Entreprise, avec une p\u00e9riode d\u2019essai de 30 jours. Les cl\u00e9s d\u2019activation sont utilis\u00e9es pour ex\u00e9cuter Grist Entreprise apr\u00e8s une p\u00e9riode d\u2019essai de 30 jours \u00e9coul\u00e9e. Obtenez une cl\u00e9 d\u2019activation en vous inscrivant \u00e0 Grist Entreprise . Vous n\u2019avez pas besoin d\u2019une cl\u00e9 d\u2019activation pour ex\u00e9cuter Grist Noyau, et pouvez revenir au Noyau \u00e0 tout moment en utilisant le bouton dans le panneau d\u2019administration. Placez le contenu de votre cl\u00e9 d\u2019activation dans une variable d\u2019environnement appel\u00e9e GRIST_ACTIVATION , ou placez-la dans un r\u00e9pertoire accessible \u00e0 Grist et fournissez le chemin complet vers le fichier avec la variable d\u2019environnement GRIST_ACTIVATION_FILE . Sans la cl\u00e9 d\u2019activation, il y aura une banni\u00e8re indiquant que Grist est en mode d\u2019essai. Une fois la cl\u00e9 d\u2019activation d\u00e9tect\u00e9e, cette banni\u00e8re dispara\u00eetra. Le remplacement de la cl\u00e9 d\u2019activation n\u00e9cessitera un red\u00e9marrage de Grist. docker run ... -e GRIST_ACTIVATION= \\ -it gristlabs/grist","title":"Comment activer Grist Entreprise ?"},{"location":"self-managed/#personnalisation","text":"","title":"Personnalisation"},{"location":"self-managed/#comment-personnaliser-le-style","text":"L\u2019interface utilisateur de Grist a de nombreux \u00e9l\u00e9ments, dont certains peuvent ne pas \u00eatre pertinents pour vous. Pour les installations autog\u00e9r\u00e9es de Grist, vous pouvez d\u00e9sactiver de nombreux \u00e9l\u00e9ments en utilisant GRIST_HIDE_UI_ELEMENTS . Ceci est une liste s\u00e9par\u00e9e par des virgules des parties de l\u2019interface utilisateur \u00e0 cacher. Les noms autoris\u00e9s des parties sont : helpCenter,billing,templates,multiSite,multiAccounts . Les \u00e9l\u00e9ments de l\u2019interface utilisateur pr\u00e9sents sont \u00e9galement affect\u00e9s par le fait que GRIST_SINGLE_ORG soit d\u00e9fini. docker run ... -e GRIST_HIDE_UI_ELEMENTS=helpCenter,billing,templates,multiSite,multiAccounts \\ ... Par d\u00e9faut, les pages de l\u2019interface utilisateur de Grist ont - Grist ajout\u00e9 \u00e0 leur titre. Vous pouvez changer cela en d\u00e9finissant GRIST_PAGE_TITLE_SUFFIX : docker run ... -e GRIST_PAGE_TITLE_SUFFIX=\" - Cool Beans\" \\ ... Vous pouvez d\u00e9finir le suffixe sur \"_blank\" pour le supprimer compl\u00e8tement. Vous pouvez \u00e9galement remplacer le style CSS du site si vous d\u00e9finissez APP_STATIC_INCLUDE_CUSTOM_CSS sur true . docker run ... -e APP_STATIC_INCLUDE_CUSTOM_CSS=true \\ ... Cela chargera un fichier custom.css suppl\u00e9mentaire. Vous pouvez trouver un exemple de tel fichier dans le d\u00e9p\u00f4t Grist Noyau . Le fichier inclut la plupart de nos variables CSS globales pour les couleurs, et quelques variables pour le logo affich\u00e9 dans le coin sup\u00e9rieur gauche. Il n\u2019y a vraiment aucune limite \u00e0 ce qui peut figurer dans le fichier, donc la sp\u00e9cification de styles arbitraires est possible. Notez que toutes les r\u00e8gles CSS doivent utiliser !important pour s\u2019assurer qu\u2019elles ont la plus haute priorit\u00e9. Sinon, il est possible que des r\u00e8gles plus sp\u00e9cifiques incluses par notre framework prennent le pas. Pour remplacer custom.css , vous pouvez faire votre propre copie et vous assurer que Grist l\u2019utilise. Si le fichier CSS est dans votre r\u00e9pertoire actuel, alors faites : docker run ... -v $PWD/custom.css:/grist/static/custom.css ... Il est possible de diriger Grist pour charger des ressources statiques depuis un CDN en d\u00e9finissant APP_STATIC_URL . Si vous le faites, et que vous utilisez du CSS personnalis\u00e9, vous devrez vous assurer que le CSS personnalis\u00e9 est disponible depuis cette URL de base.","title":"Comment personnaliser le style ?"},{"location":"self-managed/#comment-lister-des-widgets-personnalises","text":"Dans notre SaaS, Grist a une liste de widgets personnalis\u00e9s pr\u00e9construits disponibles dans l\u2019interface utilisateur. Vous pouvez faire en sorte que votre installation autog\u00e9r\u00e9e propose la m\u00eame liste en d\u00e9finissant ce qui suit : docker run ... -e GRIST_WIDGET_LIST_URL=\"https://github.com/gristlabs/grist-widget/releases/download/latest/manifest.json\" \\ ... C\u2019est optionnel. Si vous laissez la variable non d\u00e9finie, les documents avec des widgets personnalis\u00e9s fonctionneront toujours bien, mais vous devrez entrer une URL compl\u00e8te lorsque vous ajoutez des widgets personnalis\u00e9s plut\u00f4t que de choisir une option dans un menu d\u00e9roulant. Vous pouvez rendre votre propre liste de widgets disponible en forkant github.com/gristlabs/grist-widget ou en pr\u00e9parant manuellement un fichier .json sur un serveur public dans le m\u00eame format que notre manifest.json .","title":"Comment lister des widgets personnalis\u00e9s ?"},{"location":"self-managed/#comment-configurer-des-notifications-par-e-mail","text":"Dans Grist SaaS, nous envoyons des e-mails tels que des invitations \u00e0 partager un document en utilisant SendGrid . Le m\u00eame m\u00e9canisme est disponible dans Grist Entreprise. Il n\u2019y a pas encore d\u2019\u00e9quivalent dans Grist Noyau. Vous devrez d\u00e9finir une cl\u00e9 API SendGrid : docker run ... -e SENDGRID_API_KEY=SG.XXXXXXX.XXXXX \\ ... Vous devrez rendre un fichier config.json disponible \u00e0 la racine du volume mapp\u00e9 \u00e0 /persist . Son contenu doit \u00eatre le suivant : { \"sendgrid\": { \"api\": { \"prefix\": \"https://api.sendgrid.com/v3\", \"enroll\": \"/marketing/contacts\", \"search\": \"/marketing/contacts/search\", \"searchByEmail\": \"/marketing/contacts/search/emails\", \"listRemove\": \"/marketing/lists/{{id}}/contacts\", \"send\": \"/mail/send\" }, \"address\": { \"from\": { \"email\": \"\", \"name\": \"le nom \u00e0 afficher avec l'e-mail\" } }, \"template\": { \"invite\": \"d-f9.....\", \"billingManagerInvite\": \"d-f9.....\", \"memberChange\": \"d-b3.....\" }, \"list\": { \"singleUserOnboarding\": \"b22...\" }, \"unsubscribeGroup\": { \"invites\": 19..., \"billingManagers\": 19.... } } } Voici la signification des cl\u00e9s dans ce fichier : sendgrid.api - Les valeurs doivent rester inchang\u00e9es par rapport \u00e0 ce qui est d\u00e9fini dans l\u2019exemple. Cela contr\u00f4le la version de l\u2019API et les points de terminaison. Grist cible actuellement la v3 de l\u2019API web de SendGrid. sendgrid.address - Doit \u00eatre d\u00e9fini sur une adresse e-mail v\u00e9rifi\u00e9e et le nom d\u2019un exp\u00e9diteur SendGrid. Cela contr\u00f4le l\u2019adresse \u201cDe\u201d de tous les e-mails envoy\u00e9s via SendGrid (par exemple, les invitations envoy\u00e9es au nom des utilisateurs Grist). sendgrid.template - Mappe les actions Grist aux identifiants de mod\u00e8les d\u2019e-mail SendGrid. Ceux-ci sont pour les e-mails transactionnels qui sont envoy\u00e9s \u00e0 la suite d\u2019une action se produisant dans Grist. sendgrid.template.invite - Ceci est pour les e-mails envoy\u00e9s aux utilisateurs qui sont invit\u00e9s \u00e0 des documents, des espaces de travail ou des sites. sendgrid.template.memberChange - Ceci est pour les e-mails envoy\u00e9s aux responsables de la facturation lorsque des utilisateurs sont ajout\u00e9s/retir\u00e9s des sites. sendgrid.list - Mappe les actions Grist aux identifiants de listes de marketing SendGrid. Ceux-ci sont pour des e-mails automatis\u00e9s en cours qui sont envoy\u00e9s \u00e0 tous les utilisateurs qui sont inscrits dans une liste particuli\u00e8re. sendgrid.list.singleUserOnboarding - Les nouveaux utilisateurs Grist sont automatiquement ajout\u00e9s \u00e0 cette liste lors de leur premi\u00e8re connexion. Cela est adapt\u00e9 pour envoyer des e-mails d\u2019int\u00e9gration r\u00e9guliers aux utilisateurs. sendgrid.unsubscribeGroup - Mappe les types d\u2019e-mails aux identifiants de groupes de d\u00e9sinscription SendGrid. Ceux-ci permettent aux utilisateurs de se d\u00e9sinscrire de la r\u00e9ception de certains types d\u2019e-mails (via le lien dans l\u2019e-mail). sendgrid.unsubscribeGrist.invites - Si d\u00e9fini, les e-mails d\u2019invitation peuvent \u00eatre supprim\u00e9s via le lien de d\u00e9sinscription dans les e-mails. sendgrid.unsubscribeGrist.billingManagers - Si d\u00e9fini, les e-mails envoy\u00e9s sp\u00e9cifiquement aux responsables de la facturation (par exemple, changements d\u2019adh\u00e9sion) peuvent \u00eatre supprim\u00e9s via le lien de d\u00e9sinscription dans les e-mails. Pour r\u00e9f\u00e9rence, il existe des exemples de mod\u00e8les SendGrid dans example-sendgrid-templates.zip bas\u00e9s sur une exportation des mod\u00e8les SendGrid pour notre SaaS.","title":"Comment configurer des notifications par e-mail ?"},{"location":"self-managed/#comment-ajouter-plus-de-packages-python","text":"L\u2019ensemble des packages python disponibles pour une utilisation dans les formules n\u2019est actuellement pas configurable. Vous pouvez ajouter des packages de toute fa\u00e7on si vous \u00eates pr\u00eat \u00e0 construire et installer votre propre version de Grist. Avertissement Les documents Grist cr\u00e9\u00e9s sur une installation avec des packages python personnalis\u00e9s ne ram\u00e8neront pas ces packages s\u2019ils sont copi\u00e9s vers une autre installation. Les formules utilisant des packages python personnalis\u00e9s donneront des erreurs lorsque ces packages ne seront pas disponibles. Cr\u00e9ez un r\u00e9pertoire vide et ajoutez ce qui suit, dans un fichier appel\u00e9 Dockerfile : FROM gristlabs/grist # ou grist-oss ou grist-omnibus RUN \\ apt update && apt install -y openssl && \\ python3 -m pip install phonenumbers Remplacez phonenumbers par le package python ou les packages que vous souhaitez installer. Vous pouvez maintenant construire votre image Grist personnalis\u00e9e en ex\u00e9cutant un docker build dans le r\u00e9pertoire contenant le Dockerfile : # remplacez \"custom\" par un nom d'utilisateur ou de l'organisation. docker build -t custom/grist . Une fois termin\u00e9, vous pouvez utiliser custom/grist \u00e0 la place de gristlabs/grist(-ee) dans Comment installer Grist , et votre biblioth\u00e8que python sera d\u00e9sormais disponible \u00e0 l\u2019importation dans les formules. Si vous souhaitez que l\u2019importation soit effectu\u00e9e automatiquement, afin de ne pas avoir \u00e0 le faire dans les formules, cela n\u00e9cessite actuellement un changement de code dans sandbox/grist/gencode.py . Si vous \u00eates \u00e0 l\u2019aise avec les modifications de code, alors les instructions de construction du d\u00e9p\u00f4t grist-core sont l\u2019endroit o\u00f9 commencer.","title":"Comment ajouter plus de packages python ?"},{"location":"self-managed/#comment-configurer-des-webhooks","text":"Il est possible d\u2019utiliser des webhooks pour activer des int\u00e9grations avec des services externes. La documentation des webhooks contient plus de d\u00e9tails. Notez que lors de l\u2019auto-h\u00e9bergement, seuls les services externes autoris\u00e9s par la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS sont autoris\u00e9s. Il y a des pr\u00e9occupations de s\u00e9curit\u00e9 avec l\u2019autorisation de tout domaine, car les services internes de Grist peuvent devenir vuln\u00e9rables \u00e0 la manipulation.","title":"Comment configurer des webhooks ?"},{"location":"self-managed/#operations","text":"","title":"Op\u00e9rations"},{"location":"self-managed/#quelles-sont-les-exigences-materielles-pour-heberger-grist","text":"Pour h\u00e9berger Grist en tant que conteneur Linux, voici une configuration connue pour une vari\u00e9t\u00e9 de charges de travail mod\u00e9r\u00e9es : 8 Go de RAM 2 CPU 20 Go de disque Grist est emball\u00e9 pour les architectures CPU suivantes : x86_64 (Sandy Bridge ou plus r\u00e9cent si le sandboxing est activ\u00e9) ARM64 Chaque document Grist est une base de donn\u00e9es s\u00e9par\u00e9e, donc il est difficile de d\u00e9clarer des exigences minimales absolues sans savoir quels documents seront utilis\u00e9s. Dans les tests, le mod\u00e8le de recherche d\u2019investissement fonctionne confortablement servi depuis un conteneur Grist avec : 100 Mo de RAM sans sandboxing activ\u00e9. 200 Mo de RAM avec sandboxing activ\u00e9. 1 CPU. Les exigences en m\u00e9moire et en CPU \u00e9volueront avec le nombre de documents utilis\u00e9s simultan\u00e9ment par votre \u00e9quipe. Le sandboxing est un probl\u00e8me important pour servir Grist. Il est r\u00e9alis\u00e9 en utilisant gvisor . Le sandboxing d\u00e9pend de la disponibilit\u00e9 de certaines capacit\u00e9s, et peut \u00eatre indisponible dans des environnements qui n\u2019autorisent pas ou manquent ces capacit\u00e9s. Le sandboxing de Grist est connu pour fonctionner dans les environnements suivants : Conteneurs docker r\u00e9guliers non privil\u00e9gi\u00e9s avec les param\u00e8tres de s\u00e9curit\u00e9 par d\u00e9faut. Instances AWS EC2. Conteneurs AWS Fargate, avec SYS_PTRACE d\u00e9fini dans linuxParameters.capabilities . Le sandboxing de Grist a \u00e9t\u00e9 signal\u00e9 comme \u00e9chouant \u00e0 s\u2019initialiser sur des processeurs Intel plus anciens qui ne prennent pas en charge la fonctionnalit\u00e9 XSAVE (prise en charge par Sandy Bridge et ult\u00e9rieur).","title":"Quelles sont les exigences mat\u00e9rielles pour h\u00e9berger Grist ?"},{"location":"self-managed/#quels-fichiers-grist-stocke-t-il","text":"Lorsqu\u2019il est install\u00e9 en tant que conteneur, Grist s\u2019attend \u00e0 avoir acc\u00e8s \u00e0 un volume persistant, ou \u00e0 un r\u00e9pertoire partag\u00e9 avec l\u2019h\u00f4te, dans lequel il stocke tout ce qui doit durer au-del\u00e0 d\u2019un red\u00e9marrage de conteneur. Concr\u00e8tement, si vous avez d\u00e9marr\u00e9 Grist exactement comme d\u00e9crit dans Comment installer Grist , ce r\u00e9pertoire serait ~/grist . Voici ce que vous y trouveriez : Un sous-r\u00e9pertoire appel\u00e9 docs , contenant des fichiers *.grist . Ce sont des documents Grist. Les documents Grist sont des bases de donn\u00e9es SQLite, donc vous pouvez inspecter ces fichiers avec l\u2019utilitaire standard sqlite3 . Vous pouvez \u00e9galement les t\u00e9l\u00e9charger sur une autre installation de Grist (comme notre service h\u00e9berg\u00e9) et les visualiser/\u00e9diter l\u00e0-bas. Si vous d\u00e9placez ou renommez ces fichiers, Grist ne les reconna\u00eetra plus. Si le support des snapshots est configur\u00e9, il y aura des fichiers suppl\u00e9mentaires \u00e0 c\u00f4t\u00e9 de chaque fichier .grist pour suivre son \u00e9tat de stockage. Un fichier appel\u00e9 grist-sessions.db . Cela contient des informations pour prendre en charge les sessions de navigateur avec Grist. C\u2019est une base de donn\u00e9es SQLite. Si redis est configur\u00e9 , cela est utilis\u00e9 \u00e0 la place de ce fichier. Un fichier appel\u00e9 home.sqlite3 . Cela contient des informations sur les \u00e9quipes, les espaces de travail et les documents (m\u00e9tadonn\u00e9es uniquement, telles que les noms, plut\u00f4t que le contenu des documents tels que les tables et les cellules). C\u2019est une base de donn\u00e9es SQLite. Elle est appel\u00e9e la base de donn\u00e9es principale et si PostgreSQL est configur\u00e9, cela est utilis\u00e9 \u00e0 la place de ce fichier. Si vous utilisez Grist Omnibus, il y a d\u2019autres fichiers, y compris : Un r\u00e9pertoire auth , avec une base de donn\u00e9es SQLite pour suivre l\u2019\u00e9tat de connexion, et un stockage de tous les certificats cr\u00e9\u00e9s. Un r\u00e9pertoire param , avec des secrets invent\u00e9s pour l\u2019installation.","title":"Quels fichiers Grist stocke-t-il ?"},{"location":"self-managed/#quest-ce-quune-base-de-donnees-principale","text":"Grist stocke des m\u00e9tadonn\u00e9es sur les utilisateurs, les documents, les espaces de travail, etc. dans une base de donn\u00e9es appel\u00e9e la \u201cbase de donn\u00e9es principale\u201d. Cela ne contient pas le mat\u00e9riel \u00e0 l\u2019int\u00e9rieur des documents tels que les tables et les colonnes, mais contient des noms de documents et des heures de cr\u00e9ation, par exemple. Par d\u00e9faut, Grist cr\u00e9era une base de donn\u00e9es principale dans un fichier Sqlite dans le r\u00e9pertoire /persist . Pour utiliser \u00e0 la place une base de donn\u00e9es PostgreSQL, cr\u00e9ez la base de donn\u00e9es ainsi qu\u2019un utilisateur ayant un acc\u00e8s suffisant pour cr\u00e9er des tables, et d\u00e9finissez les variables suivantes : TYPEORM_TYPE - d\u00e9fini sur postgres TYPEORM_DATABASE - d\u00e9fini sur le nom de la base de donn\u00e9es, par exemple home TYPEORM_USERNAME - d\u00e9fini sur le nom d\u2019utilisateur postgres ayant des droits sur la base de donn\u00e9es TYPEORM_PASSWORD - d\u00e9fini sur le mot de passe postgres ayant des droits sur la base de donn\u00e9es TYPEORM_HOST - d\u00e9fini sur le nom d\u2019h\u00f4te de la base de donn\u00e9es, par exemple grist.mumble.rds.amazonaws.com TYPEORM_PORT - d\u00e9fini sur le num\u00e9ro de port de la base de donn\u00e9es si ce n\u2019est pas le d\u00e9faut pour PostgreSQL Grist est connu pour fonctionner avec PostgreSQL des versions 10 \u00e0 14 (les versions ult\u00e9rieures devraient \u00e9galement fonctionner, mais n\u2019ont pas \u00e9t\u00e9 sp\u00e9cifiquement test\u00e9es au moment de la r\u00e9daction).","title":"Qu’est-ce qu’une base de donn\u00e9es “principale” ?"},{"location":"self-managed/#quest-ce-quun-magasin-detat","text":"Grist peut \u00eatre configur\u00e9 pour utiliser Redis comme cache d\u2019\u00e9tat externe. Pour la plupart des fonctionnalit\u00e9s de Grist, cela est optionnel. Il est requis pour le support des webhooks, et recommand\u00e9 pour le support des snapshots. Pour l\u2019utiliser, il suffit de d\u00e9finir REDIS_URL sur quelque chose comme redis://hostname/N o\u00f9 N est un num\u00e9ro de base de donn\u00e9es redis. docker run ... -e REDIS_URL=\"redis://hostname/N\" ...","title":"Qu’est-ce qu’un magasin d’\u00e9tat ?"},{"location":"self-managed/#comment-configurer-des-snapshots","text":"La fonctionnalit\u00e9 de stockage cloud de Grist permet la synchronisation automatique des documents Grist et des versions de documents vers un bucket compatible S3 (disponible pour toutes les versions de Grist) ou vers un stockage Azure (dans Grist Entreprise). Voici un exemple d\u2019ex\u00e9cution de Grist localement, avec des snapshots stock\u00e9s dans une instance MinIO de test : # Cr\u00e9er un r\u00e9seau docker network create grist # D\u00e9marrer Redis dans notre r\u00e9seau (recommand\u00e9 pour les snapshots) docker run --rm --network grist --name redis redis # D\u00e9marrer MinIO dans notre r\u00e9seau docker run --rm --network grist --name minio \\ -v /tmp/minio:/data \\ -p 9000:9000 -p 9001:9001 \\ -e MINIO_ROOT_USER=grist -e MINIO_ROOT_PASSWORD=admingrist \\ -it minio/minio server /data -console-address \":9001\" # Visitez http://localhost:9000 et configurez un bucket appel\u00e9 grist-docs. # Assurez-vous d'activer la versioning sur le bucket. # Connectez Grist \u00e0 Redis et MinIO docker run --rm --network grist \\ -e GRIST_DOCS_MINIO_ACCESS_KEY=grist \\ -e GRIST_DOCS_MINIO_SECRET_KEY=admingrist \\ -e GRIST_DOCS_MINIO_USE_SSL=0 \\ -e GRIST_DOCS_MINIO_BUCKET=grist-docs \\ -e GRIST_DOCS_MINIO_ENDPOINT=minio \\ -e GRIST_DOCS_MINIO_PORT=9000 \\ -e REDIS_URL=redis://redis \\ -v /tmp/grist:/persist -p 8484:8484 -it gristlabs/grist Voici des drapeaux pour faire parler Grist \u00e0 un bucket AWS S3 en utilisant le client MinIO : ... -e GRIST_DOCS_MINIO_ACCESS_KEY=$AWS_ACCESS_KEY_ID \\ -e GRIST_DOCS_MINIO_SECRET_KEY=$AWS_SECRET_ACCESS_KEY \\ -e GRIST_DOCS_MINIO_ENDPOINT=s3.amazonaws.com \\ -e GRIST_DOCS_MINIO_BUCKET=grist-docs \\ ... Selon les sp\u00e9cifications de MinIO , la r\u00e9gion par d\u00e9faut du bucket est us-east-1 . Cette r\u00e9gion par d\u00e9faut peut \u00eatre remplac\u00e9e en utilisant le drapeau GRIST_DOCS_MINIO_BUCKET_REGION . Pour plus de d\u00e9tails, et d\u2019autres options, voir Stockage Cloud .","title":"Comment configurer des snapshots ?"},{"location":"self-managed/#comment-controler-la-telemetrie","text":"Par d\u00e9faut, les installations Grist ne \u201ct\u00e9l\u00e9phonent pas\u201d \u00e0 un service central. Il est utile de leur permettre de le faire, pour donner \u00e0 Grist Labs un aper\u00e7u limit\u00e9 de votre utilisation, \u00e0 travers des mesures appel\u00e9es t\u00e9l\u00e9m\u00e9trie. Cela aidera \u00e0 guider le d\u00e9veloppement et \u00e0 attirer l\u2019attention sur les utilisateurs autog\u00e9r\u00e9s en tant que groupe. Le moyen le plus simple pour un propri\u00e9taire d\u2019une installation Grist de choisir d\u2019envoyer la t\u00e9l\u00e9m\u00e9trie \u00e0 Grist Labs est de cliquer sur le bouton \u201cOpter pour la t\u00e9l\u00e9m\u00e9trie\u201d sur la banni\u00e8re \u201cSupport Grist\u201d sur la page principale de l\u2019installation. Si vous ne souhaitez pas opter pour cela, vous pouvez ignorer la banni\u00e8re. La banni\u00e8re est affich\u00e9e uniquement au propri\u00e9taire de l\u2019installation. Le propri\u00e9taire de l\u2019installation est l\u2019utilisateur dont l\u2019adresse e-mail correspond \u00e0 la variable d\u2019environnement GRIST_DEFAULT_EMAIL (si d\u00e9finie). Vous pouvez contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie \u00e0 tout moment en utilisant la page \u201cSupport Grist\u201d, si vous \u00eates le propri\u00e9taire de l\u2019installation. Plut\u00f4t que d\u2019utiliser des boutons pour opter pour la t\u00e9l\u00e9m\u00e9trie, vous pouvez d\u00e9finir la variable d\u2019environnement GRIST_TELEMETRY_LEVEL sur limited . Cela a le m\u00eame effet que le bouton \u201cOpter pour la t\u00e9l\u00e9m\u00e9trie\u201d. La variable d\u2019environnement GRIST_TELEMETRY_LEVEL , si d\u00e9finie, prend la priorit\u00e9 sur tout param\u00e8tre effectu\u00e9 de mani\u00e8re interactive. Les valeurs recommand\u00e9es sont limited ou off . Dans tous les cas, lisez t\u00e9l\u00e9m\u00e9trie limit\u00e9e pour des d\u00e9tails exacts sur les donn\u00e9es envoy\u00e9es, et aper\u00e7u de la t\u00e9l\u00e9m\u00e9trie pour plus d\u2019explications. Une m\u00e9thode interactive pour contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie n\u2019est actuellement disponible que pour les versions Grist Noyau. Dans tous les cas, le d\u00e9faut est de ne pas envoyer de t\u00e9l\u00e9m\u00e9trie.","title":"Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ?"},{"location":"self-managed/#comment-mettre-a-jour-mon-installation","text":"Nous publions actuellement de nouvelles images Grist Noyau et Entreprise \u00e0 environ des intervalles hebdomadaires. Grist g\u00e8re toutes les migrations qui peuvent \u00eatre n\u00e9cessaires pour les documents ou les bases de donn\u00e9es qu\u2019il utilise. Des utilitaires tels que Watchtower peuvent maintenir votre version de Grist \u00e0 jour pour vous.","title":"Comment mettre \u00e0 jour mon installation ?"},{"location":"self-managed/#que-faire-si-jai-besoin-dune-haute-disponibilite","text":"Nous avons d\u00e9velopp\u00e9 une expertise dans l\u2019h\u00e9bergement d\u2019installations Grist tr\u00e8s occup\u00e9es, avec de nombreux utilisateurs, y compris comment mettre \u00e0 jour avec un minimum de perturbation, et comment \u00e9voluer pour g\u00e9rer une charge lourde. Nous serions heureux d\u2019aider les clients Entreprise ayant des besoins de cette nature.","title":"Que faire si j’ai besoin d’une haute disponibilit\u00e9 ?"},{"location":"sharing/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Partage # Pour collaborer dans Grist, vous pouvez inviter d\u2019autres utilisateurs \u00e0 acc\u00e9der \u00e0 un document. Pour les plans d\u2019\u00e9quipe, vous pouvez \u00e9galement ajouter des utilisateurs \u00e0 votre espace d\u2019\u00e9quipe ou \u00e0 un dossier (voir Partage d\u2019\u00e9quipe ). Lorsque le document est ouvert, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran. Cela ouvre un menu avec des options de partage et d\u2019exportation. S\u00e9lectionnez \u201cG\u00e9rer les utilisateurs\u201d. Cette option est \u00e9galement disponible sur la page d\u2019accueil de Grist, lorsque vous cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom d\u2019un document. Si l\u2019\u00e9l\u00e9ment \u201cG\u00e9rer les utilisateurs\u201d est gris\u00e9, cela signifie que vous n\u2019avez pas la permission de voir ou g\u00e9rer les param\u00e8tres de partage de ce document. La bo\u00eete de dialogue de partage qui s\u2019ouvre liste les utilisateurs qui ont acc\u00e8s au document. Pour ajouter un utilisateur, entrez l\u2019adresse e-mail de cet utilisateur et appuyez sur \u201cEntr\u00e9e\u201d ou cliquez sur \u201cInviter un nouveau membre\u201d dans le menu d\u00e9roulant. Vous pouvez s\u00e9lectionner un r\u00f4le pour tout utilisateur invit\u00e9, puis cliquer sur \u201cConfirmer\u201d pour enregistrer les modifications et envoyer les invitations. R\u00f4les # Il y a trois r\u00f4les principaux pris en charge par Grist : Lecteur : permet \u00e0 un utilisateur de voir le document mais pas d\u2019y apporter des modifications. Certaines op\u00e9rations comme le tri et le filtrage fonctionneront sans affecter les autres utilisateurs du document. C\u2019est le r\u00f4le par d\u00e9faut lorsque vous tapez une adresse e-mail. \u00c9diteur : permet \u00e0 un utilisateur de voir ou de modifier les donn\u00e9es, la structure ou les formules du document, mais pas ses param\u00e8tres de partage. Propri\u00e9taire : donne \u00e0 un utilisateur des permissions compl\u00e8tes sur le document, y compris pour voir et modifier ses param\u00e8tres de partage. Un document peut avoir un ou plusieurs propri\u00e9taires. Si vous \u00eates capable d\u2019ouvrir la bo\u00eete de dialogue \u201cG\u00e9rer les utilisateurs\u201d, vous avez le r\u00f4le de \u201cpropri\u00e9taire\u201d. Vous ne pouvez pas changer votre propre acc\u00e8s, mais votre acc\u00e8s peut \u00eatre r\u00e9duit ou supprim\u00e9 par un autre propri\u00e9taire. L\u2019option d\u2019h\u00e9riter de l\u2019acc\u00e8s n\u2019affecte pas les plans individuels, et est expliqu\u00e9e dans l\u2019article Partage d\u2019\u00e9quipe . Acc\u00e8s public et partage de lien # Si vous souhaitez partager votre document avec un public plus large, vous pouvez le rendre accessible publiquement. Ouvrez le menu de partage en cliquant sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et en s\u00e9lectionnant \u201cG\u00e9rer les utilisateurs\u201d. Activez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cAcc\u00e8s public\u201d et s\u00e9lectionnez \u201cActiv\u00e9\u201d : Une fois que vous cliquez sur \u201cconfirmer\u201d, toute personne ayant le lien vers votre document pourra le voir. Elle ne sera pas oblig\u00e9e d\u2019avoir un compte Grist. Le bouton \u201cCopier le lien\u201d est pratique pour le partage de lien. Vous pouvez copier le lien dans le presse-papiers pour le coller dans un e-mail, un tweet ou ailleurs. Vous pouvez \u00e9galement permettre \u00e0 toute personne ayant le lien de modifier votre document. Il suffit de changer le r\u00f4le pour l\u2019acc\u00e8s public en \u00c9diteur. Notez que cela permet \u00e0 n\u2019importe qui ayant le lien de modifier absolument tout dans votre document, y compris de supprimer toutes les donn\u00e9es. En cas de probl\u00e8me, vous pouvez r\u00e9cup\u00e9rer les versions pr\u00e9c\u00e9dentes de votre document dans la section des instantan\u00e9s de Historique du document. Partager une vue int\u00e9gr\u00e9e Ajouter ?embed=true ou ?style=singlePage \u00e0 la fin de l\u2019URL de la page d\u2019un document rend le document sans la barre d\u2019outils en haut, le menu de la page \u00e0 gauche ou le panneau du cr\u00e9ateur \u00e0 droite. ?style=singlePage peut \u00eatre modifi\u00e9 et suit les permissions avanc\u00e9es, tandis que ?embed=true est en lecture seule. Pour en savoir plus sur l\u2019int\u00e9gration, voir Int\u00e9gration de Grist . Les permissions avanc\u00e9es peuvent \u00eatre combin\u00e9es avec le partage de lien en lecture seule, c\u2019est-\u00e0-dire lorsque le r\u00f4le d\u2019acc\u00e8s public est d\u00e9fini sur \u201cLecteur\u201d. Lisez-en plus sur Les cl\u00e9s de lien pour apprendre comment d\u00e9finir des r\u00e8gles qui limitent les parties de vos donn\u00e9es que les utilisateurs peuvent voir lorsqu\u2019ils acc\u00e8dent \u00e0 votre document via un lien particulier. Les permissions avanc\u00e9es sont prises en charge avec le partage de lien lorsque l\u2019acc\u00e8s public est d\u00e9fini sur \u201cLecteur\u201d ou \u201c\u00c9diteur\u201d. Quitter un document # Les non-propri\u00e9taires peuvent consulter leurs d\u00e9tails d\u2019acc\u00e8s \u00e0 un document en cliquant sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et en s\u00e9lectionnant \u201cD\u00e9tails d\u2019acc\u00e8s\u201d. Depuis la fen\u00eatre contextuelle des d\u00e9tails d\u2019acc\u00e8s, vous pouvez cliquer sur l\u2019ic\u00f4ne de la corbeille pour quitter un document.","title":"Sharing a document"},{"location":"sharing/#partage","text":"Pour collaborer dans Grist, vous pouvez inviter d\u2019autres utilisateurs \u00e0 acc\u00e9der \u00e0 un document. Pour les plans d\u2019\u00e9quipe, vous pouvez \u00e9galement ajouter des utilisateurs \u00e0 votre espace d\u2019\u00e9quipe ou \u00e0 un dossier (voir Partage d\u2019\u00e9quipe ). Lorsque le document est ouvert, cliquez sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran. Cela ouvre un menu avec des options de partage et d\u2019exportation. S\u00e9lectionnez \u201cG\u00e9rer les utilisateurs\u201d. Cette option est \u00e9galement disponible sur la page d\u2019accueil de Grist, lorsque vous cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom d\u2019un document. Si l\u2019\u00e9l\u00e9ment \u201cG\u00e9rer les utilisateurs\u201d est gris\u00e9, cela signifie que vous n\u2019avez pas la permission de voir ou g\u00e9rer les param\u00e8tres de partage de ce document. La bo\u00eete de dialogue de partage qui s\u2019ouvre liste les utilisateurs qui ont acc\u00e8s au document. Pour ajouter un utilisateur, entrez l\u2019adresse e-mail de cet utilisateur et appuyez sur \u201cEntr\u00e9e\u201d ou cliquez sur \u201cInviter un nouveau membre\u201d dans le menu d\u00e9roulant. Vous pouvez s\u00e9lectionner un r\u00f4le pour tout utilisateur invit\u00e9, puis cliquer sur \u201cConfirmer\u201d pour enregistrer les modifications et envoyer les invitations.","title":"Partage"},{"location":"sharing/#roles","text":"Il y a trois r\u00f4les principaux pris en charge par Grist : Lecteur : permet \u00e0 un utilisateur de voir le document mais pas d\u2019y apporter des modifications. Certaines op\u00e9rations comme le tri et le filtrage fonctionneront sans affecter les autres utilisateurs du document. C\u2019est le r\u00f4le par d\u00e9faut lorsque vous tapez une adresse e-mail. \u00c9diteur : permet \u00e0 un utilisateur de voir ou de modifier les donn\u00e9es, la structure ou les formules du document, mais pas ses param\u00e8tres de partage. Propri\u00e9taire : donne \u00e0 un utilisateur des permissions compl\u00e8tes sur le document, y compris pour voir et modifier ses param\u00e8tres de partage. Un document peut avoir un ou plusieurs propri\u00e9taires. Si vous \u00eates capable d\u2019ouvrir la bo\u00eete de dialogue \u201cG\u00e9rer les utilisateurs\u201d, vous avez le r\u00f4le de \u201cpropri\u00e9taire\u201d. Vous ne pouvez pas changer votre propre acc\u00e8s, mais votre acc\u00e8s peut \u00eatre r\u00e9duit ou supprim\u00e9 par un autre propri\u00e9taire. L\u2019option d\u2019h\u00e9riter de l\u2019acc\u00e8s n\u2019affecte pas les plans individuels, et est expliqu\u00e9e dans l\u2019article Partage d\u2019\u00e9quipe .","title":"R\u00f4les"},{"location":"sharing/#acces-public-et-partage-de-lien","text":"Si vous souhaitez partager votre document avec un public plus large, vous pouvez le rendre accessible publiquement. Ouvrez le menu de partage en cliquant sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et en s\u00e9lectionnant \u201cG\u00e9rer les utilisateurs\u201d. Activez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cAcc\u00e8s public\u201d et s\u00e9lectionnez \u201cActiv\u00e9\u201d : Une fois que vous cliquez sur \u201cconfirmer\u201d, toute personne ayant le lien vers votre document pourra le voir. Elle ne sera pas oblig\u00e9e d\u2019avoir un compte Grist. Le bouton \u201cCopier le lien\u201d est pratique pour le partage de lien. Vous pouvez copier le lien dans le presse-papiers pour le coller dans un e-mail, un tweet ou ailleurs. Vous pouvez \u00e9galement permettre \u00e0 toute personne ayant le lien de modifier votre document. Il suffit de changer le r\u00f4le pour l\u2019acc\u00e8s public en \u00c9diteur. Notez que cela permet \u00e0 n\u2019importe qui ayant le lien de modifier absolument tout dans votre document, y compris de supprimer toutes les donn\u00e9es. En cas de probl\u00e8me, vous pouvez r\u00e9cup\u00e9rer les versions pr\u00e9c\u00e9dentes de votre document dans la section des instantan\u00e9s de Historique du document. Partager une vue int\u00e9gr\u00e9e Ajouter ?embed=true ou ?style=singlePage \u00e0 la fin de l\u2019URL de la page d\u2019un document rend le document sans la barre d\u2019outils en haut, le menu de la page \u00e0 gauche ou le panneau du cr\u00e9ateur \u00e0 droite. ?style=singlePage peut \u00eatre modifi\u00e9 et suit les permissions avanc\u00e9es, tandis que ?embed=true est en lecture seule. Pour en savoir plus sur l\u2019int\u00e9gration, voir Int\u00e9gration de Grist . Les permissions avanc\u00e9es peuvent \u00eatre combin\u00e9es avec le partage de lien en lecture seule, c\u2019est-\u00e0-dire lorsque le r\u00f4le d\u2019acc\u00e8s public est d\u00e9fini sur \u201cLecteur\u201d. Lisez-en plus sur Les cl\u00e9s de lien pour apprendre comment d\u00e9finir des r\u00e8gles qui limitent les parties de vos donn\u00e9es que les utilisateurs peuvent voir lorsqu\u2019ils acc\u00e8dent \u00e0 votre document via un lien particulier. Les permissions avanc\u00e9es sont prises en charge avec le partage de lien lorsque l\u2019acc\u00e8s public est d\u00e9fini sur \u201cLecteur\u201d ou \u201c\u00c9diteur\u201d.","title":"Acc\u00e8s public et partage de lien"},{"location":"sharing/#quitter-un-document","text":"Les non-propri\u00e9taires peuvent consulter leurs d\u00e9tails d\u2019acc\u00e8s \u00e0 un document en cliquant sur l\u2019ic\u00f4ne de partage ( ) en haut \u00e0 droite de l\u2019\u00e9cran et en s\u00e9lectionnant \u201cD\u00e9tails d\u2019acc\u00e8s\u201d. Depuis la fen\u00eatre contextuelle des d\u00e9tails d\u2019acc\u00e8s, vous pouvez cliquer sur l\u2019ic\u00f4ne de la corbeille pour quitter un document.","title":"Quitter un document"},{"location":"summary-tables/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Tables de synth\u00e8se # Les tables de synth\u00e8se sont l\u2019outil principal de l\u2019analyse de donn\u00e9es dans Grist. Elles sont similaires aux \u201ctableaux crois\u00e9s dynamiques\u201d dans les feuilles de calcul, et aux clauses GROUP BY dans les bases de donn\u00e9es. Elles vous permettent d\u2019obtenir des totaux pour l\u2019ensemble de la table ou des sous-totaux. Les tables de synth\u00e8se ont de nombreuses utilisations : Grouper les projets par statut ou par priorit\u00e9. R\u00e9sumer les transactions bancaires par ann\u00e9e, par trimestre ou par cat\u00e9gorie. Grouper les employ\u00e9s par poste, par genre ou par d\u00e9partement. R\u00e9sumer par n\u2019importe quelle combinaison, telle que poste et genre et d\u00e9partement. Grouper tous les enregistrements pour calculer des totaux et des statistiques pour l\u2019ensemble de la table. Ajouter des synth\u00e8ses # Cliquez sur le bouton \u201cAjouter\u201d et s\u00e9lectionnez \u201cAjouter une page\u201d ou \u201cAjouter une vue \u00e0 la page\u201d. Dans le s\u00e9lecteur de vues, cliquez sur l\u2019ic\u00f4ne de sommation ( ) \u00e0 c\u00f4t\u00e9 de la table que vous souhaitez r\u00e9sumer. Lors de la cr\u00e9ation d\u2019une table de synth\u00e8se, vous choisissez un champ ou une combinaison de champs par lesquels les donn\u00e9es doivent \u00eatre group\u00e9es. Ceux-ci sont appel\u00e9s les champs \u201cGrouper par\u201d. La table de synth\u00e8se contiendra une ligne pour chaque valeur de regroupement. Par exemple, si \u201cPoste\u201d est s\u00e9lectionn\u00e9 comme champ de regroupement, la table de synth\u00e8se contiendra une ligne pour chaque poste. Les formules puissantes de Grist permettent ensuite des calculs arbitraires sur les sous-ensembles correspondants des donn\u00e9es sous-jacentes. Gardez \u00e0 l\u2019esprit que les champs de regroupement d\u00e9terminent quels groupes doivent exister dans la table de synth\u00e8se. Ne s\u00e9lectionnez pas les valeurs que vous souhaitez calculer (par exemple, pour le salaire moyen) comme champs de regroupement ; celles-ci seront cr\u00e9\u00e9es \u00e0 l\u2019aide de formules \u00e0 l\u2019\u00e9tape suivante. Astuce : Vous pouvez consid\u00e9rer les lignes d\u2019une table de synth\u00e8se comme des compartiments dans lesquels vos enregistrements seront plac\u00e9s. Les champs de regroupement d\u00e9terminent les \u00e9tiquettes de ces compartiments. Par exemple, un r\u00e9sum\u00e9 des projets group\u00e9s par statut (par exemple, \u201cActif\u201d, \u201cTermin\u00e9\u201d, \u201cNon commenc\u00e9\u201d) aura trois compartiments, un pour chaque statut. Chaque projet va dans l\u2019un de ces trois compartiments. Vous pouvez ensuite facilement calculer des informations pour chaque dossier, comme un d\u00e9compte des projets ou le total de leurs co\u00fbts. Formules de synth\u00e8se # Lorsque vous ajoutez une table de synth\u00e8se, chacun des champs de regroupement s\u00e9lectionn\u00e9s devient une colonne dans la nouvelle table. Tout le reste dans la table de synth\u00e8se est calcul\u00e9 \u00e0 l\u2019aide de colonnes de formule. Certaines de ces colonnes sont cr\u00e9\u00e9es automatiquement, par commodit\u00e9. Plus pr\u00e9cis\u00e9ment, une colonne count sera ajout\u00e9e pour montrer le nombre d\u2019enregistrements dans le groupe repr\u00e9sent\u00e9 par la ligne de synth\u00e8se actuelle. Et pour toute colonne num\u00e9rique dans les donn\u00e9es d\u2019origine, la table de synth\u00e8se contiendra une colonne du m\u00eame nom avec le total. Par exemple, le r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par Poste ressemblerait \u00e0 ceci : Astuce : Une vue de synth\u00e8se aura un en-t\u00eate comme \u201cEMPLOY\u00c9S [par Poste]\u201d, pour indiquer qu\u2019elle montre les donn\u00e9es de synth\u00e8se pour la table Employ\u00e9s , group\u00e9es par \u201cPoste\u201d. Vous pouvez cliquer sur le titre pour le renommer. Si vous s\u00e9lectionnez une cellule dans une colonne comme count ou AnnualPay et appuyez sur Entr\u00e9e , vous verrez les formules qui les calculent : count est len($group) AnnualPay est SUM($group.AnnualPay) Le myst\u00e9rieux $group est simplement une autre colonne, masqu\u00e9e par d\u00e9faut (mais vous pouvez la rendre visible). Elle contient pour chaque cellule le groupe d\u2019enregistrements repr\u00e9sent\u00e9 par cette ligne de synth\u00e8se. Note pour les fans de Python. $group est un objet Python sp\u00e9cial. C\u2019est une collection it\u00e9rable d\u2019enregistrements. L\u2019utilisation d\u2019un attribut comme $group.A est un raccourci pour la liste des valeurs dans la colonne A de tous les enregistrements du groupe, similaire \u00e0 [r.A for r in $group] . Si vous rendez cette colonne visible, elle appara\u00eetra comme une liste Python d\u2019ID de lignes num\u00e9riques qui identifient les enregistrements dans le groupe. Parfois, les colonnes cr\u00e9\u00e9es automatiquement n\u2019ont pas de sens. Par exemple, la somme de PayRate n\u2019est pas tr\u00e8s significative. Supprimez simplement ces colonnes, soit en utilisant le menu de la colonne, soit en utilisant le raccourci clavier Alt + Moins . Vous \u00eates libre de changer les formules pour les colonnes cr\u00e9\u00e9es automatiquement, ou d\u2019ajouter de nouvelles colonnes de formule. Notez que les tables de synth\u00e8se ne permettent pas d\u2019ajouter des colonnes non -formule. Par exemple, vous pourriez vouloir changer la formule pour PayRate de SUM($group.PayRate) \u00e0 AVERAGE($group.PayRate) , ce qui serait une valeur plus int\u00e9ressante. Voici quelques recettes utiles de formules dans les tables de synth\u00e8se : Moyenne : AVERAGE($group.PayRate) ou SUM($group.PayRate) / $count \u00c9cart type : STDEV($group.PayRate) Maximum ou minimum : MAX($group.PayRate) , MIN($group.PayRate) Somme sur un sous-ensemble d\u2019enregistrements : SUM(r.AnnualPay for r in $group if r.EmploymentStatus == \"Active\") Moyenne pond\u00e9r\u00e9e : AVERAGE_WEIGHTED(zip($group.Life_Expectancy, $group.Population)) En fait, vous pouvez utiliser toute la puissance de Python pour calculer ce que vous souhaitez. Comme pour toute table, votre formule peut se r\u00e9f\u00e9rer \u00e0 n\u2019importe laquelle des colonnes de la table de synth\u00e8se, pas seulement \u00e0 $group . Changer les colonnes de synth\u00e8se # Les colonnes de regroupement dans une table de synth\u00e8se sont cr\u00e9\u00e9es lorsque vous ajoutez la vue. Il n\u2019est pas possible de modifier les valeurs dans celles-ci, ni de modifier leurs param\u00e8tres, tels que le type. Les param\u00e8tres et les valeurs des colonnes de regroupement refl\u00e8tent ceux de la table sous-jacente. Lorsque de nouvelles valeurs apparaissent dans la table sous-jacente pour les colonnes de regroupement, les tables de synth\u00e8se obtiendront \u00e9galement de nouvelles lignes automatiquement. Ce que vous pouvez changer, c\u2019est les colonnes par lesquelles la table est group\u00e9e. Cliquez sur les trois points en haut \u00e0 droite de la table de synth\u00e8se, et cliquez sur \u201cS\u00e9lection des donn\u00e9es\u201d : Les param\u00e8tres dans le panneau lat\u00e9ral vous indiquent quelles donn\u00e9es sont affich\u00e9es et comment elles sont group\u00e9es : Vous pouvez cliquer sur le bouton \u201cModifier la s\u00e9lection des donn\u00e9es\u201d pour ouvrir le m\u00eame s\u00e9lecteur de vues que vous avez utilis\u00e9 pour ajouter la table de synth\u00e8se. Vous pouvez maintenant d\u00e9s\u00e9lectionner certains champs \u201cGrouper par\u201d et en s\u00e9lectionner d\u2019autres, puis cliquer sur \u201cEnregistrer\u201d pour mettre \u00e0 jour la table de synth\u00e8se. Lier des tables de synth\u00e8se # Vous pouvez lier des tables de synth\u00e8se \u00e0 d\u2019autres vues. Si vous avez une table de synth\u00e8se sur une page, elle peut \u00eatre utilis\u00e9e comme s\u00e9lecteur pour une table de donn\u00e9es sous-jacentes, ou pour une synth\u00e8se plus d\u00e9taill\u00e9e. Par exemple, si vous avez un r\u00e9sum\u00e9 des Employ\u00e9s par \u201cPoste\u201d, il sera disponible comme option \u201cS\u00c9LECTIONNER PAR\u201d lors de l\u2019ajout d\u2019une table non r\u00e9sum\u00e9e des Employ\u00e9s : Le r\u00e9sultat est que vous pouvez s\u00e9lectionner un poste dans la table de synth\u00e8se, et voir tous les employ\u00e9s dans ce poste. Vous pourriez de m\u00eame lier un r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par \u201cPoste\u201d et \u201cGenre\u201d \u00e0 la premi\u00e8re vue : Vous pouvez alors s\u00e9lectionner un poste dans la vue \u201cEmploy\u00e9s [par Poste]\u201d, et voir une r\u00e9partition par genre parmi les employ\u00e9s dans ce poste. Notez que ce type de liaison n\u00e9cessite que la nouvelle vue inclue \u00e0 la fois \u201cPoste\u201d et \u201cGenre\u201d dans ses colonnes de regroupement. Pour en savoir plus sur la liaison, voir Lier des vues . Graphiques des donn\u00e9es r\u00e9sum\u00e9es # Les tables de synth\u00e8se sont une excellente source de donn\u00e9es pour les graphiques, y compris les graphiques dynamiques. Dans l\u2019exemple ci-dessus, nous pourrions ajouter une autre vue montrant les Employ\u00e9s group\u00e9s par \u201cPoste\u201d et \u201cGenre\u201d, mais cette fois dans une vue graphique. S\u00e9lectionnez \u201cDiagramme \u00e0 barres\u201d pour le type de graphique, et s\u00e9lectionnez \u201cGenre\u201d et \u201cAnnualPay\u201d comme s\u00e9ries visibles. Vous pouvez maintenant cliquer sur un poste, et voir visuellement la diff\u00e9rence de salaire moyen par genre pour ce poste. Le tutoriel Analyser et visualiser montre d\u2019autres exemples de graphiques bas\u00e9s sur des tables de synth\u00e8se. D\u00e9tacher des tables de synth\u00e8se # Les tables de synth\u00e8se sont calcul\u00e9es \u00e0 partir des donn\u00e9es sous-jacentes. Parfois, cependant, il est utile de \u201cd\u00e9tacher\u201d une table de synth\u00e8se et de la transformer en une table de donn\u00e9es ind\u00e9pendante. Par exemple, nous avons vu comment r\u00e9sumer une table des Employ\u00e9s , en la groupant par la colonne \u201cPoste\u201d. Disons que vous voulez associer des donn\u00e9es \u00e0 chaque poste, telles qu\u2019une description de poste ou un code d\u2019assurance pour les accidents du travail. Ces donn\u00e9es appartiennent \u00e0 leur propre table, avec une ligne pour chaque poste, et quelques colonnes. Les tables de synth\u00e8se fournissent un moyen facile de cr\u00e9er une telle table. Ajoutez une page avec un r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par \u201cPoste\u201d. Maintenant, dans l\u2019onglet \u201cDonn\u00e9es\u201d du panneau de droite, cliquez sur le bouton \u201cD\u00e9tacher\u201d. Votre table de synth\u00e8se vient d\u2019\u00eatre transform\u00e9e en une toute nouvelle table avec les m\u00eames lignes et un nom g\u00e9n\u00e9r\u00e9 automatiquement, comme \u201cTable1\u201d. Vous pouvez la renommer en \u201cPostes\u201d, et ajouter les colonnes dont vous avez besoin : Les colonnes calcul\u00e9es restent. En fait, tout ce que vous pourriez calculer sur chaque poste dans la table de synth\u00e8se \u201cEmploy\u00e9s [par Poste]\u201d, vous pouvez toujours le calculer dans la nouvelle table \u201cPostes\u201d. Une diff\u00e9rence est que de nouvelles valeurs ne seront pas ajout\u00e9es automatiquement \u00e0 la table d\u00e9tach\u00e9e. En d\u2019autres termes, si un poste jamais vu auparavant (peut-\u00eatre \u201cResponsable des troubles\u201d) appara\u00eet dans les donn\u00e9es sous-jacentes, une table de synth\u00e8se se mettrait \u00e0 jour automatiquement pour l\u2019inclure, mais une table d\u00e9tach\u00e9e ne le fera pas.","title":"Summary tables"},{"location":"summary-tables/#tables-de-synthese","text":"Les tables de synth\u00e8se sont l\u2019outil principal de l\u2019analyse de donn\u00e9es dans Grist. Elles sont similaires aux \u201ctableaux crois\u00e9s dynamiques\u201d dans les feuilles de calcul, et aux clauses GROUP BY dans les bases de donn\u00e9es. Elles vous permettent d\u2019obtenir des totaux pour l\u2019ensemble de la table ou des sous-totaux. Les tables de synth\u00e8se ont de nombreuses utilisations : Grouper les projets par statut ou par priorit\u00e9. R\u00e9sumer les transactions bancaires par ann\u00e9e, par trimestre ou par cat\u00e9gorie. Grouper les employ\u00e9s par poste, par genre ou par d\u00e9partement. R\u00e9sumer par n\u2019importe quelle combinaison, telle que poste et genre et d\u00e9partement. Grouper tous les enregistrements pour calculer des totaux et des statistiques pour l\u2019ensemble de la table.","title":"Tables de synth\u00e8se"},{"location":"summary-tables/#ajouter-des-syntheses","text":"Cliquez sur le bouton \u201cAjouter\u201d et s\u00e9lectionnez \u201cAjouter une page\u201d ou \u201cAjouter une vue \u00e0 la page\u201d. Dans le s\u00e9lecteur de vues, cliquez sur l\u2019ic\u00f4ne de sommation ( ) \u00e0 c\u00f4t\u00e9 de la table que vous souhaitez r\u00e9sumer. Lors de la cr\u00e9ation d\u2019une table de synth\u00e8se, vous choisissez un champ ou une combinaison de champs par lesquels les donn\u00e9es doivent \u00eatre group\u00e9es. Ceux-ci sont appel\u00e9s les champs \u201cGrouper par\u201d. La table de synth\u00e8se contiendra une ligne pour chaque valeur de regroupement. Par exemple, si \u201cPoste\u201d est s\u00e9lectionn\u00e9 comme champ de regroupement, la table de synth\u00e8se contiendra une ligne pour chaque poste. Les formules puissantes de Grist permettent ensuite des calculs arbitraires sur les sous-ensembles correspondants des donn\u00e9es sous-jacentes. Gardez \u00e0 l\u2019esprit que les champs de regroupement d\u00e9terminent quels groupes doivent exister dans la table de synth\u00e8se. Ne s\u00e9lectionnez pas les valeurs que vous souhaitez calculer (par exemple, pour le salaire moyen) comme champs de regroupement ; celles-ci seront cr\u00e9\u00e9es \u00e0 l\u2019aide de formules \u00e0 l\u2019\u00e9tape suivante. Astuce : Vous pouvez consid\u00e9rer les lignes d\u2019une table de synth\u00e8se comme des compartiments dans lesquels vos enregistrements seront plac\u00e9s. Les champs de regroupement d\u00e9terminent les \u00e9tiquettes de ces compartiments. Par exemple, un r\u00e9sum\u00e9 des projets group\u00e9s par statut (par exemple, \u201cActif\u201d, \u201cTermin\u00e9\u201d, \u201cNon commenc\u00e9\u201d) aura trois compartiments, un pour chaque statut. Chaque projet va dans l\u2019un de ces trois compartiments. Vous pouvez ensuite facilement calculer des informations pour chaque dossier, comme un d\u00e9compte des projets ou le total de leurs co\u00fbts.","title":"Ajouter des synth\u00e8ses"},{"location":"summary-tables/#formules-de-synthese","text":"Lorsque vous ajoutez une table de synth\u00e8se, chacun des champs de regroupement s\u00e9lectionn\u00e9s devient une colonne dans la nouvelle table. Tout le reste dans la table de synth\u00e8se est calcul\u00e9 \u00e0 l\u2019aide de colonnes de formule. Certaines de ces colonnes sont cr\u00e9\u00e9es automatiquement, par commodit\u00e9. Plus pr\u00e9cis\u00e9ment, une colonne count sera ajout\u00e9e pour montrer le nombre d\u2019enregistrements dans le groupe repr\u00e9sent\u00e9 par la ligne de synth\u00e8se actuelle. Et pour toute colonne num\u00e9rique dans les donn\u00e9es d\u2019origine, la table de synth\u00e8se contiendra une colonne du m\u00eame nom avec le total. Par exemple, le r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par Poste ressemblerait \u00e0 ceci : Astuce : Une vue de synth\u00e8se aura un en-t\u00eate comme \u201cEMPLOY\u00c9S [par Poste]\u201d, pour indiquer qu\u2019elle montre les donn\u00e9es de synth\u00e8se pour la table Employ\u00e9s , group\u00e9es par \u201cPoste\u201d. Vous pouvez cliquer sur le titre pour le renommer. Si vous s\u00e9lectionnez une cellule dans une colonne comme count ou AnnualPay et appuyez sur Entr\u00e9e , vous verrez les formules qui les calculent : count est len($group) AnnualPay est SUM($group.AnnualPay) Le myst\u00e9rieux $group est simplement une autre colonne, masqu\u00e9e par d\u00e9faut (mais vous pouvez la rendre visible). Elle contient pour chaque cellule le groupe d\u2019enregistrements repr\u00e9sent\u00e9 par cette ligne de synth\u00e8se. Note pour les fans de Python. $group est un objet Python sp\u00e9cial. C\u2019est une collection it\u00e9rable d\u2019enregistrements. L\u2019utilisation d\u2019un attribut comme $group.A est un raccourci pour la liste des valeurs dans la colonne A de tous les enregistrements du groupe, similaire \u00e0 [r.A for r in $group] . Si vous rendez cette colonne visible, elle appara\u00eetra comme une liste Python d\u2019ID de lignes num\u00e9riques qui identifient les enregistrements dans le groupe. Parfois, les colonnes cr\u00e9\u00e9es automatiquement n\u2019ont pas de sens. Par exemple, la somme de PayRate n\u2019est pas tr\u00e8s significative. Supprimez simplement ces colonnes, soit en utilisant le menu de la colonne, soit en utilisant le raccourci clavier Alt + Moins . Vous \u00eates libre de changer les formules pour les colonnes cr\u00e9\u00e9es automatiquement, ou d\u2019ajouter de nouvelles colonnes de formule. Notez que les tables de synth\u00e8se ne permettent pas d\u2019ajouter des colonnes non -formule. Par exemple, vous pourriez vouloir changer la formule pour PayRate de SUM($group.PayRate) \u00e0 AVERAGE($group.PayRate) , ce qui serait une valeur plus int\u00e9ressante. Voici quelques recettes utiles de formules dans les tables de synth\u00e8se : Moyenne : AVERAGE($group.PayRate) ou SUM($group.PayRate) / $count \u00c9cart type : STDEV($group.PayRate) Maximum ou minimum : MAX($group.PayRate) , MIN($group.PayRate) Somme sur un sous-ensemble d\u2019enregistrements : SUM(r.AnnualPay for r in $group if r.EmploymentStatus == \"Active\") Moyenne pond\u00e9r\u00e9e : AVERAGE_WEIGHTED(zip($group.Life_Expectancy, $group.Population)) En fait, vous pouvez utiliser toute la puissance de Python pour calculer ce que vous souhaitez. Comme pour toute table, votre formule peut se r\u00e9f\u00e9rer \u00e0 n\u2019importe laquelle des colonnes de la table de synth\u00e8se, pas seulement \u00e0 $group .","title":"Formules de synth\u00e8se"},{"location":"summary-tables/#changer-les-colonnes-de-synthese","text":"Les colonnes de regroupement dans une table de synth\u00e8se sont cr\u00e9\u00e9es lorsque vous ajoutez la vue. Il n\u2019est pas possible de modifier les valeurs dans celles-ci, ni de modifier leurs param\u00e8tres, tels que le type. Les param\u00e8tres et les valeurs des colonnes de regroupement refl\u00e8tent ceux de la table sous-jacente. Lorsque de nouvelles valeurs apparaissent dans la table sous-jacente pour les colonnes de regroupement, les tables de synth\u00e8se obtiendront \u00e9galement de nouvelles lignes automatiquement. Ce que vous pouvez changer, c\u2019est les colonnes par lesquelles la table est group\u00e9e. Cliquez sur les trois points en haut \u00e0 droite de la table de synth\u00e8se, et cliquez sur \u201cS\u00e9lection des donn\u00e9es\u201d : Les param\u00e8tres dans le panneau lat\u00e9ral vous indiquent quelles donn\u00e9es sont affich\u00e9es et comment elles sont group\u00e9es : Vous pouvez cliquer sur le bouton \u201cModifier la s\u00e9lection des donn\u00e9es\u201d pour ouvrir le m\u00eame s\u00e9lecteur de vues que vous avez utilis\u00e9 pour ajouter la table de synth\u00e8se. Vous pouvez maintenant d\u00e9s\u00e9lectionner certains champs \u201cGrouper par\u201d et en s\u00e9lectionner d\u2019autres, puis cliquer sur \u201cEnregistrer\u201d pour mettre \u00e0 jour la table de synth\u00e8se.","title":"Changer les colonnes de synth\u00e8se"},{"location":"summary-tables/#lier-des-tables-de-synthese","text":"Vous pouvez lier des tables de synth\u00e8se \u00e0 d\u2019autres vues. Si vous avez une table de synth\u00e8se sur une page, elle peut \u00eatre utilis\u00e9e comme s\u00e9lecteur pour une table de donn\u00e9es sous-jacentes, ou pour une synth\u00e8se plus d\u00e9taill\u00e9e. Par exemple, si vous avez un r\u00e9sum\u00e9 des Employ\u00e9s par \u201cPoste\u201d, il sera disponible comme option \u201cS\u00c9LECTIONNER PAR\u201d lors de l\u2019ajout d\u2019une table non r\u00e9sum\u00e9e des Employ\u00e9s : Le r\u00e9sultat est que vous pouvez s\u00e9lectionner un poste dans la table de synth\u00e8se, et voir tous les employ\u00e9s dans ce poste. Vous pourriez de m\u00eame lier un r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par \u201cPoste\u201d et \u201cGenre\u201d \u00e0 la premi\u00e8re vue : Vous pouvez alors s\u00e9lectionner un poste dans la vue \u201cEmploy\u00e9s [par Poste]\u201d, et voir une r\u00e9partition par genre parmi les employ\u00e9s dans ce poste. Notez que ce type de liaison n\u00e9cessite que la nouvelle vue inclue \u00e0 la fois \u201cPoste\u201d et \u201cGenre\u201d dans ses colonnes de regroupement. Pour en savoir plus sur la liaison, voir Lier des vues .","title":"Lier des tables de synth\u00e8se"},{"location":"summary-tables/#graphiques-des-donnees-resumees","text":"Les tables de synth\u00e8se sont une excellente source de donn\u00e9es pour les graphiques, y compris les graphiques dynamiques. Dans l\u2019exemple ci-dessus, nous pourrions ajouter une autre vue montrant les Employ\u00e9s group\u00e9s par \u201cPoste\u201d et \u201cGenre\u201d, mais cette fois dans une vue graphique. S\u00e9lectionnez \u201cDiagramme \u00e0 barres\u201d pour le type de graphique, et s\u00e9lectionnez \u201cGenre\u201d et \u201cAnnualPay\u201d comme s\u00e9ries visibles. Vous pouvez maintenant cliquer sur un poste, et voir visuellement la diff\u00e9rence de salaire moyen par genre pour ce poste. Le tutoriel Analyser et visualiser montre d\u2019autres exemples de graphiques bas\u00e9s sur des tables de synth\u00e8se.","title":"Graphiques des donn\u00e9es r\u00e9sum\u00e9es"},{"location":"summary-tables/#detacher-des-tables-de-synthese","text":"Les tables de synth\u00e8se sont calcul\u00e9es \u00e0 partir des donn\u00e9es sous-jacentes. Parfois, cependant, il est utile de \u201cd\u00e9tacher\u201d une table de synth\u00e8se et de la transformer en une table de donn\u00e9es ind\u00e9pendante. Par exemple, nous avons vu comment r\u00e9sumer une table des Employ\u00e9s , en la groupant par la colonne \u201cPoste\u201d. Disons que vous voulez associer des donn\u00e9es \u00e0 chaque poste, telles qu\u2019une description de poste ou un code d\u2019assurance pour les accidents du travail. Ces donn\u00e9es appartiennent \u00e0 leur propre table, avec une ligne pour chaque poste, et quelques colonnes. Les tables de synth\u00e8se fournissent un moyen facile de cr\u00e9er une telle table. Ajoutez une page avec un r\u00e9sum\u00e9 des Employ\u00e9s group\u00e9s par \u201cPoste\u201d. Maintenant, dans l\u2019onglet \u201cDonn\u00e9es\u201d du panneau de droite, cliquez sur le bouton \u201cD\u00e9tacher\u201d. Votre table de synth\u00e8se vient d\u2019\u00eatre transform\u00e9e en une toute nouvelle table avec les m\u00eames lignes et un nom g\u00e9n\u00e9r\u00e9 automatiquement, comme \u201cTable1\u201d. Vous pouvez la renommer en \u201cPostes\u201d, et ajouter les colonnes dont vous avez besoin : Les colonnes calcul\u00e9es restent. En fait, tout ce que vous pourriez calculer sur chaque poste dans la table de synth\u00e8se \u201cEmploy\u00e9s [par Poste]\u201d, vous pouvez toujours le calculer dans la nouvelle table \u201cPostes\u201d. Une diff\u00e9rence est que de nouvelles valeurs ne seront pas ajout\u00e9es automatiquement \u00e0 la table d\u00e9tach\u00e9e. En d\u2019autres termes, si un poste jamais vu auparavant (peut-\u00eatre \u201cResponsable des troubles\u201d) appara\u00eet dans les donn\u00e9es sous-jacentes, une table de synth\u00e8se se mettrait \u00e0 jour automatiquement pour l\u2019inclure, mais une table d\u00e9tach\u00e9e ne le fera pas.","title":"D\u00e9tacher des tables de synth\u00e8se"},{"location":"team-sharing/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Partage d\u2019\u00e9quipe # Nous avons vu comment partager des documents individuels avec d\u2019autres utilisateurs dans l\u2019article Partage . Les espaces d\u2019\u00e9quipe vous offrent un contr\u00f4le suppl\u00e9mentaire, vous permettant de partager les collections de documents d\u2019un espace d\u2019\u00e9quipe en tout ou en partie avec d\u2019autres. Vous pouvez \u00e9galement regrouper des documents en espaces de travail et modifier les permissions au niveau de l\u2019dossier. Pour partager un espace d\u2019\u00e9quipe, cliquez sur le bouton \u2018G\u00e9rer l\u2019\u00e9quipe\u2019 en haut \u00e0 droite de la page d\u2019accueil de votre espace d\u2019\u00e9quipe. Vous pouvez maintenant inviter des personnes comme vous l\u2019avez fait pour des documents individuels dans Partage . Tout comme pour les documents, vous pouvez inviter des personnes en tant que spectateurs, \u00e9diteurs ou propri\u00e9taires de l\u2019espace d\u2019\u00e9quipe. Tous les documents au sein de l\u2019espace seront accessibles \u00e0 ces personnes, sauf si vous d\u00e9sactivez l\u2019option de partage \u2018H\u00e9riter des acc\u00e8s\u2019 pour des espaces de travail ou documents individuels. R\u00f4les # Il y a trois r\u00f4les principaux pris en charge par Grist pour les espaces d\u2019\u00e9quipe : Spectateur : permet \u00e0 un utilisateur de consulter l\u2019espace mais pas d\u2019y apporter des modifications. Un spectateur pourra consulter tous les espaces de travail et documents au sein de l\u2019espace, sauf indication contraire. \u00c9diteur : permet \u00e0 un utilisateur de consulter ou d\u2019apporter des modifications \u00e0 l\u2019espace et \u00e0 tous ses espaces de travail et documents (sauf indication contraire). Cependant, les param\u00e8tres de partage de l\u2019espace, de ses espaces de travail et de ses documents ne peuvent pas \u00eatre modifi\u00e9s par un \u00e9diteur. Propri\u00e9taire : donne \u00e0 un utilisateur des permissions compl\u00e8tes sur les espaces de travail et les documents de l\u2019espace, y compris leurs param\u00e8tres de partage. Permissions de facturation # Aucun de ces r\u00f4les ne donne acc\u00e8s aux informations ou \u00e0 la gestion de la facturation. Les gestionnaires de plan de facturation peuvent \u00eatre ajout\u00e9s via l\u2019option \u2018Compte de facturation\u2019. Ouvrez le menu utilisateur sous votre ic\u00f4ne utilisateur et s\u00e9lectionnez \u2018Compte de facturation\u2019. Suppression des membres de l\u2019\u00e9quipe # Pour supprimer un utilisateur de votre \u00e9quipe, cliquez sur \u2018G\u00e9rer l\u2019\u00e9quipe\u2019 en haut \u00e0 droite de la page, puis cliquez sur l\u2019ic\u00f4ne de suppression \u00e0 droite de son nom. Vous devez cliquer sur le bouton de confirmation pour enregistrer le changement. Lorsque des utilisateurs sont supprim\u00e9s de votre \u00e9quipe, votre facture mensuelle sera r\u00e9duite, au prorata du temps restant dans le cycle de facturation.","title":"Sharing team sites"},{"location":"team-sharing/#partage-dequipe","text":"Nous avons vu comment partager des documents individuels avec d\u2019autres utilisateurs dans l\u2019article Partage . Les espaces d\u2019\u00e9quipe vous offrent un contr\u00f4le suppl\u00e9mentaire, vous permettant de partager les collections de documents d\u2019un espace d\u2019\u00e9quipe en tout ou en partie avec d\u2019autres. Vous pouvez \u00e9galement regrouper des documents en espaces de travail et modifier les permissions au niveau de l\u2019dossier. Pour partager un espace d\u2019\u00e9quipe, cliquez sur le bouton \u2018G\u00e9rer l\u2019\u00e9quipe\u2019 en haut \u00e0 droite de la page d\u2019accueil de votre espace d\u2019\u00e9quipe. Vous pouvez maintenant inviter des personnes comme vous l\u2019avez fait pour des documents individuels dans Partage . Tout comme pour les documents, vous pouvez inviter des personnes en tant que spectateurs, \u00e9diteurs ou propri\u00e9taires de l\u2019espace d\u2019\u00e9quipe. Tous les documents au sein de l\u2019espace seront accessibles \u00e0 ces personnes, sauf si vous d\u00e9sactivez l\u2019option de partage \u2018H\u00e9riter des acc\u00e8s\u2019 pour des espaces de travail ou documents individuels.","title":"Partage d’\u00e9quipe"},{"location":"team-sharing/#roles","text":"Il y a trois r\u00f4les principaux pris en charge par Grist pour les espaces d\u2019\u00e9quipe : Spectateur : permet \u00e0 un utilisateur de consulter l\u2019espace mais pas d\u2019y apporter des modifications. Un spectateur pourra consulter tous les espaces de travail et documents au sein de l\u2019espace, sauf indication contraire. \u00c9diteur : permet \u00e0 un utilisateur de consulter ou d\u2019apporter des modifications \u00e0 l\u2019espace et \u00e0 tous ses espaces de travail et documents (sauf indication contraire). Cependant, les param\u00e8tres de partage de l\u2019espace, de ses espaces de travail et de ses documents ne peuvent pas \u00eatre modifi\u00e9s par un \u00e9diteur. Propri\u00e9taire : donne \u00e0 un utilisateur des permissions compl\u00e8tes sur les espaces de travail et les documents de l\u2019espace, y compris leurs param\u00e8tres de partage.","title":"R\u00f4les"},{"location":"team-sharing/#permissions-de-facturation","text":"Aucun de ces r\u00f4les ne donne acc\u00e8s aux informations ou \u00e0 la gestion de la facturation. Les gestionnaires de plan de facturation peuvent \u00eatre ajout\u00e9s via l\u2019option \u2018Compte de facturation\u2019. Ouvrez le menu utilisateur sous votre ic\u00f4ne utilisateur et s\u00e9lectionnez \u2018Compte de facturation\u2019.","title":"Permissions de facturation"},{"location":"team-sharing/#suppression-des-membres-de-lequipe","text":"Pour supprimer un utilisateur de votre \u00e9quipe, cliquez sur \u2018G\u00e9rer l\u2019\u00e9quipe\u2019 en haut \u00e0 droite de la page, puis cliquez sur l\u2019ic\u00f4ne de suppression \u00e0 droite de son nom. Vous devez cliquer sur le bouton de confirmation pour enregistrer le changement. Lorsque des utilisateurs sont supprim\u00e9s de votre \u00e9quipe, votre facture mensuelle sera r\u00e9duite, au prorata du temps restant dans le cycle de facturation.","title":"Suppression des membres de l’\u00e9quipe"},{"location":"teams/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . \u00c9quipes # Les espaces d\u2019\u00e9quipe sont destin\u00e9s \u00e0 la collaboration r\u00e9guli\u00e8re par groupes. Ils stockent des documents sur un sous-domaine de votre choix tel que votre-\u00e9quipe.getgrist.com . Les espaces d\u2019\u00e9quipe peuvent \u00eatre sur un plan gratuit ou payant. La diff\u00e9rence entre le plan Gratuit et les plans payants r\u00e9side dans les limites de documents. Les documents sur un plan Gratuit peuvent contenir jusqu\u2019\u00e0 5 000 lignes et incluent des sauvegardes automatiques pendant 30 jours. Alors que les espaces personnels ne sont disponibles qu\u2019avec le plan Gratuit, les espaces d\u2019\u00e9quipe peuvent \u00eatre mis \u00e0 niveau vers les plans Pro ou Business. Sur les plans payants, les limites sont beaucoup plus \u00e9lev\u00e9es. Voir la page de tarification pour plus de d\u00e9tails. Si vous avez un espace d\u2019\u00e9quipe mais que vous ne le voyez pas, cliquez dans le coin sup\u00e9rieur gauche pour ouvrir un menu d\u00e9roulant des sites auxquels vous avez acc\u00e8s. Ouvrir le menu utilisateur sous votre ic\u00f4ne de profil listera \u00e9galement tous les sites auxquels vous avez acc\u00e8s. Vous ne voyez pas votre espace d\u2019\u00e9quipe ? Essayez de s\u00e9lectionner l\u2019option \u2018Ajouter un compte\u2019 dans le menu utilisateur. Il est possible que l\u2019espace d\u2019\u00e9quipe soit li\u00e9 \u00e0 une adresse e-mail diff\u00e9rente. Un nouvel espace d\u2019\u00e9quipe ressemblera \u00e0 ceci, pr\u00eat \u00e0 \u00eatre rempli de documents Grist et partag\u00e9 avec votre \u00e9quipe. Si un coll\u00e8gue a partag\u00e9 un espace d\u2019\u00e9quipe avec vous, vous verrez la m\u00eame chose, mais selon le r\u00f4le qu\u2019il a choisi pour vous, certaines options peuvent \u00eatre inactives. Si vous avez besoin de ces options, demandez \u00e0 votre coll\u00e8gue de changer votre r\u00f4le. Pour un espace d\u2019\u00e9quipe dans lequel vous \u00eates Propri\u00e9taire ou \u00c9diteur, vous pouvez cr\u00e9er des documents ou espaces de travail . Lorsque votre r\u00f4le est Propri\u00e9taire, vous pouvez imm\u00e9diatement commencer \u00e0 partager le site avec d\u2019autres. Comprendre les Espaces Personnels # Les sites qui commencent par le symbole \u2018@\u2019 sont des espaces personnels. Tous les comptes Grist ont un espace personnel. Votre espace personnel est nomm\u00e9 en utilisant votre nom et est toujours disponible \u00e0 https://docs.getgrist.com . C\u2019est \u00e9galement l\u00e0 que vous trouverez les documents personnels partag\u00e9s avec vous par d\u2019autres. Chaque document dans un espace personnel peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 2 Invit\u00e9s gratuitement. un espace personnel un espace d\u2019\u00e9quipe Compte de Facturation # Si vous avez cr\u00e9\u00e9 un espace d\u2019\u00e9quipe sur le plan Pro ou Business, ou si vous y avez \u00e9t\u00e9 ajout\u00e9 en tant que Gestionnaire de Facturation, vous pouvez g\u00e9rer les informations de facturation et modifier le nom et le sous-domaine de votre espace d\u2019\u00e9quipe depuis la page du compte de facturation. Ouvrez le menu utilisateur et cliquez sur \u2018Compte de Facturation\u2019 pour ouvrir un menu qui ressemble \u00e0 ceci. Cliquez sur l\u2019ic\u00f4ne \u2018Modifier\u2019 en haut pour \u00e9diter le nom ou le sous-domaine de votre espace d\u2019\u00e9quipe. Notez que si vous changez le sous-domaine, tous les liens pointant vers votre site ou les documents de votre site devront \u00eatre mis \u00e0 jour. Les espaces d\u2019\u00e9quipe peuvent \u00eatre supprim\u00e9s depuis la page \u2018R\u00e9sum\u00e9 de Facturation\u2019 en cliquant sur \u2018Supprimer l\u2019espace d\u2019\u00e9quipe\u2019. Veuillez noter que cette action est irr\u00e9versible et supprimera votre site ainsi que tous les documents. Assurez-vous d\u2019avoir cr\u00e9\u00e9 une sauvegarde des donn\u00e9es importantes au pr\u00e9alable.","title":"Creating team sites"},{"location":"teams/#equipes","text":"Les espaces d\u2019\u00e9quipe sont destin\u00e9s \u00e0 la collaboration r\u00e9guli\u00e8re par groupes. Ils stockent des documents sur un sous-domaine de votre choix tel que votre-\u00e9quipe.getgrist.com . Les espaces d\u2019\u00e9quipe peuvent \u00eatre sur un plan gratuit ou payant. La diff\u00e9rence entre le plan Gratuit et les plans payants r\u00e9side dans les limites de documents. Les documents sur un plan Gratuit peuvent contenir jusqu\u2019\u00e0 5 000 lignes et incluent des sauvegardes automatiques pendant 30 jours. Alors que les espaces personnels ne sont disponibles qu\u2019avec le plan Gratuit, les espaces d\u2019\u00e9quipe peuvent \u00eatre mis \u00e0 niveau vers les plans Pro ou Business. Sur les plans payants, les limites sont beaucoup plus \u00e9lev\u00e9es. Voir la page de tarification pour plus de d\u00e9tails. Si vous avez un espace d\u2019\u00e9quipe mais que vous ne le voyez pas, cliquez dans le coin sup\u00e9rieur gauche pour ouvrir un menu d\u00e9roulant des sites auxquels vous avez acc\u00e8s. Ouvrir le menu utilisateur sous votre ic\u00f4ne de profil listera \u00e9galement tous les sites auxquels vous avez acc\u00e8s. Vous ne voyez pas votre espace d\u2019\u00e9quipe ? Essayez de s\u00e9lectionner l\u2019option \u2018Ajouter un compte\u2019 dans le menu utilisateur. Il est possible que l\u2019espace d\u2019\u00e9quipe soit li\u00e9 \u00e0 une adresse e-mail diff\u00e9rente. Un nouvel espace d\u2019\u00e9quipe ressemblera \u00e0 ceci, pr\u00eat \u00e0 \u00eatre rempli de documents Grist et partag\u00e9 avec votre \u00e9quipe. Si un coll\u00e8gue a partag\u00e9 un espace d\u2019\u00e9quipe avec vous, vous verrez la m\u00eame chose, mais selon le r\u00f4le qu\u2019il a choisi pour vous, certaines options peuvent \u00eatre inactives. Si vous avez besoin de ces options, demandez \u00e0 votre coll\u00e8gue de changer votre r\u00f4le. Pour un espace d\u2019\u00e9quipe dans lequel vous \u00eates Propri\u00e9taire ou \u00c9diteur, vous pouvez cr\u00e9er des documents ou espaces de travail . Lorsque votre r\u00f4le est Propri\u00e9taire, vous pouvez imm\u00e9diatement commencer \u00e0 partager le site avec d\u2019autres.","title":"\u00c9quipes"},{"location":"teams/#comprendre-les-espaces-personnels","text":"Les sites qui commencent par le symbole \u2018@\u2019 sont des espaces personnels. Tous les comptes Grist ont un espace personnel. Votre espace personnel est nomm\u00e9 en utilisant votre nom et est toujours disponible \u00e0 https://docs.getgrist.com . C\u2019est \u00e9galement l\u00e0 que vous trouverez les documents personnels partag\u00e9s avec vous par d\u2019autres. Chaque document dans un espace personnel peut \u00eatre partag\u00e9 avec jusqu\u2019\u00e0 2 Invit\u00e9s gratuitement. un espace personnel un espace d\u2019\u00e9quipe","title":"Comprendre les Espaces Personnels"},{"location":"teams/#compte-de-facturation","text":"Si vous avez cr\u00e9\u00e9 un espace d\u2019\u00e9quipe sur le plan Pro ou Business, ou si vous y avez \u00e9t\u00e9 ajout\u00e9 en tant que Gestionnaire de Facturation, vous pouvez g\u00e9rer les informations de facturation et modifier le nom et le sous-domaine de votre espace d\u2019\u00e9quipe depuis la page du compte de facturation. Ouvrez le menu utilisateur et cliquez sur \u2018Compte de Facturation\u2019 pour ouvrir un menu qui ressemble \u00e0 ceci. Cliquez sur l\u2019ic\u00f4ne \u2018Modifier\u2019 en haut pour \u00e9diter le nom ou le sous-domaine de votre espace d\u2019\u00e9quipe. Notez que si vous changez le sous-domaine, tous les liens pointant vers votre site ou les documents de votre site devront \u00eatre mis \u00e0 jour. Les espaces d\u2019\u00e9quipe peuvent \u00eatre supprim\u00e9s depuis la page \u2018R\u00e9sum\u00e9 de Facturation\u2019 en cliquant sur \u2018Supprimer l\u2019espace d\u2019\u00e9quipe\u2019. Veuillez noter que cette action est irr\u00e9versible et supprimera votre site ainsi que tous les documents. Assurez-vous d\u2019avoir cr\u00e9\u00e9 une sauvegarde des donn\u00e9es importantes au pr\u00e9alable.","title":"Compte de Facturation"},{"location":"telemetry-full/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Niveau de t\u00e9l\u00e9m\u00e9trie : complet # Ceci est un niveau de t\u00e9l\u00e9m\u00e9trie appropri\u00e9 pour une utilisation interne par un service h\u00e9berg\u00e9, avec GRIST_TELEMETRY_URL d\u00e9fini sur un point de terminaison contr\u00f4l\u00e9 par l\u2019op\u00e9rateur du service. apiUsage # D\u00e9clench\u00e9 lorsqu\u2019une requ\u00eate HTTP avec une cl\u00e9 API est effectu\u00e9e. Champ Type Description method string La m\u00e9thode de la requ\u00eate HTTP (par exemple GET, POST, PUT). userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userAgent string L\u2019en-t\u00eate de la requ\u00eate HTTP User-Agent. beaconOpen # D\u00e9clench\u00e9 lorsque HelpScout Beacon est ouvert. Champ Type Description userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. beaconArticleViewed # D\u00e9clench\u00e9 lorsqu\u2019un article est ouvert dans HelpScout Beacon. Champ Type Description articleId string L\u2019identifiant de l\u2019article. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. beaconEmailSent # D\u00e9clench\u00e9 lorsqu\u2019un email est envoy\u00e9 dans HelpScout Beacon. Champ Type Description userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. beaconSearch # D\u00e9clench\u00e9 lorsqu\u2019une recherche est effectu\u00e9e dans HelpScout Beacon. Champ Type Description searchQuery string La requ\u00eate de recherche. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. documentForked # D\u00e9clench\u00e9 lorsqu\u2019un document est fork\u00e9. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site contenant le document fork\u00e9. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. forkIdDigest string Un hash de l\u2019identifiant du fork. forkDocIdDigest string Un hash de l\u2019identifiant complet du fork, incluant l\u2019identifiant du tronc et l\u2019identifiant du fork. trunkIdDigest string Un hash de l\u2019identifiant du tronc. isTemplate boolean Si le tronc est un mod\u00e8le. lastActivity date Horodatage de la derni\u00e8re mise \u00e0 jour du document tronc. documentOpened # D\u00e9clench\u00e9 lorsqu\u2019un document public ou un mod\u00e8le est ouvert. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. isPublic boolean Si le document est public. isSnapshot boolean Si un instantan\u00e9 a \u00e9t\u00e9 ouvert. isTemplate boolean Si le document est un mod\u00e8le. lastUpdated date Horodatage de la derni\u00e8re mise \u00e0 jour du document. documentUsage # D\u00e9clench\u00e9 \u00e0 l\u2019ouverture et \u00e0 la fermeture du document, ainsi qu\u2019\u00e0 chaque heure pendant qu\u2019un document est ouvert. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. triggeredBy string Ce qui a caus\u00e9 le d\u00e9clenchement de cet \u00e9v\u00e9nement. Peut \u00eatre soit \u201cdocOpen\u201d, \u201cinterval\u201d, ou \u201cdocClose\u201d. isPublic boolean Si le document est public. rowCount number Le nombre de lignes dans le document. dataSizeBytes number La taille totale de toutes les donn\u00e9es dans le document, \u00e0 l\u2019exclusion des pi\u00e8ces jointes. attachmentsSize number La taille totale de toutes les pi\u00e8ces jointes dans le document. numAccessRules number Le nombre de permissions avanc\u00e9es dans le document. numUserAttributes number Le nombre de propri\u00e9t\u00e9s d\u2019utilisateur dans le document. numAttachments number Le nombre de pi\u00e8ces jointes dans le document. attachmentTypes string[] Une liste des extensions de fichiers uniques compil\u00e9es \u00e0 partir de toutes les pi\u00e8ces jointes du document. numCharts number Le nombre de graphiques dans le document. chartTypes string[] Une liste des types de graphiques de chaque graphique dans le document. numLinkedCharts number Le nombre de graphiques li\u00e9s dans le document. numLinkedWidgets number Le nombre de vues li\u00e9es dans le document. numColumns number Le nombre de colonnes dans le document. numColumnsWithConditionalFormatting number Le nombre de colonnes avec un formatage conditionnel dans le document. numFormulaColumns number Le nombre de colonnes de formules dans le document. numTriggerFormulaColumns number Le nombre de colonnes de formules de d\u00e9clenchement dans le document. numSummaryFormulaColumns number Le nombre de colonnes de formules de r\u00e9sum\u00e9 dans le document. numFieldsWithConditionalFormatting number Le nombre de champs avec un formatage conditionnel dans le document. numTables number Le nombre de tables dans le document. numOnDemandTables number Le nombre de tables \u00e0 la demande dans le document. numTablesWithConditionalFormatting number Le nombre de tables avec un formatage conditionnel dans le document. numSummaryTables number Le nombre de tables de r\u00e9sum\u00e9 dans le document. numCustomWidgets number Le nombre de vues personnalis\u00e9es dans le document. customWidgetIds string[] Une liste des identifiants de plugins pour chaque vue personnalis\u00e9e dans le document. Les identifiants des vues non cr\u00e9\u00e9es par Grist Labs sont remplac\u00e9s par \u201cexternalId\u201d. processMonitor # D\u00e9clench\u00e9 toutes les 5 secondes. Champ Type Description heapUsedMB number Taille du tas JS utilis\u00e9, en MiB. heapTotalMB number Taille totale du tas, en MiB, allou\u00e9e pour JS par V8. cpuAverage number Fraction (typiquement entre 0 et 1) de l\u2019utilisation du CPU. Inclut tous les threads, donc peut d\u00e9passer 1. intervalMs number Intervalle (en millisecondes) sur lequel cpuAverage est rapport\u00e9. sendingWebhooks # D\u00e9clench\u00e9 lors de l\u2019envoi de webhooks. Champ Type Description numEvents number Le nombre d\u2019\u00e9v\u00e9nements dans le lot de webhooks envoy\u00e9s. docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. signupVerified # D\u00e9clench\u00e9 apr\u00e8s qu\u2019un utilisateur a v\u00e9rifi\u00e9 avec succ\u00e8s son compte lors de l\u2019inscription. Non d\u00e9clench\u00e9 dans grist-core. Champ Type Description isAnonymousTemplateSignup boolean Si l\u2019utilisateur a consult\u00e9 des mod\u00e8les avant de s\u2019inscrire. templateId string L\u2019identifiant du mod\u00e8le que l\u2019utilisateur a consult\u00e9 en dernier avant de s\u2019inscrire, le cas \u00e9ch\u00e9ant. siteMembership # D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type du site. numOwners number Le nombre d\u2019utilisateurs avec un r\u00f4le de propri\u00e9taire dans ce site. numEditors number Le nombre d\u2019utilisateurs avec un r\u00f4le d\u2019\u00e9diteur dans ce site. numViewers number Le nombre d\u2019utilisateurs avec un r\u00f4le de visualiseur dans ce site. siteUsage # D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type du site. inGoodStanding boolean Si l\u2019abonnement du site est en r\u00e8gle. stripePlanId string L\u2019identifiant du plan Stripe associ\u00e9 \u00e0 ce site. numDocs number Le nombre de documents dans ce site. numWorkspaces number Le nombre d\u2019espaces de travail dans ce site. numMembers number Le nombre de membres du site. lastActivity date Un horodatage de la mise \u00e0 jour la plus r\u00e9cente effectu\u00e9e sur un document du site. tutorialProgressChanged # D\u00e9clench\u00e9 lors des changements de progression du tutoriel. Champ Type Description tutorialForkIdDigest string Un hash de l\u2019identifiant du fork du tutoriel. tutorialTrunkIdDigest string Un hash de l\u2019identifiant du tronc du tutoriel. lastSlideIndex number L\u2019index bas\u00e9 sur 0 de la derni\u00e8re diapositive du tutoriel que l\u2019utilisateur avait ouverte. numSlides number Le nombre total de diapositives dans le tutoriel. percentComplete number Pourcentage d\u2019ach\u00e8vement du tutoriel. tutorialRestarted # D\u00e9clench\u00e9 lorsqu\u2019un tutoriel est red\u00e9marr\u00e9. Champ Type Description tutorialForkIdDigest string Un hash de l\u2019identifiant du fork du tutoriel. tutorialTrunkIdDigest string Un hash de l\u2019identifiant du tronc du tutoriel. docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. watchedVideoTour # D\u00e9clench\u00e9 lorsque la visite vid\u00e9o est ferm\u00e9e. Champ Type Description watchTimeSeconds number Le nombre de secondes \u00e9coul\u00e9es dans le lecteur vid\u00e9o. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"Full telemetry"},{"location":"telemetry-full/#niveau-de-telemetrie-complet","text":"Ceci est un niveau de t\u00e9l\u00e9m\u00e9trie appropri\u00e9 pour une utilisation interne par un service h\u00e9berg\u00e9, avec GRIST_TELEMETRY_URL d\u00e9fini sur un point de terminaison contr\u00f4l\u00e9 par l\u2019op\u00e9rateur du service.","title":"Niveau de t\u00e9l\u00e9m\u00e9trie : complet"},{"location":"telemetry-full/#apiusage","text":"D\u00e9clench\u00e9 lorsqu\u2019une requ\u00eate HTTP avec une cl\u00e9 API est effectu\u00e9e. Champ Type Description method string La m\u00e9thode de la requ\u00eate HTTP (par exemple GET, POST, PUT). userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userAgent string L\u2019en-t\u00eate de la requ\u00eate HTTP User-Agent.","title":"apiUsage"},{"location":"telemetry-full/#beaconopen","text":"D\u00e9clench\u00e9 lorsque HelpScout Beacon est ouvert. Champ Type Description userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"beaconOpen"},{"location":"telemetry-full/#beaconarticleviewed","text":"D\u00e9clench\u00e9 lorsqu\u2019un article est ouvert dans HelpScout Beacon. Champ Type Description articleId string L\u2019identifiant de l\u2019article. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"beaconArticleViewed"},{"location":"telemetry-full/#beaconemailsent","text":"D\u00e9clench\u00e9 lorsqu\u2019un email est envoy\u00e9 dans HelpScout Beacon. Champ Type Description userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"beaconEmailSent"},{"location":"telemetry-full/#beaconsearch","text":"D\u00e9clench\u00e9 lorsqu\u2019une recherche est effectu\u00e9e dans HelpScout Beacon. Champ Type Description searchQuery string La requ\u00eate de recherche. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"beaconSearch"},{"location":"telemetry-full/#documentforked","text":"D\u00e9clench\u00e9 lorsqu\u2019un document est fork\u00e9. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site contenant le document fork\u00e9. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. forkIdDigest string Un hash de l\u2019identifiant du fork. forkDocIdDigest string Un hash de l\u2019identifiant complet du fork, incluant l\u2019identifiant du tronc et l\u2019identifiant du fork. trunkIdDigest string Un hash de l\u2019identifiant du tronc. isTemplate boolean Si le tronc est un mod\u00e8le. lastActivity date Horodatage de la derni\u00e8re mise \u00e0 jour du document tronc.","title":"documentForked"},{"location":"telemetry-full/#documentopened","text":"D\u00e9clench\u00e9 lorsqu\u2019un document public ou un mod\u00e8le est ouvert. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. isPublic boolean Si le document est public. isSnapshot boolean Si un instantan\u00e9 a \u00e9t\u00e9 ouvert. isTemplate boolean Si le document est un mod\u00e8le. lastUpdated date Horodatage de la derni\u00e8re mise \u00e0 jour du document.","title":"documentOpened"},{"location":"telemetry-full/#documentusage","text":"D\u00e9clench\u00e9 \u00e0 l\u2019ouverture et \u00e0 la fermeture du document, ainsi qu\u2019\u00e0 chaque heure pendant qu\u2019un document est ouvert. Champ Type Description docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. triggeredBy string Ce qui a caus\u00e9 le d\u00e9clenchement de cet \u00e9v\u00e9nement. Peut \u00eatre soit \u201cdocOpen\u201d, \u201cinterval\u201d, ou \u201cdocClose\u201d. isPublic boolean Si le document est public. rowCount number Le nombre de lignes dans le document. dataSizeBytes number La taille totale de toutes les donn\u00e9es dans le document, \u00e0 l\u2019exclusion des pi\u00e8ces jointes. attachmentsSize number La taille totale de toutes les pi\u00e8ces jointes dans le document. numAccessRules number Le nombre de permissions avanc\u00e9es dans le document. numUserAttributes number Le nombre de propri\u00e9t\u00e9s d\u2019utilisateur dans le document. numAttachments number Le nombre de pi\u00e8ces jointes dans le document. attachmentTypes string[] Une liste des extensions de fichiers uniques compil\u00e9es \u00e0 partir de toutes les pi\u00e8ces jointes du document. numCharts number Le nombre de graphiques dans le document. chartTypes string[] Une liste des types de graphiques de chaque graphique dans le document. numLinkedCharts number Le nombre de graphiques li\u00e9s dans le document. numLinkedWidgets number Le nombre de vues li\u00e9es dans le document. numColumns number Le nombre de colonnes dans le document. numColumnsWithConditionalFormatting number Le nombre de colonnes avec un formatage conditionnel dans le document. numFormulaColumns number Le nombre de colonnes de formules dans le document. numTriggerFormulaColumns number Le nombre de colonnes de formules de d\u00e9clenchement dans le document. numSummaryFormulaColumns number Le nombre de colonnes de formules de r\u00e9sum\u00e9 dans le document. numFieldsWithConditionalFormatting number Le nombre de champs avec un formatage conditionnel dans le document. numTables number Le nombre de tables dans le document. numOnDemandTables number Le nombre de tables \u00e0 la demande dans le document. numTablesWithConditionalFormatting number Le nombre de tables avec un formatage conditionnel dans le document. numSummaryTables number Le nombre de tables de r\u00e9sum\u00e9 dans le document. numCustomWidgets number Le nombre de vues personnalis\u00e9es dans le document. customWidgetIds string[] Une liste des identifiants de plugins pour chaque vue personnalis\u00e9e dans le document. Les identifiants des vues non cr\u00e9\u00e9es par Grist Labs sont remplac\u00e9s par \u201cexternalId\u201d.","title":"documentUsage"},{"location":"telemetry-full/#processmonitor","text":"D\u00e9clench\u00e9 toutes les 5 secondes. Champ Type Description heapUsedMB number Taille du tas JS utilis\u00e9, en MiB. heapTotalMB number Taille totale du tas, en MiB, allou\u00e9e pour JS par V8. cpuAverage number Fraction (typiquement entre 0 et 1) de l\u2019utilisation du CPU. Inclut tous les threads, donc peut d\u00e9passer 1. intervalMs number Intervalle (en millisecondes) sur lequel cpuAverage est rapport\u00e9.","title":"processMonitor"},{"location":"telemetry-full/#sendingwebhooks","text":"D\u00e9clench\u00e9 lors de l\u2019envoi de webhooks. Champ Type Description numEvents number Le nombre d\u2019\u00e9v\u00e9nements dans le lot de webhooks envoy\u00e9s. docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"sendingWebhooks"},{"location":"telemetry-full/#signupverified","text":"D\u00e9clench\u00e9 apr\u00e8s qu\u2019un utilisateur a v\u00e9rifi\u00e9 avec succ\u00e8s son compte lors de l\u2019inscription. Non d\u00e9clench\u00e9 dans grist-core. Champ Type Description isAnonymousTemplateSignup boolean Si l\u2019utilisateur a consult\u00e9 des mod\u00e8les avant de s\u2019inscrire. templateId string L\u2019identifiant du mod\u00e8le que l\u2019utilisateur a consult\u00e9 en dernier avant de s\u2019inscrire, le cas \u00e9ch\u00e9ant.","title":"signupVerified"},{"location":"telemetry-full/#sitemembership","text":"D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type du site. numOwners number Le nombre d\u2019utilisateurs avec un r\u00f4le de propri\u00e9taire dans ce site. numEditors number Le nombre d\u2019utilisateurs avec un r\u00f4le d\u2019\u00e9diteur dans ce site. numViewers number Le nombre d\u2019utilisateurs avec un r\u00f4le de visualiseur dans ce site.","title":"siteMembership"},{"location":"telemetry-full/#siteusage","text":"D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type du site. inGoodStanding boolean Si l\u2019abonnement du site est en r\u00e8gle. stripePlanId string L\u2019identifiant du plan Stripe associ\u00e9 \u00e0 ce site. numDocs number Le nombre de documents dans ce site. numWorkspaces number Le nombre d\u2019espaces de travail dans ce site. numMembers number Le nombre de membres du site. lastActivity date Un horodatage de la mise \u00e0 jour la plus r\u00e9cente effectu\u00e9e sur un document du site.","title":"siteUsage"},{"location":"telemetry-full/#tutorialprogresschanged","text":"D\u00e9clench\u00e9 lors des changements de progression du tutoriel. Champ Type Description tutorialForkIdDigest string Un hash de l\u2019identifiant du fork du tutoriel. tutorialTrunkIdDigest string Un hash de l\u2019identifiant du tronc du tutoriel. lastSlideIndex number L\u2019index bas\u00e9 sur 0 de la derni\u00e8re diapositive du tutoriel que l\u2019utilisateur avait ouverte. numSlides number Le nombre total de diapositives dans le tutoriel. percentComplete number Pourcentage d\u2019ach\u00e8vement du tutoriel.","title":"tutorialProgressChanged"},{"location":"telemetry-full/#tutorialrestarted","text":"D\u00e9clench\u00e9 lorsqu\u2019un tutoriel est red\u00e9marr\u00e9. Champ Type Description tutorialForkIdDigest string Un hash de l\u2019identifiant du fork du tutoriel. tutorialTrunkIdDigest string Un hash de l\u2019identifiant du tronc du tutoriel. docIdDigest string Un hash de l\u2019identifiant du document. siteId number L\u2019identifiant du site. siteType string Le type du site. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"tutorialRestarted"},{"location":"telemetry-full/#watchedvideotour","text":"D\u00e9clench\u00e9 lorsque la visite vid\u00e9o est ferm\u00e9e. Champ Type Description watchTimeSeconds number Le nombre de secondes \u00e9coul\u00e9es dans le lecteur vid\u00e9o. userId number L\u2019identifiant de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. altSessionId string Un identifiant al\u00e9atoire bas\u00e9 sur la session pour l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"watchedVideoTour"},{"location":"telemetry-limited/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Niveau de t\u00e9l\u00e9m\u00e9trie : limit\u00e9 # Il s\u2019agit d\u2019un niveau de t\u00e9l\u00e9m\u00e9trie appropri\u00e9 pour les instances auto-h\u00e9berg\u00e9es de Grist. Les donn\u00e9es sont transmises \u00e0 Grist Labs. documentForked # D\u00e9clench\u00e9 lorsqu\u2019un document est dupliqu\u00e9. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. forkIdDigest string Un hachage de l\u2019identifiant de la duplication. forkDocIdDigest string Un hachage de l\u2019identifiant complet de la duplication, incluant l\u2019identifiant du tronc et l\u2019identifiant de la duplication. trunkIdDigest string Un hachage de l\u2019identifiant du tronc. isTemplate boolean Indique si le tronc est un mod\u00e8le. lastActivity date Horodatage de la derni\u00e8re mise \u00e0 jour du document tronc. documentOpened # D\u00e9clench\u00e9 lorsqu\u2019un document public ou un mod\u00e8le est ouvert. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. isPublic boolean Indique si le document est public. isSnapshot boolean Indique si une capture instantan\u00e9e a \u00e9t\u00e9 ouverte. isTemplate boolean Indique si le document est un mod\u00e8le. lastUpdated date Horodatage de la derni\u00e8re mise \u00e0 jour du document. documentUsage # D\u00e9clench\u00e9 \u00e0 l\u2019ouverture et \u00e0 la fermeture d\u2019un document, ainsi qu\u2019\u00e0 chaque heure pendant qu\u2019un document est ouvert. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. triggeredBy string Ce qui a caus\u00e9 le d\u00e9clenchement de cet \u00e9v\u00e9nement. Peut \u00eatre soit \u201cdocOpen\u201d, \u201cinterval\u201d, ou \u201cdocClose\u201d. isPublic boolean Indique si le document est public. rowCount number Le nombre de lignes dans le document. dataSizeBytes number La taille totale de toutes les donn\u00e9es dans le document, \u00e0 l\u2019exclusion des pi\u00e8ces jointes. attachmentsSize number La taille totale de toutes les pi\u00e8ces jointes dans le document. numAccessRules number Le nombre de permissions avanc\u00e9es dans le document. numUserAttributes number Le nombre de propri\u00e9t\u00e9s d\u2019utilisateur dans le document. numAttachments number Le nombre de pi\u00e8ces jointes dans le document. attachmentTypes string[] Une liste des extensions de fichiers uniques compil\u00e9es \u00e0 partir de toutes les pi\u00e8ces jointes du document. numCharts number Le nombre de graphiques dans le document. chartTypes string[] Une liste des types de graphiques de chaque graphique dans le document. numLinkedCharts number Le nombre de graphiques li\u00e9s dans le document. numLinkedWidgets number Le nombre de vues li\u00e9es dans le document. numColumns number Le nombre de colonnes dans le document. numColumnsWithConditionalFormatting number Le nombre de colonnes avec mise en forme conditionnelle dans le document. numFormulaColumns number Le nombre de colonnes de formules dans le document. numTriggerFormulaColumns number Le nombre de colonnes de formules d\u00e9clencheuses dans le document. numSummaryFormulaColumns number Le nombre de colonnes de formules r\u00e9capitulatives dans le document. numFieldsWithConditionalFormatting number Le nombre de champs avec mise en forme conditionnelle dans le document. numTables number Le nombre de tables dans le document. numOnDemandTables number Le nombre de tables \u00e0 la demande dans le document. numTablesWithConditionalFormatting number Le nombre de tables avec mise en forme conditionnelle dans le document. numSummaryTables number Le nombre de tables r\u00e9capitulatives dans le document. numCustomWidgets number Le nombre de vues personnalis\u00e9es dans le document. customWidgetIds string[] Une liste des identifiants de plugins pour chaque vue personnalis\u00e9e dans le document. Les identifiants des vues non cr\u00e9\u00e9es par Grist Labs sont remplac\u00e9s par \u201cexternalId\u201d. sendingWebhooks # D\u00e9clench\u00e9 lors de l\u2019envoi de webhooks. Champ Type Description numEvents number Le nombre d\u2019\u00e9v\u00e9nements dans le lot de webhooks envoy\u00e9s. docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. siteMembership # D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type de site. numOwners number Le nombre d\u2019utilisateurs avec un r\u00f4le de propri\u00e9taire dans ce site. numEditors number Le nombre d\u2019utilisateurs avec un r\u00f4le d\u2019\u00e9diteur dans ce site. numViewers number Le nombre d\u2019utilisateurs avec un r\u00f4le de visionneur dans ce site. siteUsage # D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type de site. inGoodStanding boolean Indique si l\u2019abonnement du site est en r\u00e8gle. numDocs number Le nombre de documents dans ce site. numWorkspaces number Le nombre d\u2019espaces de travail dans ce site. numMembers number Le nombre de membres du site. lastActivity date Un horodatage de la mise \u00e0 jour la plus r\u00e9cente effectu\u00e9e sur un document du site. watchedVideoTour # D\u00e9clench\u00e9 lorsque la visite vid\u00e9o est ferm\u00e9e. Champ Type Description watchTimeSeconds number Le nombre de secondes \u00e9coul\u00e9es dans le lecteur vid\u00e9o.","title":"Limited telemetry"},{"location":"telemetry-limited/#niveau-de-telemetrie-limite","text":"Il s\u2019agit d\u2019un niveau de t\u00e9l\u00e9m\u00e9trie appropri\u00e9 pour les instances auto-h\u00e9berg\u00e9es de Grist. Les donn\u00e9es sont transmises \u00e0 Grist Labs.","title":"Niveau de t\u00e9l\u00e9m\u00e9trie : limit\u00e9"},{"location":"telemetry-limited/#documentforked","text":"D\u00e9clench\u00e9 lorsqu\u2019un document est dupliqu\u00e9. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. forkIdDigest string Un hachage de l\u2019identifiant de la duplication. forkDocIdDigest string Un hachage de l\u2019identifiant complet de la duplication, incluant l\u2019identifiant du tronc et l\u2019identifiant de la duplication. trunkIdDigest string Un hachage de l\u2019identifiant du tronc. isTemplate boolean Indique si le tronc est un mod\u00e8le. lastActivity date Horodatage de la derni\u00e8re mise \u00e0 jour du document tronc.","title":"documentForked"},{"location":"telemetry-limited/#documentopened","text":"D\u00e9clench\u00e9 lorsqu\u2019un document public ou un mod\u00e8le est ouvert. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. isPublic boolean Indique si le document est public. isSnapshot boolean Indique si une capture instantan\u00e9e a \u00e9t\u00e9 ouverte. isTemplate boolean Indique si le document est un mod\u00e8le. lastUpdated date Horodatage de la derni\u00e8re mise \u00e0 jour du document.","title":"documentOpened"},{"location":"telemetry-limited/#documentusage","text":"D\u00e9clench\u00e9 \u00e0 l\u2019ouverture et \u00e0 la fermeture d\u2019un document, ainsi qu\u2019\u00e0 chaque heure pendant qu\u2019un document est ouvert. Champ Type Description docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement. triggeredBy string Ce qui a caus\u00e9 le d\u00e9clenchement de cet \u00e9v\u00e9nement. Peut \u00eatre soit \u201cdocOpen\u201d, \u201cinterval\u201d, ou \u201cdocClose\u201d. isPublic boolean Indique si le document est public. rowCount number Le nombre de lignes dans le document. dataSizeBytes number La taille totale de toutes les donn\u00e9es dans le document, \u00e0 l\u2019exclusion des pi\u00e8ces jointes. attachmentsSize number La taille totale de toutes les pi\u00e8ces jointes dans le document. numAccessRules number Le nombre de permissions avanc\u00e9es dans le document. numUserAttributes number Le nombre de propri\u00e9t\u00e9s d\u2019utilisateur dans le document. numAttachments number Le nombre de pi\u00e8ces jointes dans le document. attachmentTypes string[] Une liste des extensions de fichiers uniques compil\u00e9es \u00e0 partir de toutes les pi\u00e8ces jointes du document. numCharts number Le nombre de graphiques dans le document. chartTypes string[] Une liste des types de graphiques de chaque graphique dans le document. numLinkedCharts number Le nombre de graphiques li\u00e9s dans le document. numLinkedWidgets number Le nombre de vues li\u00e9es dans le document. numColumns number Le nombre de colonnes dans le document. numColumnsWithConditionalFormatting number Le nombre de colonnes avec mise en forme conditionnelle dans le document. numFormulaColumns number Le nombre de colonnes de formules dans le document. numTriggerFormulaColumns number Le nombre de colonnes de formules d\u00e9clencheuses dans le document. numSummaryFormulaColumns number Le nombre de colonnes de formules r\u00e9capitulatives dans le document. numFieldsWithConditionalFormatting number Le nombre de champs avec mise en forme conditionnelle dans le document. numTables number Le nombre de tables dans le document. numOnDemandTables number Le nombre de tables \u00e0 la demande dans le document. numTablesWithConditionalFormatting number Le nombre de tables avec mise en forme conditionnelle dans le document. numSummaryTables number Le nombre de tables r\u00e9capitulatives dans le document. numCustomWidgets number Le nombre de vues personnalis\u00e9es dans le document. customWidgetIds string[] Une liste des identifiants de plugins pour chaque vue personnalis\u00e9e dans le document. Les identifiants des vues non cr\u00e9\u00e9es par Grist Labs sont remplac\u00e9s par \u201cexternalId\u201d.","title":"documentUsage"},{"location":"telemetry-limited/#sendingwebhooks","text":"D\u00e9clench\u00e9 lors de l\u2019envoi de webhooks. Champ Type Description numEvents number Le nombre d\u2019\u00e9v\u00e9nements dans le lot de webhooks envoy\u00e9s. docIdDigest string Un hachage de l\u2019identifiant du document. access string Le niveau d\u2019acc\u00e8s au document de l\u2019utilisateur qui a d\u00e9clench\u00e9 cet \u00e9v\u00e9nement.","title":"sendingWebhooks"},{"location":"telemetry-limited/#sitemembership","text":"D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type de site. numOwners number Le nombre d\u2019utilisateurs avec un r\u00f4le de propri\u00e9taire dans ce site. numEditors number Le nombre d\u2019utilisateurs avec un r\u00f4le d\u2019\u00e9diteur dans ce site. numViewers number Le nombre d\u2019utilisateurs avec un r\u00f4le de visionneur dans ce site.","title":"siteMembership"},{"location":"telemetry-limited/#siteusage","text":"D\u00e9clench\u00e9 quotidiennement. Champ Type Description siteId number L\u2019identifiant du site. siteType string Le type de site. inGoodStanding boolean Indique si l\u2019abonnement du site est en r\u00e8gle. numDocs number Le nombre de documents dans ce site. numWorkspaces number Le nombre d\u2019espaces de travail dans ce site. numMembers number Le nombre de membres du site. lastActivity date Un horodatage de la mise \u00e0 jour la plus r\u00e9cente effectu\u00e9e sur un document du site.","title":"siteUsage"},{"location":"telemetry-limited/#watchedvideotour","text":"D\u00e9clench\u00e9 lorsque la visite vid\u00e9o est ferm\u00e9e. Champ Type Description watchTimeSeconds number Le nombre de secondes \u00e9coul\u00e9es dans le lecteur vid\u00e9o.","title":"watchedVideoTour"},{"location":"telemetry/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Aper\u00e7u de la T\u00e9l\u00e9m\u00e9trie # Le d\u00e9veloppement de Grist est guid\u00e9 par la t\u00e9l\u00e9m\u00e9trie : un ensemble de mesures visant \u00e0 quantifier les aspects de l\u2019utilisation de Grist. Une installation autog\u00e9r\u00e9e de Grist ne fait par d\u00e9faut aucune t\u00e9l\u00e9m\u00e9trie. Lorsque la t\u00e9l\u00e9m\u00e9trie est activ\u00e9e, les donn\u00e9es d\u2019utilisation sont envoy\u00e9es \u00e0 un service maintenu par Grist Labs. La t\u00e9l\u00e9m\u00e9trie peut \u00eatre configur\u00e9e par des variables d\u2019environnement optionnelles : GRIST_TELEMETRY_LEVEL . Cela peut \u00eatre off , limited ou full . La valeur par d\u00e9faut est off . Un r\u00e9glage de limited ou full entra\u00eene l\u2019envoi de donn\u00e9es \u00e0 un service op\u00e9r\u00e9 par Grist Labs. Nous encourageons les utilisateurs \u00e0 r\u00e9gler la t\u00e9l\u00e9m\u00e9trie sur limited afin que leur utilisation soit prise en compte et guide le d\u00e9veloppement de Grist. Nous ne recommandons un r\u00e9glage full que si vous avez utilis\u00e9 GRIST_TELEMETRY_URL pour rediriger la t\u00e9l\u00e9m\u00e9trie vers un service que vous contr\u00f4lez. Cela inclut des identifiants internes \u00e0 votre installation que nous pr\u00e9f\u00e9rerions ne pas conna\u00eetre. GRIST_TELEMETRY_URL . Cela contr\u00f4le o\u00f9 la t\u00e9l\u00e9m\u00e9trie est envoy\u00e9e. Par d\u00e9faut, elle est envoy\u00e9e \u00e0 un service op\u00e9r\u00e9 par Grist Labs. Si vous g\u00e9rez un grand service h\u00e9berg\u00e9, vous pouvez souhaiter diriger la t\u00e9l\u00e9m\u00e9trie vers un service que vous contr\u00f4lez. La t\u00e9l\u00e9m\u00e9trie peut \u00e9galement \u00eatre configur\u00e9e de mani\u00e8re interactive par le propri\u00e9taire d\u2019une installation Grist, voir Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? pour plus de d\u00e9tails. Le r\u00e9glage limited entra\u00eene une t\u00e9l\u00e9m\u00e9trie \u00e0 gros grain. Ce niveau est destin\u00e9 \u00e0 une installation de Grist qui a choisi de fournir de la t\u00e9l\u00e9m\u00e9trie. L\u2019objectif est de comprendre comment Grist est utilis\u00e9 \u201cdans la nature\u201d en termes d\u2019utilisation des fonctionnalit\u00e9s et de comptage des ressources, sans partager de donn\u00e9es commerciales ou d\u2019informations personnelles identifiables. Voir t\u00e9l\u00e9m\u00e9trie limit\u00e9e pour les d\u00e9tails de ce qui est exactement envoy\u00e9. Le r\u00e9glage full donne une t\u00e9l\u00e9m\u00e9trie relativement fine. Ce niveau est destin\u00e9 aux grands services h\u00e9berg\u00e9s, tels que celui g\u00e9r\u00e9 par Grist Labs. Plus d\u2019informations sont enregistr\u00e9es, pour faciliter la gestion du service et le d\u00e9veloppement du produit. Aucune information personnelle identifiable n\u2019est incluse. Des identifiants opaques sont inclus qui, en cas de besoin (par exemple en cas de panne de service), pourraient \u00eatre li\u00e9s \u00e0 des informations personnelles via des magasins non t\u00e9l\u00e9m\u00e9triques. Voir t\u00e9l\u00e9m\u00e9trie compl\u00e8te pour les d\u00e9tails de ce qui est exactement envoy\u00e9.","title":"Overview of telemetry"},{"location":"telemetry/#apercu-de-la-telemetrie","text":"Le d\u00e9veloppement de Grist est guid\u00e9 par la t\u00e9l\u00e9m\u00e9trie : un ensemble de mesures visant \u00e0 quantifier les aspects de l\u2019utilisation de Grist. Une installation autog\u00e9r\u00e9e de Grist ne fait par d\u00e9faut aucune t\u00e9l\u00e9m\u00e9trie. Lorsque la t\u00e9l\u00e9m\u00e9trie est activ\u00e9e, les donn\u00e9es d\u2019utilisation sont envoy\u00e9es \u00e0 un service maintenu par Grist Labs. La t\u00e9l\u00e9m\u00e9trie peut \u00eatre configur\u00e9e par des variables d\u2019environnement optionnelles : GRIST_TELEMETRY_LEVEL . Cela peut \u00eatre off , limited ou full . La valeur par d\u00e9faut est off . Un r\u00e9glage de limited ou full entra\u00eene l\u2019envoi de donn\u00e9es \u00e0 un service op\u00e9r\u00e9 par Grist Labs. Nous encourageons les utilisateurs \u00e0 r\u00e9gler la t\u00e9l\u00e9m\u00e9trie sur limited afin que leur utilisation soit prise en compte et guide le d\u00e9veloppement de Grist. Nous ne recommandons un r\u00e9glage full que si vous avez utilis\u00e9 GRIST_TELEMETRY_URL pour rediriger la t\u00e9l\u00e9m\u00e9trie vers un service que vous contr\u00f4lez. Cela inclut des identifiants internes \u00e0 votre installation que nous pr\u00e9f\u00e9rerions ne pas conna\u00eetre. GRIST_TELEMETRY_URL . Cela contr\u00f4le o\u00f9 la t\u00e9l\u00e9m\u00e9trie est envoy\u00e9e. Par d\u00e9faut, elle est envoy\u00e9e \u00e0 un service op\u00e9r\u00e9 par Grist Labs. Si vous g\u00e9rez un grand service h\u00e9berg\u00e9, vous pouvez souhaiter diriger la t\u00e9l\u00e9m\u00e9trie vers un service que vous contr\u00f4lez. La t\u00e9l\u00e9m\u00e9trie peut \u00e9galement \u00eatre configur\u00e9e de mani\u00e8re interactive par le propri\u00e9taire d\u2019une installation Grist, voir Comment contr\u00f4ler la t\u00e9l\u00e9m\u00e9trie ? pour plus de d\u00e9tails. Le r\u00e9glage limited entra\u00eene une t\u00e9l\u00e9m\u00e9trie \u00e0 gros grain. Ce niveau est destin\u00e9 \u00e0 une installation de Grist qui a choisi de fournir de la t\u00e9l\u00e9m\u00e9trie. L\u2019objectif est de comprendre comment Grist est utilis\u00e9 \u201cdans la nature\u201d en termes d\u2019utilisation des fonctionnalit\u00e9s et de comptage des ressources, sans partager de donn\u00e9es commerciales ou d\u2019informations personnelles identifiables. Voir t\u00e9l\u00e9m\u00e9trie limit\u00e9e pour les d\u00e9tails de ce qui est exactement envoy\u00e9. Le r\u00e9glage full donne une t\u00e9l\u00e9m\u00e9trie relativement fine. Ce niveau est destin\u00e9 aux grands services h\u00e9berg\u00e9s, tels que celui g\u00e9r\u00e9 par Grist Labs. Plus d\u2019informations sont enregistr\u00e9es, pour faciliter la gestion du service et le d\u00e9veloppement du produit. Aucune information personnelle identifiable n\u2019est incluse. Des identifiants opaques sont inclus qui, en cas de besoin (par exemple en cas de panne de service), pourraient \u00eatre li\u00e9s \u00e0 des informations personnelles via des magasins non t\u00e9l\u00e9m\u00e9triques. Voir t\u00e9l\u00e9m\u00e9trie compl\u00e8te pour les d\u00e9tails de ce qui est exactement envoy\u00e9.","title":"Aper\u00e7u de la T\u00e9l\u00e9m\u00e9trie"},{"location":"timestamps/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Colonnes de timestamp # Il est parfois utile d\u2019avoir des colonnes qui stockent le moment o\u00f9 des enregistrements individuels ont \u00e9t\u00e9 cr\u00e9\u00e9s et mis \u00e0 jour. Cela est utile plus tard, par exemple pour trier les enregistrements par anciennet\u00e9 ou fra\u00eecheur. Grist vous permet de cr\u00e9er facilement de telles colonnes. Une colonne \u201cCr\u00e9\u00e9 le\u201d # Supposons que nous voulions une colonne qui stocke le moment o\u00f9 un enregistrement a \u00e9t\u00e9 cr\u00e9\u00e9. Comme premi\u00e8re \u00e9tape, ajoutez une colonne appel\u00e9e (par exemple) Cr\u00e9\u00e9 le et entrez NOW() comme formule. D\u00e9finissez le type de colonne sur DateTime (voir Cr\u00e9er une colonne date/heure ) et choisissez comment vous souhaitez que l\u2019heure et la date soient affich\u00e9es. Ce que nous souhaitons, c\u2019est que la valeur Cr\u00e9\u00e9 le reste inchang\u00e9e une fois d\u00e9finie, et soit calcul\u00e9e uniquement lors de la cr\u00e9ation d\u2019un enregistrement. Pour que les valeurs restent inchang\u00e9es une fois d\u00e9finies, nous devons changer le comportement de la colonne de Colonne de formule \u00e0 Colonne de donn\u00e9es . Cliquez sur le menu d\u00e9roulant Comportement de la colonne , et choisissez Convertir la colonne en donn\u00e9es : Maintenant, pour calculer les valeurs lors de la cr\u00e9ation d\u2019un enregistrement, s\u00e9lectionnez Appliquer aux nouveaux enregistrements . Et voil\u00e0 ! Tous les nouveaux enregistrements auront Cr\u00e9\u00e9 le d\u00e9fini avec NOW() au moment de leur cr\u00e9ation. Une colonne \u201cMis \u00e0 jour le\u201d # Si nous voulons une colonne qui stocke le moment o\u00f9 un enregistrement est mis \u00e0 jour (par opposition \u00e0 cr\u00e9\u00e9), la proc\u00e9dure est similaire \u00e0 celle pour une colonne \u201cCr\u00e9\u00e9 le\u201d , mais au lieu de Appliquer aux nouveaux enregistrements , s\u00e9lectionnez Appliquer aux modifications des enregistrements . Ensuite, s\u00e9lectionnez N'importe quel champ (en supposant que vous voulez que tout changement dans un enregistrement soit consid\u00e9r\u00e9 comme une mise \u00e0 jour) et appuyez sur OK . Vous pouvez alternativement choisir quelles colonnes \u201ccompter\u201d comme mises \u00e0 jour et lesquelles ignorer. Il est toujours possible pour un utilisateur de modifier manuellement les cellules dans les colonnes Cr\u00e9\u00e9 le et Mis \u00e0 jour le . Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire. Voici un exemple des nouvelles colonnes en action. Un nouvel enregistrement a \u00e9t\u00e9 ajout\u00e9, pour M\u00e9thodes de livraison non orthodoxes , et une heure de cr\u00e9ation et de mise \u00e0 jour ont \u00e9t\u00e9 d\u00e9finies automatiquement. Ensuite, la description de Barbe \u00e0 papa vs Barbe \u00e0 papa a \u00e9t\u00e9 mise \u00e0 jour, et l\u2019heure de mise \u00e0 jour pour cet enregistrement a \u00e9t\u00e9 d\u00e9finie automatiquement. Il serait \u00e9galement simple d\u2019ajouter des colonnes Cr\u00e9\u00e9 par et Mis \u00e0 jour par . Cr\u00e9er les colonnes Cr\u00e9\u00e9 le et Mis \u00e0 jour le comme nous l\u2019avons fait ici les a remplies pour toutes les lignes pr\u00e9existantes avec la date et l\u2019heure actuelles. Si vous pr\u00e9f\u00e9rez qu\u2019elles soient laiss\u00e9es vides, faites simplement l\u2019\u00e9tape Convertir en colonne de donn\u00e9es avant de d\u00e9finir une formule, puis d\u00e9finissez la formule dans la zone Formule optionnelle .","title":"Timestamp columns"},{"location":"timestamps/#colonnes-de-timestamp","text":"Il est parfois utile d\u2019avoir des colonnes qui stockent le moment o\u00f9 des enregistrements individuels ont \u00e9t\u00e9 cr\u00e9\u00e9s et mis \u00e0 jour. Cela est utile plus tard, par exemple pour trier les enregistrements par anciennet\u00e9 ou fra\u00eecheur. Grist vous permet de cr\u00e9er facilement de telles colonnes.","title":"Colonnes de timestamp"},{"location":"timestamps/#une-colonne-cree-le","text":"Supposons que nous voulions une colonne qui stocke le moment o\u00f9 un enregistrement a \u00e9t\u00e9 cr\u00e9\u00e9. Comme premi\u00e8re \u00e9tape, ajoutez une colonne appel\u00e9e (par exemple) Cr\u00e9\u00e9 le et entrez NOW() comme formule. D\u00e9finissez le type de colonne sur DateTime (voir Cr\u00e9er une colonne date/heure ) et choisissez comment vous souhaitez que l\u2019heure et la date soient affich\u00e9es. Ce que nous souhaitons, c\u2019est que la valeur Cr\u00e9\u00e9 le reste inchang\u00e9e une fois d\u00e9finie, et soit calcul\u00e9e uniquement lors de la cr\u00e9ation d\u2019un enregistrement. Pour que les valeurs restent inchang\u00e9es une fois d\u00e9finies, nous devons changer le comportement de la colonne de Colonne de formule \u00e0 Colonne de donn\u00e9es . Cliquez sur le menu d\u00e9roulant Comportement de la colonne , et choisissez Convertir la colonne en donn\u00e9es : Maintenant, pour calculer les valeurs lors de la cr\u00e9ation d\u2019un enregistrement, s\u00e9lectionnez Appliquer aux nouveaux enregistrements . Et voil\u00e0 ! Tous les nouveaux enregistrements auront Cr\u00e9\u00e9 le d\u00e9fini avec NOW() au moment de leur cr\u00e9ation.","title":"Une colonne “Cr\u00e9\u00e9 le”"},{"location":"timestamps/#une-colonne-mis-a-jour-le","text":"Si nous voulons une colonne qui stocke le moment o\u00f9 un enregistrement est mis \u00e0 jour (par opposition \u00e0 cr\u00e9\u00e9), la proc\u00e9dure est similaire \u00e0 celle pour une colonne \u201cCr\u00e9\u00e9 le\u201d , mais au lieu de Appliquer aux nouveaux enregistrements , s\u00e9lectionnez Appliquer aux modifications des enregistrements . Ensuite, s\u00e9lectionnez N'importe quel champ (en supposant que vous voulez que tout changement dans un enregistrement soit consid\u00e9r\u00e9 comme une mise \u00e0 jour) et appuyez sur OK . Vous pouvez alternativement choisir quelles colonnes \u201ccompter\u201d comme mises \u00e0 jour et lesquelles ignorer. Il est toujours possible pour un utilisateur de modifier manuellement les cellules dans les colonnes Cr\u00e9\u00e9 le et Mis \u00e0 jour le . Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire. Voici un exemple des nouvelles colonnes en action. Un nouvel enregistrement a \u00e9t\u00e9 ajout\u00e9, pour M\u00e9thodes de livraison non orthodoxes , et une heure de cr\u00e9ation et de mise \u00e0 jour ont \u00e9t\u00e9 d\u00e9finies automatiquement. Ensuite, la description de Barbe \u00e0 papa vs Barbe \u00e0 papa a \u00e9t\u00e9 mise \u00e0 jour, et l\u2019heure de mise \u00e0 jour pour cet enregistrement a \u00e9t\u00e9 d\u00e9finie automatiquement. Il serait \u00e9galement simple d\u2019ajouter des colonnes Cr\u00e9\u00e9 par et Mis \u00e0 jour par . Cr\u00e9er les colonnes Cr\u00e9\u00e9 le et Mis \u00e0 jour le comme nous l\u2019avons fait ici les a remplies pour toutes les lignes pr\u00e9existantes avec la date et l\u2019heure actuelles. Si vous pr\u00e9f\u00e9rez qu\u2019elles soient laiss\u00e9es vides, faites simplement l\u2019\u00e9tape Convertir en colonne de donn\u00e9es avant de d\u00e9finir une formule, puis d\u00e9finissez la formule dans la zone Formule optionnelle .","title":"Une colonne “Mis \u00e0 jour le”"},{"location":"webhooks/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . description: Comment configurer des webhooks pour certaines int\u00e9grations externes # Webhooks # Les webhooks vous permettent de notifier des services externes chaque fois que des lignes sont ajout\u00e9es \u00e0 une table ou si des lignes existantes sont modifi\u00e9es. Vous pouvez configurer des webhooks depuis la page \u2018Param\u00e8tres du document\u2019. Cliquez sur \u2018Param\u00e8tres\u2019 sous le menu \u2018Outils\u2019 situ\u00e9 en bas du panneau de navigation de gauche lors de la visualisation d\u2019un document. Dans la section \u2018API\u2019 des \u2018Param\u00e8tres du document\u2019, cliquez sur le bouton \u2018G\u00e9rer les webhooks\u2019. Cela vous permettra de d\u00e9finir des webhooks pour votre document, o\u00f9 chaque carte de cette page de param\u00e8tres repr\u00e9sente un webhook pour votre document. Configuration # Chaque webhook a plusieurs champs. Certains champs sont d\u00e9finis par l\u2019utilisateur, et d\u2019autres champs sont en lecture seule et utilis\u00e9s pour enregistrer des informations sur le traitement du webhook. Tous les champs ne sont pas obligatoires. Nom : Un nom court et descriptif donn\u00e9 au webhook. M\u00e9mo (optionnel): Une description plus longue de l\u2019objectif du webhook. Types d\u2019\u00e9v\u00e9nements : Si l\u2019ajout ou la modification des lignes d\u00e9clenche un webhook. Table : La table qui d\u00e9clenchera ce webhook. Filtrer les modifications dans ces colonnes (optionnel): Une liste d\u2019ID de colonnes s\u00e9par\u00e9s par des points-virgules. Si une ligne existante est modifi\u00e9e, le webhook se d\u00e9clenchera uniquement si l\u2019une des colonnes filtr\u00e9es a \u00e9t\u00e9 modifi\u00e9e, et si le webhook est configur\u00e9 pour se d\u00e9clencher lors de modifications. Si un webhook se d\u00e9clenche lors de l\u2019ajout d\u2019une ligne, peu importe quelles colonnes sont d\u00e9finies lorsque la nouvelle ligne est ajout\u00e9e. Colonne pr\u00eate (optionnel): Une colonne bool\u00e9enne, ou Toggle , sur la table qui d\u00e9termine si la ligne doit d\u00e9clencher le webhook ou non. Lorsque la colonne devient vraie, la ligne correspondante d\u00e9clenchera le webhook. URL : L\u2019URL distante du service que le webhook notifiera des lignes ajout\u00e9es ou modifi\u00e9es. Lors de l\u2019auto-h\u00e9bergement, seuls les services externes list\u00e9s par la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS sont autoris\u00e9s. Notez qu\u2019il existe des pr\u00e9occupations de s\u00e9curit\u00e9 en permettant n\u2019importe quel domaine, car les services internes de Grist peuvent devenir vuln\u00e9rables \u00e0 la manipulation. Autorisation d\u2019en-t\u00eate (optionnel): Les informations d\u2019identification \u00e0 fournir \u00e0 l\u2019endpoint du webhook dans l\u2019en-t\u00eate HTTP Authorization . Tous les endpoints ne n\u00e9cessitent pas d\u2019informations d\u2019identification. Il s\u2019agit d\u2019une cha\u00eene statique. Une utilisation courante de ce champ est de fournir un jeton API comme requis par l\u2019URL du webhook. Activ\u00e9 : Si le webhook doit surveiller sa table configur\u00e9e pour les modifications ou non. Si le webhook est d\u00e9sactiv\u00e9, aucune modification de sa table ne le d\u00e9clenchera. Les champs suivants sont informatifs et en lecture seule : ID du webhook : Un ID unique automatique g\u00e9n\u00e9r\u00e9 en interne pour le webhook. Statut : Un objet JSON qui r\u00e9sume le statut actuel du webhook, ainsi que les r\u00e9sultats concernant le nombre de fois o\u00f9 il a \u00e9t\u00e9 invoqu\u00e9. Cela inclut tous les messages d\u2019erreur potentiels ou statuts que le webhook peut avoir re\u00e7us lors de la tentative d\u2019envoi d\u2019une charge utile \u00e0 l\u2019adresse distante. S\u00e9curit\u00e9 # Dans des environnements auto-h\u00e9berg\u00e9s non fiables, les endpoints internes de Grist peuvent \u00eatre expos\u00e9s si tout utilisateur est autoris\u00e9 \u00e0 cr\u00e9er des documents et configurer des webhooks. Il existe deux fa\u00e7ons de r\u00e9duire ce risque : Utilisez la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS pour lister les domaines autoris\u00e9s que les webhooks peuvent utiliser. Utilisez la variable d\u2019environnement GRIST_HTTPS_PROXY pour restreindre les invocations de webhooks \u00e0 passer par ce proxy, tout en d\u00e9finissant ALLOWED_WEBHOOK_DOMAINS=* . De cette mani\u00e8re, tous les domaines sont autoris\u00e9s, mais les webhooks enverront des requ\u00eates via le proxy configur\u00e9, prot\u00e9geant ainsi vos endpoints internes de Grist. C\u2019est la configuration utilis\u00e9e par Grist Labs dans notre environnement h\u00e9berg\u00e9 sur le cloud. Dans un environnement de confiance o\u00f9 des utilisateurs malveillants ne sont pas attendus, la d\u00e9finition de ALLOWED_WEBHOOK_DOMAINS=* seule peut \u00eatre suffisante sans avoir besoin de configurer un proxy. Charges utiles # Lorsqu\u2019un webhook est d\u00e9clench\u00e9, les lignes qui correspondent aux conditions du webhook g\u00e9n\u00e9reront un tableau JSON comme charge utile du webhook. Voici un exemple de charge utile. [ { \"id\": 29, \"manualSort\": 29, \"Title\": \"Trophy\", \"URL\": \"https://example.com/buy/Trophy\", \"Price\": 60, \"Purchase_status\": \"wishlisted\", \"Currency\": \"USD\", \"Play_status\": \"Not started\", \"Box_art\": null, \"Price_CAD_\": 82.362 }, { \"id\": 24, \"manualSort\": 24, \"Title\": \"Dataman\", \"URL\": \"https://example.com/buy/Dataman\", \"Price\": 50, \"Purchase_status\": \"own digitally\", \"Currency\": \"EUR\", \"Play_status\": \"Finished\", \"Box_art\": null, \"Price_CAD_\": 74.71 } ] Plusieurs lignes peuvent d\u00e9clencher simultan\u00e9ment le m\u00eame webhook. Dans ce cas, ces lignes seront envoy\u00e9es ensemble dans la m\u00eame charge utile. La \u2018Colonne pr\u00eate\u2019 dans la configuration du webhook peut \u00eatre utile pour d\u00e9terminer quelles lignes doivent \u00eatre envoy\u00e9es ensemble. Conditions d\u2019erreur # Si un webhook ne parvient pas \u00e0 livrer sa charge utile \u00e0 l\u2019URL sp\u00e9cifi\u00e9e, il continuera \u00e0 r\u00e9essayer p\u00e9riodiquement. La colonne \u2018Statut\u2019 dans la configuration du webhook peut \u00eatre utile pour diagnostiquer de tels probl\u00e8mes, ou pour v\u00e9rifier que les charges utiles ont \u00e9t\u00e9 livr\u00e9es avec succ\u00e8s. File d\u2019attente des webhooks # Les charges utiles des webhooks sont livr\u00e9es selon une file d\u2019attente par lots. Les tentatives d\u2019atteindre un endpoint sont supprim\u00e9es de la file d\u2019attente lorsqu\u2019une livraison r\u00e9ussie se produit. En cas de probl\u00e8me avec la configuration du webhook, il peut \u00eatre utile de purger la file d\u2019attente du webhook. Le bouton \u2018Effacer la file d\u2019attente\u2019 dans la page de configuration du webhook supprimera toutes les invocations en attente du webhook et ignorera les charges utiles associ\u00e9es.","title":"Webhooks"},{"location":"webhooks/#description-comment-configurer-des-webhooks-pour-certaines-integrations-externes","text":"","title":"description: Comment configurer des webhooks pour certaines int\u00e9grations externes"},{"location":"webhooks/#webhooks","text":"Les webhooks vous permettent de notifier des services externes chaque fois que des lignes sont ajout\u00e9es \u00e0 une table ou si des lignes existantes sont modifi\u00e9es. Vous pouvez configurer des webhooks depuis la page \u2018Param\u00e8tres du document\u2019. Cliquez sur \u2018Param\u00e8tres\u2019 sous le menu \u2018Outils\u2019 situ\u00e9 en bas du panneau de navigation de gauche lors de la visualisation d\u2019un document. Dans la section \u2018API\u2019 des \u2018Param\u00e8tres du document\u2019, cliquez sur le bouton \u2018G\u00e9rer les webhooks\u2019. Cela vous permettra de d\u00e9finir des webhooks pour votre document, o\u00f9 chaque carte de cette page de param\u00e8tres repr\u00e9sente un webhook pour votre document.","title":"Webhooks"},{"location":"webhooks/#configuration","text":"Chaque webhook a plusieurs champs. Certains champs sont d\u00e9finis par l\u2019utilisateur, et d\u2019autres champs sont en lecture seule et utilis\u00e9s pour enregistrer des informations sur le traitement du webhook. Tous les champs ne sont pas obligatoires. Nom : Un nom court et descriptif donn\u00e9 au webhook. M\u00e9mo (optionnel): Une description plus longue de l\u2019objectif du webhook. Types d\u2019\u00e9v\u00e9nements : Si l\u2019ajout ou la modification des lignes d\u00e9clenche un webhook. Table : La table qui d\u00e9clenchera ce webhook. Filtrer les modifications dans ces colonnes (optionnel): Une liste d\u2019ID de colonnes s\u00e9par\u00e9s par des points-virgules. Si une ligne existante est modifi\u00e9e, le webhook se d\u00e9clenchera uniquement si l\u2019une des colonnes filtr\u00e9es a \u00e9t\u00e9 modifi\u00e9e, et si le webhook est configur\u00e9 pour se d\u00e9clencher lors de modifications. Si un webhook se d\u00e9clenche lors de l\u2019ajout d\u2019une ligne, peu importe quelles colonnes sont d\u00e9finies lorsque la nouvelle ligne est ajout\u00e9e. Colonne pr\u00eate (optionnel): Une colonne bool\u00e9enne, ou Toggle , sur la table qui d\u00e9termine si la ligne doit d\u00e9clencher le webhook ou non. Lorsque la colonne devient vraie, la ligne correspondante d\u00e9clenchera le webhook. URL : L\u2019URL distante du service que le webhook notifiera des lignes ajout\u00e9es ou modifi\u00e9es. Lors de l\u2019auto-h\u00e9bergement, seuls les services externes list\u00e9s par la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS sont autoris\u00e9s. Notez qu\u2019il existe des pr\u00e9occupations de s\u00e9curit\u00e9 en permettant n\u2019importe quel domaine, car les services internes de Grist peuvent devenir vuln\u00e9rables \u00e0 la manipulation. Autorisation d\u2019en-t\u00eate (optionnel): Les informations d\u2019identification \u00e0 fournir \u00e0 l\u2019endpoint du webhook dans l\u2019en-t\u00eate HTTP Authorization . Tous les endpoints ne n\u00e9cessitent pas d\u2019informations d\u2019identification. Il s\u2019agit d\u2019une cha\u00eene statique. Une utilisation courante de ce champ est de fournir un jeton API comme requis par l\u2019URL du webhook. Activ\u00e9 : Si le webhook doit surveiller sa table configur\u00e9e pour les modifications ou non. Si le webhook est d\u00e9sactiv\u00e9, aucune modification de sa table ne le d\u00e9clenchera. Les champs suivants sont informatifs et en lecture seule : ID du webhook : Un ID unique automatique g\u00e9n\u00e9r\u00e9 en interne pour le webhook. Statut : Un objet JSON qui r\u00e9sume le statut actuel du webhook, ainsi que les r\u00e9sultats concernant le nombre de fois o\u00f9 il a \u00e9t\u00e9 invoqu\u00e9. Cela inclut tous les messages d\u2019erreur potentiels ou statuts que le webhook peut avoir re\u00e7us lors de la tentative d\u2019envoi d\u2019une charge utile \u00e0 l\u2019adresse distante.","title":"Configuration"},{"location":"webhooks/#securite","text":"Dans des environnements auto-h\u00e9berg\u00e9s non fiables, les endpoints internes de Grist peuvent \u00eatre expos\u00e9s si tout utilisateur est autoris\u00e9 \u00e0 cr\u00e9er des documents et configurer des webhooks. Il existe deux fa\u00e7ons de r\u00e9duire ce risque : Utilisez la variable d\u2019environnement ALLOWED_WEBHOOK_DOMAINS pour lister les domaines autoris\u00e9s que les webhooks peuvent utiliser. Utilisez la variable d\u2019environnement GRIST_HTTPS_PROXY pour restreindre les invocations de webhooks \u00e0 passer par ce proxy, tout en d\u00e9finissant ALLOWED_WEBHOOK_DOMAINS=* . De cette mani\u00e8re, tous les domaines sont autoris\u00e9s, mais les webhooks enverront des requ\u00eates via le proxy configur\u00e9, prot\u00e9geant ainsi vos endpoints internes de Grist. C\u2019est la configuration utilis\u00e9e par Grist Labs dans notre environnement h\u00e9berg\u00e9 sur le cloud. Dans un environnement de confiance o\u00f9 des utilisateurs malveillants ne sont pas attendus, la d\u00e9finition de ALLOWED_WEBHOOK_DOMAINS=* seule peut \u00eatre suffisante sans avoir besoin de configurer un proxy.","title":"S\u00e9curit\u00e9"},{"location":"webhooks/#charges-utiles","text":"Lorsqu\u2019un webhook est d\u00e9clench\u00e9, les lignes qui correspondent aux conditions du webhook g\u00e9n\u00e9reront un tableau JSON comme charge utile du webhook. Voici un exemple de charge utile. [ { \"id\": 29, \"manualSort\": 29, \"Title\": \"Trophy\", \"URL\": \"https://example.com/buy/Trophy\", \"Price\": 60, \"Purchase_status\": \"wishlisted\", \"Currency\": \"USD\", \"Play_status\": \"Not started\", \"Box_art\": null, \"Price_CAD_\": 82.362 }, { \"id\": 24, \"manualSort\": 24, \"Title\": \"Dataman\", \"URL\": \"https://example.com/buy/Dataman\", \"Price\": 50, \"Purchase_status\": \"own digitally\", \"Currency\": \"EUR\", \"Play_status\": \"Finished\", \"Box_art\": null, \"Price_CAD_\": 74.71 } ] Plusieurs lignes peuvent d\u00e9clencher simultan\u00e9ment le m\u00eame webhook. Dans ce cas, ces lignes seront envoy\u00e9es ensemble dans la m\u00eame charge utile. La \u2018Colonne pr\u00eate\u2019 dans la configuration du webhook peut \u00eatre utile pour d\u00e9terminer quelles lignes doivent \u00eatre envoy\u00e9es ensemble.","title":"Charges utiles"},{"location":"webhooks/#conditions-derreur","text":"Si un webhook ne parvient pas \u00e0 livrer sa charge utile \u00e0 l\u2019URL sp\u00e9cifi\u00e9e, il continuera \u00e0 r\u00e9essayer p\u00e9riodiquement. La colonne \u2018Statut\u2019 dans la configuration du webhook peut \u00eatre utile pour diagnostiquer de tels probl\u00e8mes, ou pour v\u00e9rifier que les charges utiles ont \u00e9t\u00e9 livr\u00e9es avec succ\u00e8s.","title":"Conditions d’erreur"},{"location":"webhooks/#file-dattente-des-webhooks","text":"Les charges utiles des webhooks sont livr\u00e9es selon une file d\u2019attente par lots. Les tentatives d\u2019atteindre un endpoint sont supprim\u00e9es de la file d\u2019attente lorsqu\u2019une livraison r\u00e9ussie se produit. En cas de probl\u00e8me avec la configuration du webhook, il peut \u00eatre utile de purger la file d\u2019attente du webhook. Le bouton \u2018Effacer la file d\u2019attente\u2019 dans la page de configuration du webhook supprimera toutes les invocations en attente du webhook et ignorera les charges utiles associ\u00e9es.","title":"File d’attente des webhooks"},{"location":"widget-calendar/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue : Calendrier # La vue calendrier permet de visualiser les donn\u00e9es dans une vue calendrier. Dans Grist, les donn\u00e9es d\u2019\u00e9v\u00e9nements sont stock\u00e9es dans une table de donn\u00e9es. Ensuite, la vue calendrier peut \u00eatre configur\u00e9e pour afficher ces donn\u00e9es. Configuration de vos donn\u00e9es # Dans votre table de donn\u00e9es, vous aurez besoin de deux colonnes de donn\u00e9es, avec la possibilit\u00e9 d\u2019ajouter trois colonnes de donn\u00e9es suppl\u00e9mentaires : Titre : colonne Texte , contenant le titre de votre \u00e9v\u00e9nement. Date de d\u00e9but : colonne Date ou DateHeure , contenant la date, ou la date et l\u2019heure, \u00e0 laquelle l\u2019\u00e9v\u00e9nement commence. (Optionnel) Date de fin : colonne Date ou DateHeure , contenant la date, ou la date et l\u2019heure, \u00e0 laquelle l\u2019\u00e9v\u00e9nement se termine. (Optionnel) Toute la journ\u00e9e ? : colonne Basculer , indiquant si un \u00e9v\u00e9nement dure toute la journ\u00e9e. (Optionnel) Type : colonne Choix ou Liste de choix , contenant la cat\u00e9gorie et le style de l\u2019\u00e9v\u00e9nement. Configuration du calendrier # Ajoutez une vue calendrier depuis le menu \u2018Ajouter Nouveau\u2019. S\u00e9lectionnez la table contenant vos donn\u00e9es d\u2019\u00e9v\u00e9nements. Configurez la vue en s\u00e9lectionnant les colonnes de votre table de donn\u00e9es qui contiennent la Date de d\u00e9but, la Date de fin (optionnel), Toute la journ\u00e9e ? (optionnel), le Titre et le Type (optionnel). Ajouter un nouvel \u00e9v\u00e9nement # Vous pouvez ajouter un nouvel \u00e9v\u00e9nement en double-cliquant sur l\u2019heure de d\u00e9but de l\u2019\u00e9v\u00e9nement dans la vue calendrier. Dans la fen\u00eatre contextuelle, vous pouvez ajouter un titre pour l\u2019\u00e9v\u00e9nement et modifier l\u2019heure de d\u00e9but et de fin. Vous avez \u00e9galement la possibilit\u00e9 de marquer l\u2019\u00e9v\u00e9nement comme \u2018toute la journ\u00e9e\u2019. Vous pouvez \u00e9galement modifier l\u2019heure de d\u00e9but et de fin d\u2019un \u00e9v\u00e9nement en cliquant et en faisant glisser l\u2019\u00e9v\u00e9nement directement sur le calendrier. Pour modifier l\u2019heure de d\u00e9but d\u2019un \u00e9v\u00e9nement, cliquez et faites glisser depuis le milieu de l\u2019\u00e9v\u00e9nement. Lorsque vous modifiez l\u2019heure de d\u00e9but, la dur\u00e9e de l\u2019\u00e9v\u00e9nement restera la m\u00eame. Pour modifier l\u2019heure de fin d\u2019un \u00e9v\u00e9nement, cliquez et faites glisser depuis le bas de l\u2019\u00e9v\u00e9nement. Vous remarquerez que l\u2019ic\u00f4ne est l\u00e9g\u00e8rement diff\u00e9rente de celle qui appara\u00eet lors de la modification de l\u2019heure de d\u00e9but. Toutes les modifications des heures de d\u00e9but et de fin seront apport\u00e9es \u00e0 la table de donn\u00e9es sous-jacente afin que vos donn\u00e9es soient toujours coh\u00e9rentes ! Lier les d\u00e9tails de l\u2019\u00e9v\u00e9nement # Il peut \u00eatre utile de voir plus de d\u00e9tails sur l\u2019\u00e9v\u00e9nement dans une vue table ou fiche. Cet exemple vous guidera \u00e0 travers une vue fiche. Pour cr\u00e9er une vue li\u00e9e, ajoutez un nouveau type de vue tel qu\u2019une table ou une fiche, et s\u00e9lectionnez la m\u00eame table de donn\u00e9es. Sous \u2018S\u00e9lectionner par\u2019, s\u00e9lectionnez la vue calendrier. Ensuite, ajoutez \u00e0 la page. Maintenant, lorsque vous cliquez sur un \u00e9v\u00e9nement dans la vue calendrier, la vue li\u00e9e se mettra \u00e0 jour pour afficher les d\u00e9tails de l\u2019\u00e9v\u00e9nement s\u00e9lectionn\u00e9. R\u00e9duire les vues Faites glisser la vue li\u00e9e dans le grenier en haut de la page pour la r\u00e9duire. La vue restera li\u00e9e mais prendra moins de place sur la page ! Cliquez simplement sur la bo\u00eete pour l\u2019agrandir et voir les d\u00e9tails de l\u2019enregistrement li\u00e9. En savoir plus sur les Mises en page personnalis\u00e9es . Supprimer un \u00e9v\u00e9nement # Pour supprimer un \u00e9v\u00e9nement, double-cliquez sur l\u2019\u00e9v\u00e9nement dans le calendrier puis s\u00e9lectionnez \u2018supprimer\u2019 dans la popup.","title":"Calendar"},{"location":"widget-calendar/#vue-calendrier","text":"La vue calendrier permet de visualiser les donn\u00e9es dans une vue calendrier. Dans Grist, les donn\u00e9es d\u2019\u00e9v\u00e9nements sont stock\u00e9es dans une table de donn\u00e9es. Ensuite, la vue calendrier peut \u00eatre configur\u00e9e pour afficher ces donn\u00e9es.","title":"Vue : Calendrier"},{"location":"widget-calendar/#configuration-de-vos-donnees","text":"Dans votre table de donn\u00e9es, vous aurez besoin de deux colonnes de donn\u00e9es, avec la possibilit\u00e9 d\u2019ajouter trois colonnes de donn\u00e9es suppl\u00e9mentaires : Titre : colonne Texte , contenant le titre de votre \u00e9v\u00e9nement. Date de d\u00e9but : colonne Date ou DateHeure , contenant la date, ou la date et l\u2019heure, \u00e0 laquelle l\u2019\u00e9v\u00e9nement commence. (Optionnel) Date de fin : colonne Date ou DateHeure , contenant la date, ou la date et l\u2019heure, \u00e0 laquelle l\u2019\u00e9v\u00e9nement se termine. (Optionnel) Toute la journ\u00e9e ? : colonne Basculer , indiquant si un \u00e9v\u00e9nement dure toute la journ\u00e9e. (Optionnel) Type : colonne Choix ou Liste de choix , contenant la cat\u00e9gorie et le style de l\u2019\u00e9v\u00e9nement.","title":"Configuration de vos donn\u00e9es"},{"location":"widget-calendar/#configuration-du-calendrier","text":"Ajoutez une vue calendrier depuis le menu \u2018Ajouter Nouveau\u2019. S\u00e9lectionnez la table contenant vos donn\u00e9es d\u2019\u00e9v\u00e9nements. Configurez la vue en s\u00e9lectionnant les colonnes de votre table de donn\u00e9es qui contiennent la Date de d\u00e9but, la Date de fin (optionnel), Toute la journ\u00e9e ? (optionnel), le Titre et le Type (optionnel).","title":"Configuration du calendrier"},{"location":"widget-calendar/#ajouter-un-nouvel-evenement","text":"Vous pouvez ajouter un nouvel \u00e9v\u00e9nement en double-cliquant sur l\u2019heure de d\u00e9but de l\u2019\u00e9v\u00e9nement dans la vue calendrier. Dans la fen\u00eatre contextuelle, vous pouvez ajouter un titre pour l\u2019\u00e9v\u00e9nement et modifier l\u2019heure de d\u00e9but et de fin. Vous avez \u00e9galement la possibilit\u00e9 de marquer l\u2019\u00e9v\u00e9nement comme \u2018toute la journ\u00e9e\u2019. Vous pouvez \u00e9galement modifier l\u2019heure de d\u00e9but et de fin d\u2019un \u00e9v\u00e9nement en cliquant et en faisant glisser l\u2019\u00e9v\u00e9nement directement sur le calendrier. Pour modifier l\u2019heure de d\u00e9but d\u2019un \u00e9v\u00e9nement, cliquez et faites glisser depuis le milieu de l\u2019\u00e9v\u00e9nement. Lorsque vous modifiez l\u2019heure de d\u00e9but, la dur\u00e9e de l\u2019\u00e9v\u00e9nement restera la m\u00eame. Pour modifier l\u2019heure de fin d\u2019un \u00e9v\u00e9nement, cliquez et faites glisser depuis le bas de l\u2019\u00e9v\u00e9nement. Vous remarquerez que l\u2019ic\u00f4ne est l\u00e9g\u00e8rement diff\u00e9rente de celle qui appara\u00eet lors de la modification de l\u2019heure de d\u00e9but. Toutes les modifications des heures de d\u00e9but et de fin seront apport\u00e9es \u00e0 la table de donn\u00e9es sous-jacente afin que vos donn\u00e9es soient toujours coh\u00e9rentes !","title":"Ajouter un nouvel \u00e9v\u00e9nement"},{"location":"widget-calendar/#lier-les-details-de-levenement","text":"Il peut \u00eatre utile de voir plus de d\u00e9tails sur l\u2019\u00e9v\u00e9nement dans une vue table ou fiche. Cet exemple vous guidera \u00e0 travers une vue fiche. Pour cr\u00e9er une vue li\u00e9e, ajoutez un nouveau type de vue tel qu\u2019une table ou une fiche, et s\u00e9lectionnez la m\u00eame table de donn\u00e9es. Sous \u2018S\u00e9lectionner par\u2019, s\u00e9lectionnez la vue calendrier. Ensuite, ajoutez \u00e0 la page. Maintenant, lorsque vous cliquez sur un \u00e9v\u00e9nement dans la vue calendrier, la vue li\u00e9e se mettra \u00e0 jour pour afficher les d\u00e9tails de l\u2019\u00e9v\u00e9nement s\u00e9lectionn\u00e9. R\u00e9duire les vues Faites glisser la vue li\u00e9e dans le grenier en haut de la page pour la r\u00e9duire. La vue restera li\u00e9e mais prendra moins de place sur la page ! Cliquez simplement sur la bo\u00eete pour l\u2019agrandir et voir les d\u00e9tails de l\u2019enregistrement li\u00e9. En savoir plus sur les Mises en page personnalis\u00e9es .","title":"Lier les d\u00e9tails de l’\u00e9v\u00e9nement"},{"location":"widget-calendar/#supprimer-un-evenement","text":"Pour supprimer un \u00e9v\u00e9nement, double-cliquez sur l\u2019\u00e9v\u00e9nement dans le calendrier puis s\u00e9lectionnez \u2018supprimer\u2019 dans la popup.","title":"Supprimer un \u00e9v\u00e9nement"},{"location":"widget-card/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue : Fiche & Liste de Fiches # Les vues Fiche et Liste de Fiches permettent de visualiser les donn\u00e9es sous forme de formulaire ou d\u2019enregistrement, similaire \u00e0 la pr\u00e9sentation des donn\u00e9es dans une application personnalis\u00e9e. Dans Grist, vous pouvez choisir les champs \u00e0 afficher et comment les disposer. Une Liste de Fiches affiche une liste d\u00e9filante de fiches. Une Fiche en affiche une \u00e0 la fois. Une seule Fiche est particuli\u00e8rement utile lorsqu\u2019elle est li\u00e9e \u00e0 une autre vue Table (voir Lier des vues ). Elle peut alors afficher les d\u00e9tails de l\u2019enregistrement s\u00e9lectionn\u00e9. La vue Fiche unique peut \u00e9galement \u00eatre utilis\u00e9e seule. Dans ce cas, vous verrez des boutons de navigation en haut pour passer \u00e0 l\u2019enregistrement suivant ou pr\u00e9c\u00e9dent, ou pour en ajouter un nouveau. S\u00e9lection du th\u00e8me # Le panneau d\u2019options de la vue permet de choisir le th\u00e8me, ou le style, de la fiche : Modifier la disposition de la fiche # Pour configurer la disposition d\u2019une fiche, cliquez sur le bouton vert \u201cModifier la disposition de la fiche\u201d sous le s\u00e9lecteur de th\u00e8me, ou cliquez sur les trois points en haut \u00e0 droite de la vue et s\u00e9lectionnez \u201cModifier la disposition de la fiche\u201d dans le menu. Lorsque l\u2019\u00e9diteur de disposition est actif, vous verrez un seul enregistrement avec des champs d\u00e9pla\u00e7ables et un ensemble de boutons en haut de la vue. Redimensionner un champ # Pour redimensionner un champ, d\u00e9placez la souris vers une bordure verticale s\u00e9parant deux champs et faites glisser la bordure \u00e0 la taille souhait\u00e9e. Seule la largeur des champs peut \u00eatre modifi\u00e9e, tandis que la hauteur change dynamiquement pour s\u2019adapter au contenu du champ. D\u00e9placer un champ # Pour d\u00e9placer un champ, maintenez le bouton de la souris enfonc\u00e9 sur un champ et faites-le glisser. Lorsque vous d\u00e9placez la souris pr\u00e8s des bords d\u2019autres champs, vous remarquerez des bo\u00eetes avec des bordures en pointill\u00e9s indiquant les points de d\u00e9p\u00f4t possibles par rapport aux autres champs. Rel\u00e2chez la souris sur l\u2019une de ces bo\u00eetes pour placer votre champ \u00e0 l\u2019emplacement souhait\u00e9. Supprimer un champ # Pour supprimer un champ, d\u00e9placez la souris dessus. Une ic\u00f4ne \u201cx\u201d appara\u00eetra. Cliquez sur cette ic\u00f4ne pour supprimer le champ. Cela est similaire \u00e0 masquer une colonne, car supprimer un champ d\u2019une vue ne supprime pas les donn\u00e9es sous-jacentes. Vous pouvez \u00e9galement supprimer un champ en le masquant dans la liste \u201cChamps visibles\u201d du panneau lat\u00e9ral, comme d\u00e9crit dans Configurer la liste des champs . Cela est disponible m\u00eame lorsque l\u2019\u00e9diteur de disposition n\u2019est pas actif. Ajouter un champ # Pour ajouter un champ, cliquez sur le bouton \u201cAjouter un champ\u201d en haut de l\u2019\u00e9diteur de disposition. Dans le menu d\u00e9roulant, s\u00e9lectionnez \u201cCr\u00e9er un nouveau champ\u201d pour cr\u00e9er une nouvelle colonne de donn\u00e9es, ou l\u2019un des champs existants dans la table qui ne sont pas actuellement affich\u00e9s dans la fiche. Lorsque vous cliquez sur le champ, il sera ajout\u00e9 en bas de la disposition. Vous pouvez ensuite le d\u00e9placer ou le redimensionner comme d\u00e9crit ci-dessus. Tous les nouveaux champs que vous cr\u00e9ez ne seront ajout\u00e9s aux donn\u00e9es que lorsque vous enregistrerez la disposition. Vous pouvez les renommer dans l\u2019onglet \u201cChamp\u201d du panneau lat\u00e9ral. Vous pouvez \u00e9galement ajouter un champ existant en le rendant visible \u00e0 l\u2019aide de la liste \u201cChamps masqu\u00e9s\u201d dans le panneau lat\u00e9ral, comme d\u00e9crit dans Configurer la liste des champs . Cela est disponible m\u00eame lorsque l\u2019\u00e9diteur de disposition n\u2019est pas actif. Enregistrer la disposition # Une fois que vous avez termin\u00e9 de modifier la disposition, n\u2019oubliez pas de cliquer sur \u201cEnregistrer la disposition\u201d en haut de la vue, ou sur \u201cAnnuler\u201d pour annuler vos modifications. Une fois enregistr\u00e9e, la vue Fiche ou Liste de Fiches se mettra \u00e0 jour pour afficher toutes les fiches dans la disposition mise \u00e0 jour.","title":"Card & card list"},{"location":"widget-card/#vue-fiche-liste-de-fiches","text":"Les vues Fiche et Liste de Fiches permettent de visualiser les donn\u00e9es sous forme de formulaire ou d\u2019enregistrement, similaire \u00e0 la pr\u00e9sentation des donn\u00e9es dans une application personnalis\u00e9e. Dans Grist, vous pouvez choisir les champs \u00e0 afficher et comment les disposer. Une Liste de Fiches affiche une liste d\u00e9filante de fiches. Une Fiche en affiche une \u00e0 la fois. Une seule Fiche est particuli\u00e8rement utile lorsqu\u2019elle est li\u00e9e \u00e0 une autre vue Table (voir Lier des vues ). Elle peut alors afficher les d\u00e9tails de l\u2019enregistrement s\u00e9lectionn\u00e9. La vue Fiche unique peut \u00e9galement \u00eatre utilis\u00e9e seule. Dans ce cas, vous verrez des boutons de navigation en haut pour passer \u00e0 l\u2019enregistrement suivant ou pr\u00e9c\u00e9dent, ou pour en ajouter un nouveau.","title":"Vue : Fiche"},{"location":"widget-card/#selection-du-theme","text":"Le panneau d\u2019options de la vue permet de choisir le th\u00e8me, ou le style, de la fiche :","title":"S\u00e9lection du th\u00e8me"},{"location":"widget-card/#modifier-la-disposition-de-la-fiche","text":"Pour configurer la disposition d\u2019une fiche, cliquez sur le bouton vert \u201cModifier la disposition de la fiche\u201d sous le s\u00e9lecteur de th\u00e8me, ou cliquez sur les trois points en haut \u00e0 droite de la vue et s\u00e9lectionnez \u201cModifier la disposition de la fiche\u201d dans le menu. Lorsque l\u2019\u00e9diteur de disposition est actif, vous verrez un seul enregistrement avec des champs d\u00e9pla\u00e7ables et un ensemble de boutons en haut de la vue.","title":"Modifier la disposition de la fiche"},{"location":"widget-card/#redimensionner-un-champ","text":"Pour redimensionner un champ, d\u00e9placez la souris vers une bordure verticale s\u00e9parant deux champs et faites glisser la bordure \u00e0 la taille souhait\u00e9e. Seule la largeur des champs peut \u00eatre modifi\u00e9e, tandis que la hauteur change dynamiquement pour s\u2019adapter au contenu du champ.","title":"Redimensionner un champ"},{"location":"widget-card/#deplacer-un-champ","text":"Pour d\u00e9placer un champ, maintenez le bouton de la souris enfonc\u00e9 sur un champ et faites-le glisser. Lorsque vous d\u00e9placez la souris pr\u00e8s des bords d\u2019autres champs, vous remarquerez des bo\u00eetes avec des bordures en pointill\u00e9s indiquant les points de d\u00e9p\u00f4t possibles par rapport aux autres champs. Rel\u00e2chez la souris sur l\u2019une de ces bo\u00eetes pour placer votre champ \u00e0 l\u2019emplacement souhait\u00e9.","title":"D\u00e9placer un champ"},{"location":"widget-card/#supprimer-un-champ","text":"Pour supprimer un champ, d\u00e9placez la souris dessus. Une ic\u00f4ne \u201cx\u201d appara\u00eetra. Cliquez sur cette ic\u00f4ne pour supprimer le champ. Cela est similaire \u00e0 masquer une colonne, car supprimer un champ d\u2019une vue ne supprime pas les donn\u00e9es sous-jacentes. Vous pouvez \u00e9galement supprimer un champ en le masquant dans la liste \u201cChamps visibles\u201d du panneau lat\u00e9ral, comme d\u00e9crit dans Configurer la liste des champs . Cela est disponible m\u00eame lorsque l\u2019\u00e9diteur de disposition n\u2019est pas actif.","title":"Supprimer un champ"},{"location":"widget-card/#ajouter-un-champ","text":"Pour ajouter un champ, cliquez sur le bouton \u201cAjouter un champ\u201d en haut de l\u2019\u00e9diteur de disposition. Dans le menu d\u00e9roulant, s\u00e9lectionnez \u201cCr\u00e9er un nouveau champ\u201d pour cr\u00e9er une nouvelle colonne de donn\u00e9es, ou l\u2019un des champs existants dans la table qui ne sont pas actuellement affich\u00e9s dans la fiche. Lorsque vous cliquez sur le champ, il sera ajout\u00e9 en bas de la disposition. Vous pouvez ensuite le d\u00e9placer ou le redimensionner comme d\u00e9crit ci-dessus. Tous les nouveaux champs que vous cr\u00e9ez ne seront ajout\u00e9s aux donn\u00e9es que lorsque vous enregistrerez la disposition. Vous pouvez les renommer dans l\u2019onglet \u201cChamp\u201d du panneau lat\u00e9ral. Vous pouvez \u00e9galement ajouter un champ existant en le rendant visible \u00e0 l\u2019aide de la liste \u201cChamps masqu\u00e9s\u201d dans le panneau lat\u00e9ral, comme d\u00e9crit dans Configurer la liste des champs . Cela est disponible m\u00eame lorsque l\u2019\u00e9diteur de disposition n\u2019est pas actif.","title":"Ajouter un champ"},{"location":"widget-card/#enregistrer-la-disposition","text":"Une fois que vous avez termin\u00e9 de modifier la disposition, n\u2019oubliez pas de cliquer sur \u201cEnregistrer la disposition\u201d en haut de la vue, ou sur \u201cAnnuler\u201d pour annuler vos modifications. Une fois enregistr\u00e9e, la vue Fiche ou Liste de Fiches se mettra \u00e0 jour pour afficher toutes les fiches dans la disposition mise \u00e0 jour.","title":"Enregistrer la disposition"},{"location":"widget-chart/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue : Graphique # Grist prend en charge plusieurs types de graphiques pour vous aider \u00e0 visualiser vos donn\u00e9es facilement. Les graphiques peuvent \u00eatre utilis\u00e9s pour tracer un tableau de donn\u00e9es r\u00e9gulier, une vue li\u00e9e (comme d\u00e9crit dans Lier des vues ), ou un tableau r\u00e9capitulatif (comme d\u00e9crit dans Tableaux r\u00e9capitulatifs ). Les types de graphiques les plus courants sont illustr\u00e9s ici : Types de graphiques # Chaque type de graphique trace une ou plusieurs s\u00e9ries de donn\u00e9es. S\u00e9lectionnez les s\u00e9ries \u00e0 tracer en cliquant sur le texte vert \u2018Ajouter une s\u00e9rie\u2019 dans le panneau de cr\u00e9ation . Dans la zone au-dessus de la section \u201cS\u00e9ries\u201d du panneau de cr\u00e9ation, vous pouvez configurer l\u2019axe des x pour la plupart des graphiques, ou les \u00e9tiquettes pour les graphiques en secteurs et en anneaux. Graphique en barres # N\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires cr\u00e9ent des barres suppl\u00e9mentaires \u00e0 chaque point sur l\u2019axe des x. Pour empiler les s\u00e9ries sur la m\u00eame barre, cochez la case \u201cEmpiler les s\u00e9ries\u201d. Graphique en lignes # N\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des lignes suppl\u00e9mentaires. Graphique en secteurs # N\u00e9cessite des \u00e9tiquettes de tranches et une s\u00e9rie pour les tailles des tranches. Graphique en aires # Similaire \u00e0 un graphique en lignes, n\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des lignes suppl\u00e9mentaires. Nuage de points # N\u00e9cessite une \u00e9tiquette et deux s\u00e9ries ou plus. L\u2019\u00e9tiquette s\u2019applique aux points. Les s\u00e9ries appliquent les valeurs X et Y pour chaque point, respectivement. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des ensembles de points suppl\u00e9mentaires. Graphique de Kaplan-Meier # Le Graphique de Kaplan-Meier est utile pour certaines \u00e9tudes, et n\u00e9cessite une \u00e9tiquette et une s\u00e9rie. L\u2019\u00e9tiquette s\u2019applique aux lignes trac\u00e9es. La s\u00e9rie donne un temps de survie ou un temps jusqu\u2019\u00e0 la d\u00e9faillance de ce point. Le graphique montre les temps de survie sur l\u2019axe des X, et le nombre de points qui survivent \u00e0 ce moment sur l\u2019axe des Y. Options de graphique # Un certain nombre d\u2019options de graphique sont disponibles, certaines d\u2019entre elles sp\u00e9cifiques \u00e0 certains types de graphiques. Diviser les s\u00e9ries : Lorsqu\u2019elle est coch\u00e9e, une s\u00e9rie suppl\u00e9mentaire doit \u00eatre s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant \u2018Diviser les s\u00e9ries\u2019. La s\u00e9rie doit contenir une \u00e9tiquette de groupe pour chaque point de donn\u00e9es. Tous les points avec la m\u00eame valeur de groupe sont trac\u00e9s comme une ligne s\u00e9par\u00e9e. Par exemple : Inverser l\u2019axe Y : Lorsqu\u2019elle est coch\u00e9e, l\u2019axe Y est invers\u00e9, avec les valeurs plus petites en haut et les valeurs plus grandes en bas. Connecter les lacunes [pour les graphiques en lignes uniquement] : Lorsqu\u2019elle est coch\u00e9e, les lacunes caus\u00e9es par des valeurs manquantes sont combl\u00e9es en connectant les points voisins. L\u2019option \u201cAfficher les marqueurs\u201d d\u00e9crite ci-apr\u00e8s peut \u00eatre utilis\u00e9e pour garder un indice visuel des points pr\u00e9sents. Afficher les marqueurs [pour les graphiques en lignes uniquement] : Lorsqu\u2019elle est coch\u00e9e, chaque point sur la ligne est marqu\u00e9 en plus par un petit cercle. Voir l\u2019exemple pour Diviser les s\u00e9ries ci-dessus. Empiler les s\u00e9ries [pour les graphiques en lignes et en barres] : Lorsqu\u2019elle est coch\u00e9e, les s\u00e9ries divis\u00e9es seront empil\u00e9es, plut\u00f4t que montr\u00e9es s\u00e9par\u00e9ment, donnant un total pour vos s\u00e9ries s\u00e9lectionn\u00e9es. Dans cet exemple, nous pouvons voir le revenu total pour chaque mois dans les trois d\u00e9partements. Notez que \u2018Diviser les s\u00e9ries\u2019 doit \u00eatre coch\u00e9e pour s\u00e9lectionner plusieurs s\u00e9ries \u00e0 empiler. Barres d\u2019erreur [pour les graphiques en lignes et en barres] : Lorsqu\u2019elle est r\u00e9gl\u00e9e sur \u201cSym\u00e9trique\u201d, chaque s\u00e9rie Y doit \u00eatre suivie d\u2019une s\u00e9rie pour la longueur des barres d\u2019erreur \u00e0 afficher. Lorsqu\u2019elle est r\u00e9gl\u00e9e sur \u201cAu-dessus+En-dessous\u201d, chaque s\u00e9rie Y doit \u00eatre suivie de deux s\u00e9ries, une pour les barres d\u2019erreur sup\u00e9rieures, et une pour les inf\u00e9rieures. Dans l\u2019exemple ici, \u201cDiviser les s\u00e9ries\u201d est coch\u00e9e. Donc la s\u00e9rie s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant Diviser les s\u00e9ries (\u201cLigne cellulaire\u201d), sp\u00e9cifie comment grouper les donn\u00e9es en lignes. La s\u00e9rie s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant Axe des X (\u201cLog[Drug], uM\u201d), sp\u00e9cifie nos valeurs le long de l\u2019axe des x. Notre premi\u00e8re s\u00e9rie dans la liste des s\u00e9ries (\u201c% Cellules viables\u201d), sp\u00e9cifie nos valeurs de l\u2019axe des y, et la s\u00e9rie qui suit (\u201cSD\u201d), sp\u00e9cifie les barres d\u2019erreur pour ces valeurs Y.","title":"Chart"},{"location":"widget-chart/#vue-graphique","text":"Grist prend en charge plusieurs types de graphiques pour vous aider \u00e0 visualiser vos donn\u00e9es facilement. Les graphiques peuvent \u00eatre utilis\u00e9s pour tracer un tableau de donn\u00e9es r\u00e9gulier, une vue li\u00e9e (comme d\u00e9crit dans Lier des vues ), ou un tableau r\u00e9capitulatif (comme d\u00e9crit dans Tableaux r\u00e9capitulatifs ). Les types de graphiques les plus courants sont illustr\u00e9s ici :","title":"Vue : Graphique"},{"location":"widget-chart/#types-de-graphiques","text":"Chaque type de graphique trace une ou plusieurs s\u00e9ries de donn\u00e9es. S\u00e9lectionnez les s\u00e9ries \u00e0 tracer en cliquant sur le texte vert \u2018Ajouter une s\u00e9rie\u2019 dans le panneau de cr\u00e9ation . Dans la zone au-dessus de la section \u201cS\u00e9ries\u201d du panneau de cr\u00e9ation, vous pouvez configurer l\u2019axe des x pour la plupart des graphiques, ou les \u00e9tiquettes pour les graphiques en secteurs et en anneaux.","title":"Types de graphiques"},{"location":"widget-chart/#graphique-en-barres","text":"N\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires cr\u00e9ent des barres suppl\u00e9mentaires \u00e0 chaque point sur l\u2019axe des x. Pour empiler les s\u00e9ries sur la m\u00eame barre, cochez la case \u201cEmpiler les s\u00e9ries\u201d.","title":"Graphique en barres"},{"location":"widget-chart/#graphique-en-lignes","text":"N\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des lignes suppl\u00e9mentaires.","title":"Graphique en lignes"},{"location":"widget-chart/#graphique-en-secteurs","text":"N\u00e9cessite des \u00e9tiquettes de tranches et une s\u00e9rie pour les tailles des tranches.","title":"Graphique en secteurs"},{"location":"widget-chart/#graphique-en-aires","text":"Similaire \u00e0 un graphique en lignes, n\u00e9cessite un axe des x et au moins une s\u00e9rie \u00e0 tracer le long de l\u2019axe des y. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des lignes suppl\u00e9mentaires.","title":"Graphique en aires"},{"location":"widget-chart/#nuage-de-points","text":"N\u00e9cessite une \u00e9tiquette et deux s\u00e9ries ou plus. L\u2019\u00e9tiquette s\u2019applique aux points. Les s\u00e9ries appliquent les valeurs X et Y pour chaque point, respectivement. Des s\u00e9ries suppl\u00e9mentaires sp\u00e9cifient les valeurs Y pour des ensembles de points suppl\u00e9mentaires.","title":"Nuage de points"},{"location":"widget-chart/#graphique-de-kaplan-meier","text":"Le Graphique de Kaplan-Meier est utile pour certaines \u00e9tudes, et n\u00e9cessite une \u00e9tiquette et une s\u00e9rie. L\u2019\u00e9tiquette s\u2019applique aux lignes trac\u00e9es. La s\u00e9rie donne un temps de survie ou un temps jusqu\u2019\u00e0 la d\u00e9faillance de ce point. Le graphique montre les temps de survie sur l\u2019axe des X, et le nombre de points qui survivent \u00e0 ce moment sur l\u2019axe des Y.","title":"Graphique de Kaplan-Meier"},{"location":"widget-chart/#options-de-graphique","text":"Un certain nombre d\u2019options de graphique sont disponibles, certaines d\u2019entre elles sp\u00e9cifiques \u00e0 certains types de graphiques. Diviser les s\u00e9ries : Lorsqu\u2019elle est coch\u00e9e, une s\u00e9rie suppl\u00e9mentaire doit \u00eatre s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant \u2018Diviser les s\u00e9ries\u2019. La s\u00e9rie doit contenir une \u00e9tiquette de groupe pour chaque point de donn\u00e9es. Tous les points avec la m\u00eame valeur de groupe sont trac\u00e9s comme une ligne s\u00e9par\u00e9e. Par exemple : Inverser l\u2019axe Y : Lorsqu\u2019elle est coch\u00e9e, l\u2019axe Y est invers\u00e9, avec les valeurs plus petites en haut et les valeurs plus grandes en bas. Connecter les lacunes [pour les graphiques en lignes uniquement] : Lorsqu\u2019elle est coch\u00e9e, les lacunes caus\u00e9es par des valeurs manquantes sont combl\u00e9es en connectant les points voisins. L\u2019option \u201cAfficher les marqueurs\u201d d\u00e9crite ci-apr\u00e8s peut \u00eatre utilis\u00e9e pour garder un indice visuel des points pr\u00e9sents. Afficher les marqueurs [pour les graphiques en lignes uniquement] : Lorsqu\u2019elle est coch\u00e9e, chaque point sur la ligne est marqu\u00e9 en plus par un petit cercle. Voir l\u2019exemple pour Diviser les s\u00e9ries ci-dessus. Empiler les s\u00e9ries [pour les graphiques en lignes et en barres] : Lorsqu\u2019elle est coch\u00e9e, les s\u00e9ries divis\u00e9es seront empil\u00e9es, plut\u00f4t que montr\u00e9es s\u00e9par\u00e9ment, donnant un total pour vos s\u00e9ries s\u00e9lectionn\u00e9es. Dans cet exemple, nous pouvons voir le revenu total pour chaque mois dans les trois d\u00e9partements. Notez que \u2018Diviser les s\u00e9ries\u2019 doit \u00eatre coch\u00e9e pour s\u00e9lectionner plusieurs s\u00e9ries \u00e0 empiler. Barres d\u2019erreur [pour les graphiques en lignes et en barres] : Lorsqu\u2019elle est r\u00e9gl\u00e9e sur \u201cSym\u00e9trique\u201d, chaque s\u00e9rie Y doit \u00eatre suivie d\u2019une s\u00e9rie pour la longueur des barres d\u2019erreur \u00e0 afficher. Lorsqu\u2019elle est r\u00e9gl\u00e9e sur \u201cAu-dessus+En-dessous\u201d, chaque s\u00e9rie Y doit \u00eatre suivie de deux s\u00e9ries, une pour les barres d\u2019erreur sup\u00e9rieures, et une pour les inf\u00e9rieures. Dans l\u2019exemple ici, \u201cDiviser les s\u00e9ries\u201d est coch\u00e9e. Donc la s\u00e9rie s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant Diviser les s\u00e9ries (\u201cLigne cellulaire\u201d), sp\u00e9cifie comment grouper les donn\u00e9es en lignes. La s\u00e9rie s\u00e9lectionn\u00e9e dans le menu d\u00e9roulant Axe des X (\u201cLog[Drug], uM\u201d), sp\u00e9cifie nos valeurs le long de l\u2019axe des x. Notre premi\u00e8re s\u00e9rie dans la liste des s\u00e9ries (\u201c% Cellules viables\u201d), sp\u00e9cifie nos valeurs de l\u2019axe des y, et la s\u00e9rie qui suit (\u201cSD\u201d), sp\u00e9cifie les barres d\u2019erreur pour ces valeurs Y.","title":"Options de graphique"},{"location":"widget-custom/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Widget de page : Personnalis\u00e9 # Le widget Personnalis\u00e9 permet \u00e0 un utilisateur d\u2019ins\u00e9rer presque tout dans son document. Pour cr\u00e9er un widget personnalis\u00e9, il faut actuellement des connaissances en d\u00e9veloppement web et un acc\u00e8s \u00e0 un serveur web public (par exemple, GitHub Pages). Une bonne utilisation des widgets personnalis\u00e9s est de visualiser des enregistrements ou des tables de nouvelles mani\u00e8res. Utiliser Grist comme mod\u00e8le de donn\u00e9es et HTML/CSS/JS modernes comme vue est tr\u00e8s puissant. Exemple minimal # Pour d\u00e9montrer \u00e0 un d\u00e9veloppeur web comment fonctionnent les widgets personnalis\u00e9s, il existe un exemple minimal fonctionnel \u00e0 : https://public.getgrist.com/911KcgKA95oQ/Minimal-Custom-Widget/m/fork L\u2019exemple montre une table avec des donn\u00e9es al\u00e9atoires (noms d\u2019animaux de compagnie) et deux widgets personnalis\u00e9s, l\u2019un montrant la ligne s\u00e9lectionn\u00e9e dans la table au format JSON, et l\u2019autre montrant toutes les lignes de la table au format JSON. Si vous modifiez des donn\u00e9es dans la table ou d\u00e9placez le curseur, les widgets personnalis\u00e9s se mettent \u00e0 jour en cons\u00e9quence. Le code source des widgets se trouve \u00e0 : https://github.com/gristlabs/grist-widget/tree/master/inspect Il est r\u00e9duit \u00e0 l\u2019essentiel. Voici le code source complet du widget onRecord qui montre une ligne de donn\u00e9es : onRecord
    En attente de donn\u00e9es...
    Les parties \u201cGrist\u201d de ceci sont : Inclusion de https://docs.getgrist.com/grist-plugin-api.js pour obtenir l\u2019API Grist. Appel de grist.ready pour informer Grist que le widget est pr\u00eat \u00e0 fonctionner. Appel de grist.onRecord pour s\u2019abonner \u00e0 la ligne actuelle de la table. Apr\u00e8s cela, tout le reste est du HTML/CSS/JS classique. Une fois que vous avez des donn\u00e9es qui arrivent, vous pouvez les rendre de la mani\u00e8re que vous souhaitez, en utilisant React, Vue.js ou votre framework pr\u00e9f\u00e9r\u00e9. Par exemple, vous pourriez rendre des enregistrements sous forme de facture imprimable , ou utiliser un format de graphique obscur que Grist ne prend pas actuellement en charge. Ajouter un widget personnalis\u00e9 # Pour ajouter un widget personnalis\u00e9 qui lit \u00e0 partir d\u2019une table, cliquez sur Ajouter nouveau , puis Ajouter un widget \u00e0 la page . Ensuite : Pour S\u00e9lectionner un widget , choisissez Personnalis\u00e9 pour obtenir un widget personnalis\u00e9. Pour S\u00e9lectionner des donn\u00e9es , choisissez la table \u00e0 partir de laquelle vous souhaitez que le widget lise les donn\u00e9es. Optionnellement, choisissez S\u00e9lectionner par pour contr\u00f4ler davantage les donn\u00e9es s\u00e9lectionn\u00e9es (lisez Lier des widgets de page pour les possibilit\u00e9s). Le widget personnalis\u00e9 est initialement vide. Pour le configurer, cliquez sur le bouton \u00e0 trois points en haut \u00e0 droite du widget personnalis\u00e9 et s\u00e9lectionnez \u201cOptions du widget\u201d. Dans la section des param\u00e8tres PERSONNALIS\u00c9 o\u00f9 il est indiqu\u00e9 Entrer l'URL personnalis\u00e9e , mettez le lien vers votre widget personnalis\u00e9. Voici un widget de test pour simplement afficher les donn\u00e9es de la table au format JSON : https://gristlabs.github.io/grist-widget/inspect/onRecords.html Et voici un pour montrer uniquement la ligne s\u00e9lectionn\u00e9e (assurez-vous que \u201cS\u00e9lectionner par\u201d est d\u00e9fini pour le widget personnalis\u00e9) : https://gristlabs.github.io/grist-widget/inspect/onRecord.html Niveau d\u2019acc\u00e8s # Lorsque vous mettez un lien vers une page web personnalis\u00e9e, elle sera imm\u00e9diatement rendue \u00e0 l\u2019int\u00e9rieur de la section. Vous avez maintenant la possibilit\u00e9 d\u2019accorder \u00e0 cette page web l\u2019acc\u00e8s aux donn\u00e9es de votre document. Les niveaux d\u2019acc\u00e8s suivants sont disponibles : Pas d\u2019acc\u00e8s au document : la page web est affich\u00e9e dans le widget, mais elle n\u2019a pas acc\u00e8s au document Grist contenant le widget. Lire la table s\u00e9lectionn\u00e9e : la page web est affich\u00e9e dans le widget et re\u00e7oit un acc\u00e8s en lecture \u00e0 la table que le widget est configur\u00e9 pour s\u00e9lectionner des donn\u00e9es. Acc\u00e8s complet au document : la page web est affich\u00e9e dans le widget et a un acc\u00e8s complet pour lire et modifier le document Grist contenant le widget. La page web doit \u00eatre poss\u00e9d\u00e9e et contr\u00f4l\u00e9e par vous ou par quelqu\u2019un en qui vous avez confiance. Avec les permissions Lire la table s\u00e9lectionn\u00e9e , un widget pourrait envoyer les donn\u00e9es auxquelles il acc\u00e8de \u00e0 un tiers. Avec les permissions Acc\u00e8s complet au document , un widget pourrait envoyer toutes les donn\u00e9es du document \u00e0 un tiers et modifier votre document de n\u2019importe quelle mani\u00e8re. Si vous \u00e9crivez votre propre widget personnalis\u00e9, vous pouvez sp\u00e9cifier le niveau d\u2019acc\u00e8s dont il a besoin dans le message pr\u00eat initial. Les valeurs possibles sont : none , read table et full . Cela indique \u00e0 Grist de demander le niveau d\u2019acc\u00e8s souhait\u00e9 \u00e0 l\u2019utilisateur. Votre widget sera recharg\u00e9 avec le niveau d\u2019acc\u00e8s appropri\u00e9 si l\u2019utilisateur approuve la demande. Si vous souhaitez \u00eatre inform\u00e9 du niveau d\u2019acc\u00e8s, vous pouvez vous abonner \u00e0 l\u2019\u00e9v\u00e9nement onOptions qui est envoy\u00e9 au widget apr\u00e8s qu\u2019il ait inform\u00e9 Grist qu\u2019il est pr\u00eat : grist.onOptions(function(options, interaction) { console.log(interaction.access_level); }); Pour l\u2019instant, il suffit de sauter le param\u00e8tre options (il sera d\u00e9crit dans la section Options de widget ). Le niveau d\u2019acc\u00e8s actuel fait partie du deuxi\u00e8me param\u00e8tre, qui d\u00e9crit comment Grist interagira avec votre widget. Exemple de facture # L\u2019exemple minimal ci-dessus a montr\u00e9 des enregistrements au format JSON simple, mais le widget peut devenir aussi sophistiqu\u00e9 que vous le souhaitez. Voici un exemple montrant un enregistrement sous forme de facture imprimable : Vous pouvez lire les d\u00e9tails sur la fa\u00e7on d\u2019utiliser ce widget dans notre exemple de pr\u00e9paration de facture . Le widget de facture est h\u00e9berg\u00e9 \u00e0 : https://gristlabs.github.io/grist-widget/invoices/ Et le code source HTML/CSS/JS peut \u00eatre consult\u00e9 \u00e0 : https://github.com/gristlabs/grist-widget/tree/master/invoices Il utilise Vue.js et grist.onRecord . Cr\u00e9ation d\u2019un widget personnalis\u00e9 # Comme vous l\u2019avez vu, \u00e9crire un widget simple qui utilise des donn\u00e9es d\u2019une table est tr\u00e8s facile. Tout d\u2019abord, vous devez informer Grist que vous \u00eates pr\u00eat et ensuite vous abonner \u00e0 l\u2019un des \u00e9v\u00e9nements disponibles : onRecord , onRecords ou onOptions . grist.ready(); grist.onRecord(function (record) { // Le curseur a \u00e9t\u00e9 d\u00e9plac\u00e9. }); grist.onRecords(function (record) { // Les donn\u00e9es dans la table ont chang\u00e9. }); grist.onOptions(function (options, interaction) { // La configuration a chang\u00e9. }); Disons que vous souhaitez cr\u00e9er un widget personnalis\u00e9 qui affichera une image \u00e0 partir d\u2019une URL et \u00e9ventuellement une ligne de texte en dessous comme titre de l\u2019image. Vous devrez lire deux valeurs de deux colonnes : Lien et Titre . Vous pourriez acc\u00e9der \u00e0 ces colonnes directement en utilisant les noms de colonnes litt\u00e9raux dans votre script. Voici un exemple complet de code source de widget qui fera le travail :
    Lorsque vous commencez, c\u2019est une bonne approche, mais elle pr\u00e9sente deux inconv\u00e9nients majeurs. Chaque fois que vous renommez une colonne, vous devrez \u00e9galement modifier le code source de votre widget. De plus, utiliser ce widget sur une table diff\u00e9rente ou le partager avec vos amis peut \u00eatre difficile car les noms de colonnes pourraient \u00eatre diff\u00e9rents. Pour aider avec cela, Grist propose l\u2019API de mappage de colonnes. Mappage de colonnes # Au lieu d\u2019utiliser directement les noms de colonnes, vous pouvez demander \u00e0 l\u2019utilisateur de choisir quelle colonne utiliser comme Lien et Titre . La liste des colonnes attendues peut \u00eatre envoy\u00e9e \u00e0 Grist dans l\u2019appel pr\u00eat : grist.ready({columns: ['Lien', 'Titre']}); En utilisant cette information, dans le panneau de cr\u00e9ation, Grist masquera la section r\u00e9guli\u00e8re \u201cColonnes visibles\u201d et affichera des s\u00e9lecteurs de colonnes sp\u00e9cialis\u00e9s. Votre widget recevra cette configuration de mappage dans le param\u00e8tre onRecord ou onRecords dans le deuxi\u00e8me param\u00e8tre. Vous pouvez utiliser cette configuration pour effectuer les mappages vous-m\u00eame ou utiliser la fonction d\u2019assistance mapColumnNames pour le faire pour vous.
    Maintenant, si vous renommez l\u2019une des colonnes, le widget fonctionnera toujours. Vous pouvez \u00e9galement utiliser ce widget dans n\u2019importe quelle autre table ou le partager avec un ami, car il ne d\u00e9pend pas de votre structure de table et peut \u00eatre facilement configur\u00e9. Dans la configuration utilis\u00e9e ci-dessus, nous avons dit \u00e0 Grist que toutes les colonnes sont requises, et l\u2019utilisateur peut choisir n\u2019importe quelle colonne m\u00eame si la colonne ne contient pas de valeur texte. Pour \u00eatre plus pr\u00e9cis, nous pouvons inclure plus d\u2019options dans la demande. Par exemple : grist.ready({columns: [ { name: \"Lien\", // Quel champ nous allons lire. title: \"Lien de l'image\", // Nom de champ convivial. optional: false, // Est-ce un champ optionnel. type: \"Texte\", // Quel type de colonne nous attendons. description: \"Un texte\" // Description d'un champ. allowMultiple: false // Permet l'attribution de plusieurs colonnes. } ]}); Le param\u00e8tre optional est important pour le bon fonctionnement de l\u2019assistant mapColumnNames . Cet assistant ne renverra un enregistrement mapp\u00e9 que lorsque toutes les colonnes requises (non optionnelles) seront choisies. Par d\u00e9faut, Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quel type de colonne. Pour autoriser uniquement une colonne d\u2019un type sp\u00e9cifique, vous devez d\u00e9finir une propri\u00e9t\u00e9 type . Voici tous les types valides : Int ( Colonne enti\u00e8re ), Numeric ( Colonne num\u00e9rique ), Texte , Date , DateTime , Bool ( Colonne de bascule ), Choice , ChoiceList , Ref ( Colonne de r\u00e9f\u00e9rence ), RefList ( Liste de r\u00e9f\u00e9rences ), Attachments . La valeur par d\u00e9faut de type est Any , donc Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quel type de colonne. Vous pouvez \u00e9galement sp\u00e9cifier une liste de types, par exemple Date,DateTime . Dans ce cas, Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quelle colonne qui correspond \u00e0 l\u2019un des types de la liste. Utilisez les champs title et description pour aider vos utilisateurs \u00e0 comprendre quel est le but de la colonne. La description sera affich\u00e9e juste en dessous du nom de la colonne, et le title sera utilis\u00e9 comme \u00e9tiquette de colonne. Les deux sont optionnels et vous pouvez y mettre n\u2019importe quel texte que vous souhaitez. Si vous devez mapper plusieurs colonnes (par exemple dans un widget de graphique personnalis\u00e9), vous pouvez utiliser l\u2019option allowMultiple . Cela permettra \u00e0 vos utilisateurs de choisir un ensemble de colonnes qui seront renvoy\u00e9es sous forme de liste de noms de colonnes de table mapp\u00e9s. L\u2019assistant mapColumnNames renverra alors un tableau de valeurs de colonnes mapp\u00e9es dans un seul champ. Supposons que l\u2019utilisateur supprime une colonne ou change son type de sorte qu\u2019elle ne corresponde plus au type demand\u00e9 par le widget. Dans ce cas, Grist supprimera automatiquement cette colonne du mappage. Options de widget # Si votre widget a besoin de stocker certaines options, Grist propose une API de stockage cl\u00e9-valeur simple que vous pouvez utiliser. Voici quelques extraits de code JavaScript qui montrent comment interagir avec cette API : // Stocker une simple valeur de texte. await grist.setOption('color', '#FF0000'); // Stocker des objets complexes sous forme de JSON. await grist.setOption('settings', {lines: 10, skipFirst: true}); // Lire l'option pr\u00e9c\u00e9demment enregistr\u00e9e const color = await grist.getOption('color'); // Effacer toutes les options. await grist.clearOptions(); // Obtenir et remplacer toutes les options. await grist.getOptions(); await grist.setOptions({...}); Vous pouvez exp\u00e9rimenter cela vous-m\u00eame. Voici un widget de test qui d\u00e9montre comment utiliser cette API : https://gristlabs.github.io/grist-widget/inspect/onOptions.html Lorsque votre widget enregistre ou modifie certaines options, l\u2019ic\u00f4ne en haut de la section devient verte. Vous pouvez soit appliquer ces options au widget, soit annuler cette modification. Cela permet aux visualisateurs (utilisateurs avec un acc\u00e8s en lecture seule) ou aux collaborateurs de configurer votre widget sans \u00e9craser les param\u00e8tres d\u2019origine. Ce comportement devrait vous sembler familier, car cela fonctionne comme le tri et le filtrage sur les vues de table ou de carte. En enregistrant les options actuelles, vous les appliquerez au widget et les rendrez disponibles pour les autres. En utilisant ce menu, vous pouvez \u00e9galement effacer toutes les options pour revenir \u00e0 l\u2019\u00e9tat initial du widget. Pour ce faire, appuyez sur la petite ic\u00f4ne de poubelle, puis sur Enregistrer . Grist d\u00e9clenchera \u00e9galement un \u00e9v\u00e9nement chaque fois que les options sont modifi\u00e9es (ou effac\u00e9es). Voici comment vous pouvez vous abonner \u00e0 cet \u00e9v\u00e9nement. grist.onOptions(function(options, interaction) { if (options) { console.log('Couleur actuelle', options.color); } else { // Aucune option de widget n'a \u00e9t\u00e9 enregistr\u00e9e, retour aux options par d\u00e9faut. } }); Si vous construisez votre propre widget, vous ne devez g\u00e9n\u00e9ralement pas lire les options directement (en utilisant grist.widgetApi.getOption() ). Un meilleur mod\u00e8le consiste \u00e0 les appliquer toutes lorsqu\u2019elles sont modifi\u00e9es. L\u2019utilisation du gestionnaire onOptions rendra votre widget plus facile \u00e0 modifier et \u00e0 comprendre ult\u00e9rieurement. Il y a un sc\u00e9nario suppl\u00e9mentaire \u00e0 couvrir. Supposons que votre widget ait une sorte d\u2019\u00e9cran de configuration personnalis\u00e9. Dans ce cas, vous aurez probablement besoin d\u2019un bouton ou d\u2019un autre \u00e9l\u00e9ment d\u2019interface utilisateur que l\u2019utilisateur peut utiliser pour l\u2019afficher. Cet \u00e9l\u00e9ment d\u2019interface utilisateur suppl\u00e9mentaire sera probablement rarement utilis\u00e9 par vous ou vos collaborateurs, donc il n\u2019est pas logique de l\u2019afficher tout le temps. Pour aider avec cela, Grist propose une option d\u2019interaction suppl\u00e9mentaire que vous pouvez envoyer dans le message pr\u00eat : grist.ready({ onEditOptions: function() { // Votre logique personnalis\u00e9e pour ouvrir l'\u00e9cran de configuration personnalis\u00e9. } }); Cela indiquera \u00e0 Grist d\u2019afficher un bouton suppl\u00e9mentaire Ouvrir la configuration dans le panneau de cr\u00e9ation et le menu de section. Lorsqu\u2019il est cliqu\u00e9, cela d\u00e9clenchera votre gestionnaire, que vous pouvez utiliser pour afficher votre propre \u00e9cran de configuration personnalis\u00e9. Lien de widget personnalis\u00e9 # Les widgets personnalis\u00e9s peuvent \u00e9galement \u00eatre utilis\u00e9s comme source de liaison (voir Lier des widgets ). Tout ce que vous avez \u00e0 faire est d\u2019informer Grist que votre widget prend en charge le lien en passant une option suppl\u00e9mentaire \u00e0 l\u2019appel ready (voir API de widget ) : grist.ready({ allowSelectBy: true }); Cela activera l\u2019option S\u00e9lectionner par dans le panneau de configuration du widget. Vous pouvez maintenant utiliser votre widget pour contr\u00f4ler la position du curseur dans les widgets li\u00e9s. Pour ce faire, vous devez appeler la fonction setCursorPos : // Informer Grist que le curseur doit \u00eatre d\u00e9plac\u00e9 vers la ligne avec l'ID 20. grist.setCursorPos({rowId: 20}); // ou informer que votre widget cr\u00e9e une nouvelle ligne. grist.setCursorPos({rowId: 'new'}); Widgets personnalis\u00e9s pr\u00e9fabriqu\u00e9s # Tous les widgets personnalis\u00e9s pr\u00e9fabriqu\u00e9s sont disponibles dans le panneau de configuration du widget personnalis\u00e9 sur le c\u00f4t\u00e9 droit de l\u2019\u00e9cran sous le menu d\u00e9roulant Personnalis\u00e9. Graphiques avanc\u00e9s # Le widget personnalis\u00e9 Graphiques avanc\u00e9s vous donne plus de puissance et de flexibilit\u00e9 que les graphiques int\u00e9gr\u00e9s de Grist, offrant une grande vari\u00e9t\u00e9 de types de graphiques ainsi qu\u2019un contr\u00f4le accru sur le style et la mise en page. C\u2019est une version de Chart Studio de Plotly, consultez leurs tutoriels pour une aide plus d\u00e9taill\u00e9e. Vous devrez d\u00e9finir le niveau d\u2019acc\u00e8s sur \u201cAcc\u00e8s complet au document\u201d. Ne vous inqui\u00e9tez pas, le widget ne lit que les donn\u00e9es de la table s\u00e9lectionn\u00e9e, ne les envoie \u00e0 aucun serveur et ne modifie ou n\u2019apporte d\u2019autres changements \u00e0 votre document. Voici ce que vous devriez voir : Cliquez sur le grand bouton bleu \u201c+ Trace\u201d pour commencer. Cela ajoutera un panneau comme suit : Cliquez sur \u201cDispersion\u201d pour choisir un type de graphique diff\u00e9rent tel que Bar ou Ligne. Ensuite, cliquez sur les menus d\u00e9roulants \u201cChoisir des donn\u00e9es\u201d pour s\u00e9lectionner les colonnes que vous souhaitez tracer. Vous pouvez ajouter plusieurs traces pour superposer diff\u00e9rents graphiques. Essayez diff\u00e9rents panneaux dans la barre lat\u00e9rale pour personnaliser davantage le graphique. Par exemple, allez dans Style > Axes > Titres pour ajouter une \u00e9tiquette \u00e0 chaque axe. Consultez les tutoriels de studio de graphique pour en savoir plus. Au fur et \u00e0 mesure que vous personnalisez le widget, n\u2019oubliez pas de cliquer r\u00e9guli\u00e8rement sur le bouton \u2018Enregistrer\u2019 au-dessus du widget pour conserver votre configuration. Copier dans le presse-papiers # Copier dans le presse-papiers copie une valeur de la colonne sp\u00e9cifi\u00e9e de l\u2019enregistrement s\u00e9lectionn\u00e9. Lors de la configuration du widget, vous devrez s\u00e9lectionner la colonne \u00e0 partir de laquelle vous souhaitez copier des donn\u00e9es. Notez que vous pouvez \u00e9galement copier des donn\u00e9es d\u2019une cellule s\u00e9lectionn\u00e9e en utilisant le raccourci clavier Ctrl + C sur Windows ou \u2318 + C sur Mac. Pour coller, utilisez Ctrl + V ou \u2318 + V . Vous pouvez trouver un exemple du bouton copier dans le presse-papiers dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le. Vous pouvez \u00e9galement regarder une vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s . Int\u00e9grateur Dropbox # Voir et acc\u00e9der aux fichiers enregistr\u00e9s sur Dropbox. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table pour stocker vos liens Dropbox. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les liens Dropbox et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Int\u00e9grateur Dropbox\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018Lien Dropbox\u2019, s\u00e9lectionnez la colonne qui contient vos liens Dropbox. Vous pouvez cr\u00e9er des liens vers des dossiers ou des fichiers sp\u00e9cifiques dans Dropbox. Cliquez sur \u2018Partager\u2019, puis d\u00e9finissez les permissions pour le lien. Vous pouvez choisir de permettre \u00e0 quiconque ayant le lien de visualiser ou d\u2019\u00e9diter. Cr\u00e9ez ensuite, puis copiez le lien. Collez ce lien dans votre colonne Lien Dropbox dans Grist. Notez que les utilisateurs ne peuvent pas modifier directement dans le widget personnalis\u00e9 m\u00eame si des permissions d\u2019\u00e9dition sont accord\u00e9es. Pour \u00e9diter, s\u00e9lectionnez l\u2019objet dans l\u2019int\u00e9grateur Dropbox et il s\u2019ouvrira dans un nouvel onglet o\u00f9 il pourra \u00eatre modifi\u00e9 directement dans Dropbox. Vous pouvez consulter un exemple de l\u2019int\u00e9grateur Dropbox dans notre Pr\u00e9paration \u00e0 l\u2019ouragan mod\u00e8le. Lecteur vid\u00e9o Grist # Int\u00e9grez des vid\u00e9os provenant de sources en ligne telles que YouTube, Vimeo, Facebook Video, Google Drive et plus encore. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table pour stocker vos URL vid\u00e9o. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les URL vid\u00e9o et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Lecteur vid\u00e9o Grist\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018URL\u2019, s\u00e9lectionnez la colonne qui contient vos URL vid\u00e9o. Pour la plupart des vid\u00e9os en ligne, y compris les vid\u00e9os YouTube et les vid\u00e9os stock\u00e9es sur Google Drive, vous pouvez simplement cliquer sur l\u2019option \u2018Partager\u2019 et copier l\u2019URL. Pour certaines autres vid\u00e9os, vous pourriez voir cette erreur : Si cela se produit, vous devrez prendre l\u2019URL \u00e0 partir du code d\u2019int\u00e9gration. Apr\u00e8s avoir cliqu\u00e9 sur l\u2019option de partage de la vid\u00e9o, cliquez sur l\u2019option \u2018Int\u00e9grer\u2019. Ensuite, cliquez pour copier le code. Le code qu\u2019il vous donne ressemblera \u00e0 ceci : Copiez l\u2019URL qui se trouve entre les guillemets apr\u00e8s src . La portion mise en surbrillance dans la capture d\u2019\u00e9cran ci-dessous est ce que vous copieriez pour cette vid\u00e9o Facebook particuli\u00e8re. Collez cette URL dans votre colonne URL dans Grist et la vid\u00e9o appara\u00eetra maintenant dans le widget personnalis\u00e9 Lecteur vid\u00e9o Grist. Visionneuse HTML # La visionneuse HTML affiche du HTML \u00e9crit dans une cellule. Pour des widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s Markdown et Bloc-notes . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous \u00e9crirez du HTML. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient le HTML et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Visionneuse HTML\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018HTML\u2019, s\u00e9lectionnez la colonne de texte qui contient votre HTML. Votre HTML sera visible dans le widget personnalis\u00e9. Pour obtenir de l\u2019aide sur le formatage HTML, consultez ce guide de W3 Schools : Formatage de texte HTML Vous pouvez trouver un exemple de la visionneuse HTML dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le. Vous pouvez \u00e9galement regarder une vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s . Visionneuse d\u2019images # Voir des images \u00e0 partir d\u2019URL. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous ajouterez l\u2019URL de votre image. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient l\u2019URL de l\u2019image et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Visionneuse d\u2019images\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018URL de l\u2019image\u2019, s\u00e9lectionnez la colonne qui contient les URL de vos images. Pour copier l\u2019URL d\u2019une image, faites un clic droit sur la photo puis \u2018Copier l\u2019adresse de l\u2019image\u2019. Cela copie l\u2019URL dans votre presse-papiers. Collez cette URL dans votre colonne sp\u00e9cifi\u00e9e dans Grist. De plus, vous pouvez ajouter plusieurs images pour un enregistrement sp\u00e9cifique en ajoutant plusieurs URL d\u2019images, s\u00e9par\u00e9es par un espace ou une nouvelle ligne, dans une seule cellule. Veuillez noter qu\u2019une virgule ne fonctionnera pas pour s\u00e9parer les liens. Lorsque plusieurs URL d\u2019images sont pr\u00e9sentes, le widget personnalis\u00e9 visionneuse d\u2019images fonctionnera comme un carrousel. Cliquez sur les fl\u00e8ches pour voir d\u2019autres images. Pour un exemple du widget visionneuse d\u2019images, consultez notre Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis , et ajoutez une critique de parc pendant que vous y \u00eates ! Vous pouvez \u00e9galement consulter notre mod\u00e8le G\u00e9n\u00e9rateur de m\u00e8mes pour un autre excellent exemple. Pour une vid\u00e9o explicative, assurez-vous de regarder notre Webinaire sur les widgets personnalis\u00e9s ! Notebook JupyterLite # Ce widget vous permet d\u2019ex\u00e9cuter du code Python personnalis\u00e9 dans JupyterLite , une version de JupyterLab fonctionnant enti\u00e8rement dans le navigateur. Vous pouvez utiliser la pleine API de plugin de widget personnalis\u00e9e et acc\u00e9der ou modifier n\u2019importe quelles donn\u00e9es dans le document (sous r\u00e9serve des R\u00e8gles d\u2019acc\u00e8s), d\u00e9bloquant presque des possibilit\u00e9s illimit\u00e9es pour les utilisateurs avanc\u00e9s. Vous serez pr\u00e9sent\u00e9 avec un notebook o\u00f9 vous pouvez entrer et ex\u00e9cuter du code Python, par exemple : Apr\u00e8s avoir tap\u00e9 du code dans une cellule, cliquez sur le bouton de lecture ou appuyez sur Shift+Entr\u00e9e pour ex\u00e9cuter cette cellule. Contrairement aux formules, le code n\u2019est pas enregistr\u00e9 automatiquement. Vous devez appuyer sur le bouton \u2018Enregistrer\u2019 habituel au-dessus du widget (en dehors du notebook) pour conserver le code dans votre document Grist. D\u2019autre part, les modifications des param\u00e8tres dans le notebook (par exemple, les raccourcis clavier) sont enregistr\u00e9es dans le stockage local de votre navigateur, donc elles ne sont pas partag\u00e9es avec d\u2019autres utilisateurs du document. Un objet sp\u00e9cial appel\u00e9 grist est automatiquement disponible pour \u00eatre utilis\u00e9 dans le code Python, qui refl\u00e8te de nombreuses m\u00e9thodes courantes de l\u2019API de plugin JS . Notez que beaucoup de ces m\u00e9thodes sont asynchrones, donc vous devriez utiliser await avant de les appeler. async fetch_selected_table() : renvoie les donn\u00e9es de la table soutenant le widget notebook. async fetch_selected_record(row_id=None) : renvoie un enregistrement de la table soutenant le widget notebook. Si row_id est sp\u00e9cifi\u00e9, renvoie l\u2019enregistrement \u00e0 cette ligne. Sinon, renvoie l\u2019enregistrement \u00e0 la position actuelle du curseur dans un widget li\u00e9 au widget notebook. async fetch_table(table_id) : renvoie les donn\u00e9es de la table sp\u00e9cifi\u00e9e. Notez que cela diff\u00e8re de fetch_selected_table (m\u00eame pour la m\u00eame table) de plusieurs mani\u00e8res : Le widget doit avoir un acc\u00e8s complet au document. Toutes les colonnes sont incluses, tandis que fetch_selected_table exclut les colonnes qui sont cach\u00e9es dans la configuration du widget. Toutes les lignes sont incluses, tandis que fetch_selected_table prend en compte les filtres du widget et \u2018S\u00c9LECTIONNER PAR\u2019. Les donn\u00e9es ne sont pas tri\u00e9es selon la configuration du widget. Les donn\u00e9es sont r\u00e9cup\u00e9r\u00e9es depuis le serveur, donc la m\u00e9thode peut \u00eatre plus lente. Les valeurs pour les colonnes de r\u00e9f\u00e9rence sont des ID de ligne de la table r\u00e9f\u00e9renc\u00e9e, tandis que fetch_selected_table renvoie les valeurs affich\u00e9es en fonction de la configuration \u2018AFFICHER LA COLONNE\u2019. on_record(callback) : enregistre une fonction de rappel \u00e0 ex\u00e9cuter lorsque le curseur se d\u00e9place dans un widget li\u00e9 au widget notebook, c\u2019est-\u00e0-dire le widget choisi dans le menu d\u00e9roulant \u201cS\u00c9LECTIONNER PAR\u201d dans la section Donn\u00e9es de la configuration du widget. La fonction de rappel recevra l\u2019enregistrement \u00e0 la position actuelle du curseur. Vous pouvez \u00e9galement l\u2019utiliser comme d\u00e9corateur, c\u2019est-\u00e0-dire @grist.on_record . on_records(callback) : similaire \u00e0 on_record , mais s\u2019ex\u00e9cute lorsque les donn\u00e9es source du widget changent. La fonction de rappel recevra les m\u00eames donn\u00e9es que celles renvoy\u00e9es par fetch_selected_table . get_table(table_id) : renvoie une classe TableOperations similaire \u00e0 l\u2019interface de l\u2019API de plugin JS habituelle pour effectuer des op\u00e9rations de type CRUD sur une table. Voir la documentation de l\u2019API de plugin pour les d\u00e9tails sur les param\u00e8tres. La classe a les m\u00e9thodes suivantes : async create(records, parse_strings=True) async update(records, parse_strings=True) async upsert(records, parse_strings=True, add=True, update=True, on_many=\"first\", allow_empty_require=False) async destroy(row_ids) Vous pouvez \u00e9galement utiliser grist.raw pour un acc\u00e8s direct \u00e0 l\u2019API de plugin, par exemple await grist.raw.docApi.fetchTable(table_id) . Cela peut renvoyer des valeurs de cellule brutes que vous pouvez d\u00e9coder avec grist.decode_cell_value(value) . Vous pouvez utiliser de nombreuses (mais pas toutes) biblioth\u00e8ques tierces dans votre notebook, comme pandas . Beaucoup seront install\u00e9es automatiquement lorsqu\u2019elles seront import\u00e9es. D\u2019autres n\u00e9cessiteront d\u2019ex\u00e9cuter %pip install dans une cellule, par exemple %pip install pandas . Notez que c\u2019est %pip et non !pip comme dans un notebook Jupyter classique. Carte # Le widget de carte personnalis\u00e9 vous permet d\u2019afficher des emplacements en utilisant des coordonn\u00e9es de latitude et de longitude. Si vos donn\u00e9es sont une adresse, plut\u00f4t qu\u2019au format lat-long, Grist peut convertir l\u2019adresse en coordonn\u00e9es lat-long. Si vous utilisez des coordonn\u00e9es lat-long existantes, vous aurez besoin de trois colonnes : Nom, Longitude et Latitude. Si vous utilisez une adresse, vous aurez besoin de six colonnes : Nom, Adresse, G\u00e9ocodage, Longitude, Latitude et Adresse g\u00e9ocod\u00e9e. G\u00e9ocodage est une colonne de type bascule qui doit \u00eatre d\u00e9finie sur vrai pour tout enregistrement que vous souhaitez convertir d\u2019adresse en coordonn\u00e9es lat-long \u00e0 afficher sur la carte. Si vous souhaitez convertir tous les enregistrements, vous pouvez faire de G\u00e9ocodage une colonne de formule avec la formule = True . Cela marquera tous les enregistrements comme vrais. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les adresses ou les coordonn\u00e9es lat-long et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Carte\u2019 dans le menu d\u00e9roulant Personnalis\u00e9. Si vous avez d\u00e9j\u00e0 des coordonn\u00e9es lat-long , vous pouvez d\u00e9finir votre niveau d\u2019acc\u00e8s sur Lire la table s\u00e9lectionn\u00e9e . Si vous utilisez une adresse et qu\u2019elle doit \u00eatre convertie en coordonn\u00e9es lat-long, vous devrez d\u00e9finir votre niveau d\u2019acc\u00e8s sur Acc\u00e8s complet au document car le widget a besoin de la permission d\u2019\u00e9crire dans votre document afin d\u2019ajouter des coordonn\u00e9es lat-long. Mappez toutes les colonnes requises. Notez que Nom, Longitude et Latitude sont \u00e9tiquet\u00e9s comme requis. G\u00e9ocodage, Adresse et Adresse g\u00e9ocod\u00e9e sont list\u00e9s comme optionnels. Si vous utilisez des adresses et que vous avez besoin que Grist les convertisse en coordonn\u00e9es lat-long, vous devez mapper les six colonnes. Apr\u00e8s avoir mapp\u00e9 les colonnes n\u00e9cessaires et s\u00e9lectionn\u00e9 le niveau d\u2019acc\u00e8s appropri\u00e9, le widget de carte se remplira. Vous pouvez configurer la carte pour afficher uniquement l\u2019emplacement s\u00e9lectionn\u00e9 en cliquant sur l\u2019option \u2018Ouvrir la configuration\u2019 dans le panneau de cr\u00e9ation . Ensuite, d\u00e9cochez \u2018Tous les emplacements\u2019. Cliquez sur la coche verte en haut du widget pour enregistrer les param\u00e8tres de configuration mis \u00e0 jour. Consultez notre mod\u00e8le Cartographie des emplacements ou notre Liste de crowdsourcing pour deux excellents exemples ! Pour une vid\u00e9o explicative, consultez notre Webinaire sur les widgets personnalis\u00e9s . Markdown # Le widget personnalis\u00e9 Markdown vous permet de formater du texte en utilisant Markdown tout en affichant le texte format\u00e9 dans un widget modifiable. Pour d\u2019autres widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s HTML et Bloc-notes . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous ajouterez votre texte qui sera format\u00e9 en utilisant Markdown. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient le texte format\u00e9 avec Markdown et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Markdown\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s complet au document . Comme le widget est \u00e9galement un \u00e9diteur, il a besoin de la permission d\u2019\u00e9crire dans le document. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne de texte qui contient le formatage Markdown. Tout formatage Markdown dans la colonne de texte sp\u00e9cifi\u00e9e s\u2019appliquera et sera visible et modifiable dans le widget personnalis\u00e9. Pour \u00e9diter le texte directement dans le widget, cliquez sur l\u2019ic\u00f4ne d\u2019\u00e9dition. Le texte reviendra \u00e0 afficher la syntaxe Markdown qui peut \u00eatre modifi\u00e9e directement dans le widget. Lorsqu\u2019il est en mode \u00e9dition, l\u2019ic\u00f4ne d\u2019\u00e9dition sera remplac\u00e9e par l\u2019ic\u00f4ne de sauvegarde. Assurez-vous de cliquer sur l\u2019ic\u00f4ne de sauvegarde pour enregistrer les modifications et revenir \u00e0 l\u2019affichage du texte format\u00e9. Pour obtenir de l\u2019aide sur le formatage Markdown, consultez le Guide Markdown pour la syntaxe de base. Ce guide est \u00e9galement accessible dans le widget Markdown en cliquant sur l\u2019ic\u00f4ne d\u2019information en haut du widget. Le guide s\u2019ouvrira dans un nouvel onglet de votre navigateur pour une r\u00e9f\u00e9rence facile. Vous pouvez trouver un exemple de l\u2019\u00e9diteur Markdown dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le et consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s . Bloc-notes # Le widget Bloc-notes personnalis\u00e9 vous permet de formater du texte en utilisant un \u00e9diteur de texte enrichi. Pour d\u2019autres widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s HTML et Markdown . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que les d\u00e9tails de notre texte format\u00e9 seront stock\u00e9s. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient la colonne que nous venons d\u2019ajouter et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Bloc-notes\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s complet au document . Comme le widget est \u00e9galement un \u00e9diteur, il a besoin de la permission d\u2019\u00e9crire dans le document. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne cr\u00e9\u00e9e pour stocker notre texte format\u00e9. Si la colonne de texte que vous avez choisie sous Contenu a du texte existant, ce texte appara\u00eetra dans le widget Bloc-notes, pr\u00eat \u00e0 \u00eatre format\u00e9. Utilisez n\u2019importe quelle option montr\u00e9e ici pour formater votre texte. Comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessous, le code pour le texte format\u00e9 n\u2019est pas utile \u00e0 voir dans votre table. Vous \u00e9diterez le texte directement dans le widget Bloc-notes afin que vous puissiez cacher cette colonne de votre table de donn\u00e9es. Consultez notre Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis ou notre \ud83d\uded2 Liste de courses + Planificateur de repas pour deux excellents exemples de Bloc-notes ! Vous pouvez \u00e9galement consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s . \u00c9tiquettes d\u2019impression # Le widget personnalis\u00e9 \u00c9tiquettes d\u2019impression vous permet de personnaliser et d\u2019imprimer des \u00e9tiquettes directement \u00e0 partir de Grist. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. Cette colonne contiendra le texte pour l\u2019\u00e9tiquette. Optionnellement, vous pouvez ajouter une deuxi\u00e8me colonne pour sp\u00e9cifier un nombre d\u2019\u00e9tiquettes, vous permettant d\u2019imprimer plus d\u2019une m\u00eame \u00e9tiquette sans avoir \u00e0 cr\u00e9er des enregistrements en double. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les d\u00e9tails de l\u2019\u00e9tiquette. Pour configurer, s\u00e9lectionnez \u2018Impression d\u2019\u00e9tiquettes\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018\u00c9tiquette\u2019, s\u00e9lectionnez la colonne qui contient le texte \u00e0 inclure sur les \u00e9tiquettes. Si vous souhaitez imprimer plus d\u2019une \u00e9tiquette, s\u00e9lectionnez la colonne qui contient le nombre d\u2019\u00e9tiquettes pour chaque enregistrement que vous souhaitez imprimer. Vous pouvez choisir parmi des tailles de feuille standard dans le menu d\u00e9roulant en haut \u00e0 gauche du widget. Assurez-vous d\u2019enregistrer les modifications en cliquant sur la coche verte en haut \u00e0 droite du widget. Pour laisser des \u00e9tiquettes vides au d\u00e9but de la feuille, cliquez sur l\u2019ic\u00f4ne de param\u00e8tres puis sp\u00e9cifiez combien d\u2019\u00e9tiquettes doivent rester vides. Cela est particuli\u00e8rement utile si une partie de votre feuille d\u2019\u00e9tiquettes a d\u00e9j\u00e0 \u00e9t\u00e9 utilis\u00e9e. Vous pouvez sauter les \u00e9tiquettes utilis\u00e9es et commencer \u00e0 imprimer sur votre premi\u00e8re \u00e9tiquette inutilis\u00e9e. Consultez notre mod\u00e8le Impression d\u2019\u00e9tiquettes d\u2019exp\u00e9dition et notre mod\u00e8le Chasse au tr\u00e9sor pour deux excellents exemples ! Vous pouvez \u00e9galement consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Custom"},{"location":"widget-custom/#widget-de-page-personnalise","text":"Le widget Personnalis\u00e9 permet \u00e0 un utilisateur d\u2019ins\u00e9rer presque tout dans son document. Pour cr\u00e9er un widget personnalis\u00e9, il faut actuellement des connaissances en d\u00e9veloppement web et un acc\u00e8s \u00e0 un serveur web public (par exemple, GitHub Pages). Une bonne utilisation des widgets personnalis\u00e9s est de visualiser des enregistrements ou des tables de nouvelles mani\u00e8res. Utiliser Grist comme mod\u00e8le de donn\u00e9es et HTML/CSS/JS modernes comme vue est tr\u00e8s puissant.","title":"Widget de page : Personnalis\u00e9"},{"location":"widget-custom/#exemple-minimal","text":"Pour d\u00e9montrer \u00e0 un d\u00e9veloppeur web comment fonctionnent les widgets personnalis\u00e9s, il existe un exemple minimal fonctionnel \u00e0 : https://public.getgrist.com/911KcgKA95oQ/Minimal-Custom-Widget/m/fork L\u2019exemple montre une table avec des donn\u00e9es al\u00e9atoires (noms d\u2019animaux de compagnie) et deux widgets personnalis\u00e9s, l\u2019un montrant la ligne s\u00e9lectionn\u00e9e dans la table au format JSON, et l\u2019autre montrant toutes les lignes de la table au format JSON. Si vous modifiez des donn\u00e9es dans la table ou d\u00e9placez le curseur, les widgets personnalis\u00e9s se mettent \u00e0 jour en cons\u00e9quence. Le code source des widgets se trouve \u00e0 : https://github.com/gristlabs/grist-widget/tree/master/inspect Il est r\u00e9duit \u00e0 l\u2019essentiel. Voici le code source complet du widget onRecord qui montre une ligne de donn\u00e9es : onRecord
    En attente de donn\u00e9es...
    Les parties \u201cGrist\u201d de ceci sont : Inclusion de https://docs.getgrist.com/grist-plugin-api.js pour obtenir l\u2019API Grist. Appel de grist.ready pour informer Grist que le widget est pr\u00eat \u00e0 fonctionner. Appel de grist.onRecord pour s\u2019abonner \u00e0 la ligne actuelle de la table. Apr\u00e8s cela, tout le reste est du HTML/CSS/JS classique. Une fois que vous avez des donn\u00e9es qui arrivent, vous pouvez les rendre de la mani\u00e8re que vous souhaitez, en utilisant React, Vue.js ou votre framework pr\u00e9f\u00e9r\u00e9. Par exemple, vous pourriez rendre des enregistrements sous forme de facture imprimable , ou utiliser un format de graphique obscur que Grist ne prend pas actuellement en charge.","title":"Exemple minimal"},{"location":"widget-custom/#ajouter-un-widget-personnalise","text":"Pour ajouter un widget personnalis\u00e9 qui lit \u00e0 partir d\u2019une table, cliquez sur Ajouter nouveau , puis Ajouter un widget \u00e0 la page . Ensuite : Pour S\u00e9lectionner un widget , choisissez Personnalis\u00e9 pour obtenir un widget personnalis\u00e9. Pour S\u00e9lectionner des donn\u00e9es , choisissez la table \u00e0 partir de laquelle vous souhaitez que le widget lise les donn\u00e9es. Optionnellement, choisissez S\u00e9lectionner par pour contr\u00f4ler davantage les donn\u00e9es s\u00e9lectionn\u00e9es (lisez Lier des widgets de page pour les possibilit\u00e9s). Le widget personnalis\u00e9 est initialement vide. Pour le configurer, cliquez sur le bouton \u00e0 trois points en haut \u00e0 droite du widget personnalis\u00e9 et s\u00e9lectionnez \u201cOptions du widget\u201d. Dans la section des param\u00e8tres PERSONNALIS\u00c9 o\u00f9 il est indiqu\u00e9 Entrer l'URL personnalis\u00e9e , mettez le lien vers votre widget personnalis\u00e9. Voici un widget de test pour simplement afficher les donn\u00e9es de la table au format JSON : https://gristlabs.github.io/grist-widget/inspect/onRecords.html Et voici un pour montrer uniquement la ligne s\u00e9lectionn\u00e9e (assurez-vous que \u201cS\u00e9lectionner par\u201d est d\u00e9fini pour le widget personnalis\u00e9) : https://gristlabs.github.io/grist-widget/inspect/onRecord.html","title":"Ajouter un widget personnalis\u00e9"},{"location":"widget-custom/#niveau-dacces","text":"Lorsque vous mettez un lien vers une page web personnalis\u00e9e, elle sera imm\u00e9diatement rendue \u00e0 l\u2019int\u00e9rieur de la section. Vous avez maintenant la possibilit\u00e9 d\u2019accorder \u00e0 cette page web l\u2019acc\u00e8s aux donn\u00e9es de votre document. Les niveaux d\u2019acc\u00e8s suivants sont disponibles : Pas d\u2019acc\u00e8s au document : la page web est affich\u00e9e dans le widget, mais elle n\u2019a pas acc\u00e8s au document Grist contenant le widget. Lire la table s\u00e9lectionn\u00e9e : la page web est affich\u00e9e dans le widget et re\u00e7oit un acc\u00e8s en lecture \u00e0 la table que le widget est configur\u00e9 pour s\u00e9lectionner des donn\u00e9es. Acc\u00e8s complet au document : la page web est affich\u00e9e dans le widget et a un acc\u00e8s complet pour lire et modifier le document Grist contenant le widget. La page web doit \u00eatre poss\u00e9d\u00e9e et contr\u00f4l\u00e9e par vous ou par quelqu\u2019un en qui vous avez confiance. Avec les permissions Lire la table s\u00e9lectionn\u00e9e , un widget pourrait envoyer les donn\u00e9es auxquelles il acc\u00e8de \u00e0 un tiers. Avec les permissions Acc\u00e8s complet au document , un widget pourrait envoyer toutes les donn\u00e9es du document \u00e0 un tiers et modifier votre document de n\u2019importe quelle mani\u00e8re. Si vous \u00e9crivez votre propre widget personnalis\u00e9, vous pouvez sp\u00e9cifier le niveau d\u2019acc\u00e8s dont il a besoin dans le message pr\u00eat initial. Les valeurs possibles sont : none , read table et full . Cela indique \u00e0 Grist de demander le niveau d\u2019acc\u00e8s souhait\u00e9 \u00e0 l\u2019utilisateur. Votre widget sera recharg\u00e9 avec le niveau d\u2019acc\u00e8s appropri\u00e9 si l\u2019utilisateur approuve la demande. Si vous souhaitez \u00eatre inform\u00e9 du niveau d\u2019acc\u00e8s, vous pouvez vous abonner \u00e0 l\u2019\u00e9v\u00e9nement onOptions qui est envoy\u00e9 au widget apr\u00e8s qu\u2019il ait inform\u00e9 Grist qu\u2019il est pr\u00eat : grist.onOptions(function(options, interaction) { console.log(interaction.access_level); }); Pour l\u2019instant, il suffit de sauter le param\u00e8tre options (il sera d\u00e9crit dans la section Options de widget ). Le niveau d\u2019acc\u00e8s actuel fait partie du deuxi\u00e8me param\u00e8tre, qui d\u00e9crit comment Grist interagira avec votre widget.","title":"Niveau d’acc\u00e8s"},{"location":"widget-custom/#exemple-de-facture","text":"L\u2019exemple minimal ci-dessus a montr\u00e9 des enregistrements au format JSON simple, mais le widget peut devenir aussi sophistiqu\u00e9 que vous le souhaitez. Voici un exemple montrant un enregistrement sous forme de facture imprimable : Vous pouvez lire les d\u00e9tails sur la fa\u00e7on d\u2019utiliser ce widget dans notre exemple de pr\u00e9paration de facture . Le widget de facture est h\u00e9berg\u00e9 \u00e0 : https://gristlabs.github.io/grist-widget/invoices/ Et le code source HTML/CSS/JS peut \u00eatre consult\u00e9 \u00e0 : https://github.com/gristlabs/grist-widget/tree/master/invoices Il utilise Vue.js et grist.onRecord .","title":"Exemple de facture"},{"location":"widget-custom/#creation-dun-widget-personnalise","text":"Comme vous l\u2019avez vu, \u00e9crire un widget simple qui utilise des donn\u00e9es d\u2019une table est tr\u00e8s facile. Tout d\u2019abord, vous devez informer Grist que vous \u00eates pr\u00eat et ensuite vous abonner \u00e0 l\u2019un des \u00e9v\u00e9nements disponibles : onRecord , onRecords ou onOptions . grist.ready(); grist.onRecord(function (record) { // Le curseur a \u00e9t\u00e9 d\u00e9plac\u00e9. }); grist.onRecords(function (record) { // Les donn\u00e9es dans la table ont chang\u00e9. }); grist.onOptions(function (options, interaction) { // La configuration a chang\u00e9. }); Disons que vous souhaitez cr\u00e9er un widget personnalis\u00e9 qui affichera une image \u00e0 partir d\u2019une URL et \u00e9ventuellement une ligne de texte en dessous comme titre de l\u2019image. Vous devrez lire deux valeurs de deux colonnes : Lien et Titre . Vous pourriez acc\u00e9der \u00e0 ces colonnes directement en utilisant les noms de colonnes litt\u00e9raux dans votre script. Voici un exemple complet de code source de widget qui fera le travail :
    Lorsque vous commencez, c\u2019est une bonne approche, mais elle pr\u00e9sente deux inconv\u00e9nients majeurs. Chaque fois que vous renommez une colonne, vous devrez \u00e9galement modifier le code source de votre widget. De plus, utiliser ce widget sur une table diff\u00e9rente ou le partager avec vos amis peut \u00eatre difficile car les noms de colonnes pourraient \u00eatre diff\u00e9rents. Pour aider avec cela, Grist propose l\u2019API de mappage de colonnes.","title":"Cr\u00e9ation d’un widget personnalis\u00e9"},{"location":"widget-custom/#mappage-de-colonnes","text":"Au lieu d\u2019utiliser directement les noms de colonnes, vous pouvez demander \u00e0 l\u2019utilisateur de choisir quelle colonne utiliser comme Lien et Titre . La liste des colonnes attendues peut \u00eatre envoy\u00e9e \u00e0 Grist dans l\u2019appel pr\u00eat : grist.ready({columns: ['Lien', 'Titre']}); En utilisant cette information, dans le panneau de cr\u00e9ation, Grist masquera la section r\u00e9guli\u00e8re \u201cColonnes visibles\u201d et affichera des s\u00e9lecteurs de colonnes sp\u00e9cialis\u00e9s. Votre widget recevra cette configuration de mappage dans le param\u00e8tre onRecord ou onRecords dans le deuxi\u00e8me param\u00e8tre. Vous pouvez utiliser cette configuration pour effectuer les mappages vous-m\u00eame ou utiliser la fonction d\u2019assistance mapColumnNames pour le faire pour vous.
    Maintenant, si vous renommez l\u2019une des colonnes, le widget fonctionnera toujours. Vous pouvez \u00e9galement utiliser ce widget dans n\u2019importe quelle autre table ou le partager avec un ami, car il ne d\u00e9pend pas de votre structure de table et peut \u00eatre facilement configur\u00e9. Dans la configuration utilis\u00e9e ci-dessus, nous avons dit \u00e0 Grist que toutes les colonnes sont requises, et l\u2019utilisateur peut choisir n\u2019importe quelle colonne m\u00eame si la colonne ne contient pas de valeur texte. Pour \u00eatre plus pr\u00e9cis, nous pouvons inclure plus d\u2019options dans la demande. Par exemple : grist.ready({columns: [ { name: \"Lien\", // Quel champ nous allons lire. title: \"Lien de l'image\", // Nom de champ convivial. optional: false, // Est-ce un champ optionnel. type: \"Texte\", // Quel type de colonne nous attendons. description: \"Un texte\" // Description d'un champ. allowMultiple: false // Permet l'attribution de plusieurs colonnes. } ]}); Le param\u00e8tre optional est important pour le bon fonctionnement de l\u2019assistant mapColumnNames . Cet assistant ne renverra un enregistrement mapp\u00e9 que lorsque toutes les colonnes requises (non optionnelles) seront choisies. Par d\u00e9faut, Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quel type de colonne. Pour autoriser uniquement une colonne d\u2019un type sp\u00e9cifique, vous devez d\u00e9finir une propri\u00e9t\u00e9 type . Voici tous les types valides : Int ( Colonne enti\u00e8re ), Numeric ( Colonne num\u00e9rique ), Texte , Date , DateTime , Bool ( Colonne de bascule ), Choice , ChoiceList , Ref ( Colonne de r\u00e9f\u00e9rence ), RefList ( Liste de r\u00e9f\u00e9rences ), Attachments . La valeur par d\u00e9faut de type est Any , donc Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quel type de colonne. Vous pouvez \u00e9galement sp\u00e9cifier une liste de types, par exemple Date,DateTime . Dans ce cas, Grist permettra \u00e0 l\u2019utilisateur de choisir n\u2019importe quelle colonne qui correspond \u00e0 l\u2019un des types de la liste. Utilisez les champs title et description pour aider vos utilisateurs \u00e0 comprendre quel est le but de la colonne. La description sera affich\u00e9e juste en dessous du nom de la colonne, et le title sera utilis\u00e9 comme \u00e9tiquette de colonne. Les deux sont optionnels et vous pouvez y mettre n\u2019importe quel texte que vous souhaitez. Si vous devez mapper plusieurs colonnes (par exemple dans un widget de graphique personnalis\u00e9), vous pouvez utiliser l\u2019option allowMultiple . Cela permettra \u00e0 vos utilisateurs de choisir un ensemble de colonnes qui seront renvoy\u00e9es sous forme de liste de noms de colonnes de table mapp\u00e9s. L\u2019assistant mapColumnNames renverra alors un tableau de valeurs de colonnes mapp\u00e9es dans un seul champ. Supposons que l\u2019utilisateur supprime une colonne ou change son type de sorte qu\u2019elle ne corresponde plus au type demand\u00e9 par le widget. Dans ce cas, Grist supprimera automatiquement cette colonne du mappage.","title":"Mappage de colonnes"},{"location":"widget-custom/#options-de-widget","text":"Si votre widget a besoin de stocker certaines options, Grist propose une API de stockage cl\u00e9-valeur simple que vous pouvez utiliser. Voici quelques extraits de code JavaScript qui montrent comment interagir avec cette API : // Stocker une simple valeur de texte. await grist.setOption('color', '#FF0000'); // Stocker des objets complexes sous forme de JSON. await grist.setOption('settings', {lines: 10, skipFirst: true}); // Lire l'option pr\u00e9c\u00e9demment enregistr\u00e9e const color = await grist.getOption('color'); // Effacer toutes les options. await grist.clearOptions(); // Obtenir et remplacer toutes les options. await grist.getOptions(); await grist.setOptions({...}); Vous pouvez exp\u00e9rimenter cela vous-m\u00eame. Voici un widget de test qui d\u00e9montre comment utiliser cette API : https://gristlabs.github.io/grist-widget/inspect/onOptions.html Lorsque votre widget enregistre ou modifie certaines options, l\u2019ic\u00f4ne en haut de la section devient verte. Vous pouvez soit appliquer ces options au widget, soit annuler cette modification. Cela permet aux visualisateurs (utilisateurs avec un acc\u00e8s en lecture seule) ou aux collaborateurs de configurer votre widget sans \u00e9craser les param\u00e8tres d\u2019origine. Ce comportement devrait vous sembler familier, car cela fonctionne comme le tri et le filtrage sur les vues de table ou de carte. En enregistrant les options actuelles, vous les appliquerez au widget et les rendrez disponibles pour les autres. En utilisant ce menu, vous pouvez \u00e9galement effacer toutes les options pour revenir \u00e0 l\u2019\u00e9tat initial du widget. Pour ce faire, appuyez sur la petite ic\u00f4ne de poubelle, puis sur Enregistrer . Grist d\u00e9clenchera \u00e9galement un \u00e9v\u00e9nement chaque fois que les options sont modifi\u00e9es (ou effac\u00e9es). Voici comment vous pouvez vous abonner \u00e0 cet \u00e9v\u00e9nement. grist.onOptions(function(options, interaction) { if (options) { console.log('Couleur actuelle', options.color); } else { // Aucune option de widget n'a \u00e9t\u00e9 enregistr\u00e9e, retour aux options par d\u00e9faut. } }); Si vous construisez votre propre widget, vous ne devez g\u00e9n\u00e9ralement pas lire les options directement (en utilisant grist.widgetApi.getOption() ). Un meilleur mod\u00e8le consiste \u00e0 les appliquer toutes lorsqu\u2019elles sont modifi\u00e9es. L\u2019utilisation du gestionnaire onOptions rendra votre widget plus facile \u00e0 modifier et \u00e0 comprendre ult\u00e9rieurement. Il y a un sc\u00e9nario suppl\u00e9mentaire \u00e0 couvrir. Supposons que votre widget ait une sorte d\u2019\u00e9cran de configuration personnalis\u00e9. Dans ce cas, vous aurez probablement besoin d\u2019un bouton ou d\u2019un autre \u00e9l\u00e9ment d\u2019interface utilisateur que l\u2019utilisateur peut utiliser pour l\u2019afficher. Cet \u00e9l\u00e9ment d\u2019interface utilisateur suppl\u00e9mentaire sera probablement rarement utilis\u00e9 par vous ou vos collaborateurs, donc il n\u2019est pas logique de l\u2019afficher tout le temps. Pour aider avec cela, Grist propose une option d\u2019interaction suppl\u00e9mentaire que vous pouvez envoyer dans le message pr\u00eat : grist.ready({ onEditOptions: function() { // Votre logique personnalis\u00e9e pour ouvrir l'\u00e9cran de configuration personnalis\u00e9. } }); Cela indiquera \u00e0 Grist d\u2019afficher un bouton suppl\u00e9mentaire Ouvrir la configuration dans le panneau de cr\u00e9ation et le menu de section. Lorsqu\u2019il est cliqu\u00e9, cela d\u00e9clenchera votre gestionnaire, que vous pouvez utiliser pour afficher votre propre \u00e9cran de configuration personnalis\u00e9.","title":"Options de widget"},{"location":"widget-custom/#lien-de-widget-personnalise","text":"Les widgets personnalis\u00e9s peuvent \u00e9galement \u00eatre utilis\u00e9s comme source de liaison (voir Lier des widgets ). Tout ce que vous avez \u00e0 faire est d\u2019informer Grist que votre widget prend en charge le lien en passant une option suppl\u00e9mentaire \u00e0 l\u2019appel ready (voir API de widget ) : grist.ready({ allowSelectBy: true }); Cela activera l\u2019option S\u00e9lectionner par dans le panneau de configuration du widget. Vous pouvez maintenant utiliser votre widget pour contr\u00f4ler la position du curseur dans les widgets li\u00e9s. Pour ce faire, vous devez appeler la fonction setCursorPos : // Informer Grist que le curseur doit \u00eatre d\u00e9plac\u00e9 vers la ligne avec l'ID 20. grist.setCursorPos({rowId: 20}); // ou informer que votre widget cr\u00e9e une nouvelle ligne. grist.setCursorPos({rowId: 'new'});","title":"Lien de widget personnalis\u00e9"},{"location":"widget-custom/#widgets-personnalises-prefabriques","text":"Tous les widgets personnalis\u00e9s pr\u00e9fabriqu\u00e9s sont disponibles dans le panneau de configuration du widget personnalis\u00e9 sur le c\u00f4t\u00e9 droit de l\u2019\u00e9cran sous le menu d\u00e9roulant Personnalis\u00e9.","title":"Widgets personnalis\u00e9s pr\u00e9fabriqu\u00e9s"},{"location":"widget-custom/#graphiques-avances","text":"Le widget personnalis\u00e9 Graphiques avanc\u00e9s vous donne plus de puissance et de flexibilit\u00e9 que les graphiques int\u00e9gr\u00e9s de Grist, offrant une grande vari\u00e9t\u00e9 de types de graphiques ainsi qu\u2019un contr\u00f4le accru sur le style et la mise en page. C\u2019est une version de Chart Studio de Plotly, consultez leurs tutoriels pour une aide plus d\u00e9taill\u00e9e. Vous devrez d\u00e9finir le niveau d\u2019acc\u00e8s sur \u201cAcc\u00e8s complet au document\u201d. Ne vous inqui\u00e9tez pas, le widget ne lit que les donn\u00e9es de la table s\u00e9lectionn\u00e9e, ne les envoie \u00e0 aucun serveur et ne modifie ou n\u2019apporte d\u2019autres changements \u00e0 votre document. Voici ce que vous devriez voir : Cliquez sur le grand bouton bleu \u201c+ Trace\u201d pour commencer. Cela ajoutera un panneau comme suit : Cliquez sur \u201cDispersion\u201d pour choisir un type de graphique diff\u00e9rent tel que Bar ou Ligne. Ensuite, cliquez sur les menus d\u00e9roulants \u201cChoisir des donn\u00e9es\u201d pour s\u00e9lectionner les colonnes que vous souhaitez tracer. Vous pouvez ajouter plusieurs traces pour superposer diff\u00e9rents graphiques. Essayez diff\u00e9rents panneaux dans la barre lat\u00e9rale pour personnaliser davantage le graphique. Par exemple, allez dans Style > Axes > Titres pour ajouter une \u00e9tiquette \u00e0 chaque axe. Consultez les tutoriels de studio de graphique pour en savoir plus. Au fur et \u00e0 mesure que vous personnalisez le widget, n\u2019oubliez pas de cliquer r\u00e9guli\u00e8rement sur le bouton \u2018Enregistrer\u2019 au-dessus du widget pour conserver votre configuration.","title":"Graphiques avanc\u00e9s"},{"location":"widget-custom/#copier-dans-le-presse-papiers","text":"Copier dans le presse-papiers copie une valeur de la colonne sp\u00e9cifi\u00e9e de l\u2019enregistrement s\u00e9lectionn\u00e9. Lors de la configuration du widget, vous devrez s\u00e9lectionner la colonne \u00e0 partir de laquelle vous souhaitez copier des donn\u00e9es. Notez que vous pouvez \u00e9galement copier des donn\u00e9es d\u2019une cellule s\u00e9lectionn\u00e9e en utilisant le raccourci clavier Ctrl + C sur Windows ou \u2318 + C sur Mac. Pour coller, utilisez Ctrl + V ou \u2318 + V . Vous pouvez trouver un exemple du bouton copier dans le presse-papiers dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le. Vous pouvez \u00e9galement regarder une vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Copier dans le presse-papiers"},{"location":"widget-custom/#integrateur-dropbox","text":"Voir et acc\u00e9der aux fichiers enregistr\u00e9s sur Dropbox. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table pour stocker vos liens Dropbox. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les liens Dropbox et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Int\u00e9grateur Dropbox\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018Lien Dropbox\u2019, s\u00e9lectionnez la colonne qui contient vos liens Dropbox. Vous pouvez cr\u00e9er des liens vers des dossiers ou des fichiers sp\u00e9cifiques dans Dropbox. Cliquez sur \u2018Partager\u2019, puis d\u00e9finissez les permissions pour le lien. Vous pouvez choisir de permettre \u00e0 quiconque ayant le lien de visualiser ou d\u2019\u00e9diter. Cr\u00e9ez ensuite, puis copiez le lien. Collez ce lien dans votre colonne Lien Dropbox dans Grist. Notez que les utilisateurs ne peuvent pas modifier directement dans le widget personnalis\u00e9 m\u00eame si des permissions d\u2019\u00e9dition sont accord\u00e9es. Pour \u00e9diter, s\u00e9lectionnez l\u2019objet dans l\u2019int\u00e9grateur Dropbox et il s\u2019ouvrira dans un nouvel onglet o\u00f9 il pourra \u00eatre modifi\u00e9 directement dans Dropbox. Vous pouvez consulter un exemple de l\u2019int\u00e9grateur Dropbox dans notre Pr\u00e9paration \u00e0 l\u2019ouragan mod\u00e8le.","title":"Int\u00e9grateur Dropbox"},{"location":"widget-custom/#lecteur-video-grist","text":"Int\u00e9grez des vid\u00e9os provenant de sources en ligne telles que YouTube, Vimeo, Facebook Video, Google Drive et plus encore. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table pour stocker vos URL vid\u00e9o. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les URL vid\u00e9o et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Lecteur vid\u00e9o Grist\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018URL\u2019, s\u00e9lectionnez la colonne qui contient vos URL vid\u00e9o. Pour la plupart des vid\u00e9os en ligne, y compris les vid\u00e9os YouTube et les vid\u00e9os stock\u00e9es sur Google Drive, vous pouvez simplement cliquer sur l\u2019option \u2018Partager\u2019 et copier l\u2019URL. Pour certaines autres vid\u00e9os, vous pourriez voir cette erreur : Si cela se produit, vous devrez prendre l\u2019URL \u00e0 partir du code d\u2019int\u00e9gration. Apr\u00e8s avoir cliqu\u00e9 sur l\u2019option de partage de la vid\u00e9o, cliquez sur l\u2019option \u2018Int\u00e9grer\u2019. Ensuite, cliquez pour copier le code. Le code qu\u2019il vous donne ressemblera \u00e0 ceci : Copiez l\u2019URL qui se trouve entre les guillemets apr\u00e8s src . La portion mise en surbrillance dans la capture d\u2019\u00e9cran ci-dessous est ce que vous copieriez pour cette vid\u00e9o Facebook particuli\u00e8re. Collez cette URL dans votre colonne URL dans Grist et la vid\u00e9o appara\u00eetra maintenant dans le widget personnalis\u00e9 Lecteur vid\u00e9o Grist.","title":"Lecteur vid\u00e9o Grist"},{"location":"widget-custom/#visionneuse-html","text":"La visionneuse HTML affiche du HTML \u00e9crit dans une cellule. Pour des widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s Markdown et Bloc-notes . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous \u00e9crirez du HTML. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient le HTML et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Visionneuse HTML\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018HTML\u2019, s\u00e9lectionnez la colonne de texte qui contient votre HTML. Votre HTML sera visible dans le widget personnalis\u00e9. Pour obtenir de l\u2019aide sur le formatage HTML, consultez ce guide de W3 Schools : Formatage de texte HTML Vous pouvez trouver un exemple de la visionneuse HTML dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le. Vous pouvez \u00e9galement regarder une vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Visionneuse HTML"},{"location":"widget-custom/#visionneuse-dimages","text":"Voir des images \u00e0 partir d\u2019URL. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous ajouterez l\u2019URL de votre image. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient l\u2019URL de l\u2019image et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Visionneuse d\u2019images\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018URL de l\u2019image\u2019, s\u00e9lectionnez la colonne qui contient les URL de vos images. Pour copier l\u2019URL d\u2019une image, faites un clic droit sur la photo puis \u2018Copier l\u2019adresse de l\u2019image\u2019. Cela copie l\u2019URL dans votre presse-papiers. Collez cette URL dans votre colonne sp\u00e9cifi\u00e9e dans Grist. De plus, vous pouvez ajouter plusieurs images pour un enregistrement sp\u00e9cifique en ajoutant plusieurs URL d\u2019images, s\u00e9par\u00e9es par un espace ou une nouvelle ligne, dans une seule cellule. Veuillez noter qu\u2019une virgule ne fonctionnera pas pour s\u00e9parer les liens. Lorsque plusieurs URL d\u2019images sont pr\u00e9sentes, le widget personnalis\u00e9 visionneuse d\u2019images fonctionnera comme un carrousel. Cliquez sur les fl\u00e8ches pour voir d\u2019autres images. Pour un exemple du widget visionneuse d\u2019images, consultez notre Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis , et ajoutez une critique de parc pendant que vous y \u00eates ! Vous pouvez \u00e9galement consulter notre mod\u00e8le G\u00e9n\u00e9rateur de m\u00e8mes pour un autre excellent exemple. Pour une vid\u00e9o explicative, assurez-vous de regarder notre Webinaire sur les widgets personnalis\u00e9s !","title":"Visionneuse d’images"},{"location":"widget-custom/#notebook-jupyterlite","text":"Ce widget vous permet d\u2019ex\u00e9cuter du code Python personnalis\u00e9 dans JupyterLite , une version de JupyterLab fonctionnant enti\u00e8rement dans le navigateur. Vous pouvez utiliser la pleine API de plugin de widget personnalis\u00e9e et acc\u00e9der ou modifier n\u2019importe quelles donn\u00e9es dans le document (sous r\u00e9serve des R\u00e8gles d\u2019acc\u00e8s), d\u00e9bloquant presque des possibilit\u00e9s illimit\u00e9es pour les utilisateurs avanc\u00e9s. Vous serez pr\u00e9sent\u00e9 avec un notebook o\u00f9 vous pouvez entrer et ex\u00e9cuter du code Python, par exemple : Apr\u00e8s avoir tap\u00e9 du code dans une cellule, cliquez sur le bouton de lecture ou appuyez sur Shift+Entr\u00e9e pour ex\u00e9cuter cette cellule. Contrairement aux formules, le code n\u2019est pas enregistr\u00e9 automatiquement. Vous devez appuyer sur le bouton \u2018Enregistrer\u2019 habituel au-dessus du widget (en dehors du notebook) pour conserver le code dans votre document Grist. D\u2019autre part, les modifications des param\u00e8tres dans le notebook (par exemple, les raccourcis clavier) sont enregistr\u00e9es dans le stockage local de votre navigateur, donc elles ne sont pas partag\u00e9es avec d\u2019autres utilisateurs du document. Un objet sp\u00e9cial appel\u00e9 grist est automatiquement disponible pour \u00eatre utilis\u00e9 dans le code Python, qui refl\u00e8te de nombreuses m\u00e9thodes courantes de l\u2019API de plugin JS . Notez que beaucoup de ces m\u00e9thodes sont asynchrones, donc vous devriez utiliser await avant de les appeler. async fetch_selected_table() : renvoie les donn\u00e9es de la table soutenant le widget notebook. async fetch_selected_record(row_id=None) : renvoie un enregistrement de la table soutenant le widget notebook. Si row_id est sp\u00e9cifi\u00e9, renvoie l\u2019enregistrement \u00e0 cette ligne. Sinon, renvoie l\u2019enregistrement \u00e0 la position actuelle du curseur dans un widget li\u00e9 au widget notebook. async fetch_table(table_id) : renvoie les donn\u00e9es de la table sp\u00e9cifi\u00e9e. Notez que cela diff\u00e8re de fetch_selected_table (m\u00eame pour la m\u00eame table) de plusieurs mani\u00e8res : Le widget doit avoir un acc\u00e8s complet au document. Toutes les colonnes sont incluses, tandis que fetch_selected_table exclut les colonnes qui sont cach\u00e9es dans la configuration du widget. Toutes les lignes sont incluses, tandis que fetch_selected_table prend en compte les filtres du widget et \u2018S\u00c9LECTIONNER PAR\u2019. Les donn\u00e9es ne sont pas tri\u00e9es selon la configuration du widget. Les donn\u00e9es sont r\u00e9cup\u00e9r\u00e9es depuis le serveur, donc la m\u00e9thode peut \u00eatre plus lente. Les valeurs pour les colonnes de r\u00e9f\u00e9rence sont des ID de ligne de la table r\u00e9f\u00e9renc\u00e9e, tandis que fetch_selected_table renvoie les valeurs affich\u00e9es en fonction de la configuration \u2018AFFICHER LA COLONNE\u2019. on_record(callback) : enregistre une fonction de rappel \u00e0 ex\u00e9cuter lorsque le curseur se d\u00e9place dans un widget li\u00e9 au widget notebook, c\u2019est-\u00e0-dire le widget choisi dans le menu d\u00e9roulant \u201cS\u00c9LECTIONNER PAR\u201d dans la section Donn\u00e9es de la configuration du widget. La fonction de rappel recevra l\u2019enregistrement \u00e0 la position actuelle du curseur. Vous pouvez \u00e9galement l\u2019utiliser comme d\u00e9corateur, c\u2019est-\u00e0-dire @grist.on_record . on_records(callback) : similaire \u00e0 on_record , mais s\u2019ex\u00e9cute lorsque les donn\u00e9es source du widget changent. La fonction de rappel recevra les m\u00eames donn\u00e9es que celles renvoy\u00e9es par fetch_selected_table . get_table(table_id) : renvoie une classe TableOperations similaire \u00e0 l\u2019interface de l\u2019API de plugin JS habituelle pour effectuer des op\u00e9rations de type CRUD sur une table. Voir la documentation de l\u2019API de plugin pour les d\u00e9tails sur les param\u00e8tres. La classe a les m\u00e9thodes suivantes : async create(records, parse_strings=True) async update(records, parse_strings=True) async upsert(records, parse_strings=True, add=True, update=True, on_many=\"first\", allow_empty_require=False) async destroy(row_ids) Vous pouvez \u00e9galement utiliser grist.raw pour un acc\u00e8s direct \u00e0 l\u2019API de plugin, par exemple await grist.raw.docApi.fetchTable(table_id) . Cela peut renvoyer des valeurs de cellule brutes que vous pouvez d\u00e9coder avec grist.decode_cell_value(value) . Vous pouvez utiliser de nombreuses (mais pas toutes) biblioth\u00e8ques tierces dans votre notebook, comme pandas . Beaucoup seront install\u00e9es automatiquement lorsqu\u2019elles seront import\u00e9es. D\u2019autres n\u00e9cessiteront d\u2019ex\u00e9cuter %pip install dans une cellule, par exemple %pip install pandas . Notez que c\u2019est %pip et non !pip comme dans un notebook Jupyter classique.","title":"Notebook JupyterLite"},{"location":"widget-custom/#carte","text":"Le widget de carte personnalis\u00e9 vous permet d\u2019afficher des emplacements en utilisant des coordonn\u00e9es de latitude et de longitude. Si vos donn\u00e9es sont une adresse, plut\u00f4t qu\u2019au format lat-long, Grist peut convertir l\u2019adresse en coordonn\u00e9es lat-long. Si vous utilisez des coordonn\u00e9es lat-long existantes, vous aurez besoin de trois colonnes : Nom, Longitude et Latitude. Si vous utilisez une adresse, vous aurez besoin de six colonnes : Nom, Adresse, G\u00e9ocodage, Longitude, Latitude et Adresse g\u00e9ocod\u00e9e. G\u00e9ocodage est une colonne de type bascule qui doit \u00eatre d\u00e9finie sur vrai pour tout enregistrement que vous souhaitez convertir d\u2019adresse en coordonn\u00e9es lat-long \u00e0 afficher sur la carte. Si vous souhaitez convertir tous les enregistrements, vous pouvez faire de G\u00e9ocodage une colonne de formule avec la formule = True . Cela marquera tous les enregistrements comme vrais. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les adresses ou les coordonn\u00e9es lat-long et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Carte\u2019 dans le menu d\u00e9roulant Personnalis\u00e9. Si vous avez d\u00e9j\u00e0 des coordonn\u00e9es lat-long , vous pouvez d\u00e9finir votre niveau d\u2019acc\u00e8s sur Lire la table s\u00e9lectionn\u00e9e . Si vous utilisez une adresse et qu\u2019elle doit \u00eatre convertie en coordonn\u00e9es lat-long, vous devrez d\u00e9finir votre niveau d\u2019acc\u00e8s sur Acc\u00e8s complet au document car le widget a besoin de la permission d\u2019\u00e9crire dans votre document afin d\u2019ajouter des coordonn\u00e9es lat-long. Mappez toutes les colonnes requises. Notez que Nom, Longitude et Latitude sont \u00e9tiquet\u00e9s comme requis. G\u00e9ocodage, Adresse et Adresse g\u00e9ocod\u00e9e sont list\u00e9s comme optionnels. Si vous utilisez des adresses et que vous avez besoin que Grist les convertisse en coordonn\u00e9es lat-long, vous devez mapper les six colonnes. Apr\u00e8s avoir mapp\u00e9 les colonnes n\u00e9cessaires et s\u00e9lectionn\u00e9 le niveau d\u2019acc\u00e8s appropri\u00e9, le widget de carte se remplira. Vous pouvez configurer la carte pour afficher uniquement l\u2019emplacement s\u00e9lectionn\u00e9 en cliquant sur l\u2019option \u2018Ouvrir la configuration\u2019 dans le panneau de cr\u00e9ation . Ensuite, d\u00e9cochez \u2018Tous les emplacements\u2019. Cliquez sur la coche verte en haut du widget pour enregistrer les param\u00e8tres de configuration mis \u00e0 jour. Consultez notre mod\u00e8le Cartographie des emplacements ou notre Liste de crowdsourcing pour deux excellents exemples ! Pour une vid\u00e9o explicative, consultez notre Webinaire sur les widgets personnalis\u00e9s .","title":"Carte"},{"location":"widget-custom/#markdown","text":"Le widget personnalis\u00e9 Markdown vous permet de formater du texte en utilisant Markdown tout en affichant le texte format\u00e9 dans un widget modifiable. Pour d\u2019autres widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s HTML et Bloc-notes . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que vous ajouterez votre texte qui sera format\u00e9 en utilisant Markdown. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient le texte format\u00e9 avec Markdown et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Markdown\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s complet au document . Comme le widget est \u00e9galement un \u00e9diteur, il a besoin de la permission d\u2019\u00e9crire dans le document. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne de texte qui contient le formatage Markdown. Tout formatage Markdown dans la colonne de texte sp\u00e9cifi\u00e9e s\u2019appliquera et sera visible et modifiable dans le widget personnalis\u00e9. Pour \u00e9diter le texte directement dans le widget, cliquez sur l\u2019ic\u00f4ne d\u2019\u00e9dition. Le texte reviendra \u00e0 afficher la syntaxe Markdown qui peut \u00eatre modifi\u00e9e directement dans le widget. Lorsqu\u2019il est en mode \u00e9dition, l\u2019ic\u00f4ne d\u2019\u00e9dition sera remplac\u00e9e par l\u2019ic\u00f4ne de sauvegarde. Assurez-vous de cliquer sur l\u2019ic\u00f4ne de sauvegarde pour enregistrer les modifications et revenir \u00e0 l\u2019affichage du texte format\u00e9. Pour obtenir de l\u2019aide sur le formatage Markdown, consultez le Guide Markdown pour la syntaxe de base. Ce guide est \u00e9galement accessible dans le widget Markdown en cliquant sur l\u2019ic\u00f4ne d\u2019information en haut du widget. Le guide s\u2019ouvrira dans un nouvel onglet de votre navigateur pour une r\u00e9f\u00e9rence facile. Vous pouvez trouver un exemple de l\u2019\u00e9diteur Markdown dans notre Webinaire 7 (Widgets personnalis\u00e9s) mod\u00e8le et consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Markdown"},{"location":"widget-custom/#bloc-notes","text":"Le widget Bloc-notes personnalis\u00e9 vous permet de formater du texte en utilisant un \u00e9diteur de texte enrichi. Pour d\u2019autres widgets d\u2019\u00e9dition de texte, consultez nos widgets personnalis\u00e9s HTML et Markdown . Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. C\u2019est l\u00e0 que les d\u00e9tails de notre texte format\u00e9 seront stock\u00e9s. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient la colonne que nous venons d\u2019ajouter et \u2018S\u00e9lectionner par\u2019 cette m\u00eame table. Pour configurer, s\u00e9lectionnez \u2018Bloc-notes\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s complet au document . Comme le widget est \u00e9galement un \u00e9diteur, il a besoin de la permission d\u2019\u00e9crire dans le document. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne cr\u00e9\u00e9e pour stocker notre texte format\u00e9. Si la colonne de texte que vous avez choisie sous Contenu a du texte existant, ce texte appara\u00eetra dans le widget Bloc-notes, pr\u00eat \u00e0 \u00eatre format\u00e9. Utilisez n\u2019importe quelle option montr\u00e9e ici pour formater votre texte. Comme vous pouvez le voir dans la capture d\u2019\u00e9cran ci-dessous, le code pour le texte format\u00e9 n\u2019est pas utile \u00e0 voir dans votre table. Vous \u00e9diterez le texte directement dans le widget Bloc-notes afin que vous puissiez cacher cette colonne de votre table de donn\u00e9es. Consultez notre Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis ou notre \ud83d\uded2 Liste de courses + Planificateur de repas pour deux excellents exemples de Bloc-notes ! Vous pouvez \u00e9galement consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"Bloc-notes"},{"location":"widget-custom/#etiquettes-dimpression","text":"Le widget personnalis\u00e9 \u00c9tiquettes d\u2019impression vous permet de personnaliser et d\u2019imprimer des \u00e9tiquettes directement \u00e0 partir de Grist. Pour commencer, ajoutez une nouvelle colonne \u00e0 votre table. Cette colonne contiendra le texte pour l\u2019\u00e9tiquette. Optionnellement, vous pouvez ajouter une deuxi\u00e8me colonne pour sp\u00e9cifier un nombre d\u2019\u00e9tiquettes, vous permettant d\u2019imprimer plus d\u2019une m\u00eame \u00e9tiquette sans avoir \u00e0 cr\u00e9er des enregistrements en double. Ensuite, ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page. Choisissez la table de donn\u00e9es qui contient les d\u00e9tails de l\u2019\u00e9tiquette. Pour configurer, s\u00e9lectionnez \u2018Impression d\u2019\u00e9tiquettes\u2019 dans le menu d\u00e9roulant Personnalis\u00e9 et autorisez l\u2019acc\u00e8s pour lire la table s\u00e9lectionn\u00e9e. Sous \u2018\u00c9tiquette\u2019, s\u00e9lectionnez la colonne qui contient le texte \u00e0 inclure sur les \u00e9tiquettes. Si vous souhaitez imprimer plus d\u2019une \u00e9tiquette, s\u00e9lectionnez la colonne qui contient le nombre d\u2019\u00e9tiquettes pour chaque enregistrement que vous souhaitez imprimer. Vous pouvez choisir parmi des tailles de feuille standard dans le menu d\u00e9roulant en haut \u00e0 gauche du widget. Assurez-vous d\u2019enregistrer les modifications en cliquant sur la coche verte en haut \u00e0 droite du widget. Pour laisser des \u00e9tiquettes vides au d\u00e9but de la feuille, cliquez sur l\u2019ic\u00f4ne de param\u00e8tres puis sp\u00e9cifiez combien d\u2019\u00e9tiquettes doivent rester vides. Cela est particuli\u00e8rement utile si une partie de votre feuille d\u2019\u00e9tiquettes a d\u00e9j\u00e0 \u00e9t\u00e9 utilis\u00e9e. Vous pouvez sauter les \u00e9tiquettes utilis\u00e9es et commencer \u00e0 imprimer sur votre premi\u00e8re \u00e9tiquette inutilis\u00e9e. Consultez notre mod\u00e8le Impression d\u2019\u00e9tiquettes d\u2019exp\u00e9dition et notre mod\u00e8le Chasse au tr\u00e9sor pour deux excellents exemples ! Vous pouvez \u00e9galement consulter cette vid\u00e9o explicative de notre Webinaire sur les widgets personnalis\u00e9s .","title":"\u00c9tiquettes d’impression"},{"location":"widget-form/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue fiche : Formulaire # La vue formulaire vous permet de collecter des donn\u00e9es dans une vue formulaire qui remplit votre table de donn\u00e9es Grist lors de la soumission. Configurer vos donn\u00e9es # Cr\u00e9ez une table contenant les colonnes de donn\u00e9es que vous souhaitez remplir via le formulaire. Cr\u00e9er votre formulaire # Ajoutez une vue formulaire depuis le menu \u201cAjouter nouveau\u201d. S\u00e9lectionnez la table de donn\u00e9es que vous souhaitez remplir avec les donn\u00e9es du formulaire. Ensuite, personnalisez le formulaire \u00e0 votre guise ! Par d\u00e9faut, la vue formulaire inclura des \u00e9l\u00e9ments pour les en-t\u00eates et les descriptions ainsi que toutes les colonnes (champs) de la table de donn\u00e9es sous-jacente. Ajouter et supprimer des \u00e9l\u00e9ments # Pour ajouter des \u00e9l\u00e9ments suppl\u00e9mentaires au formulaire, cliquez sur l\u2019ic\u00f4ne + en bas du formulaire. Dans le menu, vous pouvez ajouter les \u00e9l\u00e9ments suivants : Nouvelle question : S\u00e9lectionnez un type de colonne pour cr\u00e9er un nouveau champ. \u201c\u2022\u2022\u2022 Plus >\u201d ouvrira un menu \u00e9tendu listant tous les types de colonnes. Ajouter une nouvelle question ajoutera une nouvelle colonne \u00e0 la table de donn\u00e9es sous-jacente. Champs non appari\u00e9s : Liste tous les champs cach\u00e9s de la table de donn\u00e9es sous-jacente. Blocs de construction : Personnalisez davantage en ajoutant ces \u00e9l\u00e9ments suppl\u00e9mentaires ! Vous pouvez supprimer tout \u00e9l\u00e9ment du formulaire en survolant l\u2019objet et en cliquant sur l\u2019ic\u00f4ne de la corbeille pour supprimer. Vous pouvez masquer tout champ inutile du formulaire en survolant l\u2019objet et en cliquant sur l\u2019ic\u00f4ne x. Configurer les champs # Vous pouvez fournir des titres alternatifs pour vos champs de formulaire, plut\u00f4t que d\u2019utiliser le m\u00eame nom de colonne de la table de donn\u00e9es sous-jacente. Par exemple, sur notre formulaire, nous avons un bouton bascule intitul\u00e9 \u201cPouvons-nous vous contacter ?\u201d. Dans la table de donn\u00e9es, cette colonne est \u00e9tiquet\u00e9e \u201cOk pour contacter ?\u201d. Les titres des champs peuvent \u00eatre configur\u00e9s sous l\u2019onglet \u201cChamp\u201d du panneau de cr\u00e9ation. Pour rendre un champ de formulaire obligatoire, cochez la case \u00e0 c\u00f4t\u00e9 de \u201cChamp obligatoire\u201d. Si un utilisateur tente de soumettre un formulaire sans remplir le champ obligatoire, il recevra une alerte pour remplir le champ. Configurer les blocs de construction # Les blocs de construction En-t\u00eate et Paragraphe peuvent \u00eatre \u00e9dit\u00e9s soit directement dans le bloc, soit depuis le panneau de cr\u00e9ation. Dans le panneau de cr\u00e9ation, vous avez des options d\u2019alignement de texte disponibles. Pour un formatage suppl\u00e9mentaire, les deux \u00e9l\u00e9ments permettent l\u2019utilisation du formatage Markdown. Pour obtenir de l\u2019aide sur le formatage Markdown, consultez le Guide Markdown . Formatage HTML Les balises HTML peuvent \u00eatre utilis\u00e9es dans le texte format\u00e9 en Markdown. Assurez-vous de s\u00e9parer les \u00e9l\u00e9ments HTML de niveau bloc comme
    et

    des autres \u00e9l\u00e9ments en utilisant des lignes vides. Configurer les options de soumission # Vous avez \u00e9galement la possibilit\u00e9 de configurer diff\u00e9rents param\u00e8tres pour le bouton \u201cSoumettre\u201d. Vous pouvez changer l\u2019\u00e9tiquette du bouton, mettre \u00e0 jour le texte de succ\u00e8s qui appara\u00eet apr\u00e8s la soumission d\u2019un formulaire et choisir d\u2019autoriser plusieurs soumissions de formulaire. Vous avez \u00e9galement la possibilit\u00e9 de s\u00e9lectionner une URL sp\u00e9cifique vers laquelle rediriger apr\u00e8s la soumission. Ces options sont toutes disponibles sous l\u2019onglet \u201cFormulaire\u201d et le sous-onglet \u201cSoumission\u201d du panneau de cr\u00e9ation. Publier votre formulaire # Une fois que vous avez termin\u00e9 de personnaliser votre formulaire, vous avez la possibilit\u00e9 de pr\u00e9visualiser votre formulaire avant de le publier. La pr\u00e9visualisation vous permettra de voir \u00e0 quoi ressemblera votre formulaire pour les utilisateurs finaux, sans le rendre disponible pour l\u2019utilisation. Apr\u00e8s avoir confirm\u00e9 que tout est comme vous le souhaitez, vous pouvez publier votre formulaire. Notez que seuls les utilisateurs ayant un acc\u00e8s \u201cPROPRI\u00c9TAIRE\u201d ont la permission de publier un formulaire. La premi\u00e8re fois que vous publiez un formulaire, la popup d\u2019information suivante appara\u00eetra, expliquant les permissions qu\u2019un formulaire publi\u00e9 accorde. Une fois qu\u2019un formulaire a \u00e9t\u00e9 publi\u00e9, un bouton appara\u00eetra pour copier le lien vers le formulaire. Partagez ce lien avec les utilisateurs finaux pour qu\u2019ils remplissent votre formulaire ! Vous avez \u00e9galement la possibilit\u00e9 de d\u00e9publier votre formulaire. Notez que d\u00e9publier le formulaire d\u00e9sactivera le lien de partage. Les utilisateurs acc\u00e9dant au formulaire via ce lien verront alors une erreur. Soumissions de formulaire # Apr\u00e8s avoir partag\u00e9 le lien vers votre formulaire publi\u00e9, les utilisateurs finaux peuvent soumettre des donn\u00e9es \u00e0 votre document Grist via le formulaire. Toutes les donn\u00e9es soumises appara\u00eetront dans votre table de donn\u00e9es sous-jacente dans votre document Grist ! Collecter des donn\u00e9es n\u2019a jamais \u00e9t\u00e9 aussi facile. \ud83d\ude0d","title":"Form"},{"location":"widget-form/#vue-fiche-formulaire","text":"La vue formulaire vous permet de collecter des donn\u00e9es dans une vue formulaire qui remplit votre table de donn\u00e9es Grist lors de la soumission.","title":"Vue fiche : Formulaire"},{"location":"widget-form/#configurer-vos-donnees","text":"Cr\u00e9ez une table contenant les colonnes de donn\u00e9es que vous souhaitez remplir via le formulaire.","title":"Configurer vos donn\u00e9es"},{"location":"widget-form/#creer-votre-formulaire","text":"Ajoutez une vue formulaire depuis le menu \u201cAjouter nouveau\u201d. S\u00e9lectionnez la table de donn\u00e9es que vous souhaitez remplir avec les donn\u00e9es du formulaire. Ensuite, personnalisez le formulaire \u00e0 votre guise ! Par d\u00e9faut, la vue formulaire inclura des \u00e9l\u00e9ments pour les en-t\u00eates et les descriptions ainsi que toutes les colonnes (champs) de la table de donn\u00e9es sous-jacente.","title":"Cr\u00e9er votre formulaire"},{"location":"widget-form/#ajouter-et-supprimer-des-elements","text":"Pour ajouter des \u00e9l\u00e9ments suppl\u00e9mentaires au formulaire, cliquez sur l\u2019ic\u00f4ne + en bas du formulaire. Dans le menu, vous pouvez ajouter les \u00e9l\u00e9ments suivants : Nouvelle question : S\u00e9lectionnez un type de colonne pour cr\u00e9er un nouveau champ. \u201c\u2022\u2022\u2022 Plus >\u201d ouvrira un menu \u00e9tendu listant tous les types de colonnes. Ajouter une nouvelle question ajoutera une nouvelle colonne \u00e0 la table de donn\u00e9es sous-jacente. Champs non appari\u00e9s : Liste tous les champs cach\u00e9s de la table de donn\u00e9es sous-jacente. Blocs de construction : Personnalisez davantage en ajoutant ces \u00e9l\u00e9ments suppl\u00e9mentaires ! Vous pouvez supprimer tout \u00e9l\u00e9ment du formulaire en survolant l\u2019objet et en cliquant sur l\u2019ic\u00f4ne de la corbeille pour supprimer. Vous pouvez masquer tout champ inutile du formulaire en survolant l\u2019objet et en cliquant sur l\u2019ic\u00f4ne x.","title":"Ajouter et supprimer des \u00e9l\u00e9ments"},{"location":"widget-form/#configurer-les-champs","text":"Vous pouvez fournir des titres alternatifs pour vos champs de formulaire, plut\u00f4t que d\u2019utiliser le m\u00eame nom de colonne de la table de donn\u00e9es sous-jacente. Par exemple, sur notre formulaire, nous avons un bouton bascule intitul\u00e9 \u201cPouvons-nous vous contacter ?\u201d. Dans la table de donn\u00e9es, cette colonne est \u00e9tiquet\u00e9e \u201cOk pour contacter ?\u201d. Les titres des champs peuvent \u00eatre configur\u00e9s sous l\u2019onglet \u201cChamp\u201d du panneau de cr\u00e9ation. Pour rendre un champ de formulaire obligatoire, cochez la case \u00e0 c\u00f4t\u00e9 de \u201cChamp obligatoire\u201d. Si un utilisateur tente de soumettre un formulaire sans remplir le champ obligatoire, il recevra une alerte pour remplir le champ.","title":"Configurer les champs"},{"location":"widget-form/#configurer-les-blocs-de-construction","text":"Les blocs de construction En-t\u00eate et Paragraphe peuvent \u00eatre \u00e9dit\u00e9s soit directement dans le bloc, soit depuis le panneau de cr\u00e9ation. Dans le panneau de cr\u00e9ation, vous avez des options d\u2019alignement de texte disponibles. Pour un formatage suppl\u00e9mentaire, les deux \u00e9l\u00e9ments permettent l\u2019utilisation du formatage Markdown. Pour obtenir de l\u2019aide sur le formatage Markdown, consultez le Guide Markdown . Formatage HTML Les balises HTML peuvent \u00eatre utilis\u00e9es dans le texte format\u00e9 en Markdown. Assurez-vous de s\u00e9parer les \u00e9l\u00e9ments HTML de niveau bloc comme

    et

    des autres \u00e9l\u00e9ments en utilisant des lignes vides.","title":"Configurer les blocs de construction"},{"location":"widget-form/#configurer-les-options-de-soumission","text":"Vous avez \u00e9galement la possibilit\u00e9 de configurer diff\u00e9rents param\u00e8tres pour le bouton \u201cSoumettre\u201d. Vous pouvez changer l\u2019\u00e9tiquette du bouton, mettre \u00e0 jour le texte de succ\u00e8s qui appara\u00eet apr\u00e8s la soumission d\u2019un formulaire et choisir d\u2019autoriser plusieurs soumissions de formulaire. Vous avez \u00e9galement la possibilit\u00e9 de s\u00e9lectionner une URL sp\u00e9cifique vers laquelle rediriger apr\u00e8s la soumission. Ces options sont toutes disponibles sous l\u2019onglet \u201cFormulaire\u201d et le sous-onglet \u201cSoumission\u201d du panneau de cr\u00e9ation.","title":"Configurer les options de soumission"},{"location":"widget-form/#publier-votre-formulaire","text":"Une fois que vous avez termin\u00e9 de personnaliser votre formulaire, vous avez la possibilit\u00e9 de pr\u00e9visualiser votre formulaire avant de le publier. La pr\u00e9visualisation vous permettra de voir \u00e0 quoi ressemblera votre formulaire pour les utilisateurs finaux, sans le rendre disponible pour l\u2019utilisation. Apr\u00e8s avoir confirm\u00e9 que tout est comme vous le souhaitez, vous pouvez publier votre formulaire. Notez que seuls les utilisateurs ayant un acc\u00e8s \u201cPROPRI\u00c9TAIRE\u201d ont la permission de publier un formulaire. La premi\u00e8re fois que vous publiez un formulaire, la popup d\u2019information suivante appara\u00eetra, expliquant les permissions qu\u2019un formulaire publi\u00e9 accorde. Une fois qu\u2019un formulaire a \u00e9t\u00e9 publi\u00e9, un bouton appara\u00eetra pour copier le lien vers le formulaire. Partagez ce lien avec les utilisateurs finaux pour qu\u2019ils remplissent votre formulaire ! Vous avez \u00e9galement la possibilit\u00e9 de d\u00e9publier votre formulaire. Notez que d\u00e9publier le formulaire d\u00e9sactivera le lien de partage. Les utilisateurs acc\u00e9dant au formulaire via ce lien verront alors une erreur.","title":"Publier votre formulaire"},{"location":"widget-form/#soumissions-de-formulaire","text":"Apr\u00e8s avoir partag\u00e9 le lien vers votre formulaire publi\u00e9, les utilisateurs finaux peuvent soumettre des donn\u00e9es \u00e0 votre document Grist via le formulaire. Toutes les donn\u00e9es soumises appara\u00eetront dans votre table de donn\u00e9es sous-jacente dans votre document Grist ! Collecter des donn\u00e9es n\u2019a jamais \u00e9t\u00e9 aussi facile. \ud83d\ude0d","title":"Soumissions de formulaire"},{"location":"widget-table/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Vue Table: Tableau # La Table vue est une grille polyvalente semblable \u00e0 une feuille de calcul. Voici quelques fonctionnalit\u00e9s utiles \u00e0 conna\u00eetre. Op\u00e9rations sur les colonnes # Redimensionner les colonnes : Cliquez sur la ligne entre les en-t\u00eates de colonne et faites-la glisser pour redimensionner les colonnes. R\u00e9organiser les colonnes : Avec une colonne s\u00e9lectionn\u00e9e, faites glisser son en-t\u00eate pour la d\u00e9placer \u00e0 un autre endroit par rapport aux autres colonnes. (Vous pouvez \u00e9galement le faire en r\u00e9organisant les champs dans le panneau d\u2019options de la vue.) Renommer les colonnes : Avec une colonne s\u00e9lectionn\u00e9e, cliquez sur son en-t\u00eate pour la renommer. Appuyez sur Entr\u00e9e pour enregistrer le nouveau nom. Ajouter des colonnes : Cliquez sur l\u2019ic\u00f4ne \u201c+\u201d \u00e0 droite de tous les en-t\u00eates de colonne pour ajouter une nouvelle colonne ou afficher l\u2019une des colonnes masqu\u00e9es. Le menu de la colonne permet \u00e9galement d\u2019ins\u00e9rer une nouvelle colonne \u00e0 c\u00f4t\u00e9 d\u2019une colonne existante, tout comme les raccourcis clavier Alt + + (ins\u00e9rer avant) et Alt + = (ins\u00e9rer apr\u00e8s). Apr\u00e8s avoir ajout\u00e9 une colonne, le nom de la colonne (d\u00e9fini par d\u00e9faut sur \u201cA\u201d, \u201cB\u201d, \u201cC\u201d, etc.) est imm\u00e9diatement s\u00e9lectionn\u00e9 et mis en surbrillance pour vous permettre de le renommer rapidement. Tapez simplement le nouveau nom et appuyez sur Entr\u00e9e , ou appuyez sur \u00c9chap pour conserver le nom par d\u00e9faut. Masquer les colonnes : D\u00e9placez la souris sur l\u2019en-t\u00eate de la colonne et cliquez sur le triangle pour ouvrir le menu de la colonne. Cliquez sur \u201cMasquer la colonne\u201d pour masquer la colonne. La colonne reste dans les donn\u00e9es sous-jacentes et peut \u00eatre affich\u00e9e \u00e0 nouveau en utilisant l\u2019ic\u00f4ne \u201c+\u201d \u00e0 droite des en-t\u00eates de colonne, ou la liste des champs dans le panneau d\u2019options de la vue. Supprimer les colonnes : Supprimez la colonne de donn\u00e9es r\u00e9elle en utilisant l\u2019option du menu de la colonne ou le raccourci clavier Alt + Moins . Le tableau est la seule vue qui permet de supprimer une colonne. Remarque : supprimer et masquer sont diff\u00e9rents. Masquer une colonne la retire uniquement de la vue actuelle, mais la laisse dans les donn\u00e9es et disponible pour les formules. Supprimer une colonne la retire de partout. (Bien s\u00fbr, la fonction d\u2019annulation fonctionne toujours pour l\u2019une ou l\u2019autre op\u00e9ration !) Op\u00e9rations sur les lignes # Ajouter des lignes : Tapez dans la derni\u00e8re ligne d\u2019un tableau, qui est mise en surbrillance pour indiquer qu\u2019elle est un espace r\u00e9serv\u00e9 pour l\u2019ajout de nouveaux enregistrements. Faites un clic droit sur un num\u00e9ro de ligne pour ins\u00e9rer une ligne vide \u00e0 c\u00f4t\u00e9 d\u2019une ligne existante, ou utilisez les raccourcis clavier \u2318 \u21e7 = (Mac) ou Ctrl + Shift + = (Windows) pour ins\u00e9rer avant, et \u2318 = (Mac) ou Ctrl + = (Windows) pour ins\u00e9rer apr\u00e8s. Supprimer des lignes : Faites un clic droit sur un num\u00e9ro de ligne et s\u00e9lectionnez l\u2019option \u201cSupprimer\u201d pour supprimer une ligne, ou utilisez le raccourci \u2318 + Moins (Mac) ou Ctrl + Moins (Windows). Si vous s\u00e9lectionnez une intervalle de cellules d\u2019abord, l\u2019une ou l\u2019autre de ces actions de suppression supprimera toutes les lignes incluses dans l\u2019intervalle. Lien vers des lignes : Faites un clic droit sur un num\u00e9ro de ligne et s\u00e9lectionnez \u201cCopier le lien d\u2019ancrage\u201d pour copier un lien vers la cellule s\u00e9lectionn\u00e9e de cette ligne. Le lien sera plac\u00e9 dans votre presse-papiers, pr\u00eat \u00e0 \u00eatre coll\u00e9 dans un e-mail ou une application de messagerie instantan\u00e9e. Le lien ne s\u2019ouvrira que pour les personnes ayant acc\u00e8s au document. Navigation et s\u00e9lection # Naviguer en utilisant les raccourcis : Utilisez les raccourcis clavier pour naviguer dans la grille : Tab , Shift + Tab D\u00e9placez-vous vers la colonne suivante ou pr\u00e9c\u00e9dente, en enregistrant les modifications si vous \u00e9ditez une cellule. \u2318 + Haut (Mac) ou Ctrl + Haut (Windows) D\u00e9placez-vous vers la premi\u00e8re ligne. \u2318 + Bas (Mac) ou Ctrl + Bas (Windows) D\u00e9placez-vous vers la derni\u00e8re ligne. Accueil ou Fn + \u2190 (Mac) D\u00e9placez-vous au d\u00e9but d\u2019une ligne. Fin ou Fn + \u2192 (Mac) D\u00e9placez-vous \u00e0 la fin d\u2019une ligne. PageDown ou Fn + \u2193 (Mac) D\u00e9placez-vous d\u2019une page de lignes vers le bas. PageUp ou Fn + \u2191 (Mac) D\u00e9placez-vous d\u2019une page de lignes vers le haut. Alt + Bas , Alt + Haut D\u00e9placez-vous de cinq lignes vers le bas ou vers le haut. S\u00e9lectionner des intervalles : Cliquez et faites glisser la souris sur la grille pour s\u00e9lectionner un intervalle de cellules \u00e0 copier (copier et coller en utilisant les raccourcis clavier habituels pour votre ordinateur). Une autre fa\u00e7on de s\u00e9lectionner un intervalle est de cliquer sur une cellule, puis de maintenir Shift tout en cliquant sur une autre cellule, ou tout en naviguant avec les touches fl\u00e9ch\u00e9es. Remplir les donn\u00e9es vers le bas : S\u00e9lectionnez un intervalle de cellules et appuyez sur \u2318 + D (Mac) ou Ctrl + D (Windows) pour remplir tout l\u2019intervalle s\u00e9lectionn\u00e9 avec les valeurs des cellules de la premi\u00e8re ligne de l\u2019intervalle. Personnalisation # Personnaliser l\u2019apparence du tableau : Dans le panneau d\u2019options de la vue, vous pouvez d\u00e9sactiver les lignes de grille horizontales ou verticales, ou activer le z\u00e9brage. Par exemple, cela vous permet de changer l\u2019apparence de votre grille en une liste comme celle-ci :","title":"Table widget"},{"location":"widget-table/#vue-table-tableau","text":"La Table vue est une grille polyvalente semblable \u00e0 une feuille de calcul. Voici quelques fonctionnalit\u00e9s utiles \u00e0 conna\u00eetre.","title":"Vue Table: Tableau"},{"location":"widget-table/#operations-sur-les-colonnes","text":"Redimensionner les colonnes : Cliquez sur la ligne entre les en-t\u00eates de colonne et faites-la glisser pour redimensionner les colonnes. R\u00e9organiser les colonnes : Avec une colonne s\u00e9lectionn\u00e9e, faites glisser son en-t\u00eate pour la d\u00e9placer \u00e0 un autre endroit par rapport aux autres colonnes. (Vous pouvez \u00e9galement le faire en r\u00e9organisant les champs dans le panneau d\u2019options de la vue.) Renommer les colonnes : Avec une colonne s\u00e9lectionn\u00e9e, cliquez sur son en-t\u00eate pour la renommer. Appuyez sur Entr\u00e9e pour enregistrer le nouveau nom. Ajouter des colonnes : Cliquez sur l\u2019ic\u00f4ne \u201c+\u201d \u00e0 droite de tous les en-t\u00eates de colonne pour ajouter une nouvelle colonne ou afficher l\u2019une des colonnes masqu\u00e9es. Le menu de la colonne permet \u00e9galement d\u2019ins\u00e9rer une nouvelle colonne \u00e0 c\u00f4t\u00e9 d\u2019une colonne existante, tout comme les raccourcis clavier Alt + + (ins\u00e9rer avant) et Alt + = (ins\u00e9rer apr\u00e8s). Apr\u00e8s avoir ajout\u00e9 une colonne, le nom de la colonne (d\u00e9fini par d\u00e9faut sur \u201cA\u201d, \u201cB\u201d, \u201cC\u201d, etc.) est imm\u00e9diatement s\u00e9lectionn\u00e9 et mis en surbrillance pour vous permettre de le renommer rapidement. Tapez simplement le nouveau nom et appuyez sur Entr\u00e9e , ou appuyez sur \u00c9chap pour conserver le nom par d\u00e9faut. Masquer les colonnes : D\u00e9placez la souris sur l\u2019en-t\u00eate de la colonne et cliquez sur le triangle pour ouvrir le menu de la colonne. Cliquez sur \u201cMasquer la colonne\u201d pour masquer la colonne. La colonne reste dans les donn\u00e9es sous-jacentes et peut \u00eatre affich\u00e9e \u00e0 nouveau en utilisant l\u2019ic\u00f4ne \u201c+\u201d \u00e0 droite des en-t\u00eates de colonne, ou la liste des champs dans le panneau d\u2019options de la vue. Supprimer les colonnes : Supprimez la colonne de donn\u00e9es r\u00e9elle en utilisant l\u2019option du menu de la colonne ou le raccourci clavier Alt + Moins . Le tableau est la seule vue qui permet de supprimer une colonne. Remarque : supprimer et masquer sont diff\u00e9rents. Masquer une colonne la retire uniquement de la vue actuelle, mais la laisse dans les donn\u00e9es et disponible pour les formules. Supprimer une colonne la retire de partout. (Bien s\u00fbr, la fonction d\u2019annulation fonctionne toujours pour l\u2019une ou l\u2019autre op\u00e9ration !)","title":"Op\u00e9rations sur les colonnes"},{"location":"widget-table/#operations-sur-les-lignes","text":"Ajouter des lignes : Tapez dans la derni\u00e8re ligne d\u2019un tableau, qui est mise en surbrillance pour indiquer qu\u2019elle est un espace r\u00e9serv\u00e9 pour l\u2019ajout de nouveaux enregistrements. Faites un clic droit sur un num\u00e9ro de ligne pour ins\u00e9rer une ligne vide \u00e0 c\u00f4t\u00e9 d\u2019une ligne existante, ou utilisez les raccourcis clavier \u2318 \u21e7 = (Mac) ou Ctrl + Shift + = (Windows) pour ins\u00e9rer avant, et \u2318 = (Mac) ou Ctrl + = (Windows) pour ins\u00e9rer apr\u00e8s. Supprimer des lignes : Faites un clic droit sur un num\u00e9ro de ligne et s\u00e9lectionnez l\u2019option \u201cSupprimer\u201d pour supprimer une ligne, ou utilisez le raccourci \u2318 + Moins (Mac) ou Ctrl + Moins (Windows). Si vous s\u00e9lectionnez une intervalle de cellules d\u2019abord, l\u2019une ou l\u2019autre de ces actions de suppression supprimera toutes les lignes incluses dans l\u2019intervalle. Lien vers des lignes : Faites un clic droit sur un num\u00e9ro de ligne et s\u00e9lectionnez \u201cCopier le lien d\u2019ancrage\u201d pour copier un lien vers la cellule s\u00e9lectionn\u00e9e de cette ligne. Le lien sera plac\u00e9 dans votre presse-papiers, pr\u00eat \u00e0 \u00eatre coll\u00e9 dans un e-mail ou une application de messagerie instantan\u00e9e. Le lien ne s\u2019ouvrira que pour les personnes ayant acc\u00e8s au document.","title":"Op\u00e9rations sur les lignes"},{"location":"widget-table/#navigation-et-selection","text":"Naviguer en utilisant les raccourcis : Utilisez les raccourcis clavier pour naviguer dans la grille : Tab , Shift + Tab D\u00e9placez-vous vers la colonne suivante ou pr\u00e9c\u00e9dente, en enregistrant les modifications si vous \u00e9ditez une cellule. \u2318 + Haut (Mac) ou Ctrl + Haut (Windows) D\u00e9placez-vous vers la premi\u00e8re ligne. \u2318 + Bas (Mac) ou Ctrl + Bas (Windows) D\u00e9placez-vous vers la derni\u00e8re ligne. Accueil ou Fn + \u2190 (Mac) D\u00e9placez-vous au d\u00e9but d\u2019une ligne. Fin ou Fn + \u2192 (Mac) D\u00e9placez-vous \u00e0 la fin d\u2019une ligne. PageDown ou Fn + \u2193 (Mac) D\u00e9placez-vous d\u2019une page de lignes vers le bas. PageUp ou Fn + \u2191 (Mac) D\u00e9placez-vous d\u2019une page de lignes vers le haut. Alt + Bas , Alt + Haut D\u00e9placez-vous de cinq lignes vers le bas ou vers le haut. S\u00e9lectionner des intervalles : Cliquez et faites glisser la souris sur la grille pour s\u00e9lectionner un intervalle de cellules \u00e0 copier (copier et coller en utilisant les raccourcis clavier habituels pour votre ordinateur). Une autre fa\u00e7on de s\u00e9lectionner un intervalle est de cliquer sur une cellule, puis de maintenir Shift tout en cliquant sur une autre cellule, ou tout en naviguant avec les touches fl\u00e9ch\u00e9es. Remplir les donn\u00e9es vers le bas : S\u00e9lectionnez un intervalle de cellules et appuyez sur \u2318 + D (Mac) ou Ctrl + D (Windows) pour remplir tout l\u2019intervalle s\u00e9lectionn\u00e9 avec les valeurs des cellules de la premi\u00e8re ligne de l\u2019intervalle.","title":"Navigation et s\u00e9lection"},{"location":"widget-table/#personnalisation","text":"Personnaliser l\u2019apparence du tableau : Dans le panneau d\u2019options de la vue, vous pouvez d\u00e9sactiver les lignes de grille horizontales ou verticales, ou activer le z\u00e9brage. Par exemple, cela vous permet de changer l\u2019apparence de votre grille en une liste comme celle-ci :","title":"Personnalisation"},{"location":"workspaces/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Espaces de travail # Les documents peuvent \u00eatre regroup\u00e9s dans des dossiers appel\u00e9s \u201cespaces de travail\u201d qui peuvent \u00eatre partag\u00e9s en tant qu\u2019unit\u00e9 unique avec d\u2019autres utilisateurs. Cela est pratique, par exemple, pour les documents li\u00e9s \u00e0 un seul projet. Lorsqu\u2019un site est cr\u00e9\u00e9 pour la premi\u00e8re fois, il poss\u00e8de un seul dossier appel\u00e9 \u201cHome\u201d. Vous pouvez renommer cet dossier si vous le souhaitez, en survolant le nom de l\u2019dossier dans la barre de gauche, en cliquant sur l\u2019ic\u00f4ne \u00e0 trois points, puis en s\u00e9lectionnant \u201cRenommer\u201d. Encore mieux, vous pouvez cr\u00e9er de nouveaux espaces de travail, afin de regrouper vos documents et de les partager en tant qu\u2019unit\u00e9. Pour ajouter un document \u00e0 un dossier sp\u00e9cifique, cliquez sur cet dossier dans la barre de gauche, puis s\u00e9lectionnez \u201cAjouter nouveau\u201d, puis \u201cCr\u00e9er un document vide\u201d (ou \u201cImporter un document\u201d). Pour d\u00e9placer un document d\u2019un dossier \u00e0 un autre, survolez le document, cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom du document, puis s\u00e9lectionnez \u201cD\u00e9placer\u201d. Vous aurez alors la possibilit\u00e9 de choisir l\u2019dossier souhait\u00e9. G\u00e9rer l\u2019acc\u00e8s # Sur les espaces d\u2019\u00e9quipe , les propri\u00e9taires d\u2019espaces de travail peuvent contr\u00f4ler qui a acc\u00e8s \u00e0 un dossier en utilisant \u201cG\u00e9rer les utilisateurs.\u201d Les contr\u00f4les sont similaires \u00e0 ceux pour partager des documents . Les espaces de travail dans les espaces personnels ne peuvent pas \u00eatre partag\u00e9s. Les visualisateurs d\u2019un espace d\u2019\u00e9quipe seront \u00e9galement des visualisateurs de tous ses espaces de travail. Il en va de m\u00eame pour les \u00e9diteurs et les propri\u00e9taires. Pour exclure un dossier de l\u2019h\u00e9ritage des visualisateurs, \u00e9diteurs et propri\u00e9taires de l\u2019espace d\u2019\u00e9quipe, d\u00e9finissez \u201cH\u00e9riter l\u2019acc\u00e8s\u201d sur \u201cAucun\u201d. Vous pouvez \u00e9galement le d\u00e9finir sur \u201cVisualisation uniquement\u201d pour limiter l\u2019h\u00e9ritage aux droits de visualisation, ou \u201cVisualisation & \u00c9dition\u201d pour limiter l\u2019h\u00e9ritage aux droits de visualisation et d\u2019\u00e9dition (en excluant le droit de contr\u00f4ler les options de partage). Il est possible d\u2019\u00eatre \u00e9diteur/propri\u00e9taire d\u2019un dossier et de ne pas pouvoir ouvrir tous les documents de cet dossier. Cela peut se produire si un propri\u00e9taire de document limite l\u2019h\u00e9ritage \u00e0 \u201cAucun\u201d. Vous verrez toujours le document list\u00e9, de sorte que si vous d\u00e9cidez de supprimer l\u2019dossier, vous saurez ce que vous supprimez. Les visualisateurs d\u2019un dossier ne verront que les documents auxquels ils ont acc\u00e8s list\u00e9s.","title":"Workspaces"},{"location":"workspaces/#espaces-de-travail","text":"Les documents peuvent \u00eatre regroup\u00e9s dans des dossiers appel\u00e9s \u201cespaces de travail\u201d qui peuvent \u00eatre partag\u00e9s en tant qu\u2019unit\u00e9 unique avec d\u2019autres utilisateurs. Cela est pratique, par exemple, pour les documents li\u00e9s \u00e0 un seul projet. Lorsqu\u2019un site est cr\u00e9\u00e9 pour la premi\u00e8re fois, il poss\u00e8de un seul dossier appel\u00e9 \u201cHome\u201d. Vous pouvez renommer cet dossier si vous le souhaitez, en survolant le nom de l\u2019dossier dans la barre de gauche, en cliquant sur l\u2019ic\u00f4ne \u00e0 trois points, puis en s\u00e9lectionnant \u201cRenommer\u201d. Encore mieux, vous pouvez cr\u00e9er de nouveaux espaces de travail, afin de regrouper vos documents et de les partager en tant qu\u2019unit\u00e9. Pour ajouter un document \u00e0 un dossier sp\u00e9cifique, cliquez sur cet dossier dans la barre de gauche, puis s\u00e9lectionnez \u201cAjouter nouveau\u201d, puis \u201cCr\u00e9er un document vide\u201d (ou \u201cImporter un document\u201d). Pour d\u00e9placer un document d\u2019un dossier \u00e0 un autre, survolez le document, cliquez sur l\u2019ic\u00f4ne \u00e0 trois points \u00e0 droite du nom du document, puis s\u00e9lectionnez \u201cD\u00e9placer\u201d. Vous aurez alors la possibilit\u00e9 de choisir l\u2019dossier souhait\u00e9.","title":"Espaces de travail"},{"location":"workspaces/#gerer-lacces","text":"Sur les espaces d\u2019\u00e9quipe , les propri\u00e9taires d\u2019espaces de travail peuvent contr\u00f4ler qui a acc\u00e8s \u00e0 un dossier en utilisant \u201cG\u00e9rer les utilisateurs.\u201d Les contr\u00f4les sont similaires \u00e0 ceux pour partager des documents . Les espaces de travail dans les espaces personnels ne peuvent pas \u00eatre partag\u00e9s. Les visualisateurs d\u2019un espace d\u2019\u00e9quipe seront \u00e9galement des visualisateurs de tous ses espaces de travail. Il en va de m\u00eame pour les \u00e9diteurs et les propri\u00e9taires. Pour exclure un dossier de l\u2019h\u00e9ritage des visualisateurs, \u00e9diteurs et propri\u00e9taires de l\u2019espace d\u2019\u00e9quipe, d\u00e9finissez \u201cH\u00e9riter l\u2019acc\u00e8s\u201d sur \u201cAucun\u201d. Vous pouvez \u00e9galement le d\u00e9finir sur \u201cVisualisation uniquement\u201d pour limiter l\u2019h\u00e9ritage aux droits de visualisation, ou \u201cVisualisation & \u00c9dition\u201d pour limiter l\u2019h\u00e9ritage aux droits de visualisation et d\u2019\u00e9dition (en excluant le droit de contr\u00f4ler les options de partage). Il est possible d\u2019\u00eatre \u00e9diteur/propri\u00e9taire d\u2019un dossier et de ne pas pouvoir ouvrir tous les documents de cet dossier. Cela peut se produire si un propri\u00e9taire de document limite l\u2019h\u00e9ritage \u00e0 \u201cAucun\u201d. Vous verrez toujours le document list\u00e9, de sorte que si vous d\u00e9cidez de supprimer l\u2019dossier, vous saurez ce que vous supprimez. Les visualisateurs d\u2019un dossier ne verront que les documents auxquels ils ont acc\u00e8s list\u00e9s.","title":"G\u00e9rer l’acc\u00e8s"},{"location":"examples/2020-06-book-club/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Listes de Livres avec Recherche en Biblioth\u00e8que et en Magasin # S\u2019il y a une chose meilleure que lire un livre, c\u2019est lire avec des amis. Organiser un club de lecture est assez simple. Le club fonctionnera mieux si tout le monde obtient effectivement le livre et a des opinions sur ce qu\u2019il faut lire la prochaine fois. Grist peut aider avec tout cela. Pour inciter tout le monde \u00e0 obtenir le livre, il est utile d\u2019avoir des liens pour emprunter le livre \u00e0 votre biblioth\u00e8que locale et pour acheter le livre dans votre magasin local (ou non local). Et pour des id\u00e9es sur ce qu\u2019il faut lire la prochaine fois, il est utile de pouvoir facilement sugg\u00e9rer des livres et de d\u00e9couvrir les livres que d\u2019autres sugg\u00e8rent via des sites comme GoodReads, Wikipedia et Amazon. Supposons que nous commencions par une simple table de livres, avec les titres des livres et les noms des auteurs. Pour emprunter ou acheter le livre, il est pr\u00e9f\u00e9rable d\u2019avoir son code ISBN unique, afin qu\u2019il n\u2019y ait aucune ambigu\u00eft\u00e9 ou confusion. Une chose que nous pouvons faire est d\u2019ajouter un lien pour rechercher un livre sur isbnsearch.org par son titre et son auteur. Pour ce faire, ajoutez une nouvelle colonne, puis d\u00e9finissez-la comme une colonne HyperLink : Ce que nous allons faire, c\u2019est remplir cette colonne en utilisant une formule qui prend le titre du livre et le nom de l\u2019auteur, et les utilise comme mots-cl\u00e9s pour rechercher sur le site isbnsearch.org . Voici la formule : import urllib keywords = ($Title or \"\") + \" \" + ($Author or \"\") \"[isbn] https://isbnsearch.org/search?s=\" + urllib.quote(keywords) Les URL avec des espaces, des apostrophes ou d\u2019autres lettres \u00e9tranges que vous pourriez trouver dans les noms n\u00e9cessitent un encodage sp\u00e9cial, nous avons donc utilis\u00e9 le module python urllib pour nous assurer que tout est encod\u00e9 correctement. Maintenant, nous avons un lien [isbn] pratique \u00e0 c\u00f4t\u00e9 de chaque livre : Nous pouvons cliquer sur la fl\u00e8che \u00e0 c\u00f4t\u00e9 de [isbn] , localiser le livre et noter son code ISBN dans une nouvelle colonne : Ensuite, nous pouvons l\u2019ajouter \u00e0 notre liste de livres. Maintenant que nous avons un coup de main pour trouver les ISBN, ajoutons quelques livres de plus : Recherche en biblioth\u00e8que et en magasin # Une fois que nous avons l\u2019ISBN, ajouter un lien pour acheter le livre est facile. Voici une formule pour le site indiebound.org , qui aux \u00c9tats-Unis est susceptible d\u2019avoir une librairie ind\u00e9pendante pr\u00e8s de chez vous en tant que membre : \"[buy] https://indiebound.org/book/\" + $ISBN Si vous n\u2019avez pas de librairie locale, il y a Amazon, ou \u00e0 peu pr\u00e8s n\u2019importe quel site que vous aimez (trouvez simplement une page de recherche sur leur site et faites correspondre le mod\u00e8le). import urllib keywords = ($Title or \"\") + \" \" + ($Author or \"\") + \" \" + ($ISBN or \"\") \"[amazon] https://www.amazon.com/s?i=stripbooks&k=\" + urllib.quote($keywords) Les nouveaux liens ressemblent \u00e0 ceci : Cliquer sur le lien [buy] pr\u00e8s d\u2019un livre nous am\u00e8ne maintenant \u00e0 ce livre sur indiebound.org . Pour votre biblioth\u00e8que locale, la m\u00eame id\u00e9e est tr\u00e8s probablement applicable. Par exemple, dans le nord du New Jersey, aux \u00c9tats-Unis, voici ce que vous voulez : import urllib prefix = \"[borrow] https://catalog.bccls.org/polaris/search/searchresults.aspx?ctx=placeholder&type=Keyword&by=ISBN&term=\" prefix + urllib.quote($ISBN) Et voici comment consulter Goodreads pour voir ce que les gens pensent d\u2019un livre : \"[opinion] https://www.goodreads.com/search?q=\" + $ISBN Et Wikipedia pour commencer une plong\u00e9e en profondeur : import urllib keywords = ($Title or \"\") + \" \" + ($Author.Name or \"\") \"[wikipedia] https://en.wikipedia.org/wiki/Special:Search/\" + urllib.quote(keywords) Une fois que nous avons tous ces liens, il est logique d\u2019ajouter une vue fiche afin que nous puissions les disposer : Mod\u00e8le pr\u00eat \u00e0 l\u2019emploi # Voici une exemple de liste de livres avec laquelle vous pouvez jouer. Les livres r\u00e9pertori\u00e9s peuvent ne pas \u00eatre \u00e0 votre go\u00fbt, bien s\u00fbr ! Ajustez selon vos pr\u00e9f\u00e9rences.","title":"Book club links"},{"location":"examples/2020-06-book-club/#listes-de-livres-avec-recherche-en-bibliotheque-et-en-magasin","text":"S\u2019il y a une chose meilleure que lire un livre, c\u2019est lire avec des amis. Organiser un club de lecture est assez simple. Le club fonctionnera mieux si tout le monde obtient effectivement le livre et a des opinions sur ce qu\u2019il faut lire la prochaine fois. Grist peut aider avec tout cela. Pour inciter tout le monde \u00e0 obtenir le livre, il est utile d\u2019avoir des liens pour emprunter le livre \u00e0 votre biblioth\u00e8que locale et pour acheter le livre dans votre magasin local (ou non local). Et pour des id\u00e9es sur ce qu\u2019il faut lire la prochaine fois, il est utile de pouvoir facilement sugg\u00e9rer des livres et de d\u00e9couvrir les livres que d\u2019autres sugg\u00e8rent via des sites comme GoodReads, Wikipedia et Amazon. Supposons que nous commencions par une simple table de livres, avec les titres des livres et les noms des auteurs. Pour emprunter ou acheter le livre, il est pr\u00e9f\u00e9rable d\u2019avoir son code ISBN unique, afin qu\u2019il n\u2019y ait aucune ambigu\u00eft\u00e9 ou confusion. Une chose que nous pouvons faire est d\u2019ajouter un lien pour rechercher un livre sur isbnsearch.org par son titre et son auteur. Pour ce faire, ajoutez une nouvelle colonne, puis d\u00e9finissez-la comme une colonne HyperLink : Ce que nous allons faire, c\u2019est remplir cette colonne en utilisant une formule qui prend le titre du livre et le nom de l\u2019auteur, et les utilise comme mots-cl\u00e9s pour rechercher sur le site isbnsearch.org . Voici la formule : import urllib keywords = ($Title or \"\") + \" \" + ($Author or \"\") \"[isbn] https://isbnsearch.org/search?s=\" + urllib.quote(keywords) Les URL avec des espaces, des apostrophes ou d\u2019autres lettres \u00e9tranges que vous pourriez trouver dans les noms n\u00e9cessitent un encodage sp\u00e9cial, nous avons donc utilis\u00e9 le module python urllib pour nous assurer que tout est encod\u00e9 correctement. Maintenant, nous avons un lien [isbn] pratique \u00e0 c\u00f4t\u00e9 de chaque livre : Nous pouvons cliquer sur la fl\u00e8che \u00e0 c\u00f4t\u00e9 de [isbn] , localiser le livre et noter son code ISBN dans une nouvelle colonne : Ensuite, nous pouvons l\u2019ajouter \u00e0 notre liste de livres. Maintenant que nous avons un coup de main pour trouver les ISBN, ajoutons quelques livres de plus :","title":"Listes de Livres avec Recherche en Biblioth\u00e8que et en Magasin"},{"location":"examples/2020-06-book-club/#recherche-en-bibliotheque-et-en-magasin","text":"Une fois que nous avons l\u2019ISBN, ajouter un lien pour acheter le livre est facile. Voici une formule pour le site indiebound.org , qui aux \u00c9tats-Unis est susceptible d\u2019avoir une librairie ind\u00e9pendante pr\u00e8s de chez vous en tant que membre : \"[buy] https://indiebound.org/book/\" + $ISBN Si vous n\u2019avez pas de librairie locale, il y a Amazon, ou \u00e0 peu pr\u00e8s n\u2019importe quel site que vous aimez (trouvez simplement une page de recherche sur leur site et faites correspondre le mod\u00e8le). import urllib keywords = ($Title or \"\") + \" \" + ($Author or \"\") + \" \" + ($ISBN or \"\") \"[amazon] https://www.amazon.com/s?i=stripbooks&k=\" + urllib.quote($keywords) Les nouveaux liens ressemblent \u00e0 ceci : Cliquer sur le lien [buy] pr\u00e8s d\u2019un livre nous am\u00e8ne maintenant \u00e0 ce livre sur indiebound.org . Pour votre biblioth\u00e8que locale, la m\u00eame id\u00e9e est tr\u00e8s probablement applicable. Par exemple, dans le nord du New Jersey, aux \u00c9tats-Unis, voici ce que vous voulez : import urllib prefix = \"[borrow] https://catalog.bccls.org/polaris/search/searchresults.aspx?ctx=placeholder&type=Keyword&by=ISBN&term=\" prefix + urllib.quote($ISBN) Et voici comment consulter Goodreads pour voir ce que les gens pensent d\u2019un livre : \"[opinion] https://www.goodreads.com/search?q=\" + $ISBN Et Wikipedia pour commencer une plong\u00e9e en profondeur : import urllib keywords = ($Title or \"\") + \" \" + ($Author.Name or \"\") \"[wikipedia] https://en.wikipedia.org/wiki/Special:Search/\" + urllib.quote(keywords) Une fois que nous avons tous ces liens, il est logique d\u2019ajouter une vue fiche afin que nous puissions les disposer :","title":"Recherche en biblioth\u00e8que et en magasin"},{"location":"examples/2020-06-book-club/#modele-pret-a-lemploi","text":"Voici une exemple de liste de livres avec laquelle vous pouvez jouer. Les livres r\u00e9pertori\u00e9s peuvent ne pas \u00eatre \u00e0 votre go\u00fbt, bien s\u00fbr ! Ajustez selon vos pr\u00e9f\u00e9rences.","title":"Mod\u00e8le pr\u00eat \u00e0 l’emploi"},{"location":"examples/2020-06-credit-card/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . D\u00e9couper et Analyser les D\u00e9penses # Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit, par exemple si vous souhaitez voir les transactions par : Cat\u00e9gorie Membre de la carte Mois Combinaison de l\u2019un des \u00e9l\u00e9ments ci-dessus Voici un exemple utilisant des donn\u00e9es d\u2019American Express (r\u00e9dig\u00e9es pour des raisons de confidentialit\u00e9, bien s\u00fbr). Voir ci-dessous pour l\u2019utiliser comme mod\u00e8le pour vos propres donn\u00e9es. Cette premi\u00e8re page est un tableau de bord : elle montre quelques graphiques r\u00e9capitulatifs \u2014 vos d\u00e9penses par mois, et deux graphiques circulaires pour vous permettre de voir rapidement quel membre de la carte ou quelle cat\u00e9gorie a le plus de d\u00e9penses. Les trois pages suivantes montrent des r\u00e9partitions par Cat\u00e9gorie, Membre de la carte et par Mois. En plus des totaux par Cat\u00e9gorie, vous pouvez cliquer sur n\u2019importe quelle Cat\u00e9gorie pour voir toutes les transactions qu\u2019elle contient, puis cliquer sur n\u2019importe quelle transaction pour voir ses d\u00e9tails complets. Voici l\u2019 exemple avec des donn\u00e9es d\u2019\u00e9chantillon que vous pouvez essayer. Pour l\u2019utiliser avec vos propres donn\u00e9es, commencez par t\u00e9l\u00e9charger vos transactions. Pour les cartes de cr\u00e9dit American Express : Connectez-vous sur https://americanexpress.com Allez dans l\u2019onglet \u201cStatements & Activity\u201d, puis s\u00e9lectionnez \u201cView By Year\u201d ou \u201cCustom Date Range\u201d. Cliquez sur l\u2019ic\u00f4ne \u201cDownload your Transactions\u201d. Lorsque vous \u00eates invit\u00e9 \u00e0 choisir le format de t\u00e9l\u00e9chargement, s\u00e9lectionnez \u201cCSV\u201d et cochez la case qui dit \u201cInclude all additional transaction details\u201d. Pour importer ces donn\u00e9es dans Grist : Ouvrez le mod\u00e8le ici . Cliquez sur le bouton \u201cAdd New\u201d et choisissez \u201cImport from file\u201d. Dans la bo\u00eete de dialogue qui s\u2019affiche, changez \u201cTo\u201d table de \u201cNew Table\u201d \u00e0 \u201cActivity\u201d, comme suit : Cliquez sur \u201cImport\u201d, et vous avez termin\u00e9. Vos donn\u00e9es sont pr\u00eates \u00e0 \u00eatre explor\u00e9es. Note Lorsque vous commencez avec un lien de mod\u00e8le, votre copie du document n\u2019est initialement pas sauvegard\u00e9e. Pour conserver ces donn\u00e9es pour plus tard, cliquez sur \u201cSave Copy\u201d, et donnez un nom au document. Vous verrez le document plus tard sur votre page d\u2019accueil Grist \u00e0 https://docs.getgrist.com . Un mod\u00e8le comme celui-ci ne prend pas longtemps \u00e0 pr\u00e9parer. Il utilise une combinaison de tables de synth\u00e8se et de liaison de vues . Vous avez des retours ou des am\u00e9liorations \u00e0 proposer ? Veuillez nous les partager par email \u00e0 support@getgrist.com .","title":"Credit card expenses"},{"location":"examples/2020-06-credit-card/#decouper-et-analyser-les-depenses","text":"Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit, par exemple si vous souhaitez voir les transactions par : Cat\u00e9gorie Membre de la carte Mois Combinaison de l\u2019un des \u00e9l\u00e9ments ci-dessus Voici un exemple utilisant des donn\u00e9es d\u2019American Express (r\u00e9dig\u00e9es pour des raisons de confidentialit\u00e9, bien s\u00fbr). Voir ci-dessous pour l\u2019utiliser comme mod\u00e8le pour vos propres donn\u00e9es. Cette premi\u00e8re page est un tableau de bord : elle montre quelques graphiques r\u00e9capitulatifs \u2014 vos d\u00e9penses par mois, et deux graphiques circulaires pour vous permettre de voir rapidement quel membre de la carte ou quelle cat\u00e9gorie a le plus de d\u00e9penses. Les trois pages suivantes montrent des r\u00e9partitions par Cat\u00e9gorie, Membre de la carte et par Mois. En plus des totaux par Cat\u00e9gorie, vous pouvez cliquer sur n\u2019importe quelle Cat\u00e9gorie pour voir toutes les transactions qu\u2019elle contient, puis cliquer sur n\u2019importe quelle transaction pour voir ses d\u00e9tails complets. Voici l\u2019 exemple avec des donn\u00e9es d\u2019\u00e9chantillon que vous pouvez essayer. Pour l\u2019utiliser avec vos propres donn\u00e9es, commencez par t\u00e9l\u00e9charger vos transactions. Pour les cartes de cr\u00e9dit American Express : Connectez-vous sur https://americanexpress.com Allez dans l\u2019onglet \u201cStatements & Activity\u201d, puis s\u00e9lectionnez \u201cView By Year\u201d ou \u201cCustom Date Range\u201d. Cliquez sur l\u2019ic\u00f4ne \u201cDownload your Transactions\u201d. Lorsque vous \u00eates invit\u00e9 \u00e0 choisir le format de t\u00e9l\u00e9chargement, s\u00e9lectionnez \u201cCSV\u201d et cochez la case qui dit \u201cInclude all additional transaction details\u201d. Pour importer ces donn\u00e9es dans Grist : Ouvrez le mod\u00e8le ici . Cliquez sur le bouton \u201cAdd New\u201d et choisissez \u201cImport from file\u201d. Dans la bo\u00eete de dialogue qui s\u2019affiche, changez \u201cTo\u201d table de \u201cNew Table\u201d \u00e0 \u201cActivity\u201d, comme suit : Cliquez sur \u201cImport\u201d, et vous avez termin\u00e9. Vos donn\u00e9es sont pr\u00eates \u00e0 \u00eatre explor\u00e9es. Note Lorsque vous commencez avec un lien de mod\u00e8le, votre copie du document n\u2019est initialement pas sauvegard\u00e9e. Pour conserver ces donn\u00e9es pour plus tard, cliquez sur \u201cSave Copy\u201d, et donnez un nom au document. Vous verrez le document plus tard sur votre page d\u2019accueil Grist \u00e0 https://docs.getgrist.com . Un mod\u00e8le comme celui-ci ne prend pas longtemps \u00e0 pr\u00e9parer. Il utilise une combinaison de tables de synth\u00e8se et de liaison de vues . Vous avez des retours ou des am\u00e9liorations \u00e0 proposer ? Veuillez nous les partager par email \u00e0 support@getgrist.com .","title":"D\u00e9couper et Analyser les D\u00e9penses"},{"location":"examples/2020-07-email-compose/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Pr\u00e9parer des Emails en Utilisant des Formules # Vous savez peut-\u00eatre d\u00e9j\u00e0 que vous pouvez ajouter des champs de lien hypertexte dans Grist. Vous savez peut-\u00eatre aussi que les liens \u201cmailto\u201d ouvrent un programme de messagerie pour cr\u00e9er un nouveau message \u00e9lectronique. Il est moins connu que les liens \u201cmailto\u201d permettent de pr\u00e9-remplir de nombreuses parties du message \u00e9lectronique. Si vous utilisez Grist pour stocker des contacts, vous pouvez essentiellement cr\u00e9er des mod\u00e8les d\u2019email en utilisant des formules Grist. Liens Mailto Simples # Le lien \u201cmailto\u201d le plus simple dans Grist ressemble \u00e0 mailto:someone@example.com . Lorsque la colonne est d\u00e9finie sur Texte et que son format est d\u00e9fini sur Hyperlien, elle s\u2019affiche comme someone@example.com . Si vous avez une table avec les colonnes Full_Name et Email , ajoutez une autre colonne avec cette formule : \"Compose Email mailto:%s\" % ($Email) . D\u00e9finissez son type sur Texte et son format de cellule sur Hyperlien : Vous obtiendrez un lien dans chaque ligne de la personne, sur lequel vous pouvez cliquer pour commencer \u00e0 composer un email \u00e0 cette personne : Voyez un exemple de cela en action ici : Composition Simple . Cc, Bcc, Objet, Corps # En plus d\u2019ouvrir votre programme de messagerie et de remplir le champ \u201c\u00c0\u201d, un lien \u201cmailto\u201d peut remplir d\u2019autres parties de l\u2019email, en utilisant ce format : mailto:?cc=&bcc=&reply-to=&subject=&body= Tous les champs sont facultatifs. Vous pouvez sp\u00e9cifier plusieurs adresses email pour les listes To/Cc/Bcc en les s\u00e9parant par des virgules. Les valeurs de chaque champ doivent \u00eatre encod\u00e9es en pourcentage , ce qui peut \u00eatre fait en Python en utilisant urllib.parse.quote . Pour assembler cela, cette formule produira un hyperlien pour cr\u00e9er un email pr\u00e9-rempli : from urllib.parse import quote return \"Compose mailto:%s?cc=sales@example.com&subject=%s&body=%s\" % ( quote($Email), quote($Subject), quote($Body)) Un exemple en direct de cela est ici : Composition Avanc\u00e9e . Envoyer des Emails \u00e0 Plusieurs Personnes # Les liens email sont tr\u00e8s pratiques pour envoyer des emails \u00e0 un groupe de personnes, comme des \u00e9tudiants dans une classe, ou des personnes sur un certain projet. Par exemple, si vous avez une colonne de r\u00e9f\u00e9rence \u201cProjet\u201d qui lie une personne \u00e0 un projet, alors dans la table des projets, vous pouvez rechercher toutes les personnes associ\u00e9es en utilisant lookupRecords . Vous pouvez ensuite cr\u00e9er un lien pour les envoyer un email en groupe : from urllib.parse import quote people = People.lookupRecords(Project=$id) return \"Email Group mailto:%s\" % quote(\", \".join(people.Email)) Vous pouvez voir cette formule en action dans Composition de Groupe . N\u2019utilisez pas cela pour remplacer une plateforme de marketing par email : comme les emails utilisent votre programme de messagerie habituel, vous ne devriez pas l\u2019utiliser pour envoyer des emails \u00e0 des milliers de personnes. Mais pour de petits groupes, cela peut \u00eatre tr\u00e8s pratique. Configurer le Programme de Messagerie # Si vos liens \u201cmailto\u201d ne fonctionnent pas, ou n\u2019ouvrent pas votre programme de messagerie pr\u00e9f\u00e9r\u00e9, voici un article pour vous aider \u00e0 le configurer : Changer le programme de messagerie par d\u00e9faut . Si vous avez besoin de plus de d\u00e9tails, voici quelques liens suppl\u00e9mentaires : Pour ouvrir un programme de bureau (comme Mail, Thunderbird, etc.) sur un Mac : Instructions . Pour ouvrir un programme de bureau (comme Outlook, etc.) sur Windows : Instructions . Pour ouvrir Gmail dans Chrome et d\u2019autres navigateurs : Instructions . Pour ouvrir un webmail (comme Gmail ou Yahoo! Mail) ou un programme de bureau dans Firefox : Instructions .","title":"Prefill emails"},{"location":"examples/2020-07-email-compose/#preparer-des-emails-en-utilisant-des-formules","text":"Vous savez peut-\u00eatre d\u00e9j\u00e0 que vous pouvez ajouter des champs de lien hypertexte dans Grist. Vous savez peut-\u00eatre aussi que les liens \u201cmailto\u201d ouvrent un programme de messagerie pour cr\u00e9er un nouveau message \u00e9lectronique. Il est moins connu que les liens \u201cmailto\u201d permettent de pr\u00e9-remplir de nombreuses parties du message \u00e9lectronique. Si vous utilisez Grist pour stocker des contacts, vous pouvez essentiellement cr\u00e9er des mod\u00e8les d\u2019email en utilisant des formules Grist.","title":"Pr\u00e9parer des Emails en Utilisant des Formules"},{"location":"examples/2020-07-email-compose/#liens-mailto-simples","text":"Le lien \u201cmailto\u201d le plus simple dans Grist ressemble \u00e0 mailto:someone@example.com . Lorsque la colonne est d\u00e9finie sur Texte et que son format est d\u00e9fini sur Hyperlien, elle s\u2019affiche comme someone@example.com . Si vous avez une table avec les colonnes Full_Name et Email , ajoutez une autre colonne avec cette formule : \"Compose Email mailto:%s\" % ($Email) . D\u00e9finissez son type sur Texte et son format de cellule sur Hyperlien : Vous obtiendrez un lien dans chaque ligne de la personne, sur lequel vous pouvez cliquer pour commencer \u00e0 composer un email \u00e0 cette personne : Voyez un exemple de cela en action ici : Composition Simple .","title":"Liens Mailto Simples"},{"location":"examples/2020-07-email-compose/#cc-bcc-objet-corps","text":"En plus d\u2019ouvrir votre programme de messagerie et de remplir le champ \u201c\u00c0\u201d, un lien \u201cmailto\u201d peut remplir d\u2019autres parties de l\u2019email, en utilisant ce format : mailto:?cc=&bcc=&reply-to=&subject=&body= Tous les champs sont facultatifs. Vous pouvez sp\u00e9cifier plusieurs adresses email pour les listes To/Cc/Bcc en les s\u00e9parant par des virgules. Les valeurs de chaque champ doivent \u00eatre encod\u00e9es en pourcentage , ce qui peut \u00eatre fait en Python en utilisant urllib.parse.quote . Pour assembler cela, cette formule produira un hyperlien pour cr\u00e9er un email pr\u00e9-rempli : from urllib.parse import quote return \"Compose mailto:%s?cc=sales@example.com&subject=%s&body=%s\" % ( quote($Email), quote($Subject), quote($Body)) Un exemple en direct de cela est ici : Composition Avanc\u00e9e .","title":"Cc, Bcc, Objet, Corps"},{"location":"examples/2020-07-email-compose/#envoyer-des-emails-a-plusieurs-personnes","text":"Les liens email sont tr\u00e8s pratiques pour envoyer des emails \u00e0 un groupe de personnes, comme des \u00e9tudiants dans une classe, ou des personnes sur un certain projet. Par exemple, si vous avez une colonne de r\u00e9f\u00e9rence \u201cProjet\u201d qui lie une personne \u00e0 un projet, alors dans la table des projets, vous pouvez rechercher toutes les personnes associ\u00e9es en utilisant lookupRecords . Vous pouvez ensuite cr\u00e9er un lien pour les envoyer un email en groupe : from urllib.parse import quote people = People.lookupRecords(Project=$id) return \"Email Group mailto:%s\" % quote(\", \".join(people.Email)) Vous pouvez voir cette formule en action dans Composition de Groupe . N\u2019utilisez pas cela pour remplacer une plateforme de marketing par email : comme les emails utilisent votre programme de messagerie habituel, vous ne devriez pas l\u2019utiliser pour envoyer des emails \u00e0 des milliers de personnes. Mais pour de petits groupes, cela peut \u00eatre tr\u00e8s pratique.","title":"Envoyer des Emails \u00e0 Plusieurs Personnes"},{"location":"examples/2020-07-email-compose/#configurer-le-programme-de-messagerie","text":"Si vos liens \u201cmailto\u201d ne fonctionnent pas, ou n\u2019ouvrent pas votre programme de messagerie pr\u00e9f\u00e9r\u00e9, voici un article pour vous aider \u00e0 le configurer : Changer le programme de messagerie par d\u00e9faut . Si vous avez besoin de plus de d\u00e9tails, voici quelques liens suppl\u00e9mentaires : Pour ouvrir un programme de bureau (comme Mail, Thunderbird, etc.) sur un Mac : Instructions . Pour ouvrir un programme de bureau (comme Outlook, etc.) sur Windows : Instructions . Pour ouvrir Gmail dans Chrome et d\u2019autres navigateurs : Instructions . Pour ouvrir un webmail (comme Gmail ou Yahoo! Mail) ou un programme de bureau dans Firefox : Instructions .","title":"Configurer le Programme de Messagerie"},{"location":"examples/2020-08-invoices/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Pr\u00e9paration des factures # Si vous enregistrez qui est factur\u00e9 pour quoi dans Grist, il peut \u00eatre pratique de g\u00e9n\u00e9rer des factures directement \u00e0 c\u00f4t\u00e9 de ces enregistrements. Ce tutoriel vous montre comment configurer un document comme celui-ci : Vous pouvez trouver un mod\u00e8le fini \u00e0 l\u2019adresse https://templates.getgrist.com/9NH6D58FmxwP/Invoicing . Si vous souhaitez ajouter des factures \u00e0 un document existant et les faire fonctionner comme vous le souhaitez, comprendre ce tutoriel devrait vous y aider. Configuration d\u2019une table de factures # Tout d\u2019abord, cr\u00e9ez une table pour enregistrer les factures en cr\u00e9ant un document vide et en renommant Table1 en Factures : Maintenant, ajoutons une vue \u00e0 c\u00f4t\u00e9 de la table pour voir les factures termin\u00e9es. Il existe toutes sortes de styles de factures possibles, donc Grist permet aux d\u00e9veloppeurs web de cr\u00e9er les leurs en utilisant des Widgets Personnalis\u00e9s. Nous utiliserons un exemple de style de facture publi\u00e9 par Grist, mais si cela ne correspond pas \u00e0 vos besoins, tout d\u00e9veloppeur web pourrait l\u2019ajuster pour vous. Cliquez sur Ajouter Nouveau , puis Ajouter Widget \u00e0 la Page . Ensuite : Pour S\u00e9lectionner Widget , choisissez Personnalis\u00e9 puisque nous utiliserons un Widget Personnalis\u00e9. Pour S\u00e9lectionner Donn\u00e9es , choisissez Factures puisque nous afficherons les donn\u00e9es de la table des factures. Pour S\u00e9lectionner Par , choisissez FACTURES afin que le Widget Personnalis\u00e9 affiche les donn\u00e9es de la facture actuellement s\u00e9lectionn\u00e9e par l\u2019utilisateur. Super, nous avons maintenant deux vues, une Vue Table qui contiendra les donn\u00e9es des factures, et une Vue Personnalis\u00e9e qui affichera ces donn\u00e9es sous forme de facture bien format\u00e9e et imprimable. La Vue Personnalis\u00e9e commence par \u00eatre vide ; s\u00e9lectionnez Options du Widget pour sp\u00e9cifier ce que nous voulons y mettre : Dans la section PERSONNALIS\u00c9 o\u00f9 il est indiqu\u00e9 URL compl\u00e8te de la page web \u00e0 afficher , mettez ce lien : https://gristlabs.github.io/grist-widget/invoices/ Et r\u00e9glez Acc\u00e8s sur lire table . Cela accorde au Widget Personnalis\u00e9 l\u2019acc\u00e8s en lecture \u00e0 la table des Factures. Maintenant, placez ce que vous voulez dans une ligne de la table des Factures (j\u2019ai juste ajout\u00e9 le num\u00e9ro 1 ). Une facture incompl\u00e8te appara\u00eetra imm\u00e9diatement : La facture incompl\u00e8te montre quels noms de colonnes utiliser pour contr\u00f4ler quelles parties de la facture. Une bo\u00eete noire suppl\u00e9mentaire montre quelles colonnes le widget comprend, quelles colonnes il ignore, et quelles colonnes suppl\u00e9mentaires le widget pourrait utiliser. Actuellement, il dit qu\u2019il ne reconna\u00eet aucune des colonnes pr\u00e9sentes, qu\u2019il attend des colonnes comme Num\u00e9ro , Client , Articles , etc., et qu\u2019il ignore les colonnes par d\u00e9faut A , B et C dans la table des Factures. En regardant le d\u00e9but de la facture, nous voyons un espace pour un num\u00e9ro de facture, NUM\u00c9RO DE FACTURE : #Num\u00e9ro . Renommons donc la colonne A en Num\u00e9ro , nous pourrions laisser la valeur \u00e0 1, mais cela donnerait l\u2019impression que nous n\u2019avons pas encore fait beaucoup d\u2019affaires. Je vais choisir de d\u00e9finir le num\u00e9ro de facture comme \u00e9tant $id + 51371 , o\u00f9 $id est un identifiant num\u00e9rique auto-incr\u00e9ment\u00e9 attribu\u00e9 \u00e0 chaque ligne. Mais vous pouvez le d\u00e9finir manuellement ou avec une formule diff\u00e9rente. D\u00e8s qu\u2019il est d\u00e9fini, la facture se met \u00e0 jour : La prochaine colonne sugg\u00e9r\u00e9e par la bo\u00eete d\u2019aide est Client , alors renommons la colonne B en Client . Plus tard, nous donnerons des informations sur le client de mani\u00e8re structur\u00e9e, mais pour l\u2019instant, mettons juste du texte ici (utilisez Shift + Entr\u00e9e pour ins\u00e9rer des sauts de ligne) : Super, maintenant la bo\u00eete Client est remplie. La prochaine colonne sugg\u00e9r\u00e9e est Articles , alors renommons la colonne C en Articles . Plus tard, nous donnerons des informations sur les articles de mani\u00e8re structur\u00e9e, mais pour l\u2019instant, mettons juste du texte ici : Et maintenant la Description est d\u00e9finie. Il nous manque un total, alors ajoutons une colonne appel\u00e9e Total et d\u00e9finissons-la \u00e0 100 : La facture ne se mettra pas \u00e0 jour imm\u00e9diatement. C\u2019est la premi\u00e8re nouvelle colonne que nous avons ajout\u00e9e - jusqu\u2019\u00e0 pr\u00e9sent, nous les avons renomm\u00e9es. Lorsque nous avons cr\u00e9\u00e9 le Widget Personnalis\u00e9, il a re\u00e7u l\u2019acc\u00e8s aux colonnes qui existaient au moment de la cr\u00e9ation. Pour permettre au widget de voir la nouvelle colonne, ouvrez \u00e0 nouveau Options du Widget et d\u00e9placez Total de Colonnes Cach\u00e9es \u00e0 Colonnes Visibles : Super, la facture s\u2019est mise \u00e0 jour. Maintenant, d\u00e9finissons qui \u00e9met la facture en ajoutant une colonne \u00c9metteur (n\u2019oubliez pas de la rendre visible pour le widget via Options du Widget ). Comme derni\u00e8re \u00e9tape pour cr\u00e9er une facture utilisable, ajoutons une colonne \u00c9mise et mettons-y la date d\u2019aujourd\u2019hui (n\u2019oubliez pas de la rendre visible pour le widget via Options du Widget ). D\u00e8s que la facture a une date, la bo\u00eete d\u2019aide noire dispara\u00eetra : D\u2019accord ! Si quelqu\u2019un m\u2019envoyait cela, je le paierais. Vous devriez me donner un coup de pouce en lui donnant une date d\u2019\u00e9ch\u00e9ance. Ajoutons une colonne \u00c9ch\u00e9ance et d\u00e9finissons-la \u00e0 un mois \u00e0 partir de la date \u00c9mise . N\u2019oubliez pas de rendre la colonne \u00c9ch\u00e9ance visible pour le widget via Options du Widget . Assurez-vous \u00e9galement de d\u00e9finir le Type de Colonne pour \u00c9mise sur Date sinon vous ne pourrez pas faire de calculs de date dessus (ce sera juste une cha\u00eene de caract\u00e8res). S\u2019il y a des instructions sp\u00e9ciales \u00e0 accompagner avec la facture, nous pouvons ajouter une colonne Note . N\u2019oubliez pas de la rendre visible pour le widget via Options du Widget . Entrer les informations du client # Maintenant, faisons deux changements utiles \u00e0 la configuration de la facture : Mettre les informations du client dans une table s\u00e9par\u00e9e, pour ne pas avoir \u00e0 ressaisir leur adresse \u00e0 chaque fois que nous les facturons (et nous pouvons importer les adresses en vrac). Entrer les articles et les prix dans une table, pour que les factures multi-articles soient faciles \u00e0 faire (et nous pouvons utiliser des formules et des recherches pour les prix si nous le souhaitons). Avant de le faire, nous devons informer Grist que le contenu de la facture d\u00e9pendra de ces autres tables, afin qu\u2019il puisse la mettre \u00e0 jour lorsque quelque chose change, et s\u2019assurer que la facture ait acc\u00e8s \u00e0 tout ce dont elle a besoin. Cr\u00e9ez une colonne nomm\u00e9e R\u00e9f\u00e9rences et donnez-lui cette formule : = RECORD(rec, expand_refs=1) Cela signifie \u201cprendre l\u2019enregistrement actuel et l\u2019emballer, y compris tout ce qu\u2019il r\u00e9f\u00e9rence directement\u201d. \u00c9tant donn\u00e9 que Grist est une feuille de calcul, cela implique \u00e9galement \u201cmettre \u00e0 jour tout ce qui d\u00e9pend de cette colonne si quelque chose dans les r\u00e9f\u00e9rences change\u201d. N\u2019oubliez pas de rendre la colonne R\u00e9f\u00e9rences visible pour le widget via Options du Widget , afin que le widget soit mis \u00e0 jour au fur et \u00e0 mesure que nous ajoutons et modifions le mat\u00e9riel r\u00e9f\u00e9renc\u00e9. Lorsque le widget de facture voit une colonne nomm\u00e9e \u201cR\u00e9f\u00e9rences\u201d, il remplit la facture en utilisant les valeurs \u201cemball\u00e9es\u201d dans cette colonne, plut\u00f4t que les champs individuels de la facture. Le b\u00e9n\u00e9fice sera vu dans l\u2019\u00e9tape suivante, car ces valeurs emball\u00e9es peuvent inclure des donn\u00e9es provenant d\u2019enregistrements li\u00e9s. Ensuite, pla\u00e7ons les informations du client dans une table s\u00e9par\u00e9e. Ajoutez une nouvelle table \u00e0 la page pour entrer les informations de l\u2019entreprise en cliquant sur Ajouter Nouveau , Ajouter Widget \u00e0 la Page , puis S\u00e9lectionner Widget > Table et S\u00e9lectionner Donn\u00e9es > Nouvelle Table : Puis renommez la table en Entreprises . Vider \u00e9galement la colonne Client pour que nous puissions voir l\u2019aide sur ce que le widget attend l\u00e0 : Le widget sugg\u00e8re les colonnes Nom , Rue1 , Rue2 , Ville , \u00c9tat et Code Postal . Fournissons donc ces colonnes dans notre table Entreprises , et remplissons-les pour un client exemple. Ensuite, placez le m\u00eame Nom dans la colonne Client , et dans Options de Colonne d\u00e9finissez le Type de Colonne sur R\u00e9f\u00e9rence . R\u00e9f\u00e9rez-vous \u00e0 Entreprises Nom si Grist ne le devine pas automatiquement. Une fois que vous appuyez sur Appliquer , vous verrez une section Client bien format\u00e9e. Entrer les informations de l\u2019\u00e9metteur # Nous pourrions faire la m\u00eame chose pour la colonne \u00c9metteur que nous avons fait pour la colonne Client , et en faire une r\u00e9f\u00e9rence \u00e0 la table Entreprises ou une table s\u00e9par\u00e9e. Cependant, si vous utilisez toujours le m\u00eame nom et la m\u00eame adresse pour votre entreprise, vous pouvez \u00e9viter de configurer une r\u00e9f\u00e9rence en entrant une formule comme celle-ci dans la colonne \u00c9metteur (commencez \u00e0 taper avec = pour en faire une formule) : { \"Nom\": \"Applaudissements Tonitruants\", \"Rue1\": \"6502 Route Automatis\u00e9e\", \"Ville\": \"New York\", \"\u00c9tat\": \"NY\", \"Code Postal\": \"10003\", \"Email\": \"applaudissements@tonnerre.com\", \"T\u00e9l\u00e9phone\": \"+1-800-YAY-YAYS\", \"Site Web\": \"applaudissements.com\" } Puis d\u00e9finissez le Type de Colonne pour \u00c9metteur sur Any dans le panneau de droite. Remarquez comment les emails, les num\u00e9ros de t\u00e9l\u00e9phone et les liens sont sp\u00e9cialement format\u00e9s par le widget. Entrer les informations des articles # Maintenant, configurons la liste des articles et des prix qui est au c\u0153ur d\u2019une facture. Videz la colonne Articles pour voir ce que nous pouvons y mettre. Elle montrera que Articles peut \u00eatre une liste, o\u00f9 chaque article a une Description , un Prix , une Quantit\u00e9 et un Total . Ajoutons donc une table Articles comme nous avons ajout\u00e9 Entreprises , et donnons-lui ces quatre colonnes. Nous pouvons d\u00e9finir Total avec cette formule simple : $Prix * $Quantit\u00e9 Maintenant, nous devons tirer ces articles dans la table Factures pour que le Widget Personnalis\u00e9 y ait acc\u00e8s. D\u00e9finissez la colonne Articles sur la formule Articles.lookupRecords() , puis r\u00e9initialisez son type de colonne sur Any . Cette formule n\u00e9cessite un peu plus de travail, ce que nous ferons bient\u00f4t, mais commen\u00e7ons par cela. Super, notre facture se met \u00e0 jour correctement ! Supprimez la colonne Total pour obtenir une colonne calcul\u00e9e automatiquement : Il est probablement plus confortable d\u2019\u00e9diter les factures comme une Vue Fiche plut\u00f4t qu\u2019une Vue Table, alors changeons cela en utilisant Options du Widget , Table , Changer Widget , Fiche , Enregistrer . Vous pouvez personnaliser la mise en page de la fiche \u00e0 votre go\u00fbt. Pour ajouter une nouvelle facture, cliquez sur le petit + au-dessus de la fiche des factures, d\u00e9finissez une date \u00c9mise , et choisissez soit le Client existant soit ajoutez un nouveau. Une fois que nous avons une deuxi\u00e8me facture, il devient clair que nous avons n\u00e9glig\u00e9 la formule pour collecter les articles de la facture - toutes les factures contiennent tous les articles. Pas de probl\u00e8me, nous pouvons \u00eatre plus sp\u00e9cifiques en ajoutant une colonne Facture aux Articles et en la configurant pour faire r\u00e9f\u00e9rence \u00e0 des Factures sp\u00e9cifiques : Une fois cela fait, nous pouvons saupoudrer un peu de poussi\u00e8re de f\u00e9e Grist, et aller dans Options du Widget pour la Vue Table ARTICLES , cliquer sur Changer Widget , et d\u00e9finir S\u00c9LECTIONNER PAR sur FICHE FACTURES . Une fois cela enregistr\u00e9, seuls les articles de la facture actuellement s\u00e9lectionn\u00e9e sont affich\u00e9s. Encore mieux, lorsque vous ajoutez de nouveaux articles, la colonne facture est automatiquement d\u00e9finie sur la facture que vous visualisez. Vous pouvez donc simplement masquer la colonne facture et l\u2019oublier. Maintenant, informons le Widget Personnalis\u00e9 des articles \u00e0 utiliser en mettant \u00e0 jour la formule Articles pour \u00eatre plus pr\u00e9cise : Articles.lookupRecords(Facture=$id) Avec cela, entrer de nouvelles factures devient un jeu d\u2019enfant ! Cliquez sur + pour ajouter une nouvelle fiche de facture. Choisissez le client, d\u00e9finissez la date d\u2019\u00e9mission. Ajoutez des articles. Termin\u00e9 ! Finition # Vous pouvez ajuster la configuration \u00e0 votre go\u00fbt. Par exemple, je choisirais d\u2019ajouter de nouveaux clients sur une page s\u00e9par\u00e9e ( B ou Entreprises sur le panneau de gauche) car c\u2019est relativement peu fr\u00e9quent ; vous pourriez choisir de garder cela sur la m\u00eame page. Je n\u2019ai pas besoin de d\u00e9ductions ou de taxes, si vous en avez besoin vous pourriez ajouter des colonnes et/ou des formules pour cela. Le widget de facture personnalis\u00e9 fonctionne pour moi tel quel, mais si j\u2019avais besoin de modifier quelque chose, je pourrais copier le d\u00e9p\u00f4t GitHub dans lequel il se trouve et le changer un peu (ou engager un d\u00e9veloppeur web pour le faire pour moi - ils n\u2019ont pas besoin d\u2019\u00eatre des experts Grist). Pour les d\u00e9veloppeurs int\u00e9ress\u00e9s, le code GitHub est ici : https://github.com/gristlabs/grist-widget/tree/master/invoices . Amusez-vous bien et bonne chance pour \u00eatre pay\u00e9 !","title":"Prepare invoices"},{"location":"examples/2020-08-invoices/#preparation-des-factures","text":"Si vous enregistrez qui est factur\u00e9 pour quoi dans Grist, il peut \u00eatre pratique de g\u00e9n\u00e9rer des factures directement \u00e0 c\u00f4t\u00e9 de ces enregistrements. Ce tutoriel vous montre comment configurer un document comme celui-ci : Vous pouvez trouver un mod\u00e8le fini \u00e0 l\u2019adresse https://templates.getgrist.com/9NH6D58FmxwP/Invoicing . Si vous souhaitez ajouter des factures \u00e0 un document existant et les faire fonctionner comme vous le souhaitez, comprendre ce tutoriel devrait vous y aider.","title":"Pr\u00e9paration des factures"},{"location":"examples/2020-08-invoices/#configuration-dune-table-de-factures","text":"Tout d\u2019abord, cr\u00e9ez une table pour enregistrer les factures en cr\u00e9ant un document vide et en renommant Table1 en Factures : Maintenant, ajoutons une vue \u00e0 c\u00f4t\u00e9 de la table pour voir les factures termin\u00e9es. Il existe toutes sortes de styles de factures possibles, donc Grist permet aux d\u00e9veloppeurs web de cr\u00e9er les leurs en utilisant des Widgets Personnalis\u00e9s. Nous utiliserons un exemple de style de facture publi\u00e9 par Grist, mais si cela ne correspond pas \u00e0 vos besoins, tout d\u00e9veloppeur web pourrait l\u2019ajuster pour vous. Cliquez sur Ajouter Nouveau , puis Ajouter Widget \u00e0 la Page . Ensuite : Pour S\u00e9lectionner Widget , choisissez Personnalis\u00e9 puisque nous utiliserons un Widget Personnalis\u00e9. Pour S\u00e9lectionner Donn\u00e9es , choisissez Factures puisque nous afficherons les donn\u00e9es de la table des factures. Pour S\u00e9lectionner Par , choisissez FACTURES afin que le Widget Personnalis\u00e9 affiche les donn\u00e9es de la facture actuellement s\u00e9lectionn\u00e9e par l\u2019utilisateur. Super, nous avons maintenant deux vues, une Vue Table qui contiendra les donn\u00e9es des factures, et une Vue Personnalis\u00e9e qui affichera ces donn\u00e9es sous forme de facture bien format\u00e9e et imprimable. La Vue Personnalis\u00e9e commence par \u00eatre vide ; s\u00e9lectionnez Options du Widget pour sp\u00e9cifier ce que nous voulons y mettre : Dans la section PERSONNALIS\u00c9 o\u00f9 il est indiqu\u00e9 URL compl\u00e8te de la page web \u00e0 afficher , mettez ce lien : https://gristlabs.github.io/grist-widget/invoices/ Et r\u00e9glez Acc\u00e8s sur lire table . Cela accorde au Widget Personnalis\u00e9 l\u2019acc\u00e8s en lecture \u00e0 la table des Factures. Maintenant, placez ce que vous voulez dans une ligne de la table des Factures (j\u2019ai juste ajout\u00e9 le num\u00e9ro 1 ). Une facture incompl\u00e8te appara\u00eetra imm\u00e9diatement : La facture incompl\u00e8te montre quels noms de colonnes utiliser pour contr\u00f4ler quelles parties de la facture. Une bo\u00eete noire suppl\u00e9mentaire montre quelles colonnes le widget comprend, quelles colonnes il ignore, et quelles colonnes suppl\u00e9mentaires le widget pourrait utiliser. Actuellement, il dit qu\u2019il ne reconna\u00eet aucune des colonnes pr\u00e9sentes, qu\u2019il attend des colonnes comme Num\u00e9ro , Client , Articles , etc., et qu\u2019il ignore les colonnes par d\u00e9faut A , B et C dans la table des Factures. En regardant le d\u00e9but de la facture, nous voyons un espace pour un num\u00e9ro de facture, NUM\u00c9RO DE FACTURE : #Num\u00e9ro . Renommons donc la colonne A en Num\u00e9ro , nous pourrions laisser la valeur \u00e0 1, mais cela donnerait l\u2019impression que nous n\u2019avons pas encore fait beaucoup d\u2019affaires. Je vais choisir de d\u00e9finir le num\u00e9ro de facture comme \u00e9tant $id + 51371 , o\u00f9 $id est un identifiant num\u00e9rique auto-incr\u00e9ment\u00e9 attribu\u00e9 \u00e0 chaque ligne. Mais vous pouvez le d\u00e9finir manuellement ou avec une formule diff\u00e9rente. D\u00e8s qu\u2019il est d\u00e9fini, la facture se met \u00e0 jour : La prochaine colonne sugg\u00e9r\u00e9e par la bo\u00eete d\u2019aide est Client , alors renommons la colonne B en Client . Plus tard, nous donnerons des informations sur le client de mani\u00e8re structur\u00e9e, mais pour l\u2019instant, mettons juste du texte ici (utilisez Shift + Entr\u00e9e pour ins\u00e9rer des sauts de ligne) : Super, maintenant la bo\u00eete Client est remplie. La prochaine colonne sugg\u00e9r\u00e9e est Articles , alors renommons la colonne C en Articles . Plus tard, nous donnerons des informations sur les articles de mani\u00e8re structur\u00e9e, mais pour l\u2019instant, mettons juste du texte ici : Et maintenant la Description est d\u00e9finie. Il nous manque un total, alors ajoutons une colonne appel\u00e9e Total et d\u00e9finissons-la \u00e0 100 : La facture ne se mettra pas \u00e0 jour imm\u00e9diatement. C\u2019est la premi\u00e8re nouvelle colonne que nous avons ajout\u00e9e - jusqu\u2019\u00e0 pr\u00e9sent, nous les avons renomm\u00e9es. Lorsque nous avons cr\u00e9\u00e9 le Widget Personnalis\u00e9, il a re\u00e7u l\u2019acc\u00e8s aux colonnes qui existaient au moment de la cr\u00e9ation. Pour permettre au widget de voir la nouvelle colonne, ouvrez \u00e0 nouveau Options du Widget et d\u00e9placez Total de Colonnes Cach\u00e9es \u00e0 Colonnes Visibles : Super, la facture s\u2019est mise \u00e0 jour. Maintenant, d\u00e9finissons qui \u00e9met la facture en ajoutant une colonne \u00c9metteur (n\u2019oubliez pas de la rendre visible pour le widget via Options du Widget ). Comme derni\u00e8re \u00e9tape pour cr\u00e9er une facture utilisable, ajoutons une colonne \u00c9mise et mettons-y la date d\u2019aujourd\u2019hui (n\u2019oubliez pas de la rendre visible pour le widget via Options du Widget ). D\u00e8s que la facture a une date, la bo\u00eete d\u2019aide noire dispara\u00eetra : D\u2019accord ! Si quelqu\u2019un m\u2019envoyait cela, je le paierais. Vous devriez me donner un coup de pouce en lui donnant une date d\u2019\u00e9ch\u00e9ance. Ajoutons une colonne \u00c9ch\u00e9ance et d\u00e9finissons-la \u00e0 un mois \u00e0 partir de la date \u00c9mise . N\u2019oubliez pas de rendre la colonne \u00c9ch\u00e9ance visible pour le widget via Options du Widget . Assurez-vous \u00e9galement de d\u00e9finir le Type de Colonne pour \u00c9mise sur Date sinon vous ne pourrez pas faire de calculs de date dessus (ce sera juste une cha\u00eene de caract\u00e8res). S\u2019il y a des instructions sp\u00e9ciales \u00e0 accompagner avec la facture, nous pouvons ajouter une colonne Note . N\u2019oubliez pas de la rendre visible pour le widget via Options du Widget .","title":"Configuration d’une table de factures"},{"location":"examples/2020-08-invoices/#entrer-les-informations-du-client","text":"Maintenant, faisons deux changements utiles \u00e0 la configuration de la facture : Mettre les informations du client dans une table s\u00e9par\u00e9e, pour ne pas avoir \u00e0 ressaisir leur adresse \u00e0 chaque fois que nous les facturons (et nous pouvons importer les adresses en vrac). Entrer les articles et les prix dans une table, pour que les factures multi-articles soient faciles \u00e0 faire (et nous pouvons utiliser des formules et des recherches pour les prix si nous le souhaitons). Avant de le faire, nous devons informer Grist que le contenu de la facture d\u00e9pendra de ces autres tables, afin qu\u2019il puisse la mettre \u00e0 jour lorsque quelque chose change, et s\u2019assurer que la facture ait acc\u00e8s \u00e0 tout ce dont elle a besoin. Cr\u00e9ez une colonne nomm\u00e9e R\u00e9f\u00e9rences et donnez-lui cette formule : = RECORD(rec, expand_refs=1) Cela signifie \u201cprendre l\u2019enregistrement actuel et l\u2019emballer, y compris tout ce qu\u2019il r\u00e9f\u00e9rence directement\u201d. \u00c9tant donn\u00e9 que Grist est une feuille de calcul, cela implique \u00e9galement \u201cmettre \u00e0 jour tout ce qui d\u00e9pend de cette colonne si quelque chose dans les r\u00e9f\u00e9rences change\u201d. N\u2019oubliez pas de rendre la colonne R\u00e9f\u00e9rences visible pour le widget via Options du Widget , afin que le widget soit mis \u00e0 jour au fur et \u00e0 mesure que nous ajoutons et modifions le mat\u00e9riel r\u00e9f\u00e9renc\u00e9. Lorsque le widget de facture voit une colonne nomm\u00e9e \u201cR\u00e9f\u00e9rences\u201d, il remplit la facture en utilisant les valeurs \u201cemball\u00e9es\u201d dans cette colonne, plut\u00f4t que les champs individuels de la facture. Le b\u00e9n\u00e9fice sera vu dans l\u2019\u00e9tape suivante, car ces valeurs emball\u00e9es peuvent inclure des donn\u00e9es provenant d\u2019enregistrements li\u00e9s. Ensuite, pla\u00e7ons les informations du client dans une table s\u00e9par\u00e9e. Ajoutez une nouvelle table \u00e0 la page pour entrer les informations de l\u2019entreprise en cliquant sur Ajouter Nouveau , Ajouter Widget \u00e0 la Page , puis S\u00e9lectionner Widget > Table et S\u00e9lectionner Donn\u00e9es > Nouvelle Table : Puis renommez la table en Entreprises . Vider \u00e9galement la colonne Client pour que nous puissions voir l\u2019aide sur ce que le widget attend l\u00e0 : Le widget sugg\u00e8re les colonnes Nom , Rue1 , Rue2 , Ville , \u00c9tat et Code Postal . Fournissons donc ces colonnes dans notre table Entreprises , et remplissons-les pour un client exemple. Ensuite, placez le m\u00eame Nom dans la colonne Client , et dans Options de Colonne d\u00e9finissez le Type de Colonne sur R\u00e9f\u00e9rence . R\u00e9f\u00e9rez-vous \u00e0 Entreprises Nom si Grist ne le devine pas automatiquement. Une fois que vous appuyez sur Appliquer , vous verrez une section Client bien format\u00e9e.","title":"Entrer les informations du client"},{"location":"examples/2020-08-invoices/#entrer-les-informations-de-lemetteur","text":"Nous pourrions faire la m\u00eame chose pour la colonne \u00c9metteur que nous avons fait pour la colonne Client , et en faire une r\u00e9f\u00e9rence \u00e0 la table Entreprises ou une table s\u00e9par\u00e9e. Cependant, si vous utilisez toujours le m\u00eame nom et la m\u00eame adresse pour votre entreprise, vous pouvez \u00e9viter de configurer une r\u00e9f\u00e9rence en entrant une formule comme celle-ci dans la colonne \u00c9metteur (commencez \u00e0 taper avec = pour en faire une formule) : { \"Nom\": \"Applaudissements Tonitruants\", \"Rue1\": \"6502 Route Automatis\u00e9e\", \"Ville\": \"New York\", \"\u00c9tat\": \"NY\", \"Code Postal\": \"10003\", \"Email\": \"applaudissements@tonnerre.com\", \"T\u00e9l\u00e9phone\": \"+1-800-YAY-YAYS\", \"Site Web\": \"applaudissements.com\" } Puis d\u00e9finissez le Type de Colonne pour \u00c9metteur sur Any dans le panneau de droite. Remarquez comment les emails, les num\u00e9ros de t\u00e9l\u00e9phone et les liens sont sp\u00e9cialement format\u00e9s par le widget.","title":"Entrer les informations de l’\u00e9metteur"},{"location":"examples/2020-08-invoices/#entrer-les-informations-des-articles","text":"Maintenant, configurons la liste des articles et des prix qui est au c\u0153ur d\u2019une facture. Videz la colonne Articles pour voir ce que nous pouvons y mettre. Elle montrera que Articles peut \u00eatre une liste, o\u00f9 chaque article a une Description , un Prix , une Quantit\u00e9 et un Total . Ajoutons donc une table Articles comme nous avons ajout\u00e9 Entreprises , et donnons-lui ces quatre colonnes. Nous pouvons d\u00e9finir Total avec cette formule simple : $Prix * $Quantit\u00e9 Maintenant, nous devons tirer ces articles dans la table Factures pour que le Widget Personnalis\u00e9 y ait acc\u00e8s. D\u00e9finissez la colonne Articles sur la formule Articles.lookupRecords() , puis r\u00e9initialisez son type de colonne sur Any . Cette formule n\u00e9cessite un peu plus de travail, ce que nous ferons bient\u00f4t, mais commen\u00e7ons par cela. Super, notre facture se met \u00e0 jour correctement ! Supprimez la colonne Total pour obtenir une colonne calcul\u00e9e automatiquement : Il est probablement plus confortable d\u2019\u00e9diter les factures comme une Vue Fiche plut\u00f4t qu\u2019une Vue Table, alors changeons cela en utilisant Options du Widget , Table , Changer Widget , Fiche , Enregistrer . Vous pouvez personnaliser la mise en page de la fiche \u00e0 votre go\u00fbt. Pour ajouter une nouvelle facture, cliquez sur le petit + au-dessus de la fiche des factures, d\u00e9finissez une date \u00c9mise , et choisissez soit le Client existant soit ajoutez un nouveau. Une fois que nous avons une deuxi\u00e8me facture, il devient clair que nous avons n\u00e9glig\u00e9 la formule pour collecter les articles de la facture - toutes les factures contiennent tous les articles. Pas de probl\u00e8me, nous pouvons \u00eatre plus sp\u00e9cifiques en ajoutant une colonne Facture aux Articles et en la configurant pour faire r\u00e9f\u00e9rence \u00e0 des Factures sp\u00e9cifiques : Une fois cela fait, nous pouvons saupoudrer un peu de poussi\u00e8re de f\u00e9e Grist, et aller dans Options du Widget pour la Vue Table ARTICLES , cliquer sur Changer Widget , et d\u00e9finir S\u00c9LECTIONNER PAR sur FICHE FACTURES . Une fois cela enregistr\u00e9, seuls les articles de la facture actuellement s\u00e9lectionn\u00e9e sont affich\u00e9s. Encore mieux, lorsque vous ajoutez de nouveaux articles, la colonne facture est automatiquement d\u00e9finie sur la facture que vous visualisez. Vous pouvez donc simplement masquer la colonne facture et l\u2019oublier. Maintenant, informons le Widget Personnalis\u00e9 des articles \u00e0 utiliser en mettant \u00e0 jour la formule Articles pour \u00eatre plus pr\u00e9cise : Articles.lookupRecords(Facture=$id) Avec cela, entrer de nouvelles factures devient un jeu d\u2019enfant ! Cliquez sur + pour ajouter une nouvelle fiche de facture. Choisissez le client, d\u00e9finissez la date d\u2019\u00e9mission. Ajoutez des articles. Termin\u00e9 !","title":"Entrer les informations des articles"},{"location":"examples/2020-08-invoices/#finition","text":"Vous pouvez ajuster la configuration \u00e0 votre go\u00fbt. Par exemple, je choisirais d\u2019ajouter de nouveaux clients sur une page s\u00e9par\u00e9e ( B ou Entreprises sur le panneau de gauche) car c\u2019est relativement peu fr\u00e9quent ; vous pourriez choisir de garder cela sur la m\u00eame page. Je n\u2019ai pas besoin de d\u00e9ductions ou de taxes, si vous en avez besoin vous pourriez ajouter des colonnes et/ou des formules pour cela. Le widget de facture personnalis\u00e9 fonctionne pour moi tel quel, mais si j\u2019avais besoin de modifier quelque chose, je pourrais copier le d\u00e9p\u00f4t GitHub dans lequel il se trouve et le changer un peu (ou engager un d\u00e9veloppeur web pour le faire pour moi - ils n\u2019ont pas besoin d\u2019\u00eatre des experts Grist). Pour les d\u00e9veloppeurs int\u00e9ress\u00e9s, le code GitHub est ici : https://github.com/gristlabs/grist-widget/tree/master/invoices . Amusez-vous bien et bonne chance pour \u00eatre pay\u00e9 !","title":"Finition"},{"location":"examples/2020-09-payroll/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Suivi de la Paie # Si vous avez des employ\u00e9s, alors vous suivez la paie. Vous utilisez peut-\u00eatre un service de paie, et il vous demande probablement de saisir les heures de chaque employ\u00e9 une fois par mois. C\u2019est l\u00e0 que Grist peut vous aider \u00e0 suivre les choses de mani\u00e8re pratique et \u00e0 r\u00e9duire les erreurs, surtout si vous avez des employ\u00e9s \u00e0 temps partiel. Le Mod\u00e8le de Paie # Le mod\u00e8le finalis\u00e9 est ici : https://templates.getgrist.com/5pHLanQNThxk/Payroll . N\u2019h\u00e9sitez pas \u00e0 l\u2019ouvrir dans une fen\u00eatre s\u00e9par\u00e9e et \u00e0 essayer les choses vous-m\u00eame au fur et \u00e0 mesure. Le mod\u00e8le r\u00e9pond \u00e0 quelques besoins : Nous devons pouvoir ajouter des employ\u00e9s et conserver leurs informations de contact de base. Nous devons d\u00e9finir les taux auxquels les gens sont pay\u00e9s, et ces taux peuvent changer au fil du temps. Dans notre exemple, les taux varient \u00e9galement selon le r\u00f4le : la m\u00eame personne peut travailler comme Instructeur dans un programme et comme Coordinateur dans un autre, \u00e0 des taux diff\u00e9rents. Nous devons saisir les heures de chaque personne. Nous devons obtenir les totaux mensuels, \u00e0 la fois pour saisir les donn\u00e9es dans notre service de paie et pour v\u00e9rifier que tout correspond. La Page \u201cPersonnes\u201d # Commen\u00e7ons par l\u2019onglet \u201cPersonnes\u201d dans l\u2019exemple. Il r\u00e9pond \u00e0 nos besoins (1), (2) et (3). En haut, nous avons une liste de personnes, avec des informations de contact telles que l\u2019adresse et le num\u00e9ro de t\u00e9l\u00e9phone. Pour ajouter une nouvelle personne, cliquez dans la derni\u00e8re ligne de la table PERSONNES et saisissez les donn\u00e9es. En dessous, nous avons une fiche pour la personne s\u00e9lectionn\u00e9e \u2013 un moyen pratique de visualiser ou de mettre \u00e0 jour l\u2019enregistrement de la personne s\u00e9lectionn\u00e9e. \u00c0 c\u00f4t\u00e9, il y a les taux pour cette personne. Nous suivons tous les taux, pas seulement le plus r\u00e9cent, ainsi que la date d\u2019effet de chaque taux. Pour ajouter un nouveau taux, s\u00e9lectionnez une personne, cliquez dans la derni\u00e8re ligne de la table TAUX et saisissez la date d\u2019effet dans la colonne D\u00e9but du Taux (peut-\u00eatre en utilisant le raccourci pour la date d\u2019aujourd\u2019hui : \u2318 + ; (point-virgule) sur Mac ou Ctrl + ; sur Windows). D\u00e9finissez le R\u00f4le auquel il s\u2019applique et le Taux Horaire . Le champ Commentaire est pour vos propres notes. Ne modifiez pas les valeurs des taux existants, sinon les calculs de paie pass\u00e9s seront affect\u00e9s. Lorsque vous accordez une augmentation \u00e0 quelqu\u2019un, ajoutez-la comme une nouvelle ligne. De cette fa\u00e7on, l\u2019historique complet est conserv\u00e9 et disponible pour r\u00e9f\u00e9rence. La Page \u201cPaie\u201d # Pour saisir les heures de paie, passez \u00e0 la page \u201cPaie\u201d. C\u2019est la t\u00e2che la plus courante, nous avons donc plac\u00e9 cette page en premier dans la liste des pages pour qu\u2019elle s\u2019ouvre par d\u00e9faut lorsque vous ouvrez le document. Faites d\u00e9filer jusqu\u2019en bas (vous pouvez utiliser ces raccourcis pratiques : \u2318 \u2193 sur Mac, Ctrl + \u2193 sur Windows). Pour ajouter une entr\u00e9e de paie, saisissez la date (ou utilisez le s\u00e9lecteur de date), s\u00e9lectionnez la personne en utilisant l\u2019auto-compl\u00e9tion, s\u00e9lectionnez son r\u00f4le et saisissez ses heures. Les quelques colonnes suivantes recherchent automatiquement le taux pertinent et calculent le paiement. Si vous souhaitez saisir des heures pour un intervalle de dates, par exemple pour une semaine particuli\u00e8re ou pour quelqu\u2019un travaillant \u00e0 temps plein ce mois-ci, vous pouvez utiliser Date comme date de d\u00e9but et saisir \u00e9galement une Date de Fin . L\u2019\u00e9l\u00e9ment int\u00e9ressant de cette page est la fa\u00e7on dont le taux Par Heure est recherch\u00e9. Vous n\u2019avez pas besoin de vous en soucier si vous utilisez simplement le mod\u00e8le, mais si vous aimez regarder sous le capot ou si vous avez besoin de personnaliser cela davantage selon vos besoins, je vais l\u2019expliquer en d\u00e9tail ci-dessous. La Page \u201cP\u00e9riodes de Paie\u201d # Ici, les totaux pour chaque p\u00e9riode sont automatiquement totalis\u00e9s pour r\u00e9pondre \u00e0 notre besoin (5) \u2014 voir un aper\u00e7u, saisir des donn\u00e9es dans un syst\u00e8me de paie et v\u00e9rifier que tout correspond. La derni\u00e8re p\u00e9riode de paie (dans notre cas, un mois) se trouve en haut de la table en haut \u00e0 gauche. Vous pouvez s\u00e9lectionner n\u2019importe quelle p\u00e9riode de paie pour voir un graphique circulaire avec un aper\u00e7u des paiements r\u00e9partis par r\u00f4le et une table de combien chaque personne a gagn\u00e9 ce mois-l\u00e0. Les noms et les heures dans la derni\u00e8re table sont g\u00e9n\u00e9ralement tout ce dont un service de paie a besoin. De plus, nous avons inclus une colonne Dates r\u00e9sumant les dates travaill\u00e9es ce mois-ci : pour les personnes travaillant \u00e0 temps partiel, cela aide \u00e0 se souvenir de quand le revenu a \u00e9t\u00e9 gagn\u00e9. Cela pourrait \u00eatre une note pratique \u00e0 inclure dans un bulletin de paie si votre service de paie le permet. C\u2019est tout ! Nous avons maintenant un suivi de la paie pratique et simple. Sous le capot # J\u2019ai promis de montrer comment les taux sont recherch\u00e9s. Ouvrez la page \u201cPaie\u201d, cliquez sur n\u2019importe quelle cellule dans la colonne Par Heure et appuyez sur Entr\u00e9e . La formule que vous voyez est une fonction Python complexe, mais elle est intentionnellement d\u00e9compos\u00e9e en morceaux, avec des commentaires expliquant ce que fait chaque ligne : # Obtenez tous les taux pour la Personne et le R\u00f4le dans cette ligne. rates = Rates.lookupRecords(Person=$Person, Role=$Role) # S\u00e9lectionnez uniquement les taux dont le D\u00e9but_Taux est avant ou \u00e0 la date de cette ligne. past_rates = [r for r in rates if r.Rate_Start <= $Date] # S\u00e9lectionnez le plus r\u00e9cent des past_rates, c'est-\u00e0-dire le maximum par D\u00e9but_Taux. current_rate = max(past_rates, key=lambda r: r.Rate_Start) # Retournez le Taux_Horaire de l'enregistrement de taux pertinent. return current_rate.Hourly_Rate (Si cela semble trop compliqu\u00e9, bonne chance pour essayer de faire la m\u00eame chose dans une feuille de calcul traditionnelle !) Lisez les commentaires dans ce code pour comprendre les \u00e9tapes. Pour ceux qui connaissent Python, cela peut d\u00e9j\u00e0 avoir un sens parfait. Pour ceux qui ne le connaissent pas, voici les liens pertinents vers la documentation de Grist et de Python : lookupRecords : comment nous recherchons tous les taux pour la personne et le r\u00f4le donn\u00e9s. list comprehensions : comment nous filtrons uniquement les taux avec un D\u00e9but_Taux ant\u00e9rieur. max function : comment nous choisissons l\u2019enregistrement de taux avec le D\u00e9but_Taux le plus r\u00e9cent. .Field : comment nous obtenons le champ Taux_Horaire de l\u2019enregistrement de taux. Cette formule est \u00e9galement une bonne illustration de l\u2019utilit\u00e9 de disposer de Python, ainsi que de formules multi-lignes, de variables et de commentaires. Utilisation du mod\u00e8le de paie # Pour commencer \u00e0 utiliser cet exemple pour votre propre paie, commencez par le mod\u00e8le : ALLER AU MOD\u00c8LE puis cliquez sur \u201cEnregistrer une copie\u201d : Ensuite, cochez la case \u201cComme Mod\u00e8le\u201d. Votre copie inclura alors toute la structure, la logique et les mises en page du document de paie sans aucune des donn\u00e9es d\u2019exemple.","title":"Track payroll"},{"location":"examples/2020-09-payroll/#suivi-de-la-paie","text":"Si vous avez des employ\u00e9s, alors vous suivez la paie. Vous utilisez peut-\u00eatre un service de paie, et il vous demande probablement de saisir les heures de chaque employ\u00e9 une fois par mois. C\u2019est l\u00e0 que Grist peut vous aider \u00e0 suivre les choses de mani\u00e8re pratique et \u00e0 r\u00e9duire les erreurs, surtout si vous avez des employ\u00e9s \u00e0 temps partiel.","title":"Suivi de la Paie"},{"location":"examples/2020-09-payroll/#le-modele-de-paie","text":"Le mod\u00e8le finalis\u00e9 est ici : https://templates.getgrist.com/5pHLanQNThxk/Payroll . N\u2019h\u00e9sitez pas \u00e0 l\u2019ouvrir dans une fen\u00eatre s\u00e9par\u00e9e et \u00e0 essayer les choses vous-m\u00eame au fur et \u00e0 mesure. Le mod\u00e8le r\u00e9pond \u00e0 quelques besoins : Nous devons pouvoir ajouter des employ\u00e9s et conserver leurs informations de contact de base. Nous devons d\u00e9finir les taux auxquels les gens sont pay\u00e9s, et ces taux peuvent changer au fil du temps. Dans notre exemple, les taux varient \u00e9galement selon le r\u00f4le : la m\u00eame personne peut travailler comme Instructeur dans un programme et comme Coordinateur dans un autre, \u00e0 des taux diff\u00e9rents. Nous devons saisir les heures de chaque personne. Nous devons obtenir les totaux mensuels, \u00e0 la fois pour saisir les donn\u00e9es dans notre service de paie et pour v\u00e9rifier que tout correspond.","title":"Le Mod\u00e8le de Paie"},{"location":"examples/2020-09-payroll/#la-page-personnes","text":"Commen\u00e7ons par l\u2019onglet \u201cPersonnes\u201d dans l\u2019exemple. Il r\u00e9pond \u00e0 nos besoins (1), (2) et (3). En haut, nous avons une liste de personnes, avec des informations de contact telles que l\u2019adresse et le num\u00e9ro de t\u00e9l\u00e9phone. Pour ajouter une nouvelle personne, cliquez dans la derni\u00e8re ligne de la table PERSONNES et saisissez les donn\u00e9es. En dessous, nous avons une fiche pour la personne s\u00e9lectionn\u00e9e \u2013 un moyen pratique de visualiser ou de mettre \u00e0 jour l\u2019enregistrement de la personne s\u00e9lectionn\u00e9e. \u00c0 c\u00f4t\u00e9, il y a les taux pour cette personne. Nous suivons tous les taux, pas seulement le plus r\u00e9cent, ainsi que la date d\u2019effet de chaque taux. Pour ajouter un nouveau taux, s\u00e9lectionnez une personne, cliquez dans la derni\u00e8re ligne de la table TAUX et saisissez la date d\u2019effet dans la colonne D\u00e9but du Taux (peut-\u00eatre en utilisant le raccourci pour la date d\u2019aujourd\u2019hui : \u2318 + ; (point-virgule) sur Mac ou Ctrl + ; sur Windows). D\u00e9finissez le R\u00f4le auquel il s\u2019applique et le Taux Horaire . Le champ Commentaire est pour vos propres notes. Ne modifiez pas les valeurs des taux existants, sinon les calculs de paie pass\u00e9s seront affect\u00e9s. Lorsque vous accordez une augmentation \u00e0 quelqu\u2019un, ajoutez-la comme une nouvelle ligne. De cette fa\u00e7on, l\u2019historique complet est conserv\u00e9 et disponible pour r\u00e9f\u00e9rence.","title":"La Page “Personnes”"},{"location":"examples/2020-09-payroll/#la-page-paie","text":"Pour saisir les heures de paie, passez \u00e0 la page \u201cPaie\u201d. C\u2019est la t\u00e2che la plus courante, nous avons donc plac\u00e9 cette page en premier dans la liste des pages pour qu\u2019elle s\u2019ouvre par d\u00e9faut lorsque vous ouvrez le document. Faites d\u00e9filer jusqu\u2019en bas (vous pouvez utiliser ces raccourcis pratiques : \u2318 \u2193 sur Mac, Ctrl + \u2193 sur Windows). Pour ajouter une entr\u00e9e de paie, saisissez la date (ou utilisez le s\u00e9lecteur de date), s\u00e9lectionnez la personne en utilisant l\u2019auto-compl\u00e9tion, s\u00e9lectionnez son r\u00f4le et saisissez ses heures. Les quelques colonnes suivantes recherchent automatiquement le taux pertinent et calculent le paiement. Si vous souhaitez saisir des heures pour un intervalle de dates, par exemple pour une semaine particuli\u00e8re ou pour quelqu\u2019un travaillant \u00e0 temps plein ce mois-ci, vous pouvez utiliser Date comme date de d\u00e9but et saisir \u00e9galement une Date de Fin . L\u2019\u00e9l\u00e9ment int\u00e9ressant de cette page est la fa\u00e7on dont le taux Par Heure est recherch\u00e9. Vous n\u2019avez pas besoin de vous en soucier si vous utilisez simplement le mod\u00e8le, mais si vous aimez regarder sous le capot ou si vous avez besoin de personnaliser cela davantage selon vos besoins, je vais l\u2019expliquer en d\u00e9tail ci-dessous.","title":"La Page “Paie”"},{"location":"examples/2020-09-payroll/#la-page-periodes-de-paie","text":"Ici, les totaux pour chaque p\u00e9riode sont automatiquement totalis\u00e9s pour r\u00e9pondre \u00e0 notre besoin (5) \u2014 voir un aper\u00e7u, saisir des donn\u00e9es dans un syst\u00e8me de paie et v\u00e9rifier que tout correspond. La derni\u00e8re p\u00e9riode de paie (dans notre cas, un mois) se trouve en haut de la table en haut \u00e0 gauche. Vous pouvez s\u00e9lectionner n\u2019importe quelle p\u00e9riode de paie pour voir un graphique circulaire avec un aper\u00e7u des paiements r\u00e9partis par r\u00f4le et une table de combien chaque personne a gagn\u00e9 ce mois-l\u00e0. Les noms et les heures dans la derni\u00e8re table sont g\u00e9n\u00e9ralement tout ce dont un service de paie a besoin. De plus, nous avons inclus une colonne Dates r\u00e9sumant les dates travaill\u00e9es ce mois-ci : pour les personnes travaillant \u00e0 temps partiel, cela aide \u00e0 se souvenir de quand le revenu a \u00e9t\u00e9 gagn\u00e9. Cela pourrait \u00eatre une note pratique \u00e0 inclure dans un bulletin de paie si votre service de paie le permet. C\u2019est tout ! Nous avons maintenant un suivi de la paie pratique et simple.","title":"La Page “P\u00e9riodes de Paie”"},{"location":"examples/2020-09-payroll/#sous-le-capot","text":"J\u2019ai promis de montrer comment les taux sont recherch\u00e9s. Ouvrez la page \u201cPaie\u201d, cliquez sur n\u2019importe quelle cellule dans la colonne Par Heure et appuyez sur Entr\u00e9e . La formule que vous voyez est une fonction Python complexe, mais elle est intentionnellement d\u00e9compos\u00e9e en morceaux, avec des commentaires expliquant ce que fait chaque ligne : # Obtenez tous les taux pour la Personne et le R\u00f4le dans cette ligne. rates = Rates.lookupRecords(Person=$Person, Role=$Role) # S\u00e9lectionnez uniquement les taux dont le D\u00e9but_Taux est avant ou \u00e0 la date de cette ligne. past_rates = [r for r in rates if r.Rate_Start <= $Date] # S\u00e9lectionnez le plus r\u00e9cent des past_rates, c'est-\u00e0-dire le maximum par D\u00e9but_Taux. current_rate = max(past_rates, key=lambda r: r.Rate_Start) # Retournez le Taux_Horaire de l'enregistrement de taux pertinent. return current_rate.Hourly_Rate (Si cela semble trop compliqu\u00e9, bonne chance pour essayer de faire la m\u00eame chose dans une feuille de calcul traditionnelle !) Lisez les commentaires dans ce code pour comprendre les \u00e9tapes. Pour ceux qui connaissent Python, cela peut d\u00e9j\u00e0 avoir un sens parfait. Pour ceux qui ne le connaissent pas, voici les liens pertinents vers la documentation de Grist et de Python : lookupRecords : comment nous recherchons tous les taux pour la personne et le r\u00f4le donn\u00e9s. list comprehensions : comment nous filtrons uniquement les taux avec un D\u00e9but_Taux ant\u00e9rieur. max function : comment nous choisissons l\u2019enregistrement de taux avec le D\u00e9but_Taux le plus r\u00e9cent. .Field : comment nous obtenons le champ Taux_Horaire de l\u2019enregistrement de taux. Cette formule est \u00e9galement une bonne illustration de l\u2019utilit\u00e9 de disposer de Python, ainsi que de formules multi-lignes, de variables et de commentaires.","title":"Sous le capot"},{"location":"examples/2020-09-payroll/#utilisation-du-modele-de-paie","text":"Pour commencer \u00e0 utiliser cet exemple pour votre propre paie, commencez par le mod\u00e8le : ALLER AU MOD\u00c8LE puis cliquez sur \u201cEnregistrer une copie\u201d : Ensuite, cochez la case \u201cComme Mod\u00e8le\u201d. Votre copie inclura alors toute la structure, la logique et les mises en page du document de paie sans aucune des donn\u00e9es d\u2019exemple.","title":"Utilisation du mod\u00e8le de paie"},{"location":"examples/2020-10-print-labels/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Impression d\u2019\u00c9tiquettes d\u2019Adresse # Imprimez-vous des \u00e9tiquettes d\u2019adresse ? En g\u00e9n\u00e9ral, cela implique quelques \u00e9tapes : d\u2019abord exporter les adresses, puis les importer dans Word ou un autre logiciel capable de les disposer pour un type d\u2019\u00e9tiquette particulier. Si vous maintenez des adresses dans Grist \u2013 ou utilisez des \u00e9tiquettes pour des badges nominatifs, des conteneurs de stockage, des affaires d\u2019enfants, ou d\u2019autres utilisations cr\u00e9atives \u2013 vous pouvez ajouter une vue personnalis\u00e9e pour avoir vos \u00e9tiquettes imprimables disponibles en un clic. Mod\u00e8le Pr\u00eat \u00e0 l\u2019Emploi # Laissez-moi d\u2019abord partager un mod\u00e8le. Plus tard, je d\u00e9crirai comment ajouter la m\u00eame fonctionnalit\u00e9 \u00e0 un document existant, par exemple pour ajouter des \u00e9tiquettes d\u2019adresse \u00e0 c\u00f4t\u00e9 des donn\u00e9es de CRM ou de Paie . Le mod\u00e8le est disponible \u00e0 : https://templates.getgrist.com/9nNr9uQwoXWA/Print-Mailing-Labels . Vous pouvez l\u2019utiliser imm\u00e9diatement. Il suffit de taper vos propres adresses. Le mod\u00e8le montre quelques variations de ce que vous pouvez faire. \u00c9tiquettes pour une table d\u2019adresses # C\u2019est ce que vous voyez sur la premi\u00e8re page : Vous pouvez utiliser le menu d\u00e9roulant en haut de la vue des \u00e9tiquettes pour s\u00e9lectionner la taille des \u00e9tiquettes, en fonction du papier d\u2019\u00e9tiquettes que vous pr\u00e9voyez d\u2019utiliser. Ce qui est r\u00e9ellement imprim\u00e9 est une colonne cach\u00e9e nomm\u00e9e LabelText . Si vous affichez cette colonne, ou la trouvez dans la page \u201cAdresses\u201d (o\u00f9 elle est visible), vous verrez que c\u2019est une formule qui assemble toutes les parties d\u2019une adresse. (Nous entrerons dans les d\u00e9tails de cette formule ci-dessous.) Pour imprimer les \u00e9tiquettes, s\u00e9lectionnez \u201cImprimer la vue\u201d dans le menu au-dessus de la vue des \u00e9tiquettes (voir aussi les Notes d\u2019Impression ci-dessous) : Une feuille d\u2019\u00e9tiquettes pour la m\u00eame adresse # Si vous avez besoin de nombreuses \u00e9tiquettes identiques, par exemple pour une adresse de retour, ajoutez une autre colonne nomm\u00e9e LabelCount . Ceci est illustr\u00e9 dans la page \u201cFeuilles d\u2019\u00c9tiquettes\u201d. Si vous avez plusieurs adresses dans la table et que vous souhaitez n\u2019en imprimer qu\u2019une seule, il suffit de d\u00e9finir le compte \u00e0 z\u00e9ro pour les adresses que vous ne souhaitez pas inclure. Une liste filtr\u00e9e d\u2019\u00e9tiquettes # Il existe plusieurs fa\u00e7ons d\u2019imprimer seulement quelques \u00e9tiquettes \u00e0 partir d\u2019une table plus grande, et celles-ci sont illustr\u00e9es dans le mod\u00e8le li\u00e9 : La page \u201c\u00c9tiquettes d\u2019Adresse\u201d inclut un bouton de filtre pour \u00c9tat , qui permet un filtrage simple par \u00e9tat. Vous pouvez cliquer sur le bouton + pour cr\u00e9er facilement des filtres suppl\u00e9mentaires comme celui-ci : Pour imprimer seulement quelques \u00e9tiquettes \u00e0 partir d\u2019une table plus grande, vous pouvez utiliser la colonne LabelCount avec une formule. Cette formule peut produire 1 pour une \u00e9tiquette qui doit \u00eatre incluse, ou 0 pour une \u00e9tiquette qui ne doit pas l\u2019\u00eatre. La page \u201cFiltr\u00e9 par Formule\u201d montre un exemple, avec la formule simple qui inclut uniquement les adresses de Californie : IF($State == \"CA\", 1, 0) : La page \u201cFiltr\u00e9 Manuellement\u201d inclut une colonne S\u00e9lectionner pour Imprimer . Cliquez sur n\u2019importe quel bouton pour inclure la ligne correspondante dans la feuille d\u2019\u00e9tiquettes. ALLER AU MOD\u00c8LE Ajouter des \u00c9tiquettes \u00e0 Votre Document # Si vous avez un document avec des adresses, vous pouvez ajouter une page avec des \u00e9tiquettes d\u2019adresse, et les \u00e9tiquettes seront l\u00e0 \u2013 \u00e0 jour et pr\u00eates pour vous \u2013 chaque fois que vous l\u2019ouvrez. Je vais supposer que vous avez d\u00e9j\u00e0 une page qui montre une table avec des adresses. Peut-\u00eatre s\u2019appelle-t-elle \u201cPersonnes\u201d, \u201cClients\u201d ou \u201cEmploy\u00e9s\u201d. Ouvrez le menu \u00e0 c\u00f4t\u00e9 du nom de la page dans le panneau de gauche, et cliquez sur \u201cDupliquer\u201d : Cela vous donne une nouvelle page. Nous ajouterons les \u00e9tiquettes ici, pour \u00e9viter de prendre de la place sur la page que vous utilisez \u00e0 d\u2019autres fins. Ajouter la formule LabelText # Ensuite, ajoutez une colonne \u00e0 la table avec les adresses, et nommez-la LabelText . Tapez une formule qui produit une adresse format\u00e9e sur plusieurs lignes. Voici un exemple, mais vous devrez peut-\u00eatre renommer, ajouter ou supprimer des champs en fonction des noms de vos colonnes : \"%s\\n%s %s\\n%s, %s %s\" % ($Name, $Street1, $Street2, $City, $State, $Zip) Notez qu\u2019il s\u2019agit de la syntaxe Python pour formater des cha\u00eenes de caract\u00e8res. Voici un guide bref pour d\u00e9coder cela : Chaque %s est remplac\u00e9 par la valeur suivante de la liste entre parenth\u00e8ses apr\u00e8s % . \\n ins\u00e8re une nouvelle ligne. $Name etc. sont des variables Grist correspondant aux champs de l\u2019enregistrement actuel. Ajouter la Vue Personnalis\u00e9e # Cliquez sur le bouton Ajouter Nouveau et s\u00e9lectionnez Ajouter une Vue \u00e0 la Page . Dans la bo\u00eete de dialogue qui appara\u00eet, s\u00e9lectionnez la vue Personnalis\u00e9e et la table qui contient les adresses : Cliquez sur Ajouter \u00e0 la Page . Ouvrez le menu au-dessus de la vue et s\u00e9lectionnez \u201cOptions de la Vue\u201d : Dans le panneau de droite qui s\u2019ouvre, dans la section \u201cPersonnalis\u00e9\u201d, entrez l\u2019URL de la vue qui impl\u00e9mente la fonctionnalit\u00e9 des \u00e9tiquettes d\u2019adresse : https://gristlabs.github.io/grist-widget/printlabels/ Ensuite, changez le menu d\u00e9roulant \u201cAcc\u00e8s\u201d de aucun \u00e0 lire la table . Vous devriez maintenant voir vos \u00e9tiquettes ! Si ce n\u2019est pas le cas, v\u00e9rifiez que LabelText est list\u00e9 ci-dessous sous \u201cColonnes Visibles\u201d. (Si c\u2019est sous \u201cColonnes Cach\u00e9es\u201d, cliquez sur l\u2019ic\u00f4ne \u201c\u0153il\u201d pour le rendre visible \u00e0 la vue.) Vous pouvez ajouter une autre colonne nomm\u00e9e LabelCount pour imprimer plusieurs \u00e9tiquettes ou en omettre certaines. Si vous le faites, assurez-vous simplement de l\u2019ajouter aux \u201cColonnes Visibles\u201d de la Vue Personnalis\u00e9e, car ce sont les seules colonnes disponibles pour elle. D\u00e9finir la Taille Pr\u00e9f\u00e9r\u00e9e des \u00c9tiquettes # La vue des \u00e9tiquettes se souvient de la derni\u00e8re taille d\u2019\u00e9tiquette que vous avez choisie. Si vous pr\u00e9f\u00e9rez qu\u2019elle s\u2019ouvre toujours \u00e0 une taille fixe, vous pouvez ajouter la taille pr\u00e9f\u00e9r\u00e9e dans l\u2019URL de la vue (dans le panneau de droite), par exemple : https://gristlabs.github.io/grist-widget/printlabels/#labels10 Les tailles disponibles sont labels8 , labels10 , labels20 , labels30 , labels60 et labels80 , chacune correspondant \u00e0 un type standard de papier d\u2019\u00e9tiquettes (tous bas\u00e9s sur le format de papier US Letter). Dans le document d\u2019exemple, cela est illustr\u00e9 dans la vue sur la page \u201cFiltr\u00e9\u201d. Notes d\u2019Impression # La vue utilise le navigateur pour l\u2019impression. Pour correspondre exactement aux tailles du papier d\u2019\u00e9tiquettes, v\u00e9rifiez bien que vous n\u2019avez pas de param\u00e8tres qui changeraient l\u2019\u00e9chelle, et v\u00e9rifiez l\u2019Aper\u00e7u avant impression avant d\u2019imprimer. S\u2019il y a une \u00e9chelle d\u00e9finie, elle doit \u00eatre \u201c100%\u201d, et des options telles que \u201cIgnorer l\u2019\u00c9chelle et R\u00e9duire pour Adapter \u00e0 la Largeur de la Page\u201d doivent \u00eatre d\u00e9sactiv\u00e9es. Personnalisation Suppl\u00e9mentaire # Cette fonctionnalit\u00e9 est construite en utilisant les Vues Personnalis\u00e9es . Elle vous permet, ou permet \u00e0 un d\u00e9veloppeur tiers, de la personnaliser davantage en utilisant HTML, CSS et Javascript. Pour les d\u00e9veloppeurs int\u00e9ress\u00e9s, le code de cette vue est disponible \u00e0 https://github.com/gristlabs/grist-widget/tree/master/printlabels .","title":"Print mailing labels"},{"location":"examples/2020-10-print-labels/#impression-detiquettes-dadresse","text":"Imprimez-vous des \u00e9tiquettes d\u2019adresse ? En g\u00e9n\u00e9ral, cela implique quelques \u00e9tapes : d\u2019abord exporter les adresses, puis les importer dans Word ou un autre logiciel capable de les disposer pour un type d\u2019\u00e9tiquette particulier. Si vous maintenez des adresses dans Grist \u2013 ou utilisez des \u00e9tiquettes pour des badges nominatifs, des conteneurs de stockage, des affaires d\u2019enfants, ou d\u2019autres utilisations cr\u00e9atives \u2013 vous pouvez ajouter une vue personnalis\u00e9e pour avoir vos \u00e9tiquettes imprimables disponibles en un clic.","title":"Impression d’\u00c9tiquettes d’Adresse"},{"location":"examples/2020-10-print-labels/#modele-pret-a-lemploi","text":"Laissez-moi d\u2019abord partager un mod\u00e8le. Plus tard, je d\u00e9crirai comment ajouter la m\u00eame fonctionnalit\u00e9 \u00e0 un document existant, par exemple pour ajouter des \u00e9tiquettes d\u2019adresse \u00e0 c\u00f4t\u00e9 des donn\u00e9es de CRM ou de Paie . Le mod\u00e8le est disponible \u00e0 : https://templates.getgrist.com/9nNr9uQwoXWA/Print-Mailing-Labels . Vous pouvez l\u2019utiliser imm\u00e9diatement. Il suffit de taper vos propres adresses. Le mod\u00e8le montre quelques variations de ce que vous pouvez faire.","title":"Mod\u00e8le Pr\u00eat \u00e0 l’Emploi"},{"location":"examples/2020-10-print-labels/#etiquettes-pour-une-table-dadresses","text":"C\u2019est ce que vous voyez sur la premi\u00e8re page : Vous pouvez utiliser le menu d\u00e9roulant en haut de la vue des \u00e9tiquettes pour s\u00e9lectionner la taille des \u00e9tiquettes, en fonction du papier d\u2019\u00e9tiquettes que vous pr\u00e9voyez d\u2019utiliser. Ce qui est r\u00e9ellement imprim\u00e9 est une colonne cach\u00e9e nomm\u00e9e LabelText . Si vous affichez cette colonne, ou la trouvez dans la page \u201cAdresses\u201d (o\u00f9 elle est visible), vous verrez que c\u2019est une formule qui assemble toutes les parties d\u2019une adresse. (Nous entrerons dans les d\u00e9tails de cette formule ci-dessous.) Pour imprimer les \u00e9tiquettes, s\u00e9lectionnez \u201cImprimer la vue\u201d dans le menu au-dessus de la vue des \u00e9tiquettes (voir aussi les Notes d\u2019Impression ci-dessous) :","title":"\u00c9tiquettes pour une table d’adresses"},{"location":"examples/2020-10-print-labels/#une-feuille-detiquettes-pour-la-meme-adresse","text":"Si vous avez besoin de nombreuses \u00e9tiquettes identiques, par exemple pour une adresse de retour, ajoutez une autre colonne nomm\u00e9e LabelCount . Ceci est illustr\u00e9 dans la page \u201cFeuilles d\u2019\u00c9tiquettes\u201d. Si vous avez plusieurs adresses dans la table et que vous souhaitez n\u2019en imprimer qu\u2019une seule, il suffit de d\u00e9finir le compte \u00e0 z\u00e9ro pour les adresses que vous ne souhaitez pas inclure.","title":"Une feuille d’\u00e9tiquettes pour la m\u00eame adresse"},{"location":"examples/2020-10-print-labels/#une-liste-filtree-detiquettes","text":"Il existe plusieurs fa\u00e7ons d\u2019imprimer seulement quelques \u00e9tiquettes \u00e0 partir d\u2019une table plus grande, et celles-ci sont illustr\u00e9es dans le mod\u00e8le li\u00e9 : La page \u201c\u00c9tiquettes d\u2019Adresse\u201d inclut un bouton de filtre pour \u00c9tat , qui permet un filtrage simple par \u00e9tat. Vous pouvez cliquer sur le bouton + pour cr\u00e9er facilement des filtres suppl\u00e9mentaires comme celui-ci : Pour imprimer seulement quelques \u00e9tiquettes \u00e0 partir d\u2019une table plus grande, vous pouvez utiliser la colonne LabelCount avec une formule. Cette formule peut produire 1 pour une \u00e9tiquette qui doit \u00eatre incluse, ou 0 pour une \u00e9tiquette qui ne doit pas l\u2019\u00eatre. La page \u201cFiltr\u00e9 par Formule\u201d montre un exemple, avec la formule simple qui inclut uniquement les adresses de Californie : IF($State == \"CA\", 1, 0) : La page \u201cFiltr\u00e9 Manuellement\u201d inclut une colonne S\u00e9lectionner pour Imprimer . Cliquez sur n\u2019importe quel bouton pour inclure la ligne correspondante dans la feuille d\u2019\u00e9tiquettes. ALLER AU MOD\u00c8LE","title":"Une liste filtr\u00e9e d’\u00e9tiquettes"},{"location":"examples/2020-10-print-labels/#ajouter-des-etiquettes-a-votre-document","text":"Si vous avez un document avec des adresses, vous pouvez ajouter une page avec des \u00e9tiquettes d\u2019adresse, et les \u00e9tiquettes seront l\u00e0 \u2013 \u00e0 jour et pr\u00eates pour vous \u2013 chaque fois que vous l\u2019ouvrez. Je vais supposer que vous avez d\u00e9j\u00e0 une page qui montre une table avec des adresses. Peut-\u00eatre s\u2019appelle-t-elle \u201cPersonnes\u201d, \u201cClients\u201d ou \u201cEmploy\u00e9s\u201d. Ouvrez le menu \u00e0 c\u00f4t\u00e9 du nom de la page dans le panneau de gauche, et cliquez sur \u201cDupliquer\u201d : Cela vous donne une nouvelle page. Nous ajouterons les \u00e9tiquettes ici, pour \u00e9viter de prendre de la place sur la page que vous utilisez \u00e0 d\u2019autres fins.","title":"Ajouter des \u00c9tiquettes \u00e0 Votre Document"},{"location":"examples/2020-10-print-labels/#ajouter-la-formule-labeltext","text":"Ensuite, ajoutez une colonne \u00e0 la table avec les adresses, et nommez-la LabelText . Tapez une formule qui produit une adresse format\u00e9e sur plusieurs lignes. Voici un exemple, mais vous devrez peut-\u00eatre renommer, ajouter ou supprimer des champs en fonction des noms de vos colonnes : \"%s\\n%s %s\\n%s, %s %s\" % ($Name, $Street1, $Street2, $City, $State, $Zip) Notez qu\u2019il s\u2019agit de la syntaxe Python pour formater des cha\u00eenes de caract\u00e8res. Voici un guide bref pour d\u00e9coder cela : Chaque %s est remplac\u00e9 par la valeur suivante de la liste entre parenth\u00e8ses apr\u00e8s % . \\n ins\u00e8re une nouvelle ligne. $Name etc. sont des variables Grist correspondant aux champs de l\u2019enregistrement actuel.","title":"Ajouter la formule LabelText"},{"location":"examples/2020-10-print-labels/#ajouter-la-vue-personnalisee","text":"Cliquez sur le bouton Ajouter Nouveau et s\u00e9lectionnez Ajouter une Vue \u00e0 la Page . Dans la bo\u00eete de dialogue qui appara\u00eet, s\u00e9lectionnez la vue Personnalis\u00e9e et la table qui contient les adresses : Cliquez sur Ajouter \u00e0 la Page . Ouvrez le menu au-dessus de la vue et s\u00e9lectionnez \u201cOptions de la Vue\u201d : Dans le panneau de droite qui s\u2019ouvre, dans la section \u201cPersonnalis\u00e9\u201d, entrez l\u2019URL de la vue qui impl\u00e9mente la fonctionnalit\u00e9 des \u00e9tiquettes d\u2019adresse : https://gristlabs.github.io/grist-widget/printlabels/ Ensuite, changez le menu d\u00e9roulant \u201cAcc\u00e8s\u201d de aucun \u00e0 lire la table . Vous devriez maintenant voir vos \u00e9tiquettes ! Si ce n\u2019est pas le cas, v\u00e9rifiez que LabelText est list\u00e9 ci-dessous sous \u201cColonnes Visibles\u201d. (Si c\u2019est sous \u201cColonnes Cach\u00e9es\u201d, cliquez sur l\u2019ic\u00f4ne \u201c\u0153il\u201d pour le rendre visible \u00e0 la vue.) Vous pouvez ajouter une autre colonne nomm\u00e9e LabelCount pour imprimer plusieurs \u00e9tiquettes ou en omettre certaines. Si vous le faites, assurez-vous simplement de l\u2019ajouter aux \u201cColonnes Visibles\u201d de la Vue Personnalis\u00e9e, car ce sont les seules colonnes disponibles pour elle.","title":"Ajouter la Vue Personnalis\u00e9e"},{"location":"examples/2020-10-print-labels/#definir-la-taille-preferee-des-etiquettes","text":"La vue des \u00e9tiquettes se souvient de la derni\u00e8re taille d\u2019\u00e9tiquette que vous avez choisie. Si vous pr\u00e9f\u00e9rez qu\u2019elle s\u2019ouvre toujours \u00e0 une taille fixe, vous pouvez ajouter la taille pr\u00e9f\u00e9r\u00e9e dans l\u2019URL de la vue (dans le panneau de droite), par exemple : https://gristlabs.github.io/grist-widget/printlabels/#labels10 Les tailles disponibles sont labels8 , labels10 , labels20 , labels30 , labels60 et labels80 , chacune correspondant \u00e0 un type standard de papier d\u2019\u00e9tiquettes (tous bas\u00e9s sur le format de papier US Letter). Dans le document d\u2019exemple, cela est illustr\u00e9 dans la vue sur la page \u201cFiltr\u00e9\u201d.","title":"D\u00e9finir la Taille Pr\u00e9f\u00e9r\u00e9e des \u00c9tiquettes"},{"location":"examples/2020-10-print-labels/#notes-dimpression","text":"La vue utilise le navigateur pour l\u2019impression. Pour correspondre exactement aux tailles du papier d\u2019\u00e9tiquettes, v\u00e9rifiez bien que vous n\u2019avez pas de param\u00e8tres qui changeraient l\u2019\u00e9chelle, et v\u00e9rifiez l\u2019Aper\u00e7u avant impression avant d\u2019imprimer. S\u2019il y a une \u00e9chelle d\u00e9finie, elle doit \u00eatre \u201c100%\u201d, et des options telles que \u201cIgnorer l\u2019\u00c9chelle et R\u00e9duire pour Adapter \u00e0 la Largeur de la Page\u201d doivent \u00eatre d\u00e9sactiv\u00e9es.","title":"Notes d’Impression"},{"location":"examples/2020-10-print-labels/#personnalisation-supplementaire","text":"Cette fonctionnalit\u00e9 est construite en utilisant les Vues Personnalis\u00e9es . Elle vous permet, ou permet \u00e0 un d\u00e9veloppeur tiers, de la personnaliser davantage en utilisant HTML, CSS et Javascript. Pour les d\u00e9veloppeurs int\u00e9ress\u00e9s, le code de cette vue est disponible \u00e0 https://github.com/gristlabs/grist-widget/tree/master/printlabels .","title":"Personnalisation Suppl\u00e9mentaire"},{"location":"examples/2020-11-treasure-hunt/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Planifier une Chasse au Tr\u00e9sor # Une chasse au tr\u00e9sor est une activit\u00e9 ludique pour une f\u00eate qui se d\u00e9roule ainsi : Tous les joueurs (les \u201cchercheurs\u201d) \u00e9coutent un indice pour un emplacement, puis partent \u00e0 sa recherche. Lorsque les chercheurs trouvent l\u2019emplacement, ils d\u00e9couvrent un autre indice \u00e0 lire. Chaque indice m\u00e8ne \u00e0 un nouvel emplacement, jusqu\u2019\u00e0 ce que finalement, au lieu d\u2019un indice, le chercheur trouve un tr\u00e9sor ! Les chercheurs peuvent \u00eatre regroup\u00e9s en \u00e9quipes selon les besoins, en fonction de leur \u00e2ge. La chasse r\u00e9compense vraiment la pr\u00e9paration, et Grist peut vous aider avec cela. Voici un exemple de chasse : Vous pouvez jouer avec l\u2019exemple vous-m\u00eame ici : https://templates.getgrist.com/ihsZTnKTF7Lr/Treasure-Hunt Une fois pr\u00eat \u00e0 commencer votre propre chasse compl\u00e8tement nouvelle, il suffit de faire \u201cEnregistrer une copie\u201d et de s\u00e9lectionner \u201cComme mod\u00e8le\u201d. Lieux # Tout d\u2019abord, pensez aux endroits o\u00f9 envoyer les chercheurs. Vous recherchez des endroits qui ont un caract\u00e8re ou une utilisation particuli\u00e8re, et o\u00f9 il y a des recoins ou des cachettes \u00e9vidents pour cacher un indice. L\u2019ensemble des lieux doit couvrir autant d\u2019espace que possible dans votre territoire. Il est acceptable de choisir des endroits proches les uns des autres, tant que quelqu\u2019un cherchant un indice autour de l\u2019un d\u2019eux ne s\u2019\u00e9gare pas vers l\u2019autre. Personnellement, je prends un certain plaisir sadique \u00e0 faire retracer leurs pas aux chercheurs sur la plus longue distance aussi souvent que possible. Par exemple, dans un appartement, les affiches et les peintures peuvent \u00eatre de bons endroits pour cacher des indices derri\u00e8re, ou des livres visuellement distinctifs sur une \u00e9tag\u00e8re. Pour d\u2019autres endroits comme l\u2019\u00e9vier de la cuisine ou les porte-serviettes, vous devez consid\u00e9rer si les indices survivront assez longtemps pour \u00eatre trouv\u00e9s ! Entrez tous les endroits auxquels vous pensez dans la vue \u201cPlaces\u201d du document de Chasse au Tr\u00e9sor. Ne vous inqui\u00e9tez pas encore de leur ordre. Indices # Maintenant que vous avez pens\u00e9 \u00e0 quelques endroits, r\u00e9fl\u00e9chissez aux indices pour eux. Dans le document de Chasse au Tr\u00e9sor, cliquez sur un endroit que vous avez ajout\u00e9, puis essayez de penser \u00e0 au moins un indice pour celui-ci. Mettez ces indices dans la vue \u201cClues\u201d. C\u2019est un bon moment pour partager le document, car vous ne savez jamais qui dans votre famille aura l\u2019esprit tordu n\u00e9cessaire pour trouver les indices les plus originaux. Ou peut-\u00eatre que vous le savez. Il n\u2019est pas n\u00e9cessaire de vous restreindre aux personnes qui seront pr\u00e9sentes. Surtout cette ann\u00e9e marqu\u00e9e par le COVID, cela peut \u00eatre un plaisir pour les personnes qui connaissent votre espace d\u2019avant mais ne peuvent pas \u00eatre physiquement pr\u00e9sentes de le visualiser et de proposer des cachettes astucieuses pour torturer ceux qui le sont. Le Sentier # Maintenant que vous avez des lieux et des indices, il ne reste plus qu\u2019\u00e0 les assembler en un sentier s\u00e9quentiel. Vous pouvez le faire dans la vue \u201cTrail\u201d. Commencez simplement \u00e0 taper l\u2019indice avec lequel vous voulez commencer, utilisez l\u2019 autocompl\u00e9tion pour le confirmer. Puis passez \u00e0 l\u2019indice suivant, dans l\u2019ordre que vous souhaitez. Choisissez un indice par emplacement. Grist montrera o\u00f9 chaque indice doit \u00eatre cach\u00e9 pour que la s\u00e9quence fonctionne, ce qui n\u2019est d\u00e9finitivement pas de la science-fus\u00e9e mais reste \u00e9tonnamment facile \u00e0 perdre de vue (surtout pour les jeunes cr\u00e9ateurs de sentiers). Il vous avertira \u00e9galement si vous avez r\u00e9p\u00e9t\u00e9 le m\u00eame emplacement deux fois. Impression # Lorsque votre sentier est pr\u00eat, le document dispose d\u2019une page \u201cPrint\u201d o\u00f9 vous pouvez imprimer les indices pr\u00eats \u00e0 \u00eatre cach\u00e9s, et la liste des endroits o\u00f9 les cacher si vous d\u00e9l\u00e9guez cette t\u00e2che \u00e0 des aides enthousiastes. Si le sentier est en ext\u00e9rieur, et qu\u2019il peut pleuvoir, il est judicieux d\u2019envelopper les indices dans du papier aluminium ou du plastique. Les id\u00e9es de lieux et d\u2019indices sont bonnes \u00e0 conserver pour de futurs \u00e9v\u00e9nements, soit sous forme de document Grist, soit sous forme d\u2019impression. Profitez de la chasse, et si vous trouvez des am\u00e9liorations \u00e0 apporter au tableur, faites-le nous savoir !","title":"Treasure hunt"},{"location":"examples/2020-11-treasure-hunt/#planifier-une-chasse-au-tresor","text":"Une chasse au tr\u00e9sor est une activit\u00e9 ludique pour une f\u00eate qui se d\u00e9roule ainsi : Tous les joueurs (les \u201cchercheurs\u201d) \u00e9coutent un indice pour un emplacement, puis partent \u00e0 sa recherche. Lorsque les chercheurs trouvent l\u2019emplacement, ils d\u00e9couvrent un autre indice \u00e0 lire. Chaque indice m\u00e8ne \u00e0 un nouvel emplacement, jusqu\u2019\u00e0 ce que finalement, au lieu d\u2019un indice, le chercheur trouve un tr\u00e9sor ! Les chercheurs peuvent \u00eatre regroup\u00e9s en \u00e9quipes selon les besoins, en fonction de leur \u00e2ge. La chasse r\u00e9compense vraiment la pr\u00e9paration, et Grist peut vous aider avec cela. Voici un exemple de chasse : Vous pouvez jouer avec l\u2019exemple vous-m\u00eame ici : https://templates.getgrist.com/ihsZTnKTF7Lr/Treasure-Hunt Une fois pr\u00eat \u00e0 commencer votre propre chasse compl\u00e8tement nouvelle, il suffit de faire \u201cEnregistrer une copie\u201d et de s\u00e9lectionner \u201cComme mod\u00e8le\u201d.","title":"Planifier une Chasse au Tr\u00e9sor"},{"location":"examples/2020-11-treasure-hunt/#lieux","text":"Tout d\u2019abord, pensez aux endroits o\u00f9 envoyer les chercheurs. Vous recherchez des endroits qui ont un caract\u00e8re ou une utilisation particuli\u00e8re, et o\u00f9 il y a des recoins ou des cachettes \u00e9vidents pour cacher un indice. L\u2019ensemble des lieux doit couvrir autant d\u2019espace que possible dans votre territoire. Il est acceptable de choisir des endroits proches les uns des autres, tant que quelqu\u2019un cherchant un indice autour de l\u2019un d\u2019eux ne s\u2019\u00e9gare pas vers l\u2019autre. Personnellement, je prends un certain plaisir sadique \u00e0 faire retracer leurs pas aux chercheurs sur la plus longue distance aussi souvent que possible. Par exemple, dans un appartement, les affiches et les peintures peuvent \u00eatre de bons endroits pour cacher des indices derri\u00e8re, ou des livres visuellement distinctifs sur une \u00e9tag\u00e8re. Pour d\u2019autres endroits comme l\u2019\u00e9vier de la cuisine ou les porte-serviettes, vous devez consid\u00e9rer si les indices survivront assez longtemps pour \u00eatre trouv\u00e9s ! Entrez tous les endroits auxquels vous pensez dans la vue \u201cPlaces\u201d du document de Chasse au Tr\u00e9sor. Ne vous inqui\u00e9tez pas encore de leur ordre.","title":"Lieux"},{"location":"examples/2020-11-treasure-hunt/#indices","text":"Maintenant que vous avez pens\u00e9 \u00e0 quelques endroits, r\u00e9fl\u00e9chissez aux indices pour eux. Dans le document de Chasse au Tr\u00e9sor, cliquez sur un endroit que vous avez ajout\u00e9, puis essayez de penser \u00e0 au moins un indice pour celui-ci. Mettez ces indices dans la vue \u201cClues\u201d. C\u2019est un bon moment pour partager le document, car vous ne savez jamais qui dans votre famille aura l\u2019esprit tordu n\u00e9cessaire pour trouver les indices les plus originaux. Ou peut-\u00eatre que vous le savez. Il n\u2019est pas n\u00e9cessaire de vous restreindre aux personnes qui seront pr\u00e9sentes. Surtout cette ann\u00e9e marqu\u00e9e par le COVID, cela peut \u00eatre un plaisir pour les personnes qui connaissent votre espace d\u2019avant mais ne peuvent pas \u00eatre physiquement pr\u00e9sentes de le visualiser et de proposer des cachettes astucieuses pour torturer ceux qui le sont.","title":"Indices"},{"location":"examples/2020-11-treasure-hunt/#le-sentier","text":"Maintenant que vous avez des lieux et des indices, il ne reste plus qu\u2019\u00e0 les assembler en un sentier s\u00e9quentiel. Vous pouvez le faire dans la vue \u201cTrail\u201d. Commencez simplement \u00e0 taper l\u2019indice avec lequel vous voulez commencer, utilisez l\u2019 autocompl\u00e9tion pour le confirmer. Puis passez \u00e0 l\u2019indice suivant, dans l\u2019ordre que vous souhaitez. Choisissez un indice par emplacement. Grist montrera o\u00f9 chaque indice doit \u00eatre cach\u00e9 pour que la s\u00e9quence fonctionne, ce qui n\u2019est d\u00e9finitivement pas de la science-fus\u00e9e mais reste \u00e9tonnamment facile \u00e0 perdre de vue (surtout pour les jeunes cr\u00e9ateurs de sentiers). Il vous avertira \u00e9galement si vous avez r\u00e9p\u00e9t\u00e9 le m\u00eame emplacement deux fois.","title":"Le Sentier"},{"location":"examples/2020-11-treasure-hunt/#impression","text":"Lorsque votre sentier est pr\u00eat, le document dispose d\u2019une page \u201cPrint\u201d o\u00f9 vous pouvez imprimer les indices pr\u00eats \u00e0 \u00eatre cach\u00e9s, et la liste des endroits o\u00f9 les cacher si vous d\u00e9l\u00e9guez cette t\u00e2che \u00e0 des aides enthousiastes. Si le sentier est en ext\u00e9rieur, et qu\u2019il peut pleuvoir, il est judicieux d\u2019envelopper les indices dans du papier aluminium ou du plastique. Les id\u00e9es de lieux et d\u2019indices sont bonnes \u00e0 conserver pour de futurs \u00e9v\u00e9nements, soit sous forme de document Grist, soit sous forme d\u2019impression. Profitez de la chasse, et si vous trouvez des am\u00e9liorations \u00e0 apporter au tableur, faites-le nous savoir !","title":"Impression"},{"location":"examples/2020-12-map/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Ajouter une Carte # Il peut \u00eatre utile parfois de visualiser des listes de lieux sur une carte g\u00e9ographique. Grist peut le faire si une table a au moins une colonne Nom , Latitude et Longitude . Supposons que nous ayons une liste de certains des plus grands objets en Am\u00e9rique : La premi\u00e8re \u00e9tape pour cr\u00e9er une carte pour ceux-ci est d\u2019ajouter une Vue personnalis\u00e9e \u00e0 la page : Une fois que nous avons configur\u00e9 la vue pour \u00eatre https://gristlabs.github.io/grist-widget/map/ et lui avons donn\u00e9 l\u2019acc\u00e8s Lire table , une carte devrait appara\u00eetre : Cliquer sur les objets de la liste fait appara\u00eetre le \u201cpop-up\u201d correspondant sur la carte. Nous pouvons ajouter d\u2019autres sections selon nos go\u00fbts, comme une vue \u201cfiche\u201d d\u00e9taill\u00e9e des d\u00e9tails de l\u2019attraction. Cet exemple est disponible \u00e0 https://public.getgrist.com/3boQPJrgFmFi/Large-in-America/m/fork . Cet exemple a quelques colonnes cach\u00e9es li\u00e9es \u00e0 la g\u00e9ocodage (le processus de calcul automatique des coordonn\u00e9es \u00e0 partir des adresses). Vous pouvez voir ces colonnes sur la deuxi\u00e8me page appel\u00e9e G\u00e9ocodage . Elles sont Geocode , Adresse et AdresseG\u00e9ocod\u00e9e . Si vous souhaitez utiliser la g\u00e9ocodage, vous aurez besoin de ces trois colonnes, et de donner \u00e0 la vue carte un acc\u00e8s complet \u00e0 votre document afin qu\u2019elle puisse stocker les r\u00e9sultats. Adresse doit contenir exactement ce que vous voulez passer au g\u00e9ocodeur. Dans l\u2019exemple, c\u2019est simplement \", \".join([$Ville, $\u00c9tat]) . AdresseG\u00e9ocod\u00e9e doit \u00eatre laiss\u00e9e intacte ; c\u2019est un espace pour que le g\u00e9ocodeur stocke des informations. Enfin, Geocode est un interrupteur qui doit \u00eatre activ\u00e9 pour g\u00e9n\u00e9rer automatiquement les latitudes et longitudes. Le g\u00e9ocodeur ne touchera aucune ligne avec Geocode d\u00e9sactiv\u00e9. Lorsque Geocode est activ\u00e9 pour une ligne, les latitudes et longitudes sont calcul\u00e9es et stock\u00e9es automatiquement pour cette ligne en utilisant Nominatim . La Politique d\u2019utilisation de Nominatim permet une utilisation cr\u00e9ative limit\u00e9e et non massive. Un g\u00e9ocodage robuste n\u00e9cessite g\u00e9n\u00e9ralement un compte avec un service externe et une cl\u00e9 API secr\u00e8te. Nous pr\u00e9voyons bient\u00f4t d\u2019avoir un moyen pratique de stocker des secrets dans un document, et nous pourrons alors supporter des options de g\u00e9ocodage flexibles. Si vous \u00eates int\u00e9ress\u00e9 par un aper\u00e7u de cette fonctionnalit\u00e9, veuillez nous contacter ! Enfin, si vous connaissez un peu de HTML/CSS/JS, ou si vous avez un d\u00e9veloppeur web dans votre \u00e9quipe, vous trouverez la vue carte personnalis\u00e9e simple \u00e0 restyler selon vos go\u00fbts. Si vous avez besoin d\u2019aide, faites-le nous savoir.","title":"Map"},{"location":"examples/2020-12-map/#ajouter-une-carte","text":"Il peut \u00eatre utile parfois de visualiser des listes de lieux sur une carte g\u00e9ographique. Grist peut le faire si une table a au moins une colonne Nom , Latitude et Longitude . Supposons que nous ayons une liste de certains des plus grands objets en Am\u00e9rique : La premi\u00e8re \u00e9tape pour cr\u00e9er une carte pour ceux-ci est d\u2019ajouter une Vue personnalis\u00e9e \u00e0 la page : Une fois que nous avons configur\u00e9 la vue pour \u00eatre https://gristlabs.github.io/grist-widget/map/ et lui avons donn\u00e9 l\u2019acc\u00e8s Lire table , une carte devrait appara\u00eetre : Cliquer sur les objets de la liste fait appara\u00eetre le \u201cpop-up\u201d correspondant sur la carte. Nous pouvons ajouter d\u2019autres sections selon nos go\u00fbts, comme une vue \u201cfiche\u201d d\u00e9taill\u00e9e des d\u00e9tails de l\u2019attraction. Cet exemple est disponible \u00e0 https://public.getgrist.com/3boQPJrgFmFi/Large-in-America/m/fork . Cet exemple a quelques colonnes cach\u00e9es li\u00e9es \u00e0 la g\u00e9ocodage (le processus de calcul automatique des coordonn\u00e9es \u00e0 partir des adresses). Vous pouvez voir ces colonnes sur la deuxi\u00e8me page appel\u00e9e G\u00e9ocodage . Elles sont Geocode , Adresse et AdresseG\u00e9ocod\u00e9e . Si vous souhaitez utiliser la g\u00e9ocodage, vous aurez besoin de ces trois colonnes, et de donner \u00e0 la vue carte un acc\u00e8s complet \u00e0 votre document afin qu\u2019elle puisse stocker les r\u00e9sultats. Adresse doit contenir exactement ce que vous voulez passer au g\u00e9ocodeur. Dans l\u2019exemple, c\u2019est simplement \", \".join([$Ville, $\u00c9tat]) . AdresseG\u00e9ocod\u00e9e doit \u00eatre laiss\u00e9e intacte ; c\u2019est un espace pour que le g\u00e9ocodeur stocke des informations. Enfin, Geocode est un interrupteur qui doit \u00eatre activ\u00e9 pour g\u00e9n\u00e9rer automatiquement les latitudes et longitudes. Le g\u00e9ocodeur ne touchera aucune ligne avec Geocode d\u00e9sactiv\u00e9. Lorsque Geocode est activ\u00e9 pour une ligne, les latitudes et longitudes sont calcul\u00e9es et stock\u00e9es automatiquement pour cette ligne en utilisant Nominatim . La Politique d\u2019utilisation de Nominatim permet une utilisation cr\u00e9ative limit\u00e9e et non massive. Un g\u00e9ocodage robuste n\u00e9cessite g\u00e9n\u00e9ralement un compte avec un service externe et une cl\u00e9 API secr\u00e8te. Nous pr\u00e9voyons bient\u00f4t d\u2019avoir un moyen pratique de stocker des secrets dans un document, et nous pourrons alors supporter des options de g\u00e9ocodage flexibles. Si vous \u00eates int\u00e9ress\u00e9 par un aper\u00e7u de cette fonctionnalit\u00e9, veuillez nous contacter ! Enfin, si vous connaissez un peu de HTML/CSS/JS, ou si vous avez un d\u00e9veloppeur web dans votre \u00e9quipe, vous trouverez la vue carte personnalis\u00e9e simple \u00e0 restyler selon vos go\u00fbts. Si vous avez besoin d\u2019aide, faites-le nous savoir.","title":"Ajouter une Carte"},{"location":"examples/2021-01-tasks/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Gestion des T\u00e2ches pour les \u00c9quipes # J\u2019\u00e9tais surpris d\u2019apprendre que beaucoup de gens pr\u00e9f\u00e8rent un tableur \u00e0 un logiciel de gestion de projet. Pourquoi ? Parce que c\u2019est plus simple. Eh bien, je suis d\u2019accord ! Depuis l\u2019ann\u00e9e derni\u00e8re, nous utilisons Grist en interne pour g\u00e9rer les projets et les t\u00e2ches au sein de Grist Labs. C\u2019est d\u2019une simplicit\u00e9 d\u00e9concertante, et cela fonctionne parfaitement pour nous. Notre Flux de Travail # Nous avons une petite \u00e9quipe et des r\u00e9unions r\u00e9guli\u00e8res programm\u00e9es. Les objectifs de ces r\u00e9unions sont de passer en revue tout le travail qui a \u00e9t\u00e9 assign\u00e9 et de finir avec une liste de nouvelles t\u00e2ches. Apr\u00e8s la r\u00e9union, chacun peut voir exactement ce qu\u2019on attend de lui pour la prochaine fois. Vous pouvez explorer l\u2019exemple sur https://public.getgrist.com/hik1whAV5snj/Task-Management/m/fork . Structure # La structure est simple. Il y a trois tables : People , c\u2019est-\u00e0-dire les membres de l\u2019\u00e9quipe, Check-Ins , identifi\u00e9s par date, Tasks , chacune associ\u00e9e \u00e0 une personne et \u00e0 un check-in. Nous avons une \u201cpersonne\u201d sp\u00e9ciale nomm\u00e9e \u201cBacklog\u201d. C\u2019est notre fa\u00e7on d\u2019enregistrer les t\u00e2ches qui ne sont pas encore assign\u00e9es \u00e0 quelqu\u2019un. Mes T\u00e2ches # La page appel\u00e9e Main montre tous les check-ins, ordonn\u00e9s avec le plus r\u00e9cent en haut. Lorsque celui-ci est s\u00e9lectionn\u00e9, la table TASKS montre toutes les t\u00e2ches actuellement assign\u00e9es, tri\u00e9es par personne. C\u2019est l\u00e0 que je regarde pour me rappeler ce qui est \u00e0 faire ensuite, et pour avoir le plaisir de cocher une t\u00e2che comme termin\u00e9e d\u00e8s que je l\u2019ai termin\u00e9e. Check-ins # De nos jours, tout le monde travaille \u00e0 distance, donc les check-ins se font via Zoom. Tout le monde ouvre le document Grist \u201cCheck-Ins\u201d, et une personne se charge de faire les mises \u00e0 jour et partage son \u00e9cran pour que les autres puissent suivre. Tout d\u2019abord, cr\u00e9ez un enregistrement pour le check-in d\u2019aujourd\u2019hui : cliquez dans la table CHECK_INS, et appuyez sur Ctrl + = ( \u2318 = sur Mac) pour ajouter un nouvel enregistrement, puis Ctrl + ; ( \u2318 + ; sur Mac) pour ins\u00e9rer la date d\u2019aujourd\u2019hui. Ensuite, cliquez sur la deuxi\u00e8me date (check-in pr\u00e9c\u00e9dent) pour passer en revue le travail pr\u00e9c\u00e9demment assign\u00e9. C\u2019est l\u00e0 que nous prenons tour \u00e0 tour pour passer en revue les t\u00e2ches termin\u00e9es. C\u2019est une occasion de marquer les choses comme compl\u00e8tes. Si une t\u00e2che n\u2019a pas \u00e9t\u00e9 commenc\u00e9e, changez la date associ\u00e9e \u00e0 la date d\u2019aujourd\u2019hui \u2013 cela d\u00e9placera la t\u00e2che. Il y a un champ pour enregistrer des notes optionnelles sur le r\u00e9sultat. Si une t\u00e2che n\u2019a \u00e9t\u00e9 que partiellement termin\u00e9e, nous notons ce qui a \u00e9t\u00e9 fait, la marquons comme compl\u00e8te, et cr\u00e9ons une nouvelle t\u00e2che dans le check-in d\u2019aujourd\u2019hui pour le travail restant. Toutes les t\u00e2ches de suivi sont \u00e9galement cr\u00e9\u00e9es pour le check-in d\u2019aujourd\u2019hui. \u00c0 la fin, toutes les t\u00e2ches encore associ\u00e9es au dernier check-in sont marqu\u00e9es comme termin\u00e9es. C\u2019est un enregistrement satisfaisant du travail de chacun ! Maintenant, cliquez sur le check-in d\u2019aujourd\u2019hui. Toutes les t\u00e2ches qui ont \u00e9t\u00e9 d\u00e9plac\u00e9es ou les t\u00e2ches de suivi cr\u00e9\u00e9es seront ici. C\u2019est une occasion de cr\u00e9er et d\u2019assigner de nouvelles t\u00e2ches, et de revoir le backlog. Backlog # Chaque fois qu\u2019une nouvelle t\u00e2che appara\u00eet (par exemple un bug \u00e0 corriger), n\u2019importe qui peut l\u2019ajouter au dernier check-in. Elle peut \u00eatre assign\u00e9e \u00e0 une personne imm\u00e9diatement, mais si ce n\u2019est pas urgent, elle peut \u00eatre assign\u00e9e \u00e0 \u201cBacklog\u201d. Pendant le check-in, nous passons en revue les nouveaux \u00e9l\u00e9ments du backlog et leur attribuons une priorit\u00e9 : juste un num\u00e9ro. Il y a une page s\u00e9par\u00e9e Backlog pour voir toutes les t\u00e2ches du backlog, ordonn\u00e9es par priorit\u00e9 de la plus haute \u00e0 la plus basse. Lors de l\u2019assignation des t\u00e2ches pendant le check-in, visitez cette page pour voir s\u2019il y a quelque chose de haute priorit\u00e9 qui devrait \u00eatre assign\u00e9. Si quelqu\u2019un a du temps libre, il y a g\u00e9n\u00e9ralement beaucoup de petits \u00e9l\u00e9ments de faible priorit\u00e9 qui peuvent \u00e9galement \u00eatre pris en charge. C\u2019est \u00e0 peu pr\u00e8s tout. La derni\u00e8re page que nous utilisons s\u2019appelle By Person , et c\u2019est juste une mani\u00e8re utile de voir toutes les t\u00e2ches termin\u00e9es et en attente pour une personne donn\u00e9e. C\u2019est une r\u00e9f\u00e9rence utile pour les bilans trimestriels. Document de Gestion des T\u00e2ches # Le document d\u2019exemple est disponible sur https://public.getgrist.com/hik1whAV5snj/Task-Management/m/fork . Il ne semble pas plus compliqu\u00e9 qu\u2019une liste de t\u00e2ches, et c\u2019est le but ! Pour commencer \u00e0 l\u2019utiliser pour vos propres t\u00e2ches, ouvrez le menu Partager ( ), et cliquez sur \u201cDupliquer le Document\u2026\u201d. Donnez-lui un nom et cochez la case \u201cComme Mod\u00e8le\u201d. Votre copie inclura alors la structure et les mises en page sans aucune des donn\u00e9es d\u2019exemple. Profitez-en ! Que vos t\u00e2ches soient termin\u00e9es \u00e0 temps !","title":"Task management"},{"location":"examples/2021-01-tasks/#gestion-des-taches-pour-les-equipes","text":"J\u2019\u00e9tais surpris d\u2019apprendre que beaucoup de gens pr\u00e9f\u00e8rent un tableur \u00e0 un logiciel de gestion de projet. Pourquoi ? Parce que c\u2019est plus simple. Eh bien, je suis d\u2019accord ! Depuis l\u2019ann\u00e9e derni\u00e8re, nous utilisons Grist en interne pour g\u00e9rer les projets et les t\u00e2ches au sein de Grist Labs. C\u2019est d\u2019une simplicit\u00e9 d\u00e9concertante, et cela fonctionne parfaitement pour nous.","title":"Gestion des T\u00e2ches pour les \u00c9quipes"},{"location":"examples/2021-01-tasks/#notre-flux-de-travail","text":"Nous avons une petite \u00e9quipe et des r\u00e9unions r\u00e9guli\u00e8res programm\u00e9es. Les objectifs de ces r\u00e9unions sont de passer en revue tout le travail qui a \u00e9t\u00e9 assign\u00e9 et de finir avec une liste de nouvelles t\u00e2ches. Apr\u00e8s la r\u00e9union, chacun peut voir exactement ce qu\u2019on attend de lui pour la prochaine fois. Vous pouvez explorer l\u2019exemple sur https://public.getgrist.com/hik1whAV5snj/Task-Management/m/fork .","title":"Notre Flux de Travail"},{"location":"examples/2021-01-tasks/#structure","text":"La structure est simple. Il y a trois tables : People , c\u2019est-\u00e0-dire les membres de l\u2019\u00e9quipe, Check-Ins , identifi\u00e9s par date, Tasks , chacune associ\u00e9e \u00e0 une personne et \u00e0 un check-in. Nous avons une \u201cpersonne\u201d sp\u00e9ciale nomm\u00e9e \u201cBacklog\u201d. C\u2019est notre fa\u00e7on d\u2019enregistrer les t\u00e2ches qui ne sont pas encore assign\u00e9es \u00e0 quelqu\u2019un.","title":"Structure"},{"location":"examples/2021-01-tasks/#mes-taches","text":"La page appel\u00e9e Main montre tous les check-ins, ordonn\u00e9s avec le plus r\u00e9cent en haut. Lorsque celui-ci est s\u00e9lectionn\u00e9, la table TASKS montre toutes les t\u00e2ches actuellement assign\u00e9es, tri\u00e9es par personne. C\u2019est l\u00e0 que je regarde pour me rappeler ce qui est \u00e0 faire ensuite, et pour avoir le plaisir de cocher une t\u00e2che comme termin\u00e9e d\u00e8s que je l\u2019ai termin\u00e9e.","title":"Mes T\u00e2ches"},{"location":"examples/2021-01-tasks/#check-ins","text":"De nos jours, tout le monde travaille \u00e0 distance, donc les check-ins se font via Zoom. Tout le monde ouvre le document Grist \u201cCheck-Ins\u201d, et une personne se charge de faire les mises \u00e0 jour et partage son \u00e9cran pour que les autres puissent suivre. Tout d\u2019abord, cr\u00e9ez un enregistrement pour le check-in d\u2019aujourd\u2019hui : cliquez dans la table CHECK_INS, et appuyez sur Ctrl + = ( \u2318 = sur Mac) pour ajouter un nouvel enregistrement, puis Ctrl + ; ( \u2318 + ; sur Mac) pour ins\u00e9rer la date d\u2019aujourd\u2019hui. Ensuite, cliquez sur la deuxi\u00e8me date (check-in pr\u00e9c\u00e9dent) pour passer en revue le travail pr\u00e9c\u00e9demment assign\u00e9. C\u2019est l\u00e0 que nous prenons tour \u00e0 tour pour passer en revue les t\u00e2ches termin\u00e9es. C\u2019est une occasion de marquer les choses comme compl\u00e8tes. Si une t\u00e2che n\u2019a pas \u00e9t\u00e9 commenc\u00e9e, changez la date associ\u00e9e \u00e0 la date d\u2019aujourd\u2019hui \u2013 cela d\u00e9placera la t\u00e2che. Il y a un champ pour enregistrer des notes optionnelles sur le r\u00e9sultat. Si une t\u00e2che n\u2019a \u00e9t\u00e9 que partiellement termin\u00e9e, nous notons ce qui a \u00e9t\u00e9 fait, la marquons comme compl\u00e8te, et cr\u00e9ons une nouvelle t\u00e2che dans le check-in d\u2019aujourd\u2019hui pour le travail restant. Toutes les t\u00e2ches de suivi sont \u00e9galement cr\u00e9\u00e9es pour le check-in d\u2019aujourd\u2019hui. \u00c0 la fin, toutes les t\u00e2ches encore associ\u00e9es au dernier check-in sont marqu\u00e9es comme termin\u00e9es. C\u2019est un enregistrement satisfaisant du travail de chacun ! Maintenant, cliquez sur le check-in d\u2019aujourd\u2019hui. Toutes les t\u00e2ches qui ont \u00e9t\u00e9 d\u00e9plac\u00e9es ou les t\u00e2ches de suivi cr\u00e9\u00e9es seront ici. C\u2019est une occasion de cr\u00e9er et d\u2019assigner de nouvelles t\u00e2ches, et de revoir le backlog.","title":"Check-ins"},{"location":"examples/2021-01-tasks/#backlog","text":"Chaque fois qu\u2019une nouvelle t\u00e2che appara\u00eet (par exemple un bug \u00e0 corriger), n\u2019importe qui peut l\u2019ajouter au dernier check-in. Elle peut \u00eatre assign\u00e9e \u00e0 une personne imm\u00e9diatement, mais si ce n\u2019est pas urgent, elle peut \u00eatre assign\u00e9e \u00e0 \u201cBacklog\u201d. Pendant le check-in, nous passons en revue les nouveaux \u00e9l\u00e9ments du backlog et leur attribuons une priorit\u00e9 : juste un num\u00e9ro. Il y a une page s\u00e9par\u00e9e Backlog pour voir toutes les t\u00e2ches du backlog, ordonn\u00e9es par priorit\u00e9 de la plus haute \u00e0 la plus basse. Lors de l\u2019assignation des t\u00e2ches pendant le check-in, visitez cette page pour voir s\u2019il y a quelque chose de haute priorit\u00e9 qui devrait \u00eatre assign\u00e9. Si quelqu\u2019un a du temps libre, il y a g\u00e9n\u00e9ralement beaucoup de petits \u00e9l\u00e9ments de faible priorit\u00e9 qui peuvent \u00e9galement \u00eatre pris en charge. C\u2019est \u00e0 peu pr\u00e8s tout. La derni\u00e8re page que nous utilisons s\u2019appelle By Person , et c\u2019est juste une mani\u00e8re utile de voir toutes les t\u00e2ches termin\u00e9es et en attente pour une personne donn\u00e9e. C\u2019est une r\u00e9f\u00e9rence utile pour les bilans trimestriels.","title":"Backlog"},{"location":"examples/2021-01-tasks/#document-de-gestion-des-taches","text":"Le document d\u2019exemple est disponible sur https://public.getgrist.com/hik1whAV5snj/Task-Management/m/fork . Il ne semble pas plus compliqu\u00e9 qu\u2019une liste de t\u00e2ches, et c\u2019est le but ! Pour commencer \u00e0 l\u2019utiliser pour vos propres t\u00e2ches, ouvrez le menu Partager ( ), et cliquez sur \u201cDupliquer le Document\u2026\u201d. Donnez-lui un nom et cochez la case \u201cComme Mod\u00e8le\u201d. Votre copie inclura alors la structure et les mises en page sans aucune des donn\u00e9es d\u2019exemple. Profitez-en ! Que vos t\u00e2ches soient termin\u00e9es \u00e0 temps !","title":"Document de Gestion des T\u00e2ches"},{"location":"examples/2021-03-leads/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Une table de prospects, avec des affectations # Les permissions avanc\u00e9es vous permettent de contr\u00f4ler comment un document partag\u00e9 est utilis\u00e9, et de maintenir une s\u00e9paration des r\u00f4les et des responsabilit\u00e9s. Dans cet exemple, nous supposons qu\u2019un entrepreneur utilise Grist comme un outil de suivi de prospects pour les ventes et les conseillers potentiels : Notre entrepreneur souhaite d\u00e9l\u00e9guer les prospects de vente \u00e0 une petite \u00e9quipe de freelances, et garder les conseillers potentiels priv\u00e9s. Ils veulent pouvoir assigner quelqu\u2019un pour suivre un prospect simplement en \u00e9crivant ses initiales dans une colonne \u201cAffectation\u201d, et ne permettre \u00e0 personne d\u2019autre de changer cette affectation. Voici les r\u00e8gles qu\u2019ils ont \u00e9tablies, que vous pouvez voir vous-m\u00eame en visitant l\u2019exemple : Il y a trois blocs de r\u00e8gles. Tout d\u2019abord, la r\u00e8gle pour la table des Conseillers : Cela restreint tout acc\u00e8s \u00e0 la table des Conseillers au propri\u00e9taire. Nous supposons que le document est d\u00e9tenu par l\u2019entrepreneur, et partag\u00e9 avec d\u2019autres en tant qu\u2019\u00e9diteur. Ensuite, il y a des r\u00e8gles pour la table des Prospects : Nous permettons uniquement au propri\u00e9taire de mettre \u00e0 jour quoi que ce soit dans les colonnes Nom ou Affectation. Nous interdisons \u00e0 quiconque autre que le propri\u00e9taire de supprimer une ligne de la table des Prospects. Ensuite, il y a des r\u00e8gles par d\u00e9faut, non sp\u00e9cifiques \u00e0 une table : Nous interdisons \u00e0 quiconque autre que le propri\u00e9taire de modifier la structure du document. Les r\u00e8gles restantes ici sont simplement le comportement par d\u00e9faut de tout document. Il y a aussi deux r\u00e8gles avanc\u00e9es sous forme de cases \u00e0 cocher, qui seraient typiquement d\u00e9sactiv\u00e9es. Elles donnent une permission sp\u00e9ciale pour voir les permissions avanc\u00e9es et copier ce document m\u00eame si normalement cela ne serait pas autoris\u00e9. Ce sont des exceptions utiles pour un document d\u2019exemple sans information sensible. Pour jouer avec le document, il est pr\u00e9f\u00e9rable d\u2019en faire une copie et d\u2019en devenir le propri\u00e9taire. Cliquez sur \u201cEnregistrer une copie\u201d, et placez le document dans votre espace personnel ou dans un espace d\u2019\u00e9quipe. Partagez le document avec quelqu\u2019un d\u2019autre en tant qu\u2019\u00e9diteur et assurez-vous qu\u2019ils voient ce que vous attendez . Vous voudrez d\u00e9sactiver les \u201cR\u00e8gles avanc\u00e9es\u201d qui vous ont permis d\u2019inspecter l\u2019exemple et d\u2019en faire une copie compl\u00e8te : N\u2019oubliez pas de cliquer sur \u201cEnregistrer\u201d apr\u00e8s avoir modifi\u00e9 les r\u00e8gles, afin qu\u2019elles prennent effet. Acc\u00e8s par utilisateur # Supposons que nous voulions maintenant restreindre les prospects pour qu\u2019ils ne soient vus que par la personne \u00e0 qui ils sont assign\u00e9s (ou par le propri\u00e9taire). Nous pouvons le faire de plusieurs fa\u00e7ons. Une mani\u00e8re pratique est d\u2019ajouter une table listant les membres de l\u2019\u00e9quipe, y compris leur adresse e-mail : Une fois que nous avons une telle table, nous pouvons faire en sorte que la colonne Affectation s\u2019y r\u00e9f\u00e8re. Voir https://public.getgrist.com/vuPduz2UdJDi/Lead-list-with-team/m/fork pour l\u2019exemple complet (vous devrez en faire une copie pour obtenir un acc\u00e8s complet, sinon vous verrez une vue filtr\u00e9e). Nous pouvons ensuite utiliser les membres de l\u2019\u00e9quipe dans les r\u00e8gles, via une table de propri\u00e9t\u00e9 d\u2019utilisateur : Ensuite, chaque utilisateur avec qui le document est partag\u00e9 (autre que les propri\u00e9taires) verra une vue filtr\u00e9e de seulement les prospects qui leur sont assign\u00e9s : Lisez notre introduction aux permissions avanc\u00e9es pour en savoir plus sur ce que vous pouvez faire avec les permissions avanc\u00e9es.","title":"Lead list"},{"location":"examples/2021-03-leads/#une-table-de-prospects-avec-des-affectations","text":"Les permissions avanc\u00e9es vous permettent de contr\u00f4ler comment un document partag\u00e9 est utilis\u00e9, et de maintenir une s\u00e9paration des r\u00f4les et des responsabilit\u00e9s. Dans cet exemple, nous supposons qu\u2019un entrepreneur utilise Grist comme un outil de suivi de prospects pour les ventes et les conseillers potentiels : Notre entrepreneur souhaite d\u00e9l\u00e9guer les prospects de vente \u00e0 une petite \u00e9quipe de freelances, et garder les conseillers potentiels priv\u00e9s. Ils veulent pouvoir assigner quelqu\u2019un pour suivre un prospect simplement en \u00e9crivant ses initiales dans une colonne \u201cAffectation\u201d, et ne permettre \u00e0 personne d\u2019autre de changer cette affectation. Voici les r\u00e8gles qu\u2019ils ont \u00e9tablies, que vous pouvez voir vous-m\u00eame en visitant l\u2019exemple : Il y a trois blocs de r\u00e8gles. Tout d\u2019abord, la r\u00e8gle pour la table des Conseillers : Cela restreint tout acc\u00e8s \u00e0 la table des Conseillers au propri\u00e9taire. Nous supposons que le document est d\u00e9tenu par l\u2019entrepreneur, et partag\u00e9 avec d\u2019autres en tant qu\u2019\u00e9diteur. Ensuite, il y a des r\u00e8gles pour la table des Prospects : Nous permettons uniquement au propri\u00e9taire de mettre \u00e0 jour quoi que ce soit dans les colonnes Nom ou Affectation. Nous interdisons \u00e0 quiconque autre que le propri\u00e9taire de supprimer une ligne de la table des Prospects. Ensuite, il y a des r\u00e8gles par d\u00e9faut, non sp\u00e9cifiques \u00e0 une table : Nous interdisons \u00e0 quiconque autre que le propri\u00e9taire de modifier la structure du document. Les r\u00e8gles restantes ici sont simplement le comportement par d\u00e9faut de tout document. Il y a aussi deux r\u00e8gles avanc\u00e9es sous forme de cases \u00e0 cocher, qui seraient typiquement d\u00e9sactiv\u00e9es. Elles donnent une permission sp\u00e9ciale pour voir les permissions avanc\u00e9es et copier ce document m\u00eame si normalement cela ne serait pas autoris\u00e9. Ce sont des exceptions utiles pour un document d\u2019exemple sans information sensible. Pour jouer avec le document, il est pr\u00e9f\u00e9rable d\u2019en faire une copie et d\u2019en devenir le propri\u00e9taire. Cliquez sur \u201cEnregistrer une copie\u201d, et placez le document dans votre espace personnel ou dans un espace d\u2019\u00e9quipe. Partagez le document avec quelqu\u2019un d\u2019autre en tant qu\u2019\u00e9diteur et assurez-vous qu\u2019ils voient ce que vous attendez . Vous voudrez d\u00e9sactiver les \u201cR\u00e8gles avanc\u00e9es\u201d qui vous ont permis d\u2019inspecter l\u2019exemple et d\u2019en faire une copie compl\u00e8te : N\u2019oubliez pas de cliquer sur \u201cEnregistrer\u201d apr\u00e8s avoir modifi\u00e9 les r\u00e8gles, afin qu\u2019elles prennent effet.","title":"Une table de prospects, avec des affectations"},{"location":"examples/2021-03-leads/#acces-par-utilisateur","text":"Supposons que nous voulions maintenant restreindre les prospects pour qu\u2019ils ne soient vus que par la personne \u00e0 qui ils sont assign\u00e9s (ou par le propri\u00e9taire). Nous pouvons le faire de plusieurs fa\u00e7ons. Une mani\u00e8re pratique est d\u2019ajouter une table listant les membres de l\u2019\u00e9quipe, y compris leur adresse e-mail : Une fois que nous avons une telle table, nous pouvons faire en sorte que la colonne Affectation s\u2019y r\u00e9f\u00e8re. Voir https://public.getgrist.com/vuPduz2UdJDi/Lead-list-with-team/m/fork pour l\u2019exemple complet (vous devrez en faire une copie pour obtenir un acc\u00e8s complet, sinon vous verrez une vue filtr\u00e9e). Nous pouvons ensuite utiliser les membres de l\u2019\u00e9quipe dans les r\u00e8gles, via une table de propri\u00e9t\u00e9 d\u2019utilisateur : Ensuite, chaque utilisateur avec qui le document est partag\u00e9 (autre que les propri\u00e9taires) verra une vue filtr\u00e9e de seulement les prospects qui leur sont assign\u00e9s : Lisez notre introduction aux permissions avanc\u00e9es pour en savoir plus sur ce que vous pouvez faire avec les permissions avanc\u00e9es.","title":"Acc\u00e8s par utilisateur"},{"location":"examples/2021-04-link-keys/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Cr\u00e9er des Liens Uniques en 4 \u00c9tapes # Dans Grist, les \u201ccl\u00e9s de lien\u201d sont des param\u00e8tres d\u2019URL qui, lorsqu\u2019ils sont combin\u00e9s avec la variable user.LinkKey dans les permissions avanc\u00e9es , d\u00e9termineront quelles donn\u00e9es un destinataire de lien est autoris\u00e9 \u00e0 voir. Vous pouvez apprendre \u00e0 le faire en quatre \u00e9tapes faciles. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et modifier en suivant ce guide. Dans notre exemple, vous \u00eates un tuteur priv\u00e9 qui utilise Grist pour suivre les heures, les paiements et les donn\u00e9es des clients. Vous souhaitez partager l\u2019historique des sessions et des paiements avec les parents via un lien qui ne montre que les donn\u00e9es de leur famille. Une fa\u00e7on simple de le faire serait de d\u00e9finir des permissions avanc\u00e9es qui limitent la vue d\u2019un destinataire de lien uniquement aux enregistrements li\u00e9s \u00e0 leur famille. Faisons cela maintenant. Le tuteur priv\u00e9 peut voir toutes les donn\u00e9es, mais un parent ne peut voir que les donn\u00e9es de sa famille. \u00c9tape 1 : Cr\u00e9er un identifiant unique # Dans la table des familles, cr\u00e9ez une nouvelle colonne dans laquelle vous utiliserez la fonction UUID() de Grist pour g\u00e9n\u00e9rer et attribuer une cl\u00e9 unique \u00e0 chaque famille. Convertissez la colonne en colonne de donn\u00e9es pour figer ses valeurs. Vous remarquerez que notre formule a chang\u00e9 en formule d\u2019initialisation. S\u00e9lectionnez \u2018Appliquer aux nouveaux enregistrements\u2019. Cela garantira que les nouvelles lignes se verront \u00e9galement attribuer un identifiant unique. \u00c9tape 2 : Connecter l\u2019UUID aux enregistrements dans d\u2019autres tables # Dans les tables \u00c9tudiants, Sessions et Paiements, ajoutez une colonne qui lie chaque enregistrement \u00e0 l\u2019UUID de la famille r\u00e9f\u00e9renc\u00e9e. Nommez ces colonnes \u201cUUID\u201d, avec la formule simple $Family.UUID . Vous ne savez pas comment cela fonctionne ? R\u00e9visez les puissantes colonnes de r\u00e9f\u00e9rence de Grist. Astuce : La formule $Family.UUID r\u00e9cup\u00e8re l\u2019UUID de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans la colonne Famille. \u00c9tape 3 : Cr\u00e9er des liens uniques # Dans la table des familles, cr\u00e9ez une nouvelle colonne dans laquelle vous utiliserez la fonction SELF_HYPERLINK() de Grist pour g\u00e9n\u00e9rer des hyperliens. Utilisez la formule SELF_HYPERLINK(LinkKey_UUID=$UUID) pour cr\u00e9er une cl\u00e9 de lien appel\u00e9e \u201cUUID\u201d qui d\u00e9finit le param\u00e8tre d\u2019URL \u00e0 un $UUID sp\u00e9cifique dans un enregistrement. Convertissez le type de colonne en Texte > Hyperlien. Comment cela fonctionne-t-il ? Le lien g\u00e9n\u00e9r\u00e9 pour \u201cRaddon, Fin\u201d est .../Private-Tutor-recUUID/p/9?UUID_=6752c258-443d-4a2c-800d-1491da265b72 . La \u201ccl\u00e9 de lien\u201d est la partie de l\u2019URL qui lit ?UUID_=6752c258-443d-4a2c-800d-1491da265b72 . \u00c9tape 4 : Cr\u00e9er des permissions avanc\u00e9es # Ouvrez la page des Permissions Avanc\u00e9es depuis le panneau de gauche et cr\u00e9ez des r\u00e8gles pour donner un acc\u00e8s limit\u00e9 \u00e0 vos clients. R\u00e9fl\u00e9chissons \u00e0 qui devrait acc\u00e9der \u00e0 chaque table et quelles parties de celle-ci devraient \u00eatre accessibles. Vous, le propri\u00e9taire du document, devez avoir un acc\u00e8s complet pour Lire (R), Mettre \u00e0 jour (U), Cr\u00e9er (C) et Supprimer (D) des enregistrements dans chaque table. Ajoutez la r\u00e8gle user.Access in [OWNER] \u00e0 chaque table pour accorder aux propri\u00e9taires un acc\u00e8s complet. Pourquoi user.Access ? Consultez les conditions des permissions avanc\u00e9es pour en savoir plus. Les parents consultant le document doivent avoir un acc\u00e8s en lecture seule uniquement aux enregistrements li\u00e9s \u00e0 leur famille. Dans les \u00e9tapes pr\u00e9c\u00e9dentes, nous avons cr\u00e9\u00e9 un identifiant unique (UUID) pour chaque famille, connect\u00e9 les enregistrements pertinents dans toutes les tables \u00e0 un UUID, et g\u00e9n\u00e9r\u00e9 des URL avec des cl\u00e9s de lien incluant ces UUID. Maintenant, nous devons cr\u00e9er des permissions avanc\u00e9es qui correspondent aux UUID et aux cl\u00e9s de lien URL. Pour ce faire, ajoutez la r\u00e8gle user.LinkKey.UUID == rec.UUID \u00e0 chaque table . Cela indique \u00e0 Grist de regarder la cl\u00e9 de lien de l\u2019URL (nomm\u00e9e UUID) et de la faire correspondre aux enregistrements incluant ce m\u00eame UUID. D\u00e9finissez l\u2019acc\u00e8s en lecture seule en cliquant sur le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cpermissions\u201d. Assurez-vous que l\u2019acc\u00e8s public est activ\u00e9 dans le panneau \u201cG\u00e9rer les utilisateurs\u201d (voir Partage ). Astuce : Ne modifiez pas les r\u00e8gles par d\u00e9faut. L\u2019acc\u00e8s au niveau des lignes est accord\u00e9 dans les tables pertinentes. Vous l\u2019avez fait ! Ce n\u2019est que le d\u00e9but. Il y a beaucoup plus que vous pouvez faire avec les cl\u00e9s de lien. Consultez un autre exemple pour approfondir encore plus votre compr\u00e9hension des cl\u00e9s de lien. Besoin d\u2019aide suppl\u00e9mentaire ? Consultez la solution du tutoriel ici . Faites une copie pour voir toutes les donn\u00e9es :","title":"Link keys guide"},{"location":"examples/2021-04-link-keys/#creer-des-liens-uniques-en-4-etapes","text":"Dans Grist, les \u201ccl\u00e9s de lien\u201d sont des param\u00e8tres d\u2019URL qui, lorsqu\u2019ils sont combin\u00e9s avec la variable user.LinkKey dans les permissions avanc\u00e9es , d\u00e9termineront quelles donn\u00e9es un destinataire de lien est autoris\u00e9 \u00e0 voir. Vous pouvez apprendre \u00e0 le faire en quatre \u00e9tapes faciles. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et modifier en suivant ce guide. Dans notre exemple, vous \u00eates un tuteur priv\u00e9 qui utilise Grist pour suivre les heures, les paiements et les donn\u00e9es des clients. Vous souhaitez partager l\u2019historique des sessions et des paiements avec les parents via un lien qui ne montre que les donn\u00e9es de leur famille. Une fa\u00e7on simple de le faire serait de d\u00e9finir des permissions avanc\u00e9es qui limitent la vue d\u2019un destinataire de lien uniquement aux enregistrements li\u00e9s \u00e0 leur famille. Faisons cela maintenant. Le tuteur priv\u00e9 peut voir toutes les donn\u00e9es, mais un parent ne peut voir que les donn\u00e9es de sa famille.","title":"Cr\u00e9er des Liens Uniques en 4 \u00c9tapes"},{"location":"examples/2021-04-link-keys/#etape-1-creer-un-identifiant-unique","text":"Dans la table des familles, cr\u00e9ez une nouvelle colonne dans laquelle vous utiliserez la fonction UUID() de Grist pour g\u00e9n\u00e9rer et attribuer une cl\u00e9 unique \u00e0 chaque famille. Convertissez la colonne en colonne de donn\u00e9es pour figer ses valeurs. Vous remarquerez que notre formule a chang\u00e9 en formule d\u2019initialisation. S\u00e9lectionnez \u2018Appliquer aux nouveaux enregistrements\u2019. Cela garantira que les nouvelles lignes se verront \u00e9galement attribuer un identifiant unique.","title":"\u00c9tape 1 : Cr\u00e9er un identifiant unique"},{"location":"examples/2021-04-link-keys/#etape-2-connecter-luuid-aux-enregistrements-dans-dautres-tables","text":"Dans les tables \u00c9tudiants, Sessions et Paiements, ajoutez une colonne qui lie chaque enregistrement \u00e0 l\u2019UUID de la famille r\u00e9f\u00e9renc\u00e9e. Nommez ces colonnes \u201cUUID\u201d, avec la formule simple $Family.UUID . Vous ne savez pas comment cela fonctionne ? R\u00e9visez les puissantes colonnes de r\u00e9f\u00e9rence de Grist. Astuce : La formule $Family.UUID r\u00e9cup\u00e8re l\u2019UUID de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans la colonne Famille.","title":"\u00c9tape 2 : Connecter l’UUID aux enregistrements dans d’autres tables"},{"location":"examples/2021-04-link-keys/#etape-3-creer-des-liens-uniques","text":"Dans la table des familles, cr\u00e9ez une nouvelle colonne dans laquelle vous utiliserez la fonction SELF_HYPERLINK() de Grist pour g\u00e9n\u00e9rer des hyperliens. Utilisez la formule SELF_HYPERLINK(LinkKey_UUID=$UUID) pour cr\u00e9er une cl\u00e9 de lien appel\u00e9e \u201cUUID\u201d qui d\u00e9finit le param\u00e8tre d\u2019URL \u00e0 un $UUID sp\u00e9cifique dans un enregistrement. Convertissez le type de colonne en Texte > Hyperlien. Comment cela fonctionne-t-il ? Le lien g\u00e9n\u00e9r\u00e9 pour \u201cRaddon, Fin\u201d est .../Private-Tutor-recUUID/p/9?UUID_=6752c258-443d-4a2c-800d-1491da265b72 . La \u201ccl\u00e9 de lien\u201d est la partie de l\u2019URL qui lit ?UUID_=6752c258-443d-4a2c-800d-1491da265b72 .","title":"\u00c9tape 3 : Cr\u00e9er des liens uniques"},{"location":"examples/2021-04-link-keys/#etape-4-creer-des-permissions-avancees","text":"Ouvrez la page des Permissions Avanc\u00e9es depuis le panneau de gauche et cr\u00e9ez des r\u00e8gles pour donner un acc\u00e8s limit\u00e9 \u00e0 vos clients. R\u00e9fl\u00e9chissons \u00e0 qui devrait acc\u00e9der \u00e0 chaque table et quelles parties de celle-ci devraient \u00eatre accessibles. Vous, le propri\u00e9taire du document, devez avoir un acc\u00e8s complet pour Lire (R), Mettre \u00e0 jour (U), Cr\u00e9er (C) et Supprimer (D) des enregistrements dans chaque table. Ajoutez la r\u00e8gle user.Access in [OWNER] \u00e0 chaque table pour accorder aux propri\u00e9taires un acc\u00e8s complet. Pourquoi user.Access ? Consultez les conditions des permissions avanc\u00e9es pour en savoir plus. Les parents consultant le document doivent avoir un acc\u00e8s en lecture seule uniquement aux enregistrements li\u00e9s \u00e0 leur famille. Dans les \u00e9tapes pr\u00e9c\u00e9dentes, nous avons cr\u00e9\u00e9 un identifiant unique (UUID) pour chaque famille, connect\u00e9 les enregistrements pertinents dans toutes les tables \u00e0 un UUID, et g\u00e9n\u00e9r\u00e9 des URL avec des cl\u00e9s de lien incluant ces UUID. Maintenant, nous devons cr\u00e9er des permissions avanc\u00e9es qui correspondent aux UUID et aux cl\u00e9s de lien URL. Pour ce faire, ajoutez la r\u00e8gle user.LinkKey.UUID == rec.UUID \u00e0 chaque table . Cela indique \u00e0 Grist de regarder la cl\u00e9 de lien de l\u2019URL (nomm\u00e9e UUID) et de la faire correspondre aux enregistrements incluant ce m\u00eame UUID. D\u00e9finissez l\u2019acc\u00e8s en lecture seule en cliquant sur le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cpermissions\u201d. Assurez-vous que l\u2019acc\u00e8s public est activ\u00e9 dans le panneau \u201cG\u00e9rer les utilisateurs\u201d (voir Partage ). Astuce : Ne modifiez pas les r\u00e8gles par d\u00e9faut. L\u2019acc\u00e8s au niveau des lignes est accord\u00e9 dans les tables pertinentes. Vous l\u2019avez fait ! Ce n\u2019est que le d\u00e9but. Il y a beaucoup plus que vous pouvez faire avec les cl\u00e9s de lien. Consultez un autre exemple pour approfondir encore plus votre compr\u00e9hension des cl\u00e9s de lien. Besoin d\u2019aide suppl\u00e9mentaire ? Consultez la solution du tutoriel ici . Faites une copie pour voir toutes les donn\u00e9es :","title":"\u00c9tape 4 : Cr\u00e9er des permissions avanc\u00e9es"},{"location":"examples/2021-05-reference-columns/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Guide des Colonnes de R\u00e9f\u00e9rence # Ma\u00eetriser les Colonnes de R\u00e9f\u00e9rence en 3 \u00c9tapes # Dans Grist, les colonnes de r\u00e9f\u00e9rence sont l\u2019outil cl\u00e9 pour organiser les donn\u00e9es relationnelles. Les colonnes de r\u00e9f\u00e9rence indiquent \u00e0 Grist que deux tables distinctes sont li\u00e9es et sp\u00e9cifient quels enregistrements au sein de ces tables sont li\u00e9s. Par exemple, si vous avez une table de Chiens et une table de Propri\u00e9taires de Chiens , vous pouvez vouloir que chaque enregistrement de chien fasse explicitement r\u00e9f\u00e9rence \u00e0 l\u2019 enregistrement de son propri\u00e9taire dans Propri\u00e9taires de Chiens . Les colonnes de r\u00e9f\u00e9rence sont un outil puissant pour rechercher des donn\u00e9es \u00e0 partir d\u2019une table li\u00e9e et pour cr\u00e9er des mises en page hautement productives. Vous pouvez apprendre \u00e0 le faire en trois \u00e9tapes faciles. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et modifier en suivant ce guide. Utiliser les Colonnes de R\u00e9f\u00e9rence pour Organiser les Donn\u00e9es Li\u00e9es # Dans notre exemple, vous \u00eates un graphiste postulant \u00e0 des emplois, et vous utilisez Grist pour suivre votre processus de candidature. Dans le mod\u00e8le, vous avez quatre tables : Candidatures , \u00c9tapes , T\u00e2ches , et Contacts . Votre objectif est de relier les donn\u00e9es pertinentes entre les tables et de cr\u00e9er un tableau de bord personnalis\u00e9 o\u00f9 vous pouvez facilement voir le statut de chaque candidature, et ajouter de nouvelles candidatures et de nouvelles \u00e9tapes facilement. Dans ce tableau de bord , cliquer sur chaque candidature montre uniquement les \u00e9tapes li\u00e9es \u00e0 cette candidature. Nous pouvons cr\u00e9er cette relation en utilisant des colonnes de r\u00e9f\u00e9rence. Cr\u00e9ons ce tableau de bord ensemble. \u00c9tape 1 : Cr\u00e9er des R\u00e9f\u00e9rences # Les colonnes de r\u00e9f\u00e9rence sont un type de colonne disponible sous TYPE DE COLONNE. Il est utile de penser \u00e0 la table avec la colonne de r\u00e9f\u00e9rence comme la table de r\u00e9f\u00e9rence , et \u00e0 la table qui est r\u00e9f\u00e9renc\u00e9e comme la table sous-jacente . Convertir des Colonnes de Texte en Colonnes de R\u00e9f\u00e9rence # Si vous avez d\u00e9j\u00e0 du texte dans la colonne s\u00e9lectionn\u00e9e, d\u00e9finissez le TYPE DE COLONNE dans le panneau de droite sur \u201cR\u00e9f\u00e9rence\u201d. Grist devinera la table sous-jacente et la colonne que vous souhaitez afficher dans la colonne de r\u00e9f\u00e9rence. Vous pouvez revoir et modifier cette supposition et d\u00e9finir la table sous-jacente et la colonne d\u2019affichage appropri\u00e9es. DONN\u00c9ES DE LA TABLE pointe vers la table sous-jacente. AFFICHER LA COLONNE d\u00e9finit la valeur d\u2019affichage dans la colonne de r\u00e9f\u00e9rence. Par exemple, dans la table \u00c9tapes , convertissez la colonne R\u00f4le en une colonne de r\u00e9f\u00e9rence. DONN\u00c9ES DE LA TABLE doit pointer vers Candidatures . AFFICHER LA COLONNE doit \u00eatre d\u00e9fini sur R\u00f4le . Notez que la colonne de r\u00e9f\u00e9rence fait r\u00e9f\u00e9rence \u00e0 l\u2019 ensemble de l\u2019enregistrement et que vous choisissez quelle colonne afficher dans la colonne de r\u00e9f\u00e9rence. Astuce : Vous pouvez facilement identifier les colonnes de r\u00e9f\u00e9rence par les ic\u00f4nes de maillon de cha\u00eene dans les cellules de la colonne. Cr\u00e9er des Colonnes de R\u00e9f\u00e9rence # Dans la table Contacts , nous avons une liste de contacts qui ne sont associ\u00e9s \u00e0 aucune candidature ou entreprise. Cr\u00e9ons une nouvelle colonne appel\u00e9e Entreprise , d\u00e9finissons son type sur R\u00e9f\u00e9rence, et pointons vers Candidatures comme table sous-jacente avec Entreprise comme affichage dans la colonne de r\u00e9f\u00e9rence. Cliquez sur la cellule vide pour ouvrir un menu d\u00e9roulant et s\u00e9lectionnez manuellement l\u2019entreprise pour laquelle chaque contact travaille. Regardez l\u2019adresse e-mail pour un indice. Note : Vous pouvez toujours cliquer sur une cellule de Colonne de R\u00e9f\u00e9rence pour ouvrir le menu d\u00e9roulant et s\u00e9lectionner une nouvelle valeur. \u00c9tape 2 : Rechercher des Donn\u00e9es Suppl\u00e9mentaires dans l\u2019Enregistrement R\u00e9f\u00e9renc\u00e9 # Rappelez-vous que la colonne de r\u00e9f\u00e9rence fait r\u00e9f\u00e9rence \u00e0 une autre table et corr\u00e8le deux enregistrements sp\u00e9cifiques. Bien que vous voyiez une colonne sp\u00e9cifique dans l\u2019 affichage de la colonne de r\u00e9f\u00e9rence, la r\u00e9f\u00e9rence est faite \u00e0 l\u2019 ensemble de l\u2019enregistrement . Cela nous permet de rechercher des champs de donn\u00e9es suppl\u00e9mentaires dans l\u2019enregistrement li\u00e9 en utilisant une formule simple. Essayons cela. \u00c0 l\u2019\u00e9tape 1, dans la table \u00c9tapes , nous avons cr\u00e9\u00e9 une colonne de r\u00e9f\u00e9rence appel\u00e9e R\u00f4le . Il serait utile de voir \u00e9galement pour chaque enregistrement \u00c9tape , l\u2019entreprise pertinente. Par exemple, dans la ligne 1, nous voyons l\u2019\u00e9v\u00e9nement de l\u2019\u00e9tape \u201cRejet\u00e9!\u201d pour le r\u00f4le \u201cResponsable du Design Num\u00e9rique\u201d. Il n\u2019est pas imm\u00e9diatement apparent de quelle entreprise il s\u2019agit. Utilisons la colonne de r\u00e9f\u00e9rence R\u00f4le pour rechercher facilement l\u2019entreprise list\u00e9e dans l\u2019enregistrement \u201cResponsable du Design Num\u00e9rique\u201d dans la table Candidatures . Pour ce faire, nous cr\u00e9ons une colonne appel\u00e9e Entreprise et nous utilisons la formule $Role.Entreprise . La structure de la formule est $[ID de la Colonne de R\u00e9f\u00e9rence dans la Table de R\u00e9f\u00e9rence].[ID de la Colonne dans la Table Sous-jacente] . Grist compl\u00e9tera \u00e9galement automatiquement des parties de la formule pendant que vous la tapez. Il y a une autre fa\u00e7on d\u2019ajouter plusieurs colonnes \u00e0 partir d\u2019une table sous-jacente. Si vous \u00eates int\u00e9ress\u00e9 \u00e0 en savoir plus, visitez la section d\u2019aide sur les colonnes de r\u00e9f\u00e9rence de notre site web. \u00c9tape 3 : Cr\u00e9er une Mise en Page Hautement Productive avec des Tables Li\u00e9es # L\u2019une des fonctionnalit\u00e9s les plus puissantes de Grist est la capacit\u00e9 de lier des tables li\u00e9es sur la m\u00eame page pour cr\u00e9er des mises en page hautement productives. Dans le tableau de bord final montr\u00e9 au d\u00e9but de ce tutoriel, nous avons vu que cliquer sur une candidature remplissait une vue des \u00e9tapes li\u00e9es \u00e0 cette candidature. Faisons cela maintenant en ajoutant \u00c9tapes comme vue \u00e0 la page Candidatures . ( R\u00e9visez les vues ici .) Ajouter la table comme vue de Liste de Fiches rend les donn\u00e9es plus faciles \u00e0 visualiser. De m\u00eame, vous pouvez vouloir changer la table Candidatures en une vue de Liste de Fiches. Dans le menu LISTE DE FICHES \u00e0 droite, s\u00e9lectionnez DONN\u00c9ES pour d\u00e9finir les r\u00e8gles de s\u00e9lection des donn\u00e9es. Sous S\u00c9LECTIONNER PAR, vous verrez l\u2019option \u201cLISTE_DE_FICHES CANDIDATURES\u201d. Cette option est uniquement disponible parce qu\u2019\u00e0 l\u2019\u00e9tape 1, nous avons cr\u00e9\u00e9 une r\u00e9f\u00e9rence de la table \u00c9tapes \u00e0 la table Candidatures dans la colonne de r\u00e9f\u00e9rence R\u00f4le . Cette r\u00e9f\u00e9rence indique \u00e0 Grist quelles \u00e9tapes sont li\u00e9es \u00e0 quelles candidatures. F\u00e9licitations ! Vous savez maintenant comment utiliser les colonnes de r\u00e9f\u00e9rence pour organiser des donn\u00e9es li\u00e9es, donner une structure \u00e0 vos donn\u00e9es, et cr\u00e9er des vues li\u00e9es dans des mises en page productives. Si vous le souhaitez, comparez votre document \u00e0 la solution du tutoriel . Approfondir : Combiner des Formules et des Colonnes de R\u00e9f\u00e9rence # Si vous \u00eates \u00e0 l\u2019aise avec les formules, essayez d\u2019utiliser des formules dans les colonnes de r\u00e9f\u00e9rence pour rendre Grist un outil encore plus puissant. Dans la solution du tutoriel , nous avons utilis\u00e9 une formule pour faire plus. La formule dans le champ Derni\u00e8re \u00c9tape dans la vue Candidatures recherche la date la plus r\u00e9cente dans les enregistrements li\u00e9s dans la table \u00c9tapes . Ainsi, ajouter une nouvelle \u00e9tape avec une date plus r\u00e9cente mettrait automatiquement \u00e0 jour ce champ. Vous pouvez en apprendre plus sur les formules de recherche sur notre site web . Parce que Derni\u00e8re \u00c9tape est \u00e0 la fois une colonne de formule et une colonne de r\u00e9f\u00e9rence, nous avons \u00e9galement fait ce qui suit en suivant la formule d\u00e9crite \u00e0 l\u2019\u00e9tape 2 de ce tutoriel. Le champ Statut utilise la formule $Derni\u00e8re_\u00c9tape.Tour pour rechercher le statut du tour de l\u2019\u00e9tape li\u00e9e. Le champ Mis \u00e0 Jour Le utilise la formule $Derni\u00e8re_\u00c9tape.Date pour rechercher la date de l\u2019\u00e9tape li\u00e9e. En faisant cela, le statut et la date se mettent \u00e9galement \u00e0 jour automatiquement lorsque le champ Derni\u00e8re \u00c9tape se met \u00e0 jour. Besoin d\u2019aide suppl\u00e9mentaire ? Jetez un coup d\u2019\u0153il \u00e0 la solution du tutoriel , ou contactez-nous \u00e0 support@getgrist.com .","title":"Reference columns guide"},{"location":"examples/2021-05-reference-columns/#guide-des-colonnes-de-reference","text":"","title":"Guide des Colonnes de R\u00e9f\u00e9rence"},{"location":"examples/2021-05-reference-columns/#maitriser-les-colonnes-de-reference-en-3-etapes","text":"Dans Grist, les colonnes de r\u00e9f\u00e9rence sont l\u2019outil cl\u00e9 pour organiser les donn\u00e9es relationnelles. Les colonnes de r\u00e9f\u00e9rence indiquent \u00e0 Grist que deux tables distinctes sont li\u00e9es et sp\u00e9cifient quels enregistrements au sein de ces tables sont li\u00e9s. Par exemple, si vous avez une table de Chiens et une table de Propri\u00e9taires de Chiens , vous pouvez vouloir que chaque enregistrement de chien fasse explicitement r\u00e9f\u00e9rence \u00e0 l\u2019 enregistrement de son propri\u00e9taire dans Propri\u00e9taires de Chiens . Les colonnes de r\u00e9f\u00e9rence sont un outil puissant pour rechercher des donn\u00e9es \u00e0 partir d\u2019une table li\u00e9e et pour cr\u00e9er des mises en page hautement productives. Vous pouvez apprendre \u00e0 le faire en trois \u00e9tapes faciles. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et modifier en suivant ce guide.","title":"Ma\u00eetriser les Colonnes de R\u00e9f\u00e9rence en 3 \u00c9tapes"},{"location":"examples/2021-05-reference-columns/#utiliser-les-colonnes-de-reference-pour-organiser-les-donnees-liees","text":"Dans notre exemple, vous \u00eates un graphiste postulant \u00e0 des emplois, et vous utilisez Grist pour suivre votre processus de candidature. Dans le mod\u00e8le, vous avez quatre tables : Candidatures , \u00c9tapes , T\u00e2ches , et Contacts . Votre objectif est de relier les donn\u00e9es pertinentes entre les tables et de cr\u00e9er un tableau de bord personnalis\u00e9 o\u00f9 vous pouvez facilement voir le statut de chaque candidature, et ajouter de nouvelles candidatures et de nouvelles \u00e9tapes facilement. Dans ce tableau de bord , cliquer sur chaque candidature montre uniquement les \u00e9tapes li\u00e9es \u00e0 cette candidature. Nous pouvons cr\u00e9er cette relation en utilisant des colonnes de r\u00e9f\u00e9rence. Cr\u00e9ons ce tableau de bord ensemble.","title":"Utiliser les Colonnes de R\u00e9f\u00e9rence pour Organiser les Donn\u00e9es Li\u00e9es"},{"location":"examples/2021-05-reference-columns/#etape-1-creer-des-references","text":"Les colonnes de r\u00e9f\u00e9rence sont un type de colonne disponible sous TYPE DE COLONNE. Il est utile de penser \u00e0 la table avec la colonne de r\u00e9f\u00e9rence comme la table de r\u00e9f\u00e9rence , et \u00e0 la table qui est r\u00e9f\u00e9renc\u00e9e comme la table sous-jacente .","title":"\u00c9tape 1 : Cr\u00e9er des R\u00e9f\u00e9rences"},{"location":"examples/2021-05-reference-columns/#convertir-des-colonnes-de-texte-en-colonnes-de-reference","text":"Si vous avez d\u00e9j\u00e0 du texte dans la colonne s\u00e9lectionn\u00e9e, d\u00e9finissez le TYPE DE COLONNE dans le panneau de droite sur \u201cR\u00e9f\u00e9rence\u201d. Grist devinera la table sous-jacente et la colonne que vous souhaitez afficher dans la colonne de r\u00e9f\u00e9rence. Vous pouvez revoir et modifier cette supposition et d\u00e9finir la table sous-jacente et la colonne d\u2019affichage appropri\u00e9es. DONN\u00c9ES DE LA TABLE pointe vers la table sous-jacente. AFFICHER LA COLONNE d\u00e9finit la valeur d\u2019affichage dans la colonne de r\u00e9f\u00e9rence. Par exemple, dans la table \u00c9tapes , convertissez la colonne R\u00f4le en une colonne de r\u00e9f\u00e9rence. DONN\u00c9ES DE LA TABLE doit pointer vers Candidatures . AFFICHER LA COLONNE doit \u00eatre d\u00e9fini sur R\u00f4le . Notez que la colonne de r\u00e9f\u00e9rence fait r\u00e9f\u00e9rence \u00e0 l\u2019 ensemble de l\u2019enregistrement et que vous choisissez quelle colonne afficher dans la colonne de r\u00e9f\u00e9rence. Astuce : Vous pouvez facilement identifier les colonnes de r\u00e9f\u00e9rence par les ic\u00f4nes de maillon de cha\u00eene dans les cellules de la colonne.","title":"Convertir des Colonnes de Texte en Colonnes de R\u00e9f\u00e9rence"},{"location":"examples/2021-05-reference-columns/#creer-des-colonnes-de-reference","text":"Dans la table Contacts , nous avons une liste de contacts qui ne sont associ\u00e9s \u00e0 aucune candidature ou entreprise. Cr\u00e9ons une nouvelle colonne appel\u00e9e Entreprise , d\u00e9finissons son type sur R\u00e9f\u00e9rence, et pointons vers Candidatures comme table sous-jacente avec Entreprise comme affichage dans la colonne de r\u00e9f\u00e9rence. Cliquez sur la cellule vide pour ouvrir un menu d\u00e9roulant et s\u00e9lectionnez manuellement l\u2019entreprise pour laquelle chaque contact travaille. Regardez l\u2019adresse e-mail pour un indice. Note : Vous pouvez toujours cliquer sur une cellule de Colonne de R\u00e9f\u00e9rence pour ouvrir le menu d\u00e9roulant et s\u00e9lectionner une nouvelle valeur.","title":"Cr\u00e9er des Colonnes de R\u00e9f\u00e9rence"},{"location":"examples/2021-05-reference-columns/#etape-2-rechercher-des-donnees-supplementaires-dans-lenregistrement-reference","text":"Rappelez-vous que la colonne de r\u00e9f\u00e9rence fait r\u00e9f\u00e9rence \u00e0 une autre table et corr\u00e8le deux enregistrements sp\u00e9cifiques. Bien que vous voyiez une colonne sp\u00e9cifique dans l\u2019 affichage de la colonne de r\u00e9f\u00e9rence, la r\u00e9f\u00e9rence est faite \u00e0 l\u2019 ensemble de l\u2019enregistrement . Cela nous permet de rechercher des champs de donn\u00e9es suppl\u00e9mentaires dans l\u2019enregistrement li\u00e9 en utilisant une formule simple. Essayons cela. \u00c0 l\u2019\u00e9tape 1, dans la table \u00c9tapes , nous avons cr\u00e9\u00e9 une colonne de r\u00e9f\u00e9rence appel\u00e9e R\u00f4le . Il serait utile de voir \u00e9galement pour chaque enregistrement \u00c9tape , l\u2019entreprise pertinente. Par exemple, dans la ligne 1, nous voyons l\u2019\u00e9v\u00e9nement de l\u2019\u00e9tape \u201cRejet\u00e9!\u201d pour le r\u00f4le \u201cResponsable du Design Num\u00e9rique\u201d. Il n\u2019est pas imm\u00e9diatement apparent de quelle entreprise il s\u2019agit. Utilisons la colonne de r\u00e9f\u00e9rence R\u00f4le pour rechercher facilement l\u2019entreprise list\u00e9e dans l\u2019enregistrement \u201cResponsable du Design Num\u00e9rique\u201d dans la table Candidatures . Pour ce faire, nous cr\u00e9ons une colonne appel\u00e9e Entreprise et nous utilisons la formule $Role.Entreprise . La structure de la formule est $[ID de la Colonne de R\u00e9f\u00e9rence dans la Table de R\u00e9f\u00e9rence].[ID de la Colonne dans la Table Sous-jacente] . Grist compl\u00e9tera \u00e9galement automatiquement des parties de la formule pendant que vous la tapez. Il y a une autre fa\u00e7on d\u2019ajouter plusieurs colonnes \u00e0 partir d\u2019une table sous-jacente. Si vous \u00eates int\u00e9ress\u00e9 \u00e0 en savoir plus, visitez la section d\u2019aide sur les colonnes de r\u00e9f\u00e9rence de notre site web.","title":"\u00c9tape 2 : Rechercher des Donn\u00e9es Suppl\u00e9mentaires dans l’Enregistrement R\u00e9f\u00e9renc\u00e9"},{"location":"examples/2021-05-reference-columns/#etape-3-creer-une-mise-en-page-hautement-productive-avec-des-tables-liees","text":"L\u2019une des fonctionnalit\u00e9s les plus puissantes de Grist est la capacit\u00e9 de lier des tables li\u00e9es sur la m\u00eame page pour cr\u00e9er des mises en page hautement productives. Dans le tableau de bord final montr\u00e9 au d\u00e9but de ce tutoriel, nous avons vu que cliquer sur une candidature remplissait une vue des \u00e9tapes li\u00e9es \u00e0 cette candidature. Faisons cela maintenant en ajoutant \u00c9tapes comme vue \u00e0 la page Candidatures . ( R\u00e9visez les vues ici .) Ajouter la table comme vue de Liste de Fiches rend les donn\u00e9es plus faciles \u00e0 visualiser. De m\u00eame, vous pouvez vouloir changer la table Candidatures en une vue de Liste de Fiches. Dans le menu LISTE DE FICHES \u00e0 droite, s\u00e9lectionnez DONN\u00c9ES pour d\u00e9finir les r\u00e8gles de s\u00e9lection des donn\u00e9es. Sous S\u00c9LECTIONNER PAR, vous verrez l\u2019option \u201cLISTE_DE_FICHES CANDIDATURES\u201d. Cette option est uniquement disponible parce qu\u2019\u00e0 l\u2019\u00e9tape 1, nous avons cr\u00e9\u00e9 une r\u00e9f\u00e9rence de la table \u00c9tapes \u00e0 la table Candidatures dans la colonne de r\u00e9f\u00e9rence R\u00f4le . Cette r\u00e9f\u00e9rence indique \u00e0 Grist quelles \u00e9tapes sont li\u00e9es \u00e0 quelles candidatures. F\u00e9licitations ! Vous savez maintenant comment utiliser les colonnes de r\u00e9f\u00e9rence pour organiser des donn\u00e9es li\u00e9es, donner une structure \u00e0 vos donn\u00e9es, et cr\u00e9er des vues li\u00e9es dans des mises en page productives. Si vous le souhaitez, comparez votre document \u00e0 la solution du tutoriel .","title":"\u00c9tape 3 : Cr\u00e9er une Mise en Page Hautement Productive avec des Tables Li\u00e9es"},{"location":"examples/2021-05-reference-columns/#approfondir-combiner-des-formules-et-des-colonnes-de-reference","text":"Si vous \u00eates \u00e0 l\u2019aise avec les formules, essayez d\u2019utiliser des formules dans les colonnes de r\u00e9f\u00e9rence pour rendre Grist un outil encore plus puissant. Dans la solution du tutoriel , nous avons utilis\u00e9 une formule pour faire plus. La formule dans le champ Derni\u00e8re \u00c9tape dans la vue Candidatures recherche la date la plus r\u00e9cente dans les enregistrements li\u00e9s dans la table \u00c9tapes . Ainsi, ajouter une nouvelle \u00e9tape avec une date plus r\u00e9cente mettrait automatiquement \u00e0 jour ce champ. Vous pouvez en apprendre plus sur les formules de recherche sur notre site web . Parce que Derni\u00e8re \u00c9tape est \u00e0 la fois une colonne de formule et une colonne de r\u00e9f\u00e9rence, nous avons \u00e9galement fait ce qui suit en suivant la formule d\u00e9crite \u00e0 l\u2019\u00e9tape 2 de ce tutoriel. Le champ Statut utilise la formule $Derni\u00e8re_\u00c9tape.Tour pour rechercher le statut du tour de l\u2019\u00e9tape li\u00e9e. Le champ Mis \u00e0 Jour Le utilise la formule $Derni\u00e8re_\u00c9tape.Date pour rechercher la date de l\u2019\u00e9tape li\u00e9e. En faisant cela, le statut et la date se mettent \u00e9galement \u00e0 jour automatiquement lorsque le champ Derni\u00e8re \u00c9tape se met \u00e0 jour. Besoin d\u2019aide suppl\u00e9mentaire ? Jetez un coup d\u2019\u0153il \u00e0 la solution du tutoriel , ou contactez-nous \u00e0 support@getgrist.com .","title":"Approfondir : Combiner des Formules et des Colonnes de R\u00e9f\u00e9rence"},{"location":"examples/2021-06-timesheets/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Guide des Tables de R\u00e9sum\u00e9 # Ma\u00eetriser les Tables de R\u00e9sum\u00e9 avec 2 Concepts # Dans Grist, les tables de r\u00e9sum\u00e9 sont l\u2019outil principal de l\u2019analyse de donn\u00e9es. Elles sont similaires aux tableaux crois\u00e9s dynamiques dans les feuilles de calcul et aux fonctions de regroupement dans les bases de donn\u00e9es. Elles permettent de r\u00e9sumer les tables en regroupant les enregistrements en cat\u00e9gories sp\u00e9cifiques. Par exemple, si vous avez une table de champions olympiques, il peut \u00eatre utile de regrouper les enregistrements des champions par pays ou par sport \u2014 ou par une combinaison de pays et de sport. Une fois les enregistrements tri\u00e9s en cat\u00e9gories utiles, vous pouvez ensuite vouloir calculer des sommes en utilisant ces groupes d\u2019enregistrements. Grist utilise un champ sp\u00e9cial astucieux, disponible dans les formules sous la forme de $group . Les tables de r\u00e9sum\u00e9 facilitent la cr\u00e9ation de pages dans lesquelles vous pouvez rapidement capturer des informations utiles sur les donn\u00e9es. Vous pouvez apprendre \u00e0 le faire en apprenant deux concepts : cr\u00e9er des tables de r\u00e9sum\u00e9 et utiliser $group dans les formules. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple ( https://public.getgrist.com/x527ESJATWNS/Time-Sheets-Tutorial ) que vous pouvez copier et \u00e9diter en suivant ce guide. Utiliser les Tables de R\u00e9sum\u00e9 pour Analyser les Donn\u00e9es # Dans notre exemple, vous travaillez pour le d\u00e9partement RH d\u2019une usine de bonbons qui embauche des contractuels travaillant pour divers d\u00e9partements. Dans le mod\u00e8le, votre \u00e9quipe a cr\u00e9\u00e9 un suivi avanc\u00e9 des feuilles de temps. Il y a une page o\u00f9 les contractuels peuvent facilement ajouter des feuilles de temps pour des mois s\u00e9lectionn\u00e9s. Il serait utile d\u2019avoir des pages suppl\u00e9mentaires qui r\u00e9sument les d\u00e9penses par mois, par d\u00e9partement et par contractuel. Votre objectif dans ce tutoriel est de construire ces pages de r\u00e9sum\u00e9. Cr\u00e9er des Tables de R\u00e9sum\u00e9 # \u00c9tape 1 : Cr\u00e9er une table de r\u00e9sum\u00e9 # Commen\u00e7ons par cr\u00e9er une table de r\u00e9sum\u00e9 qui regroupe les enregistrements dans la table des feuilles de temps par mois. Grist facilite la cr\u00e9ation de tables de r\u00e9sum\u00e9. Cliquez simplement sur Ajouter Nouveau > Ajouter Page > Entr\u00e9es de Feuille de Temps > > Mois . Cela g\u00e9n\u00e9rera une table de r\u00e9sum\u00e9 avec quelques colonnes. Dans ce cas, nous avons les trois colonnes suivantes. Premi\u00e8re Colonne : Liste des groupes de mois, de janvier \u00e0 juin 2021. Deuxi\u00e8me Colonne : Un d\u00e9compte du nombre total d\u2019enregistrements dans chaque mois, par exemple en janvier il y a 12 enregistrements de feuilles de temps. Troisi\u00e8me Colonne : Une somme des heures travaill\u00e9es dans chaque mois, par exemple en janvier le total des heures travaill\u00e9es dans ces 12 enregistrements de feuilles de temps est de 81 heures. Note : Grist additionnera automatiquement toutes les colonnes num\u00e9riques, vous faisant gagner du temps. \u00c9tape 2 : Cr\u00e9er des tables de r\u00e9sum\u00e9 avec plusieurs cat\u00e9gories # Il peut \u00eatre utile de regrouper \u00e9galement les feuilles de temps par une combinaison de cat\u00e9gories. Par exemple, nous pouvons vouloir savoir combien de temps et d\u2019argent ont \u00e9t\u00e9 d\u00e9pens\u00e9s sur un compte particulier dans un mois particulier, ou sur un employ\u00e9 sp\u00e9cifique dans un compte et un mois sp\u00e9cifiques. Lors de la cr\u00e9ation d\u2019une table de r\u00e9sum\u00e9, vous pouvez s\u00e9lectionner plusieurs colonnes par lesquelles regrouper les donn\u00e9es. Ajoutons deux nouvelles tables de r\u00e9sum\u00e9. Lors de l\u2019ajout de ces vues, assurez-vous de S\u00e9lectionner Par la premi\u00e8re vue que nous avons cr\u00e9\u00e9e sur cette page. Cela liera les tables de sorte que la s\u00e9lection d\u2019un mois dans la premi\u00e8re vue mettra \u00e0 jour dynamiquement les enregistrements dans les nouvelles vues. Pas s\u00fbr de comprendre pourquoi ? R\u00e9visez lien des vues . Ajouter Nouveau > Ajouter Vue \u00e0 la Page > Entr\u00e9es de Feuille de Temps > > Mois et Compte Ajouter Nouveau > Ajouter Vue \u00e0 la Page > Entr\u00e9es de Feuille de Temps > > Mois et Compte et Employ\u00e9 Pour visualiser plus facilement ces donn\u00e9es, faites glisser et d\u00e9posez les nouvelles tables de mani\u00e8re \u00e0 ce qu\u2019elles soient dispos\u00e9es verticalement. Vous pouvez \u00e9galement vouloir masquer les colonnes de d\u00e9compte. Super ! Mais maintenant nous voulons ajouter le total des d\u00e9penses en dollars dans chacune de ces cat\u00e9gories. C\u2019est simple \u00e0 faire avec des formules de r\u00e9sum\u00e9. Calculer les Totaux en Utilisant des Formules de R\u00e9sum\u00e9 # Suivez-vous la vid\u00e9o ? Visitez la solution du tutoriel si vous \u00eates bloqu\u00e9. Notez qu\u2019il y a des permissions avanc\u00e9es en place pour la solution du tutoriel qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. \u00c9tape 1 : Comprendre le champ $group dans les formules # Dans Grist, $group est un objet Python sp\u00e9cial qui repr\u00e9sente une collection d\u2019enregistrements r\u00e9sum\u00e9s par la ligne de r\u00e9sum\u00e9 actuelle. Si vous regardez la formule dans la colonne Heures Travaill\u00e9es , vous verrez SUM($group.Heures_Travaill\u00e9es) . Cela prend la somme des Heures Travaill\u00e9es dans un groupe . Dans cet exemple, dans la ligne 1, le groupe est janvier 2021. Ainsi, dans cette ligne, la formule additionne les heures travaill\u00e9es dans le groupe de janvier 2021. Dans la ligne 2, le groupe est f\u00e9vrier 2021 et la formule additionne les heures travaill\u00e9es en f\u00e9vrier. Si vous jetez un coup d\u2019\u0153il \u00e0 la colonne count , que nous avons pr\u00e9c\u00e9demment masqu\u00e9e, vous trouverez la formule len($group) . La fonction len (qui signifie longueur) compte tous les enregistrements appartenant au groupe r\u00e9sum\u00e9 dans une ligne particuli\u00e8re. Une autre fa\u00e7on d\u2019exprimer un ensemble d\u2019enregistrements est de parcourir la liste des enregistrements dans un groupe en utilisant une variable. Vous pouvez nommer la variable comme vous le souhaitez ; nous utiliserons r (pour \u201crecord\u201d). Nous pouvons r\u00e9\u00e9crire la formule dans Heures Travaill\u00e9es comme sum(r.Heures_Travaill\u00e9es for r in $group) . \u00c9tape 2 : Utiliser $group dans les formules # Calculons le total des d\u00e9penses en dollars pour les heures travaill\u00e9es dans chaque mois. La formule est sum(r.Heures_Travaill\u00e9es * r.FeuilleDeTemps.Taux_Horaire for r in $group) . Puisque chaque enregistrement r dans le groupe est un enregistrement dans la table sous-jacente ( Entr\u00e9es de Feuille de Temps ), r.Heures_Travaill\u00e9es se r\u00e9f\u00e8re au champ dans cette table. Dans la table Entr\u00e9es de Feuille de Temps , la colonne FeuilleDeTemps est une colonne de r\u00e9f\u00e9rence qui fait r\u00e9f\u00e9rence \u00e0 un enregistrement entier dans la table Feuilles de Temps . Ainsi, nous devons sp\u00e9cifier davantage quel champ de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 doit \u00eatre inclus dans le calcul de la formule, qui dans ce cas est Taux_Horaire . Pour en savoir plus sur les colonnes de r\u00e9f\u00e9rence, visitez notre guide des colonnes de r\u00e9f\u00e9rence . Nous pouvons appliquer la m\u00eame formule aux deux autres tables de r\u00e9sum\u00e9 sur cette page. Dans la deuxi\u00e8me table, la fonction $group regroupe les \u00e9l\u00e9ments dans le m\u00eame mois ET compte. Dans la troisi\u00e8me table, la fonction $group regroupe les d\u00e9penses dans le m\u00eame mois ET compte ET par le m\u00eame employ\u00e9. Et c\u2019est tout ! Vous l\u2019avez fait. Vous avez reconstruit la page de r\u00e9sum\u00e9 mensuel. Voyez si vous pouvez appliquer ces concepts pour reconstruire la page de r\u00e9sum\u00e9 des contractuels. Le saviez-vous ? Si n\u00e9cessaire, vous pouvez \u00e9galement ajouter des conditions \u00e0 cette formule. Par exemple, sum(r.Heures_Travaill\u00e9es * r.FeuilleDeTemps.Taux_Horaire for r in $group if r.Heures_Travaill\u00e9es > 0) n\u2019additionnera que les enregistrements dans lesquels il y a une valeur positive dans le champ Heures Travaill\u00e9es . Visitez notre r\u00e9f\u00e9rence des fonctions pour en savoir plus. Besoin de plus d\u2019aide ? Visitez la solution du tutoriel ou contactez-nous \u00e0 support@getgrist.com . Notez qu\u2019il y a des permissions avanc\u00e9es en place pour la solution du tutoriel qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages.","title":"Summary tables guide"},{"location":"examples/2021-06-timesheets/#guide-des-tables-de-resume","text":"","title":"Guide des Tables de R\u00e9sum\u00e9"},{"location":"examples/2021-06-timesheets/#maitriser-les-tables-de-resume-avec-2-concepts","text":"Dans Grist, les tables de r\u00e9sum\u00e9 sont l\u2019outil principal de l\u2019analyse de donn\u00e9es. Elles sont similaires aux tableaux crois\u00e9s dynamiques dans les feuilles de calcul et aux fonctions de regroupement dans les bases de donn\u00e9es. Elles permettent de r\u00e9sumer les tables en regroupant les enregistrements en cat\u00e9gories sp\u00e9cifiques. Par exemple, si vous avez une table de champions olympiques, il peut \u00eatre utile de regrouper les enregistrements des champions par pays ou par sport \u2014 ou par une combinaison de pays et de sport. Une fois les enregistrements tri\u00e9s en cat\u00e9gories utiles, vous pouvez ensuite vouloir calculer des sommes en utilisant ces groupes d\u2019enregistrements. Grist utilise un champ sp\u00e9cial astucieux, disponible dans les formules sous la forme de $group . Les tables de r\u00e9sum\u00e9 facilitent la cr\u00e9ation de pages dans lesquelles vous pouvez rapidement capturer des informations utiles sur les donn\u00e9es. Vous pouvez apprendre \u00e0 le faire en apprenant deux concepts : cr\u00e9er des tables de r\u00e9sum\u00e9 et utiliser $group dans les formules. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple ( https://public.getgrist.com/x527ESJATWNS/Time-Sheets-Tutorial ) que vous pouvez copier et \u00e9diter en suivant ce guide.","title":"Ma\u00eetriser les Tables de R\u00e9sum\u00e9 avec 2 Concepts"},{"location":"examples/2021-06-timesheets/#utiliser-les-tables-de-resume-pour-analyser-les-donnees","text":"Dans notre exemple, vous travaillez pour le d\u00e9partement RH d\u2019une usine de bonbons qui embauche des contractuels travaillant pour divers d\u00e9partements. Dans le mod\u00e8le, votre \u00e9quipe a cr\u00e9\u00e9 un suivi avanc\u00e9 des feuilles de temps. Il y a une page o\u00f9 les contractuels peuvent facilement ajouter des feuilles de temps pour des mois s\u00e9lectionn\u00e9s. Il serait utile d\u2019avoir des pages suppl\u00e9mentaires qui r\u00e9sument les d\u00e9penses par mois, par d\u00e9partement et par contractuel. Votre objectif dans ce tutoriel est de construire ces pages de r\u00e9sum\u00e9.","title":"Utiliser les Tables de R\u00e9sum\u00e9 pour Analyser les Donn\u00e9es"},{"location":"examples/2021-06-timesheets/#creer-des-tables-de-resume","text":"","title":"Cr\u00e9er des Tables de R\u00e9sum\u00e9"},{"location":"examples/2021-06-timesheets/#etape-1-creer-une-table-de-resume","text":"Commen\u00e7ons par cr\u00e9er une table de r\u00e9sum\u00e9 qui regroupe les enregistrements dans la table des feuilles de temps par mois. Grist facilite la cr\u00e9ation de tables de r\u00e9sum\u00e9. Cliquez simplement sur Ajouter Nouveau > Ajouter Page > Entr\u00e9es de Feuille de Temps > > Mois . Cela g\u00e9n\u00e9rera une table de r\u00e9sum\u00e9 avec quelques colonnes. Dans ce cas, nous avons les trois colonnes suivantes. Premi\u00e8re Colonne : Liste des groupes de mois, de janvier \u00e0 juin 2021. Deuxi\u00e8me Colonne : Un d\u00e9compte du nombre total d\u2019enregistrements dans chaque mois, par exemple en janvier il y a 12 enregistrements de feuilles de temps. Troisi\u00e8me Colonne : Une somme des heures travaill\u00e9es dans chaque mois, par exemple en janvier le total des heures travaill\u00e9es dans ces 12 enregistrements de feuilles de temps est de 81 heures. Note : Grist additionnera automatiquement toutes les colonnes num\u00e9riques, vous faisant gagner du temps.","title":"\u00c9tape 1 : Cr\u00e9er une table de r\u00e9sum\u00e9"},{"location":"examples/2021-06-timesheets/#etape-2-creer-des-tables-de-resume-avec-plusieurs-categories","text":"Il peut \u00eatre utile de regrouper \u00e9galement les feuilles de temps par une combinaison de cat\u00e9gories. Par exemple, nous pouvons vouloir savoir combien de temps et d\u2019argent ont \u00e9t\u00e9 d\u00e9pens\u00e9s sur un compte particulier dans un mois particulier, ou sur un employ\u00e9 sp\u00e9cifique dans un compte et un mois sp\u00e9cifiques. Lors de la cr\u00e9ation d\u2019une table de r\u00e9sum\u00e9, vous pouvez s\u00e9lectionner plusieurs colonnes par lesquelles regrouper les donn\u00e9es. Ajoutons deux nouvelles tables de r\u00e9sum\u00e9. Lors de l\u2019ajout de ces vues, assurez-vous de S\u00e9lectionner Par la premi\u00e8re vue que nous avons cr\u00e9\u00e9e sur cette page. Cela liera les tables de sorte que la s\u00e9lection d\u2019un mois dans la premi\u00e8re vue mettra \u00e0 jour dynamiquement les enregistrements dans les nouvelles vues. Pas s\u00fbr de comprendre pourquoi ? R\u00e9visez lien des vues . Ajouter Nouveau > Ajouter Vue \u00e0 la Page > Entr\u00e9es de Feuille de Temps > > Mois et Compte Ajouter Nouveau > Ajouter Vue \u00e0 la Page > Entr\u00e9es de Feuille de Temps > > Mois et Compte et Employ\u00e9 Pour visualiser plus facilement ces donn\u00e9es, faites glisser et d\u00e9posez les nouvelles tables de mani\u00e8re \u00e0 ce qu\u2019elles soient dispos\u00e9es verticalement. Vous pouvez \u00e9galement vouloir masquer les colonnes de d\u00e9compte. Super ! Mais maintenant nous voulons ajouter le total des d\u00e9penses en dollars dans chacune de ces cat\u00e9gories. C\u2019est simple \u00e0 faire avec des formules de r\u00e9sum\u00e9.","title":"\u00c9tape 2 : Cr\u00e9er des tables de r\u00e9sum\u00e9 avec plusieurs cat\u00e9gories"},{"location":"examples/2021-06-timesheets/#calculer-les-totaux-en-utilisant-des-formules-de-resume","text":"Suivez-vous la vid\u00e9o ? Visitez la solution du tutoriel si vous \u00eates bloqu\u00e9. Notez qu\u2019il y a des permissions avanc\u00e9es en place pour la solution du tutoriel qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages.","title":"Calculer les Totaux en Utilisant des Formules de R\u00e9sum\u00e9"},{"location":"examples/2021-06-timesheets/#etape-1-comprendre-le-champ-group-dans-les-formules","text":"Dans Grist, $group est un objet Python sp\u00e9cial qui repr\u00e9sente une collection d\u2019enregistrements r\u00e9sum\u00e9s par la ligne de r\u00e9sum\u00e9 actuelle. Si vous regardez la formule dans la colonne Heures Travaill\u00e9es , vous verrez SUM($group.Heures_Travaill\u00e9es) . Cela prend la somme des Heures Travaill\u00e9es dans un groupe . Dans cet exemple, dans la ligne 1, le groupe est janvier 2021. Ainsi, dans cette ligne, la formule additionne les heures travaill\u00e9es dans le groupe de janvier 2021. Dans la ligne 2, le groupe est f\u00e9vrier 2021 et la formule additionne les heures travaill\u00e9es en f\u00e9vrier. Si vous jetez un coup d\u2019\u0153il \u00e0 la colonne count , que nous avons pr\u00e9c\u00e9demment masqu\u00e9e, vous trouverez la formule len($group) . La fonction len (qui signifie longueur) compte tous les enregistrements appartenant au groupe r\u00e9sum\u00e9 dans une ligne particuli\u00e8re. Une autre fa\u00e7on d\u2019exprimer un ensemble d\u2019enregistrements est de parcourir la liste des enregistrements dans un groupe en utilisant une variable. Vous pouvez nommer la variable comme vous le souhaitez ; nous utiliserons r (pour \u201crecord\u201d). Nous pouvons r\u00e9\u00e9crire la formule dans Heures Travaill\u00e9es comme sum(r.Heures_Travaill\u00e9es for r in $group) .","title":"\u00c9tape 1 : Comprendre le champ $group dans les formules"},{"location":"examples/2021-06-timesheets/#etape-2-utiliser-group-dans-les-formules","text":"Calculons le total des d\u00e9penses en dollars pour les heures travaill\u00e9es dans chaque mois. La formule est sum(r.Heures_Travaill\u00e9es * r.FeuilleDeTemps.Taux_Horaire for r in $group) . Puisque chaque enregistrement r dans le groupe est un enregistrement dans la table sous-jacente ( Entr\u00e9es de Feuille de Temps ), r.Heures_Travaill\u00e9es se r\u00e9f\u00e8re au champ dans cette table. Dans la table Entr\u00e9es de Feuille de Temps , la colonne FeuilleDeTemps est une colonne de r\u00e9f\u00e9rence qui fait r\u00e9f\u00e9rence \u00e0 un enregistrement entier dans la table Feuilles de Temps . Ainsi, nous devons sp\u00e9cifier davantage quel champ de l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 doit \u00eatre inclus dans le calcul de la formule, qui dans ce cas est Taux_Horaire . Pour en savoir plus sur les colonnes de r\u00e9f\u00e9rence, visitez notre guide des colonnes de r\u00e9f\u00e9rence . Nous pouvons appliquer la m\u00eame formule aux deux autres tables de r\u00e9sum\u00e9 sur cette page. Dans la deuxi\u00e8me table, la fonction $group regroupe les \u00e9l\u00e9ments dans le m\u00eame mois ET compte. Dans la troisi\u00e8me table, la fonction $group regroupe les d\u00e9penses dans le m\u00eame mois ET compte ET par le m\u00eame employ\u00e9. Et c\u2019est tout ! Vous l\u2019avez fait. Vous avez reconstruit la page de r\u00e9sum\u00e9 mensuel. Voyez si vous pouvez appliquer ces concepts pour reconstruire la page de r\u00e9sum\u00e9 des contractuels. Le saviez-vous ? Si n\u00e9cessaire, vous pouvez \u00e9galement ajouter des conditions \u00e0 cette formule. Par exemple, sum(r.Heures_Travaill\u00e9es * r.FeuilleDeTemps.Taux_Horaire for r in $group if r.Heures_Travaill\u00e9es > 0) n\u2019additionnera que les enregistrements dans lesquels il y a une valeur positive dans le champ Heures Travaill\u00e9es . Visitez notre r\u00e9f\u00e9rence des fonctions pour en savoir plus. Besoin de plus d\u2019aide ? Visitez la solution du tutoriel ou contactez-nous \u00e0 support@getgrist.com . Notez qu\u2019il y a des permissions avanc\u00e9es en place pour la solution du tutoriel qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages.","title":"\u00c9tape 2 : Utiliser $group dans les formules"},{"location":"examples/2021-07-auto-stamps/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Guide des Horodatages Automatiques et des Utilisateurs # Il est parfois utile de savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour ou cr\u00e9\u00e9 pour la derni\u00e8re fois, et par qui. Grist rend simple la cr\u00e9ation de colonnes qui horodatent un enregistrement ou ajoutent le nom d\u2019un utilisateur lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. Cela permet de trier les enregistrements par anciennet\u00e9, de d\u00e9terminer depuis combien de temps un enregistrement existe, ou de suivre rapidement la derni\u00e8re modification jusqu\u2019\u00e0 son auteur. Ceci est particuli\u00e8rement utile lorsque l\u2019on travaille en \u00e9quipe. Supposons que vous ayez un document de suivi des opportunit\u00e9s de vente. Il peut \u00eatre utile de savoir la derni\u00e8re fois qu\u2019un commercial a agi sur une opportunit\u00e9 particuli\u00e8re, et de d\u00e9terminer combien de temps cette opportunit\u00e9 est en attente. Nous avons cr\u00e9\u00e9 un tutoriel bas\u00e9 sur notre Suivi des Demandes de Subvention mod\u00e8le. Pour suivre ce guide, commencez par cette version incompl\u00e8te du mod\u00e8le qui manque de colonnes d\u2019horodatage et de nom d\u2019utilisateur. Nous les recr\u00e9erons ensemble dans ce tutoriel. Cr\u00e9ez une copie et modifiez le mod\u00e8le en suivant ce guide. Ouvrir le Mod\u00e8le de Tutoriel Aper\u00e7u du Mod\u00e8le : Suivi des Demandes de Subvention # Dans ce mod\u00e8le, une ONG ax\u00e9e sur les projets de conservation des oc\u00e9ans suit ses demandes de subvention soumis \u00e0 des fondations ax\u00e9es sur la mer. Voici une r\u00e9partition de la structure du document. Le Tableau de Bord des Demandes montre toutes les demandes, les d\u00e9tails des demandes, les d\u00e9tails des fondations, et les t\u00e2ches associ\u00e9es dans une vue utile. T\u00e2ches par Personnel liste le personnel de l\u2019ONG, les demandes qu\u2019ils supervisent, et les t\u00e2ches assign\u00e9es \u00e0 chaque membre de l\u2019\u00e9quipe. Nos Programmes liste les programmes que l\u2019ONG cherche \u00e0 financer. Vue d'ensemble de notre Financement fournit une vue d\u2019ensemble du financement avec deux graphiques : (i) r\u00e9partition des fonds dans le pipeline de collecte de fonds, et (ii) r\u00e9partition du financement total attribu\u00e9 \u00e0 des programmes sp\u00e9cifiques de l\u2019ONG. Fondations avec lesquelles nous travaillons liste les fondations auxquelles l\u2019ONG a demand\u00e9 des financements. Cette page liste \u00e9galement les demandes et les t\u00e2ches associ\u00e9es. Cr\u00e9ation de Colonnes d\u2019Horodatage # Les colonnes peuvent horodater un enregistrement lorsqu\u2019il est cr\u00e9\u00e9 ou mis \u00e0 jour en utilisant la formule NOW() . Ajoutons une colonne au table T\u00e2ches pour suivre la derni\u00e8re mise \u00e0 jour d\u2019une t\u00e2che. Cela peut \u00eatre accompli en trois \u00e9tapes. Dans la table T\u00e2ches , cr\u00e9ez une colonne intitul\u00e9e \u2018Derni\u00e8re Mise \u00e0 Jour\u2019 et dans les types de colonne, s\u00e9lectionnez DateHeure pour choisir votre format de date et heure souhait\u00e9. Convertissez la colonne en une colonne de donn\u00e9es en cliquant sur le menu d\u00e9roulant ACTIONS dans le panneau de cr\u00e9ation. Cela emp\u00eache la formule de se d\u00e9clencher \u00e0 chaque chargement du document. Une fois convertie en colonne de donn\u00e9es, entrez la formule NOW() . Vous verrez deux options de case \u00e0 cocher sous la formule. Appliquer aux nouveaux enregistrements d\u00e9clenche la formule uniquement lorsqu\u2019un enregistrement est cr\u00e9\u00e9. Appliquer aux modifications d'enregistrement d\u00e9clenche la formule lorsqu\u2019un enregistrement est mis \u00e0 jour. S\u00e9lectionnez Appliquer aux modifications d'enregistrement pour ouvrir un sous-menu o\u00f9 vous pouvez s\u00e9lectionner quels champs, lorsqu\u2019ils sont mis \u00e0 jour, d\u00e9clencheront la formule. Dans ce cas, nous s\u00e9lectionnerons Tout Champ , ce qui signifie que la mise \u00e0 jour de n\u2019importe quel champ dans cet enregistrement d\u00e9clenchera la mise \u00e0 jour de la formule d\u2019horodatage. Super ! Vous suivez maintenant la derni\u00e8re mise \u00e0 jour d\u2019une t\u00e2che. Ensuite, vous voudrez peut-\u00eatre savoir qui a cr\u00e9\u00e9 une t\u00e2che car cette personne peut avoir le plus d\u2019informations sur les objectifs et les param\u00e8tres de la t\u00e2che. C\u2019est tout aussi simple \u00e0 cr\u00e9er dans Grist que les horodatages. Cr\u00e9ation de Colonnes de Nom d\u2019Utilisateur # Les colonnes de nom d\u2019utilisateur sont cr\u00e9\u00e9es en utilisant les m\u00eames \u00e9tapes que les horodatages, sauf pour un d\u00e9tail \u2014 la formule est user.Name . Ajoutons une colonne \u00e0 la table T\u00e2ches pour suivre qui a cr\u00e9\u00e9 une t\u00e2che. Dans la table T\u00e2ches , cr\u00e9ez une colonne intitul\u00e9e \u2018Cr\u00e9\u00e9 Par\u2019 et dans les types de colonne, s\u00e9lectionnez Texte et modifiez le format si vous le souhaitez. Convertissez la colonne de formule en une colonne de donn\u00e9es et entrez la formule user.Name . S\u00e9lectionnez Appliquer aux nouveaux enregistrements pour que la formule ne se d\u00e9clenche que lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Il existe d\u2019autres possibilit\u00e9s en plus de user.Name telles que user.Email ou un user.UserID unique. Les informations utilisateur disponibles sont les m\u00eames que celles des conditions de r\u00e8gle d\u2019acc\u00e8s . Note. Il est toujours possible pour un utilisateur de modifier manuellement les cellules avec des formules d\u2019horodatage ou de nom d\u2019utilisateur. Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire. Et voil\u00e0 ! Vous avez cr\u00e9\u00e9 des colonnes qui capturent les informations d\u2019utilisateur et d\u2019horodatage bas\u00e9es sur des d\u00e9clencheurs sp\u00e9cifiques, comme lorsque un enregistrement est mis \u00e0 jour ou cr\u00e9\u00e9. Bravo ! Approfondir : Combiner les horodatages et les noms d\u2019utilisateur en utilisant des formules # En g\u00e9n\u00e9ral, il est pr\u00e9f\u00e9rable de garder les informations d\u2019horodatage et de nom d\u2019utilisateur dans des colonnes s\u00e9par\u00e9es afin de pouvoir trier et filtrer par ces colonnes. Cependant, il peut y avoir des moments o\u00f9 il serait utile de capturer les informations d\u2019horodatage et de nom d\u2019utilisateur dans la m\u00eame colonne. Ajoutons une telle colonne \u00e0 la table Demandes . Dans la table Demandes , cr\u00e9ez une colonne intitul\u00e9e \u2018Cr\u00e9\u00e9 Le\u2019 et convertissez-la en une colonne de donn\u00e9es. Dans les types de colonne, s\u00e9lectionnez Texte. Entrez la formule \"{:%b %d, %Y} par {}\".format(NOW(), user.Name) . La partie entre guillemets est une cha\u00eene de format. Chaque ensemble d\u2019accolades {} dans celle-ci est remplac\u00e9 par la valeur suivante entre parenth\u00e8ses apr\u00e8s .format . Notez que le format de la date est d\u00e9fini dans les accolades correspondantes {} . Le format est d\u00e9fini avec un deux-points : suivi des codes Python sp\u00e9cifiques %b , %d , %Y . Voici un tableau r\u00e9sumant toutes les options de format de date disponibles en Python . S\u00e9lectionnez Appliquer aux nouveaux enregistrements pour que la formule ne se d\u00e9clenche que lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Besoin de plus d\u2019aide ? Visitez le mod\u00e8le final ou contactez-nous \u00e0 support@getgrist.com .","title":"Time and user stamps"},{"location":"examples/2021-07-auto-stamps/#guide-des-horodatages-automatiques-et-des-utilisateurs","text":"Il est parfois utile de savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour ou cr\u00e9\u00e9 pour la derni\u00e8re fois, et par qui. Grist rend simple la cr\u00e9ation de colonnes qui horodatent un enregistrement ou ajoutent le nom d\u2019un utilisateur lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. Cela permet de trier les enregistrements par anciennet\u00e9, de d\u00e9terminer depuis combien de temps un enregistrement existe, ou de suivre rapidement la derni\u00e8re modification jusqu\u2019\u00e0 son auteur. Ceci est particuli\u00e8rement utile lorsque l\u2019on travaille en \u00e9quipe. Supposons que vous ayez un document de suivi des opportunit\u00e9s de vente. Il peut \u00eatre utile de savoir la derni\u00e8re fois qu\u2019un commercial a agi sur une opportunit\u00e9 particuli\u00e8re, et de d\u00e9terminer combien de temps cette opportunit\u00e9 est en attente. Nous avons cr\u00e9\u00e9 un tutoriel bas\u00e9 sur notre Suivi des Demandes de Subvention mod\u00e8le. Pour suivre ce guide, commencez par cette version incompl\u00e8te du mod\u00e8le qui manque de colonnes d\u2019horodatage et de nom d\u2019utilisateur. Nous les recr\u00e9erons ensemble dans ce tutoriel. Cr\u00e9ez une copie et modifiez le mod\u00e8le en suivant ce guide. Ouvrir le Mod\u00e8le de Tutoriel","title":"Guide des Horodatages Automatiques et des Utilisateurs"},{"location":"examples/2021-07-auto-stamps/#apercu-du-modele-suivi-des-demandes-de-subvention","text":"Dans ce mod\u00e8le, une ONG ax\u00e9e sur les projets de conservation des oc\u00e9ans suit ses demandes de subvention soumis \u00e0 des fondations ax\u00e9es sur la mer. Voici une r\u00e9partition de la structure du document. Le Tableau de Bord des Demandes montre toutes les demandes, les d\u00e9tails des demandes, les d\u00e9tails des fondations, et les t\u00e2ches associ\u00e9es dans une vue utile. T\u00e2ches par Personnel liste le personnel de l\u2019ONG, les demandes qu\u2019ils supervisent, et les t\u00e2ches assign\u00e9es \u00e0 chaque membre de l\u2019\u00e9quipe. Nos Programmes liste les programmes que l\u2019ONG cherche \u00e0 financer. Vue d'ensemble de notre Financement fournit une vue d\u2019ensemble du financement avec deux graphiques : (i) r\u00e9partition des fonds dans le pipeline de collecte de fonds, et (ii) r\u00e9partition du financement total attribu\u00e9 \u00e0 des programmes sp\u00e9cifiques de l\u2019ONG. Fondations avec lesquelles nous travaillons liste les fondations auxquelles l\u2019ONG a demand\u00e9 des financements. Cette page liste \u00e9galement les demandes et les t\u00e2ches associ\u00e9es.","title":"Aper\u00e7u du Mod\u00e8le : Suivi des Demandes de Subvention"},{"location":"examples/2021-07-auto-stamps/#creation-de-colonnes-dhorodatage","text":"Les colonnes peuvent horodater un enregistrement lorsqu\u2019il est cr\u00e9\u00e9 ou mis \u00e0 jour en utilisant la formule NOW() . Ajoutons une colonne au table T\u00e2ches pour suivre la derni\u00e8re mise \u00e0 jour d\u2019une t\u00e2che. Cela peut \u00eatre accompli en trois \u00e9tapes. Dans la table T\u00e2ches , cr\u00e9ez une colonne intitul\u00e9e \u2018Derni\u00e8re Mise \u00e0 Jour\u2019 et dans les types de colonne, s\u00e9lectionnez DateHeure pour choisir votre format de date et heure souhait\u00e9. Convertissez la colonne en une colonne de donn\u00e9es en cliquant sur le menu d\u00e9roulant ACTIONS dans le panneau de cr\u00e9ation. Cela emp\u00eache la formule de se d\u00e9clencher \u00e0 chaque chargement du document. Une fois convertie en colonne de donn\u00e9es, entrez la formule NOW() . Vous verrez deux options de case \u00e0 cocher sous la formule. Appliquer aux nouveaux enregistrements d\u00e9clenche la formule uniquement lorsqu\u2019un enregistrement est cr\u00e9\u00e9. Appliquer aux modifications d'enregistrement d\u00e9clenche la formule lorsqu\u2019un enregistrement est mis \u00e0 jour. S\u00e9lectionnez Appliquer aux modifications d'enregistrement pour ouvrir un sous-menu o\u00f9 vous pouvez s\u00e9lectionner quels champs, lorsqu\u2019ils sont mis \u00e0 jour, d\u00e9clencheront la formule. Dans ce cas, nous s\u00e9lectionnerons Tout Champ , ce qui signifie que la mise \u00e0 jour de n\u2019importe quel champ dans cet enregistrement d\u00e9clenchera la mise \u00e0 jour de la formule d\u2019horodatage. Super ! Vous suivez maintenant la derni\u00e8re mise \u00e0 jour d\u2019une t\u00e2che. Ensuite, vous voudrez peut-\u00eatre savoir qui a cr\u00e9\u00e9 une t\u00e2che car cette personne peut avoir le plus d\u2019informations sur les objectifs et les param\u00e8tres de la t\u00e2che. C\u2019est tout aussi simple \u00e0 cr\u00e9er dans Grist que les horodatages.","title":"Cr\u00e9ation de Colonnes d’Horodatage"},{"location":"examples/2021-07-auto-stamps/#creation-de-colonnes-de-nom-dutilisateur","text":"Les colonnes de nom d\u2019utilisateur sont cr\u00e9\u00e9es en utilisant les m\u00eames \u00e9tapes que les horodatages, sauf pour un d\u00e9tail \u2014 la formule est user.Name . Ajoutons une colonne \u00e0 la table T\u00e2ches pour suivre qui a cr\u00e9\u00e9 une t\u00e2che. Dans la table T\u00e2ches , cr\u00e9ez une colonne intitul\u00e9e \u2018Cr\u00e9\u00e9 Par\u2019 et dans les types de colonne, s\u00e9lectionnez Texte et modifiez le format si vous le souhaitez. Convertissez la colonne de formule en une colonne de donn\u00e9es et entrez la formule user.Name . S\u00e9lectionnez Appliquer aux nouveaux enregistrements pour que la formule ne se d\u00e9clenche que lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Il existe d\u2019autres possibilit\u00e9s en plus de user.Name telles que user.Email ou un user.UserID unique. Les informations utilisateur disponibles sont les m\u00eames que celles des conditions de r\u00e8gle d\u2019acc\u00e8s . Note. Il est toujours possible pour un utilisateur de modifier manuellement les cellules avec des formules d\u2019horodatage ou de nom d\u2019utilisateur. Si vous ne voulez pas que cela soit autoris\u00e9, utilisez les permissions avanc\u00e9es pour l\u2019interdire. Et voil\u00e0 ! Vous avez cr\u00e9\u00e9 des colonnes qui capturent les informations d\u2019utilisateur et d\u2019horodatage bas\u00e9es sur des d\u00e9clencheurs sp\u00e9cifiques, comme lorsque un enregistrement est mis \u00e0 jour ou cr\u00e9\u00e9. Bravo !","title":"Cr\u00e9ation de Colonnes de Nom d’Utilisateur"},{"location":"examples/2021-07-auto-stamps/#approfondir-combiner-les-horodatages-et-les-noms-dutilisateur-en-utilisant-des-formules","text":"En g\u00e9n\u00e9ral, il est pr\u00e9f\u00e9rable de garder les informations d\u2019horodatage et de nom d\u2019utilisateur dans des colonnes s\u00e9par\u00e9es afin de pouvoir trier et filtrer par ces colonnes. Cependant, il peut y avoir des moments o\u00f9 il serait utile de capturer les informations d\u2019horodatage et de nom d\u2019utilisateur dans la m\u00eame colonne. Ajoutons une telle colonne \u00e0 la table Demandes . Dans la table Demandes , cr\u00e9ez une colonne intitul\u00e9e \u2018Cr\u00e9\u00e9 Le\u2019 et convertissez-la en une colonne de donn\u00e9es. Dans les types de colonne, s\u00e9lectionnez Texte. Entrez la formule \"{:%b %d, %Y} par {}\".format(NOW(), user.Name) . La partie entre guillemets est une cha\u00eene de format. Chaque ensemble d\u2019accolades {} dans celle-ci est remplac\u00e9 par la valeur suivante entre parenth\u00e8ses apr\u00e8s .format . Notez que le format de la date est d\u00e9fini dans les accolades correspondantes {} . Le format est d\u00e9fini avec un deux-points : suivi des codes Python sp\u00e9cifiques %b , %d , %Y . Voici un tableau r\u00e9sumant toutes les options de format de date disponibles en Python . S\u00e9lectionnez Appliquer aux nouveaux enregistrements pour que la formule ne se d\u00e9clenche que lorsqu\u2019un nouvel enregistrement est cr\u00e9\u00e9. Besoin de plus d\u2019aide ? Visitez le mod\u00e8le final ou contactez-nous \u00e0 support@getgrist.com .","title":"Approfondir : Combiner les horodatages et les noms d’utilisateur en utilisant des formules"},{"location":"examples/2023-01-acl-memo/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . R\u00e8gles d\u2019acc\u00e8s pour restreindre les enregistrements en double # Supposons que nous ayons une table listant les a\u00e9roports, et que nous voulions interdire l\u2019entr\u00e9e d\u2019un nouvel enregistrement avec le m\u00eame code d\u2019a\u00e9roport qu\u2019un existant. Dans la table, nous pouvons ajouter une colonne nomm\u00e9e Count qui compte combien d\u2019enregistrements ont le m\u00eame code : Pour comprendre cette formule, visitez notre aide-m\u00e9moire des formules pour trouver des doublons. Maintenant, nous pouvons ajouter une r\u00e8gle d\u2019acc\u00e8s pour interdire toute mise \u00e0 jour ou cr\u00e9ation d\u2019enregistrement qui entra\u00eenerait un Count sup\u00e9rieur \u00e0 un. Nous pouvons \u00e9galement inclure une note pour expliquer le probl\u00e8me : newRec Cette variable est disponible pour la cr\u00e9ation et la mise \u00e0 jour des enregistrements/lignes, et contient l\u2019\u00e9tat d\u2019une ligne apr\u00e8s une modification propos\u00e9e, vous permettant de permettre ou de refuser s\u00e9lectivement certaines modifications. Voir v\u00e9rification des nouvelles valeurs pour plus de d\u00e9tails. Maintenant, si nous essayons d\u2019ajouter une nouvelle ligne avec un code existant, nous obtenons une erreur utile : Voir Conditions des r\u00e8gles d\u2019acc\u00e8s pour plus de d\u00e9tails sur l\u2019\u00e9criture des conditions des r\u00e8gles d\u2019acc\u00e8s, et Formules pour en savoir plus sur l\u2019utilisation des formules dans les colonnes.","title":"Restrict duplicate records"},{"location":"examples/2023-01-acl-memo/#regles-dacces-pour-restreindre-les-enregistrements-en-double","text":"Supposons que nous ayons une table listant les a\u00e9roports, et que nous voulions interdire l\u2019entr\u00e9e d\u2019un nouvel enregistrement avec le m\u00eame code d\u2019a\u00e9roport qu\u2019un existant. Dans la table, nous pouvons ajouter une colonne nomm\u00e9e Count qui compte combien d\u2019enregistrements ont le m\u00eame code : Pour comprendre cette formule, visitez notre aide-m\u00e9moire des formules pour trouver des doublons. Maintenant, nous pouvons ajouter une r\u00e8gle d\u2019acc\u00e8s pour interdire toute mise \u00e0 jour ou cr\u00e9ation d\u2019enregistrement qui entra\u00eenerait un Count sup\u00e9rieur \u00e0 un. Nous pouvons \u00e9galement inclure une note pour expliquer le probl\u00e8me : newRec Cette variable est disponible pour la cr\u00e9ation et la mise \u00e0 jour des enregistrements/lignes, et contient l\u2019\u00e9tat d\u2019une ligne apr\u00e8s une modification propos\u00e9e, vous permettant de permettre ou de refuser s\u00e9lectivement certaines modifications. Voir v\u00e9rification des nouvelles valeurs pour plus de d\u00e9tails. Maintenant, si nous essayons d\u2019ajouter une nouvelle ligne avec un code existant, nous obtenons une erreur utile : Voir Conditions des r\u00e8gles d\u2019acc\u00e8s pour plus de d\u00e9tails sur l\u2019\u00e9criture des conditions des r\u00e8gles d\u2019acc\u00e8s, et Formules pour en savoir plus sur l\u2019utilisation des formules dans les colonnes.","title":"R\u00e8gles d’acc\u00e8s pour restreindre les enregistrements en double"},{"location":"examples/2023-07-proposals-contracts/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Cr\u00e9ation de Propositions # Si vous conservez des d\u00e9tails commerciaux et des contrats dans Grist, il peut \u00eatre pratique de g\u00e9n\u00e9rer des propositions et des contrats directement l\u00e0, \u00e0 c\u00f4t\u00e9 de ces enregistrements. Vous pouvez utiliser le Widget Markdown Personnalis\u00e9 pour cr\u00e9er un \u2018formulaire\u2019 personnalis\u00e9 pour les Propositions, Contrats, ou de nombreux autres types de documents. Ce tutoriel vous montre comment configurer un document comme celui-ci : Vous pouvez trouver un mod\u00e8le termin\u00e9 ici : \ud83d\udcdd Mod\u00e8le de Propositions & Contrats . Si vous souhaitez ajouter une proposition \u00e0 un document existant, comprendre ce tutoriel devrait vous y aider. Configuration d\u2019une table de Projet # Tout d\u2019abord, cr\u00e9ez une table pour enregistrer les d\u00e9tails du projet en cr\u00e9ant un document vide et en renommant Table1 en Projets : Nous cr\u00e9erons notre mod\u00e8le de Proposition \u00e0 c\u00f4t\u00e9 de notre table Projets . Nous pouvons ins\u00e9rer des ID de colonnes comme des espaces r\u00e9serv\u00e9s dans notre mod\u00e8le de Proposition qui seront ensuite remplac\u00e9s par la valeur de la cellule pour le projet s\u00e9lectionn\u00e9. Par exemple, dans la capture d\u2019\u00e9cran ci-dessous, la valeur de la colonne Nom du Projet remplacera la variable {Nom_Projet} dans le mod\u00e8le de proposition \u00e0 droite. Voir les colonnes disponibles lors de la cr\u00e9ation de notre proposition facilitera le remplissage de ces variables. Cr\u00e9ation de mod\u00e8les # Ajoutons une nouvelle table, Mod\u00e8les , \u00e0 la page pour stocker nos donn\u00e9es de mod\u00e8le. Ajoutez deux colonnes : Nom et Formatage du Mod\u00e8le . Maintenant, ajoutons un widget personnalis\u00e9 \u00e0 c\u00f4t\u00e9 de la table pour visualiser notre Formatage du Mod\u00e8le . Cliquez sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Personnalis\u00e9\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Mod\u00e8les . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Mod\u00e8les \u00e0 nouveau. Configurez le widget personnalis\u00e9 en s\u00e9lectionnant \u2018Markdown\u2019 dans le menu d\u00e9roulant \u2018Personnalis\u00e9\u2019. Puisque nous allons \u00e9diter le mod\u00e8le directement dans le widget personnalis\u00e9, vous devez autoriser \u2018Acc\u00e8s complet au document\u2019 sous Niveau d\u2019Acc\u00e8s pour que le widget puisse mettre \u00e0 jour la table Mod\u00e8les . Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne Formatage du Mod\u00e8le . C\u2019est la colonne qui sera mise \u00e0 jour lorsque nous ferons des modifications dans le widget personnalis\u00e9. Cr\u00e9ez un mod\u00e8le dans la table Mod\u00e8les en entrant une valeur dans la colonne Nom . Ensuite, commencez \u00e0 \u00e9diter le formatage du mod\u00e8le dans le widget personnalis\u00e9. Le widget utilise le formatage Markdown pour formater le texte. Pour obtenir de l\u2019aide sur Markdown, cliquez sur le ? en haut du widget pour consulter le Guide Markdown . Lorsque vous cliquez sur l\u2019ic\u00f4ne \u2018enregistrer\u2019, le formatage du widget remplira la colonne Formatage du Mod\u00e8le . Nous utiliserons exclusivement le widget personnalis\u00e9 pour \u00e9diter le formatage du mod\u00e8le afin que cette colonne puisse \u00eatre masqu\u00e9e de la vue de la table. Pour masquer la colonne, faites un clic droit sur l\u2019en-t\u00eate de la colonne puis \u2018Masquer la colonne\u2019. Dans votre mod\u00e8le, vous aurez des d\u00e9tails et du texte qui restent les m\u00eames pour tous les projets tels que le formatage, les en-t\u00eates de section et les informations de votre propre entreprise. C\u2019est l\u2019information que vous taperez directement dans le mod\u00e8le. Vous aurez \u00e9galement des informations qui changent, comme Nom du Projet ou Nom du Client . Nous pouvons utiliser des variables contenant des ID de colonnes comme espaces r\u00e9serv\u00e9s pour ces donn\u00e9es dynamiques. Nom du Projet , Nom du Client et Adresse du Client changeront tous en fonction du Projet s\u00e9lectionn\u00e9. Donc, c\u2019est l\u2019information que nous devrions stocker dans notre table Projets . Ajoutez les colonnes Nom du Projet , Nom du Client et Adresse du Client \u00e0 la table Projets . Nous pouvons utiliser les ID de colonnes pour chacune de ces colonnes comme espaces r\u00e9serv\u00e9s dans notre mod\u00e8le avec le format {ID_COLONNE} . L\u2019ID d\u2019une colonne peut \u00eatre trouv\u00e9 sous l\u2019onglet \u2018Table\u2019 du Panneau du Cr\u00e9ateur, directement sous l\u2019\u00c9tiquette de la Colonne. Terminez de construire votre mod\u00e8le pour r\u00e9pondre \u00e0 vos besoins. Assurez-vous d\u2019ajouter une colonne \u00e0 votre table Projets pour toutes les informations variables. Enfin, nous devons ajouter une colonne de formule qui cr\u00e9era nos propositions uniques. Cette colonne de formule combinera le formatage du mod\u00e8le que nous venons de cr\u00e9er avec nos donn\u00e9es sp\u00e9cifiques au projet. Ajoutez une nouvelle colonne \u00e0 la table Projets avec la formule suivante : # Trouve toutes les donn\u00e9es associ\u00e9es \u00e0 cet enregistrement class Find_Data(dict): def __missing__(self, key): return getattr(rec, key) # Trouve le mod\u00e8le \"Proposition\" dans la table Mod\u00e8les template = Templates.lookupOne(Name=\"Proposition\").Template_Formatting # Formate le mod\u00e8le avec des champs de cette table ainsi que des champs de la table r\u00e9f\u00e9renc\u00e9e template.format_map(Find_Data()) Configuration d\u2019un tableau de bord de proposition # Ensuite, nous voudrons remplir notre mod\u00e8le de proposition avec des donn\u00e9es de projet r\u00e9elles ! Commencez \u00e0 cr\u00e9er un Tableau de Bord de Proposition en ajoutant une nouvelle page \u00e0 votre document. Cliquez sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter Page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Table\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Vous remarquerez que cette information dans une vue de table est un peu encombr\u00e9e. Un widget Fiche aidera \u00e0 simplifier notre vue. Ajoutez un nouveau widget \u00e0 la page en cliquant sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Fiche\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Projets et ajoutez \u00e0 la page. Votre tableau de bord devrait ressembler \u00e0 la capture d\u2019\u00e9cran ci-dessous. Maintenant que nous avons tous les d\u00e9tails de notre Projet dans une vue Fiche, nous pouvons les masquer de notre vue de table. Sous l\u2019onglet \u2018Table\u2019 du Panneau du Cr\u00e9ateur, s\u00e9lectionnez toutes les colonnes sauf Nom du Projet et Nom du Client puis cliquez sur le bouton vert \u2018Masquer Colonnes\u2019. Garder la plupart des d\u00e9tails du projet dans le widget Fiche, plut\u00f4t que dans le widget Table, simplifie notre tableau de bord. Vous pouvez facilement voir tous les projets dans le widget Table, et lorsque vous souhaitez voir les d\u00e9tails d\u2019un projet sp\u00e9cifique, s\u00e9lectionnez le projet et le widget Fiche se mettra \u00e0 jour pour vous montrer les d\u00e9tails du projet. Enfin, nous voudrons ajouter une vue de notre proposition sp\u00e9cifique au projet. Ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page en cliquant sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Personnalis\u00e9\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Projets et ajoutez \u00e0 la page. Configurez le widget personnalis\u00e9 en s\u00e9lectionnant \u2018Markdown\u2019 dans le menu d\u00e9roulant \u2018Personnalis\u00e9\u2019. Vous devez autoriser \u2018Acc\u00e8s complet au document\u2019. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne Proposition . C\u2019est la colonne de formule qui combine notre formatage de mod\u00e8le avec nos donn\u00e9es sp\u00e9cifiques au projet. Personnalisez votre mise en page en r\u00e9organisant et en redimensionnant les widgets. Ajoutez des d\u00e9tails de projet pour un nouveau projet et voyez comment votre proposition se met \u00e0 jour pour afficher les nouvelles donn\u00e9es ajout\u00e9es. Saisie des informations du client # Maintenant, faisons deux changements utiles \u00e0 la configuration du Projet : Mettez les informations du client dans une table s\u00e9par\u00e9e, afin que nous n\u2019ayons pas \u00e0 ressaisir leur adresse chaque fois que nous cr\u00e9ons une proposition pour eux (et nous pouvons importer les adresses en masse). Mettez \u00e0 jour la formule dans la colonne Proposition de la table Projets pour rechercher des informations dans une autre table. Tout d\u2019abord, cr\u00e9ez une nouvelle table appel\u00e9e Clients pour les informations sp\u00e9cifiques au client comme Nom et Adresse . Certaines de ces donn\u00e9es sont incluses dans notre ensemble de donn\u00e9es Projets. Pour \u00e9viter de dupliquer les donn\u00e9es, nous devons mettre \u00e0 jour nos colonnes Nom du Client et Adresse du Client pour qu\u2019elles proviennent de notre table Clients . Sur notre page Tableau de Bord des Propositions , s\u00e9lectionnez le champ Nom du Client puis mettez \u00e0 jour le type de colonne en R\u00e9f\u00e9rence . Confirmez que \u2018Donn\u00e9es de la Table\u2019 est r\u00e9gl\u00e9 sur Clients et \u2018Afficher la Colonne\u2019 est Nom . Ensuite, nous devons mettre \u00e0 jour le champ Adresse du Client pour extraire l\u2019adresse du client list\u00e9 dans la colonne Nom du Client . Mettez \u00e0 jour la colonne Adresse du Client pour utiliser la formule suivante : $Customer_Name.Address Cette formule utilise notre colonne de r\u00e9f\u00e9rence, Nom du Client , ainsi que la notation par point , pour extraire la valeur de la colonne Adresse de la table r\u00e9f\u00e9renc\u00e9e. Lorsque vous regardez une proposition pour un projet existant, vous remarquerez que le Nom du Client ne se remplit plus. Cela est d\u00fb \u00e0 la fa\u00e7on dont les colonnes de r\u00e9f\u00e9rence stockent les donn\u00e9es. Bien que sous \u2018Afficher la Colonne\u2019, nous ayons choisi de voir la valeur de la colonne Nom de la table r\u00e9f\u00e9renc\u00e9e, les colonnes de r\u00e9f\u00e9rence stockent en r\u00e9alit\u00e9 l\u2019ID d\u2019un enregistrement. C\u2019est ce que nous voyons maintenant dans la proposition. Nous pouvons modifier notre formule dans la colonne Proposition pour rechercher des donn\u00e9es dans d\u2019autres tables. Dans la table Projets , mettez \u00e0 jour la formule dans la colonne Propositions avec ce qui suit : # Trouve toutes les donn\u00e9es associ\u00e9es \u00e0 cet enregistrement class Find_Data(dict): def __missing__(self, key): return getattr(rec, key) # Trouve le mod\u00e8le \"Proposition\" dans la table Mod\u00e8les template = Templates.lookupOne(Name=\"Proposition\").Template_Formatting # Formate le mod\u00e8le avec des champs de cette table ainsi que des champs de la table r\u00e9f\u00e9renc\u00e9e template.format_map(Find_Data( Customer_Name = $Customer_Name.Name, )) Dans la derni\u00e8re partie de la formule, nous pouvons sp\u00e9cifier des variables qui tirent des donn\u00e9es d\u2019autres tables. Customer_Name = $Customer_Name.Name est pour notre colonne de r\u00e9f\u00e9rence, Nom du Client . Il utilise la notation par point pour sp\u00e9cifier quelles donn\u00e9es extraire de la table r\u00e9f\u00e9renc\u00e9e. Note : Adresse du Client La colonne Adresse du Client peut \u00eatre compl\u00e8tement supprim\u00e9e de la table Projets . Ces donn\u00e9es sont d\u00e9j\u00e0 stock\u00e9es dans la table Clients et notre colonne Nom du Client est une colonne de r\u00e9f\u00e9rence pointant vers cette table. Nous pouvons utiliser cette colonne de r\u00e9f\u00e9rence pour extraire toute autre information de la table Clients \u00e0 inclure dans notre proposition. Si vous choisissez de supprimer Adresse du Client de la table Projets , mettez \u00e0 jour la derni\u00e8re section de la formule comme suit : template.format_map(Find_Data( Customer_Name = $Customer_Name.Name, Customer_Address = $Customer_Name.Address.replace('\\n', '
    '), )) Cela indique \u00e0 la formule quoi utiliser \u00e0 la place de la variable {Customer_Address} . Impression et Enregistrement # Une fois votre proposition pr\u00eate, vous pouvez l\u2019imprimer ou l\u2019enregistrer en PDF. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points en haut \u00e0 droite du widget puis s\u00e9lectionnez \u2018Imprimer le widget\u2019. \u00c0 partir de l\u00e0, vous pouvez soit s\u00e9lectionner une imprimante, soit choisir \u2018Enregistrer en PDF\u2019 dans le menu d\u00e9roulant \u2018Destination\u2019. Configuration de plusieurs formulaires # Vous pouvez ajouter plus de mod\u00e8les de formulaire en suivant les m\u00eames \u00e9tapes que nous venons de compl\u00e9ter. Ajoutez un nouveau mod\u00e8le \u00e0 la table Mod\u00e8les puis construisez le mod\u00e8le en utilisant des variables contenant des ID de colonnes pour toutes les donn\u00e9es sp\u00e9cifiques au projet. Si vous avez des sections identiques \u00e0 un autre formulaire, copiez-les pour vous \u00e9viter la peine de les retaper ! Cr\u00e9ez un tableau de bord o\u00f9 vous pouvez s\u00e9lectionner un projet et entrer des d\u00e9tails pour ce formulaire puis pr\u00e9visualiser le formulaire dans un widget personnalis\u00e9. N\u2019oubliez pas, vous devrez ajouter une colonne de formule qui combine le nouveau mod\u00e8le de formulaire avec les d\u00e9tails du projet s\u00e9lectionn\u00e9 ! Cette colonne de formule est ce que vous s\u00e9lectionnerez sous le menu d\u00e9roulant \u2018Contenu\u2019 lors de la configuration du Widget Markdown Personnalis\u00e9 .","title":"Proposals & contracts"},{"location":"examples/2023-07-proposals-contracts/#creation-de-propositions","text":"Si vous conservez des d\u00e9tails commerciaux et des contrats dans Grist, il peut \u00eatre pratique de g\u00e9n\u00e9rer des propositions et des contrats directement l\u00e0, \u00e0 c\u00f4t\u00e9 de ces enregistrements. Vous pouvez utiliser le Widget Markdown Personnalis\u00e9 pour cr\u00e9er un \u2018formulaire\u2019 personnalis\u00e9 pour les Propositions, Contrats, ou de nombreux autres types de documents. Ce tutoriel vous montre comment configurer un document comme celui-ci : Vous pouvez trouver un mod\u00e8le termin\u00e9 ici : \ud83d\udcdd Mod\u00e8le de Propositions & Contrats . Si vous souhaitez ajouter une proposition \u00e0 un document existant, comprendre ce tutoriel devrait vous y aider.","title":"Cr\u00e9ation de Propositions"},{"location":"examples/2023-07-proposals-contracts/#configuration-dune-table-de-projet","text":"Tout d\u2019abord, cr\u00e9ez une table pour enregistrer les d\u00e9tails du projet en cr\u00e9ant un document vide et en renommant Table1 en Projets : Nous cr\u00e9erons notre mod\u00e8le de Proposition \u00e0 c\u00f4t\u00e9 de notre table Projets . Nous pouvons ins\u00e9rer des ID de colonnes comme des espaces r\u00e9serv\u00e9s dans notre mod\u00e8le de Proposition qui seront ensuite remplac\u00e9s par la valeur de la cellule pour le projet s\u00e9lectionn\u00e9. Par exemple, dans la capture d\u2019\u00e9cran ci-dessous, la valeur de la colonne Nom du Projet remplacera la variable {Nom_Projet} dans le mod\u00e8le de proposition \u00e0 droite. Voir les colonnes disponibles lors de la cr\u00e9ation de notre proposition facilitera le remplissage de ces variables.","title":"Configuration d’une table de Projet"},{"location":"examples/2023-07-proposals-contracts/#creation-de-modeles","text":"Ajoutons une nouvelle table, Mod\u00e8les , \u00e0 la page pour stocker nos donn\u00e9es de mod\u00e8le. Ajoutez deux colonnes : Nom et Formatage du Mod\u00e8le . Maintenant, ajoutons un widget personnalis\u00e9 \u00e0 c\u00f4t\u00e9 de la table pour visualiser notre Formatage du Mod\u00e8le . Cliquez sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Personnalis\u00e9\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Mod\u00e8les . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Mod\u00e8les \u00e0 nouveau. Configurez le widget personnalis\u00e9 en s\u00e9lectionnant \u2018Markdown\u2019 dans le menu d\u00e9roulant \u2018Personnalis\u00e9\u2019. Puisque nous allons \u00e9diter le mod\u00e8le directement dans le widget personnalis\u00e9, vous devez autoriser \u2018Acc\u00e8s complet au document\u2019 sous Niveau d\u2019Acc\u00e8s pour que le widget puisse mettre \u00e0 jour la table Mod\u00e8les . Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne Formatage du Mod\u00e8le . C\u2019est la colonne qui sera mise \u00e0 jour lorsque nous ferons des modifications dans le widget personnalis\u00e9. Cr\u00e9ez un mod\u00e8le dans la table Mod\u00e8les en entrant une valeur dans la colonne Nom . Ensuite, commencez \u00e0 \u00e9diter le formatage du mod\u00e8le dans le widget personnalis\u00e9. Le widget utilise le formatage Markdown pour formater le texte. Pour obtenir de l\u2019aide sur Markdown, cliquez sur le ? en haut du widget pour consulter le Guide Markdown . Lorsque vous cliquez sur l\u2019ic\u00f4ne \u2018enregistrer\u2019, le formatage du widget remplira la colonne Formatage du Mod\u00e8le . Nous utiliserons exclusivement le widget personnalis\u00e9 pour \u00e9diter le formatage du mod\u00e8le afin que cette colonne puisse \u00eatre masqu\u00e9e de la vue de la table. Pour masquer la colonne, faites un clic droit sur l\u2019en-t\u00eate de la colonne puis \u2018Masquer la colonne\u2019. Dans votre mod\u00e8le, vous aurez des d\u00e9tails et du texte qui restent les m\u00eames pour tous les projets tels que le formatage, les en-t\u00eates de section et les informations de votre propre entreprise. C\u2019est l\u2019information que vous taperez directement dans le mod\u00e8le. Vous aurez \u00e9galement des informations qui changent, comme Nom du Projet ou Nom du Client . Nous pouvons utiliser des variables contenant des ID de colonnes comme espaces r\u00e9serv\u00e9s pour ces donn\u00e9es dynamiques. Nom du Projet , Nom du Client et Adresse du Client changeront tous en fonction du Projet s\u00e9lectionn\u00e9. Donc, c\u2019est l\u2019information que nous devrions stocker dans notre table Projets . Ajoutez les colonnes Nom du Projet , Nom du Client et Adresse du Client \u00e0 la table Projets . Nous pouvons utiliser les ID de colonnes pour chacune de ces colonnes comme espaces r\u00e9serv\u00e9s dans notre mod\u00e8le avec le format {ID_COLONNE} . L\u2019ID d\u2019une colonne peut \u00eatre trouv\u00e9 sous l\u2019onglet \u2018Table\u2019 du Panneau du Cr\u00e9ateur, directement sous l\u2019\u00c9tiquette de la Colonne. Terminez de construire votre mod\u00e8le pour r\u00e9pondre \u00e0 vos besoins. Assurez-vous d\u2019ajouter une colonne \u00e0 votre table Projets pour toutes les informations variables. Enfin, nous devons ajouter une colonne de formule qui cr\u00e9era nos propositions uniques. Cette colonne de formule combinera le formatage du mod\u00e8le que nous venons de cr\u00e9er avec nos donn\u00e9es sp\u00e9cifiques au projet. Ajoutez une nouvelle colonne \u00e0 la table Projets avec la formule suivante : # Trouve toutes les donn\u00e9es associ\u00e9es \u00e0 cet enregistrement class Find_Data(dict): def __missing__(self, key): return getattr(rec, key) # Trouve le mod\u00e8le \"Proposition\" dans la table Mod\u00e8les template = Templates.lookupOne(Name=\"Proposition\").Template_Formatting # Formate le mod\u00e8le avec des champs de cette table ainsi que des champs de la table r\u00e9f\u00e9renc\u00e9e template.format_map(Find_Data())","title":"Cr\u00e9ation de mod\u00e8les"},{"location":"examples/2023-07-proposals-contracts/#configuration-dun-tableau-de-bord-de-proposition","text":"Ensuite, nous voudrons remplir notre mod\u00e8le de proposition avec des donn\u00e9es de projet r\u00e9elles ! Commencez \u00e0 cr\u00e9er un Tableau de Bord de Proposition en ajoutant une nouvelle page \u00e0 votre document. Cliquez sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter Page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Table\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Vous remarquerez que cette information dans une vue de table est un peu encombr\u00e9e. Un widget Fiche aidera \u00e0 simplifier notre vue. Ajoutez un nouveau widget \u00e0 la page en cliquant sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Fiche\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Projets et ajoutez \u00e0 la page. Votre tableau de bord devrait ressembler \u00e0 la capture d\u2019\u00e9cran ci-dessous. Maintenant que nous avons tous les d\u00e9tails de notre Projet dans une vue Fiche, nous pouvons les masquer de notre vue de table. Sous l\u2019onglet \u2018Table\u2019 du Panneau du Cr\u00e9ateur, s\u00e9lectionnez toutes les colonnes sauf Nom du Projet et Nom du Client puis cliquez sur le bouton vert \u2018Masquer Colonnes\u2019. Garder la plupart des d\u00e9tails du projet dans le widget Fiche, plut\u00f4t que dans le widget Table, simplifie notre tableau de bord. Vous pouvez facilement voir tous les projets dans le widget Table, et lorsque vous souhaitez voir les d\u00e9tails d\u2019un projet sp\u00e9cifique, s\u00e9lectionnez le projet et le widget Fiche se mettra \u00e0 jour pour vous montrer les d\u00e9tails du projet. Enfin, nous voudrons ajouter une vue de notre proposition sp\u00e9cifique au projet. Ajoutez un nouveau widget personnalis\u00e9 \u00e0 la page en cliquant sur le bouton vert \u2018Ajouter Nouveau\u2019 puis \u2018Ajouter un widget \u00e0 la page\u2019. Sous \u2018S\u00e9lectionner le Widget\u2019, s\u00e9lectionnez \u2018Personnalis\u00e9\u2019 et sous \u2018S\u00e9lectionner les Donn\u00e9es\u2019, s\u00e9lectionnez Projets . Sous \u2018S\u00e9lectionner Par\u2019, s\u00e9lectionnez Projets et ajoutez \u00e0 la page. Configurez le widget personnalis\u00e9 en s\u00e9lectionnant \u2018Markdown\u2019 dans le menu d\u00e9roulant \u2018Personnalis\u00e9\u2019. Vous devez autoriser \u2018Acc\u00e8s complet au document\u2019. Sous \u2018Contenu\u2019, s\u00e9lectionnez la colonne Proposition . C\u2019est la colonne de formule qui combine notre formatage de mod\u00e8le avec nos donn\u00e9es sp\u00e9cifiques au projet. Personnalisez votre mise en page en r\u00e9organisant et en redimensionnant les widgets. Ajoutez des d\u00e9tails de projet pour un nouveau projet et voyez comment votre proposition se met \u00e0 jour pour afficher les nouvelles donn\u00e9es ajout\u00e9es.","title":"Configuration d’un tableau de bord de proposition"},{"location":"examples/2023-07-proposals-contracts/#saisie-des-informations-du-client","text":"Maintenant, faisons deux changements utiles \u00e0 la configuration du Projet : Mettez les informations du client dans une table s\u00e9par\u00e9e, afin que nous n\u2019ayons pas \u00e0 ressaisir leur adresse chaque fois que nous cr\u00e9ons une proposition pour eux (et nous pouvons importer les adresses en masse). Mettez \u00e0 jour la formule dans la colonne Proposition de la table Projets pour rechercher des informations dans une autre table. Tout d\u2019abord, cr\u00e9ez une nouvelle table appel\u00e9e Clients pour les informations sp\u00e9cifiques au client comme Nom et Adresse . Certaines de ces donn\u00e9es sont incluses dans notre ensemble de donn\u00e9es Projets. Pour \u00e9viter de dupliquer les donn\u00e9es, nous devons mettre \u00e0 jour nos colonnes Nom du Client et Adresse du Client pour qu\u2019elles proviennent de notre table Clients . Sur notre page Tableau de Bord des Propositions , s\u00e9lectionnez le champ Nom du Client puis mettez \u00e0 jour le type de colonne en R\u00e9f\u00e9rence . Confirmez que \u2018Donn\u00e9es de la Table\u2019 est r\u00e9gl\u00e9 sur Clients et \u2018Afficher la Colonne\u2019 est Nom . Ensuite, nous devons mettre \u00e0 jour le champ Adresse du Client pour extraire l\u2019adresse du client list\u00e9 dans la colonne Nom du Client . Mettez \u00e0 jour la colonne Adresse du Client pour utiliser la formule suivante : $Customer_Name.Address Cette formule utilise notre colonne de r\u00e9f\u00e9rence, Nom du Client , ainsi que la notation par point , pour extraire la valeur de la colonne Adresse de la table r\u00e9f\u00e9renc\u00e9e. Lorsque vous regardez une proposition pour un projet existant, vous remarquerez que le Nom du Client ne se remplit plus. Cela est d\u00fb \u00e0 la fa\u00e7on dont les colonnes de r\u00e9f\u00e9rence stockent les donn\u00e9es. Bien que sous \u2018Afficher la Colonne\u2019, nous ayons choisi de voir la valeur de la colonne Nom de la table r\u00e9f\u00e9renc\u00e9e, les colonnes de r\u00e9f\u00e9rence stockent en r\u00e9alit\u00e9 l\u2019ID d\u2019un enregistrement. C\u2019est ce que nous voyons maintenant dans la proposition. Nous pouvons modifier notre formule dans la colonne Proposition pour rechercher des donn\u00e9es dans d\u2019autres tables. Dans la table Projets , mettez \u00e0 jour la formule dans la colonne Propositions avec ce qui suit : # Trouve toutes les donn\u00e9es associ\u00e9es \u00e0 cet enregistrement class Find_Data(dict): def __missing__(self, key): return getattr(rec, key) # Trouve le mod\u00e8le \"Proposition\" dans la table Mod\u00e8les template = Templates.lookupOne(Name=\"Proposition\").Template_Formatting # Formate le mod\u00e8le avec des champs de cette table ainsi que des champs de la table r\u00e9f\u00e9renc\u00e9e template.format_map(Find_Data( Customer_Name = $Customer_Name.Name, )) Dans la derni\u00e8re partie de la formule, nous pouvons sp\u00e9cifier des variables qui tirent des donn\u00e9es d\u2019autres tables. Customer_Name = $Customer_Name.Name est pour notre colonne de r\u00e9f\u00e9rence, Nom du Client . Il utilise la notation par point pour sp\u00e9cifier quelles donn\u00e9es extraire de la table r\u00e9f\u00e9renc\u00e9e. Note : Adresse du Client La colonne Adresse du Client peut \u00eatre compl\u00e8tement supprim\u00e9e de la table Projets . Ces donn\u00e9es sont d\u00e9j\u00e0 stock\u00e9es dans la table Clients et notre colonne Nom du Client est une colonne de r\u00e9f\u00e9rence pointant vers cette table. Nous pouvons utiliser cette colonne de r\u00e9f\u00e9rence pour extraire toute autre information de la table Clients \u00e0 inclure dans notre proposition. Si vous choisissez de supprimer Adresse du Client de la table Projets , mettez \u00e0 jour la derni\u00e8re section de la formule comme suit : template.format_map(Find_Data( Customer_Name = $Customer_Name.Name, Customer_Address = $Customer_Name.Address.replace('\\n', '
    '), )) Cela indique \u00e0 la formule quoi utiliser \u00e0 la place de la variable {Customer_Address} .","title":"Saisie des informations du client"},{"location":"examples/2023-07-proposals-contracts/#impression-et-enregistrement","text":"Une fois votre proposition pr\u00eate, vous pouvez l\u2019imprimer ou l\u2019enregistrer en PDF. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points en haut \u00e0 droite du widget puis s\u00e9lectionnez \u2018Imprimer le widget\u2019. \u00c0 partir de l\u00e0, vous pouvez soit s\u00e9lectionner une imprimante, soit choisir \u2018Enregistrer en PDF\u2019 dans le menu d\u00e9roulant \u2018Destination\u2019.","title":"Impression et Enregistrement"},{"location":"examples/2023-07-proposals-contracts/#configuration-de-plusieurs-formulaires","text":"Vous pouvez ajouter plus de mod\u00e8les de formulaire en suivant les m\u00eames \u00e9tapes que nous venons de compl\u00e9ter. Ajoutez un nouveau mod\u00e8le \u00e0 la table Mod\u00e8les puis construisez le mod\u00e8le en utilisant des variables contenant des ID de colonnes pour toutes les donn\u00e9es sp\u00e9cifiques au projet. Si vous avez des sections identiques \u00e0 un autre formulaire, copiez-les pour vous \u00e9viter la peine de les retaper ! Cr\u00e9ez un tableau de bord o\u00f9 vous pouvez s\u00e9lectionner un projet et entrer des d\u00e9tails pour ce formulaire puis pr\u00e9visualiser le formulaire dans un widget personnalis\u00e9. N\u2019oubliez pas, vous devrez ajouter une colonne de formule qui combine le nouveau mod\u00e8le de formulaire avec les d\u00e9tails du projet s\u00e9lectionn\u00e9 ! Cette colonne de formule est ce que vous s\u00e9lectionnerez sous le menu d\u00e9roulant \u2018Contenu\u2019 lors de la configuration du Widget Markdown Personnalis\u00e9 .","title":"Configuration de plusieurs formulaires"},{"location":"install/aws-marketplace/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . AWS Marketplace # Grist sur AWS Marketplace a ce qu\u2019il vous faut pour ex\u00e9cuter une instance Grist auto-h\u00e9berg\u00e9e avec une configuration minimale, et est bas\u00e9 sur grist-omnibus . Vous trouverez ci-dessous les \u00e9tapes compl\u00e8tes de configuration, y compris l\u2019authentification via OpenID. Configuration de la premi\u00e8re ex\u00e9cution # Apr\u00e8s le d\u00e9ploiement de l\u2019instance, Grist devrait \u00eatre imm\u00e9diatement disponible via le protocole HTTP sur un domaine autog\u00e9n\u00e9r\u00e9 tel que ec2-3-94-254-105.compute-1.amazonaws.com (\u00e9tiquet\u00e9 Public IPv4 DNS par AWS). Identifiants par d\u00e9faut : email : admin@example.getgrist.com mot de passe : [instance-id]* * L\u2019ID de l\u2019instance peut \u00eatre trouv\u00e9 sur la page EC2 dans la console AWS : Comment se connecter \u00e0 l\u2019instance Grist # Pendant le d\u00e9ploiement, il vous a \u00e9t\u00e9 demand\u00e9 de cr\u00e9er ou d\u2019utiliser des paires de cl\u00e9s. Vous pouvez utiliser cette paire pour vous connecter via SSH depuis votre terminal/bash. L\u2019utilisateur par d\u00e9faut pour l\u2019instance Grist EC2 s\u2019appelle \u201cubuntu\u201d, et vous pouvez vous connecter \u00e0 ubuntu@[ec2-instance-public-ip] . Remarque : Vous devez utiliser le fichier *.pem que vous avez re\u00e7u lors de la g\u00e9n\u00e9ration des paires de cl\u00e9s sur AWS. Les d\u00e9tails sur la connexion via SSH se trouvent aux endroits suivants : Windows : https://learn.microsoft.com/en-us/windows/terminal/tutorials/ssh Linux : https://www.ssh.com/academy/ssh/command macOS : https://www.servermania.com/kb/articles/ssh-mac Si vous ne souhaitez pas vous connecter via SSH, AWS offre la possibilit\u00e9 de se connecter depuis la console AWS en utilisant le bouton \u201cConnect\u201d : Configuration de domaine personnalis\u00e9 et SSL pour un acc\u00e8s HTTPS # Les domaines personnalis\u00e9s sont n\u00e9cessaires pour un acc\u00e8s s\u00e9curis\u00e9 \u00e0 Grist. Si vous avez d\u00e9j\u00e0 un certificat SSL, vous pouvez utiliser le v\u00f4tre (comme d\u00e9crit dans le README de grist-omnibus ). Sinon, Grist peut g\u00e9n\u00e9rer un certificat de Let\u2019s Encrypt. Pour cela, un domaine valide et un email doivent \u00eatre configur\u00e9s : Pointez le domaine vers l\u2019adresse IP de l\u2019instance Grist EC2. Si vous n\u2019utilisez pas le service Elastic IP , l\u2019instance peut avoir une adresse IPv4 publique diff\u00e9rente \u00e0 chaque d\u00e9marrage. Connectez-vous \u00e0 l\u2019instance Grist EC2. D\u00e9finissez le param\u00e8tre URL dans le fichier grist/gristParameters . Vous avez besoin des privil\u00e8ges administrateur pour effectuer cette action, vous pouvez donc ouvrir un \u00e9diteur en ex\u00e9cutant sudo nano grist/gristParameters . Ex\u00e9cutez le script restartGrist avec sudo ~/grist/restartGrist . Une fois les \u00e9tapes ci-dessus termin\u00e9es, vous devriez pouvoir acc\u00e9der \u00e0 Grist sur votre domaine personnalis\u00e9. Configuration de l\u2019authentification # Nous supportons Google ou Microsoft en tant que fournisseurs OpenID. Pour configurer d\u2019autres fournisseurs d\u2019authentification, veuillez vous r\u00e9f\u00e9rer \u00e0 la documentation dex . Pour configurer l\u2019authentification Grist avec Google ou Microsoft, vous devez avoir une application enregistr\u00e9e aupr\u00e8s du fournisseur correspondant : Microsoft : https://learn.microsoft.com/en-us/power-pages/security/authentication/openid-settings Google : https://support.google.com/cloud/answer/6158849?hl=en Une fois que vous avez votre ID client et votre secret, vous devez les transmettre au fichier gristParameters \u00e0 l\u2019int\u00e9rieur de l\u2019instance Grist EC2 : Connectez-vous \u00e0 l\u2019instance Grist EC2. Ouvrez ~/grist/gristParameters . Mettez \u00e0 jour les sections CLIENT_ID et CLIENT_SECRET pour le(s) fournisseur(s) concern\u00e9(s). Si vous n\u2019utilisez qu\u2019un seul fournisseur, laissez la deuxi\u00e8me section comment\u00e9e. Mettez \u00e0 jour ADMIN_EMAIL dans le m\u00eame fichier. Il doit correspondre \u00e0 l\u2019email que vous utiliserez pour vous connecter via votre fournisseur d\u2019authentification. Par exemple : ADMIN_EMAIL=frank@votre-organisation.com Si vous souhaitez changer le nom de votre \u00e9quipe, mettez \u00e0 jour TEAM_NAME dans le m\u00eame fichier. Ex\u00e9cutez restartGrist avec le flag clean en utilisant sudo ~/grist/restartGrist clean pour effacer les anciennes donn\u00e9es de connexion. Important : Cela supprimera tous les documents Grist ! Une fois la configuration ci-dessus effectu\u00e9e, vous devriez pouvoir vous connecter avec vos identifiants Google/Microsoft. Ex\u00e9cution de Grist dans un VPC s\u00e9par\u00e9 # grist-omnibus est con\u00e7u pour fonctionner sur chaque VPC par d\u00e9faut du compte. Pour le faire fonctionner sur un VPC personnalis\u00e9, vous devrez configurer correctement tous les \u00e9l\u00e9ments du VPC. Pour plus d\u2019informations sur cette configuration, lisez ici . Pour ex\u00e9cuter Grist sur un VPC, les \u00e9l\u00e9ments suivants doivent \u00eatre correctement configur\u00e9s : L\u2019attribution d\u2019un nom DNS public \u00e0 l\u2019instance Grist EC2 est autoris\u00e9e. Le VPC peut \u00eatre accessible depuis Internet (permettant \u00e0 la passerelle Internet et aux tables de routage de g\u00e9rer le trafic). Une connexion de groupe de s\u00e9curit\u00e9 depuis les ports 22 (SSH pour la configuration), 80 (connexion HTTP) et 433 (connexion HTTPS) est autoris\u00e9e. Mise \u00e0 jour de grist-omnibus # La version packag\u00e9e de grist-omnibus se mettra \u00e0 jour automatiquement avant chaque lancement. Pour mettre \u00e0 jour grist-omnibus manuellement, red\u00e9marrez l\u2019instance Grist EC2 ou connectez-vous via SSH et appelez sudo ~/grist/restartGrist . Il n\u2019y a actuellement aucun plan pour supporter l\u2019environnement Grist AWS Marketplace en dehors de grist-omnibus . Autres informations importantes # L\u2019instance Grist EC2 doit avoir l\u2019option \u201cPersistent store\u201d coch\u00e9e. Grist stocke toutes les donn\u00e9es dans le r\u00e9pertoire ~/grist-persist . Supprimer ce dossier entra\u00eenera la perte de toutes les donn\u00e9es de tous les documents. Ne supprimez pas ~/grist-persist/acme.json , car il contient une cl\u00e9 priv\u00e9e de Let\u2019s Encrypt. Le supprimer trop souvent peut entra\u00eener le refus de Let\u2019s Encrypt de d\u00e9livrer de nouveaux certificats pour votre domaine.","title":"AWS Marketplace"},{"location":"install/aws-marketplace/#aws-marketplace","text":"Grist sur AWS Marketplace a ce qu\u2019il vous faut pour ex\u00e9cuter une instance Grist auto-h\u00e9berg\u00e9e avec une configuration minimale, et est bas\u00e9 sur grist-omnibus . Vous trouverez ci-dessous les \u00e9tapes compl\u00e8tes de configuration, y compris l\u2019authentification via OpenID.","title":"AWS Marketplace"},{"location":"install/aws-marketplace/#configuration-de-la-premiere-execution","text":"Apr\u00e8s le d\u00e9ploiement de l\u2019instance, Grist devrait \u00eatre imm\u00e9diatement disponible via le protocole HTTP sur un domaine autog\u00e9n\u00e9r\u00e9 tel que ec2-3-94-254-105.compute-1.amazonaws.com (\u00e9tiquet\u00e9 Public IPv4 DNS par AWS). Identifiants par d\u00e9faut : email : admin@example.getgrist.com mot de passe : [instance-id]* * L\u2019ID de l\u2019instance peut \u00eatre trouv\u00e9 sur la page EC2 dans la console AWS :","title":"Configuration de la premi\u00e8re ex\u00e9cution"},{"location":"install/aws-marketplace/#comment-se-connecter-a-linstance-grist","text":"Pendant le d\u00e9ploiement, il vous a \u00e9t\u00e9 demand\u00e9 de cr\u00e9er ou d\u2019utiliser des paires de cl\u00e9s. Vous pouvez utiliser cette paire pour vous connecter via SSH depuis votre terminal/bash. L\u2019utilisateur par d\u00e9faut pour l\u2019instance Grist EC2 s\u2019appelle \u201cubuntu\u201d, et vous pouvez vous connecter \u00e0 ubuntu@[ec2-instance-public-ip] . Remarque : Vous devez utiliser le fichier *.pem que vous avez re\u00e7u lors de la g\u00e9n\u00e9ration des paires de cl\u00e9s sur AWS. Les d\u00e9tails sur la connexion via SSH se trouvent aux endroits suivants : Windows : https://learn.microsoft.com/en-us/windows/terminal/tutorials/ssh Linux : https://www.ssh.com/academy/ssh/command macOS : https://www.servermania.com/kb/articles/ssh-mac Si vous ne souhaitez pas vous connecter via SSH, AWS offre la possibilit\u00e9 de se connecter depuis la console AWS en utilisant le bouton \u201cConnect\u201d :","title":"Comment se connecter \u00e0 l’instance Grist"},{"location":"install/aws-marketplace/#configuration-de-domaine-personnalise-et-ssl-pour-un-acces-https","text":"Les domaines personnalis\u00e9s sont n\u00e9cessaires pour un acc\u00e8s s\u00e9curis\u00e9 \u00e0 Grist. Si vous avez d\u00e9j\u00e0 un certificat SSL, vous pouvez utiliser le v\u00f4tre (comme d\u00e9crit dans le README de grist-omnibus ). Sinon, Grist peut g\u00e9n\u00e9rer un certificat de Let\u2019s Encrypt. Pour cela, un domaine valide et un email doivent \u00eatre configur\u00e9s : Pointez le domaine vers l\u2019adresse IP de l\u2019instance Grist EC2. Si vous n\u2019utilisez pas le service Elastic IP , l\u2019instance peut avoir une adresse IPv4 publique diff\u00e9rente \u00e0 chaque d\u00e9marrage. Connectez-vous \u00e0 l\u2019instance Grist EC2. D\u00e9finissez le param\u00e8tre URL dans le fichier grist/gristParameters . Vous avez besoin des privil\u00e8ges administrateur pour effectuer cette action, vous pouvez donc ouvrir un \u00e9diteur en ex\u00e9cutant sudo nano grist/gristParameters . Ex\u00e9cutez le script restartGrist avec sudo ~/grist/restartGrist . Une fois les \u00e9tapes ci-dessus termin\u00e9es, vous devriez pouvoir acc\u00e9der \u00e0 Grist sur votre domaine personnalis\u00e9.","title":"Configuration de domaine personnalis\u00e9 et SSL pour un acc\u00e8s HTTPS"},{"location":"install/aws-marketplace/#configuration-de-lauthentification","text":"Nous supportons Google ou Microsoft en tant que fournisseurs OpenID. Pour configurer d\u2019autres fournisseurs d\u2019authentification, veuillez vous r\u00e9f\u00e9rer \u00e0 la documentation dex . Pour configurer l\u2019authentification Grist avec Google ou Microsoft, vous devez avoir une application enregistr\u00e9e aupr\u00e8s du fournisseur correspondant : Microsoft : https://learn.microsoft.com/en-us/power-pages/security/authentication/openid-settings Google : https://support.google.com/cloud/answer/6158849?hl=en Une fois que vous avez votre ID client et votre secret, vous devez les transmettre au fichier gristParameters \u00e0 l\u2019int\u00e9rieur de l\u2019instance Grist EC2 : Connectez-vous \u00e0 l\u2019instance Grist EC2. Ouvrez ~/grist/gristParameters . Mettez \u00e0 jour les sections CLIENT_ID et CLIENT_SECRET pour le(s) fournisseur(s) concern\u00e9(s). Si vous n\u2019utilisez qu\u2019un seul fournisseur, laissez la deuxi\u00e8me section comment\u00e9e. Mettez \u00e0 jour ADMIN_EMAIL dans le m\u00eame fichier. Il doit correspondre \u00e0 l\u2019email que vous utiliserez pour vous connecter via votre fournisseur d\u2019authentification. Par exemple : ADMIN_EMAIL=frank@votre-organisation.com Si vous souhaitez changer le nom de votre \u00e9quipe, mettez \u00e0 jour TEAM_NAME dans le m\u00eame fichier. Ex\u00e9cutez restartGrist avec le flag clean en utilisant sudo ~/grist/restartGrist clean pour effacer les anciennes donn\u00e9es de connexion. Important : Cela supprimera tous les documents Grist ! Une fois la configuration ci-dessus effectu\u00e9e, vous devriez pouvoir vous connecter avec vos identifiants Google/Microsoft.","title":"Configuration de l’authentification"},{"location":"install/aws-marketplace/#execution-de-grist-dans-un-vpc-separe","text":"grist-omnibus est con\u00e7u pour fonctionner sur chaque VPC par d\u00e9faut du compte. Pour le faire fonctionner sur un VPC personnalis\u00e9, vous devrez configurer correctement tous les \u00e9l\u00e9ments du VPC. Pour plus d\u2019informations sur cette configuration, lisez ici . Pour ex\u00e9cuter Grist sur un VPC, les \u00e9l\u00e9ments suivants doivent \u00eatre correctement configur\u00e9s : L\u2019attribution d\u2019un nom DNS public \u00e0 l\u2019instance Grist EC2 est autoris\u00e9e. Le VPC peut \u00eatre accessible depuis Internet (permettant \u00e0 la passerelle Internet et aux tables de routage de g\u00e9rer le trafic). Une connexion de groupe de s\u00e9curit\u00e9 depuis les ports 22 (SSH pour la configuration), 80 (connexion HTTP) et 433 (connexion HTTPS) est autoris\u00e9e.","title":"Ex\u00e9cution de Grist dans un VPC s\u00e9par\u00e9"},{"location":"install/aws-marketplace/#mise-a-jour-de-grist-omnibus","text":"La version packag\u00e9e de grist-omnibus se mettra \u00e0 jour automatiquement avant chaque lancement. Pour mettre \u00e0 jour grist-omnibus manuellement, red\u00e9marrez l\u2019instance Grist EC2 ou connectez-vous via SSH et appelez sudo ~/grist/restartGrist . Il n\u2019y a actuellement aucun plan pour supporter l\u2019environnement Grist AWS Marketplace en dehors de grist-omnibus .","title":"Mise \u00e0 jour de grist-omnibus"},{"location":"install/aws-marketplace/#autres-informations-importantes","text":"L\u2019instance Grist EC2 doit avoir l\u2019option \u201cPersistent store\u201d coch\u00e9e. Grist stocke toutes les donn\u00e9es dans le r\u00e9pertoire ~/grist-persist . Supprimer ce dossier entra\u00eenera la perte de toutes les donn\u00e9es de tous les documents. Ne supprimez pas ~/grist-persist/acme.json , car il contient une cl\u00e9 priv\u00e9e de Let\u2019s Encrypt. Le supprimer trop souvent peut entra\u00eener le refus de Let\u2019s Encrypt de d\u00e9livrer de nouveaux certificats pour votre domaine.","title":"Autres informations importantes"},{"location":"install/cloud-storage/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Stockage Cloud # Cette fonctionnalit\u00e9 permet la synchronisation automatique des documents Grist et des versions de documents vers des magasins compatibles S3 tels que MinIO (ou AWS S3 lui-m\u00eame). Grist Enterprise prend en charge nativement les comptes de stockage Azure et AWS S3 en utilisant le client officiel d\u2019AWS. Il est conseill\u00e9 d\u2019avoir Redis activ\u00e9 lors de l\u2019utilisation du stockage cloud, car c\u2019est la configuration la mieux test\u00e9e. Activer la cr\u00e9ation de snapshots entra\u00eene un grand changement dans la fa\u00e7on dont les documents sont stock\u00e9s, et il est pr\u00e9f\u00e9rable de le faire avant de cr\u00e9er des documents. Sauvegardez votre travail avant de modifier cette configuration. Magasins compatibles S3 via le client MinIO # Activez cette option en d\u00e9finissant les variables d\u2019environnement suivantes : D\u00e9finissez GRIST_DOCS_MINIO_ACCESS_KEY et GRIST_DOCS_MINIO_SECRET_KEY . D\u00e9finissez GRIST_DOCS_MINIO_BUCKET sur le nom d\u2019un bucket versionn\u00e9 que vous avez cr\u00e9\u00e9. Il est important que le bucket ait la versioning activ\u00e9e. D\u00e9finissez GRIST_DOCS_MINIO_ENDPOINT sur le nom d\u2019h\u00f4te appropri\u00e9 - sans protocole, sans port. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_USE_SSL sur 1 pour utiliser le protocole https (par d\u00e9faut) ou 0 pour http . (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_PORT sur le port \u00e0 utiliser, si le port par d\u00e9faut pour le protocole (80/443) n\u2019est pas correct. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_PREFIX sur le pr\u00e9fixe de vos documents, par d\u00e9faut \u201cdocs/\u201d. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_BUCKET_REGION sur la r\u00e9gion de votre bucket, par d\u00e9faut \u201cus-east-1\u201d. Si vous utilisez AWS S3, le point de terminaison \u00e0 utiliser est s3.amazonaws.com , et il n\u2019est pas n\u00e9cessaire de d\u00e9finir un num\u00e9ro de port ou un indicateur SSL. Les cl\u00e9s d\u2019acc\u00e8s et secr\u00e8tes sont vos AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY . Assurez-vous de cr\u00e9er un bucket versionn\u00e9 \u00e0 l\u2019avance. Azure # Pour Azure : Cr\u00e9ez un compte de stockage dans le portail Azure. Pour le service blob du compte de stockage, assurez-vous que la versioning est activ\u00e9e. Obtenez une cha\u00eene de connexion \u00e0 partir de la section Cl\u00e9s d\u2019acc\u00e8s du compte de stockage. Elle peut ressembler \u00e0 DefaultEndpointsProtocol=https;AccountName=... . Placez la cha\u00eene de connexion dans une variable d\u2019environnement appel\u00e9e AZURE_STORAGE_CONNECTION_STRING . D\u00e9finissez le nom d\u2019un conteneur de stockage Azure dans une variable d\u2019environnement appel\u00e9e GRIST_AZURE_CONTAINER . Un exemple de nom de conteneur est my-grist-docs . D\u00e9finissez un pr\u00e9fixe tel que v1/ dans une variable d\u2019environnement appel\u00e9e GRIST_AZURE_PREFIX . S3 avec le client AWS natif # Pour S3 : D\u00e9finissez le nom du bucket S3 dans une variable d\u2019environnement appel\u00e9e GRIST_DOCS_S3_BUCKET . Un exemple de nom de bucket est my-grist-docs . D\u00e9finissez un pr\u00e9fixe tel que v1/ dans une variable d\u2019environnement appel\u00e9e GRIST_DOCS_S3_PREFIX . Organisez l\u2019acc\u00e8s en utilisant les nombreuses options d\u2019AWS ; sinon, vous pouvez d\u00e9finir les variables AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY . Utilisation une fois configur\u00e9 # Une fois la configuration du stockage externe en place, d\u00e9marrez Grist normalement pour Grist autog\u00e9r\u00e9. Au d\u00e9marrage, il devrait y avoir une ligne comme : info: == grist.externalStorage.[s3|azure|minio].active: true Tous les documents seront lus et enregistr\u00e9s dans le bucket S3 ou le conteneur Azure correspondant. La configuration est la plus simple sur une nouvelle installation de Grist sans aucun document Grist pr\u00e9existant. Une fois en fonctionnement, il est conseill\u00e9 de configurer la \u201cgestion du cycle de vie\u201d du compte de stockage pour d\u00e9finir les limites souhait\u00e9es sur la dur\u00e9e de conservation des versions. Grist n\u2019a aucune exigence \u00e0 ce sujet, c\u2019est strictement selon vos pr\u00e9f\u00e9rences.","title":"Cloud storage"},{"location":"install/cloud-storage/#stockage-cloud","text":"Cette fonctionnalit\u00e9 permet la synchronisation automatique des documents Grist et des versions de documents vers des magasins compatibles S3 tels que MinIO (ou AWS S3 lui-m\u00eame). Grist Enterprise prend en charge nativement les comptes de stockage Azure et AWS S3 en utilisant le client officiel d\u2019AWS. Il est conseill\u00e9 d\u2019avoir Redis activ\u00e9 lors de l\u2019utilisation du stockage cloud, car c\u2019est la configuration la mieux test\u00e9e. Activer la cr\u00e9ation de snapshots entra\u00eene un grand changement dans la fa\u00e7on dont les documents sont stock\u00e9s, et il est pr\u00e9f\u00e9rable de le faire avant de cr\u00e9er des documents. Sauvegardez votre travail avant de modifier cette configuration.","title":"Stockage Cloud"},{"location":"install/cloud-storage/#magasins-compatibles-s3-via-le-client-minio","text":"Activez cette option en d\u00e9finissant les variables d\u2019environnement suivantes : D\u00e9finissez GRIST_DOCS_MINIO_ACCESS_KEY et GRIST_DOCS_MINIO_SECRET_KEY . D\u00e9finissez GRIST_DOCS_MINIO_BUCKET sur le nom d\u2019un bucket versionn\u00e9 que vous avez cr\u00e9\u00e9. Il est important que le bucket ait la versioning activ\u00e9e. D\u00e9finissez GRIST_DOCS_MINIO_ENDPOINT sur le nom d\u2019h\u00f4te appropri\u00e9 - sans protocole, sans port. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_USE_SSL sur 1 pour utiliser le protocole https (par d\u00e9faut) ou 0 pour http . (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_PORT sur le port \u00e0 utiliser, si le port par d\u00e9faut pour le protocole (80/443) n\u2019est pas correct. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_PREFIX sur le pr\u00e9fixe de vos documents, par d\u00e9faut \u201cdocs/\u201d. (Optionnel) D\u00e9finissez GRIST_DOCS_MINIO_BUCKET_REGION sur la r\u00e9gion de votre bucket, par d\u00e9faut \u201cus-east-1\u201d. Si vous utilisez AWS S3, le point de terminaison \u00e0 utiliser est s3.amazonaws.com , et il n\u2019est pas n\u00e9cessaire de d\u00e9finir un num\u00e9ro de port ou un indicateur SSL. Les cl\u00e9s d\u2019acc\u00e8s et secr\u00e8tes sont vos AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY . Assurez-vous de cr\u00e9er un bucket versionn\u00e9 \u00e0 l\u2019avance.","title":"Magasins compatibles S3 via le client MinIO"},{"location":"install/cloud-storage/#azure","text":"Pour Azure : Cr\u00e9ez un compte de stockage dans le portail Azure. Pour le service blob du compte de stockage, assurez-vous que la versioning est activ\u00e9e. Obtenez une cha\u00eene de connexion \u00e0 partir de la section Cl\u00e9s d\u2019acc\u00e8s du compte de stockage. Elle peut ressembler \u00e0 DefaultEndpointsProtocol=https;AccountName=... . Placez la cha\u00eene de connexion dans une variable d\u2019environnement appel\u00e9e AZURE_STORAGE_CONNECTION_STRING . D\u00e9finissez le nom d\u2019un conteneur de stockage Azure dans une variable d\u2019environnement appel\u00e9e GRIST_AZURE_CONTAINER . Un exemple de nom de conteneur est my-grist-docs . D\u00e9finissez un pr\u00e9fixe tel que v1/ dans une variable d\u2019environnement appel\u00e9e GRIST_AZURE_PREFIX .","title":"Azure"},{"location":"install/cloud-storage/#s3-avec-le-client-aws-natif","text":"Pour S3 : D\u00e9finissez le nom du bucket S3 dans une variable d\u2019environnement appel\u00e9e GRIST_DOCS_S3_BUCKET . Un exemple de nom de bucket est my-grist-docs . D\u00e9finissez un pr\u00e9fixe tel que v1/ dans une variable d\u2019environnement appel\u00e9e GRIST_DOCS_S3_PREFIX . Organisez l\u2019acc\u00e8s en utilisant les nombreuses options d\u2019AWS ; sinon, vous pouvez d\u00e9finir les variables AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY .","title":"S3 avec le client AWS natif"},{"location":"install/cloud-storage/#utilisation-une-fois-configure","text":"Une fois la configuration du stockage externe en place, d\u00e9marrez Grist normalement pour Grist autog\u00e9r\u00e9. Au d\u00e9marrage, il devrait y avoir une ligne comme : info: == grist.externalStorage.[s3|azure|minio].active: true Tous les documents seront lus et enregistr\u00e9s dans le bucket S3 ou le conteneur Azure correspondant. La configuration est la plus simple sur une nouvelle installation de Grist sans aucun document Grist pr\u00e9existant. Une fois en fonctionnement, il est conseill\u00e9 de configurer la \u201cgestion du cycle de vie\u201d du compte de stockage pour d\u00e9finir les limites souhait\u00e9es sur la dur\u00e9e de conservation des versions. Grist n\u2019a aucune exigence \u00e0 ce sujet, c\u2019est strictement selon vos pr\u00e9f\u00e9rences.","title":"Utilisation une fois configur\u00e9"},{"location":"install/example-docker-nginx/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Exemple d\u2019utilisation de Docker et NGINX # Cet exemple a \u00e9t\u00e9 initialement r\u00e9dig\u00e9 par Akito . # Ceci est un exemple complet de configuration Docker pour Grist. Les fichiers docker-compose.yml suivants sont n\u00e9cessaires. Vous devrez ajuster les variables d\u2019environnement selon vos besoins. Exigences # Vous devez avoir la distribution Docker la plus r\u00e9cente, y compris l\u2019extension docker compose install\u00e9e. Pour pr\u00e9parer l\u2019environnement h\u00f4te, cr\u00e9ez un r\u00e9pertoire vide et, \u00e0 l\u2019int\u00e9rieur, ex\u00e9cutez : sudo -u \"$(id -un 1000):$(id -un 1000)\" mkdir -p ./config/nginx/site-confs ./data ./database/data Proxy inverse NGINX avec HTTPS automatique # Pour que le HTTPS automatique fonctionne, vous devez d\u2019abord configurer des entr\u00e9es DNS appropri\u00e9es pour le serveur sur lequel vous ex\u00e9cutez ce proxy inverse. Ce proxy inverse est d\u00e9coupl\u00e9 de Grist, dans un docker-compose.yml s\u00e9par\u00e9, vous pouvez donc fournir commod\u00e9ment des backends suppl\u00e9mentaires vers lesquels il peut router le trafic - par exemple, Authelia pour l\u2019authentification. Cette configuration utilise SWAG, une image Docker qui regroupe le proxy inverse NGINX avec des services utiles, y compris la g\u00e9n\u00e9ration et le renouvellement de certificats TLS. Voici le fichier docker-compose.yml g\u00e9rant l\u2019instance NGINX. version: \"3.9\" services: letsencrypt: image: lscr.io/linuxserver/swag # NGINX avec HTTPS automatique container_name: nginx-letsencrypt-master network_mode: \"host\" environment: - PUID=1000 # Changement optionnel - PGID=1000 # Changement optionnel - TZ=Europe/London # Changez ici ! - URL=mydomain.eu # Changez ici, dans ./config/nginx/site-confs/grist.conf et dans les fichiers .env ! - SUBDOMAINS=grist,webhook.grist # Changez ici, dans ./config/nginx/site-confs/grist.conf et dans les fichiers .env ! - VALIDATION=http - EMAIL=admin@mydomain.eu # Changez ici ! - ONLY_SUBDOMAINS=true - STAGING=false # Activez si vous testez ! volumes: - ./config:/config restart: unless-stopped Configuration NGINX # La configuration suivante doit \u00eatre plac\u00e9e dans ./config/nginx/site-confs/grist.conf , pour que l\u2019instance NGINX route correctement vers Grist. server { listen 443 ssl http2; listen [::]:443 ssl http2; # Ajustez selon vos besoins ! server_name grist.mydomain.eu webhook.grist.mydomain.eu; # activez les confs de proxy inverse en sous-dossier include /config/nginx/proxy-confs/*.subfolder.conf; # activez pour l'authentification LDAP (n\u00e9cessite ldap-location.conf dans le bloc location) #include /config/nginx/ldap-server.conf; # activez pour Authelia (n\u00e9cessite authelia-location.conf dans le bloc location) #include /config/nginx/authelia-server.conf; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; } } Grist # Voici le docker-compose.yml pour le backend Grist. Il contient le d\u00e9ploiement de l\u2019application Grist, qui est accompagn\u00e9e d\u2019une base de donn\u00e9es PostgreSQL. # https://github.com/gristlabs/grist-core#using-grist version: \"3.9\" services: grist: image: gristlabs/grist:1.0.8 # Changez ici ! --> https://hub.docker.com/r/gristlabs/grist/tags container_name: grist user: \"1000\" # Changement optionnel env_file: - ./grist.env volumes: - ./data:/persist ports: - 127.0.0.1:3000:8080 depends_on: - database database: image: postgres:15-alpine container_name: grist_db user: \"1000\" # Changement optionnel env_file: - ./grist_db.env volumes: - ./database/data:/var/lib/postgresql/data Environnement # Les fichiers .env suivants doivent \u00eatre situ\u00e9s dans le m\u00eame dossier que le docker-compose.yml de Grist. grist.env # # https://github.com/gristlabs/grist-core#environment-variables PORT=8080 APP_HOME_URL=https://grist.mydomain.eu GRIST_ALLOWED_HOSTS=webhook.grist.mydomain.eu # Remplacez par les domaines cibles du webhook GRIST_DOMAIN=grist.mydomain.eu GRIST_SINGLE_ORG=myorg GRIST_HIDE_UI_ELEMENTS=billing GRIST_LIST_PUBLIC_SITES=false GRIST_MAX_UPLOAD_ATTACHMENT_MB=10 GRIST_MAX_UPLOAD_IMPORT_MB=300 GRIST_ORG_IN_PATH=false GRIST_PAGE_TITLE_SUFFIX=_blank GRIST_FORCE_LOGIN=true GRIST_SUPPORT_ANON=false GRIST_THROTTLE_CPU=true GRIST_SANDBOX_FLAVOR=gvisor PYTHON_VERSION=3 PYTHON_VERSION_ON_CREATION=3 # Base de donn\u00e9es TYPEORM_DATABASE=grist TYPEORM_USERNAME=grist TYPEORM_HOST=grist_db TYPEORM_LOGGING=false TYPEORM_PASSWORD=mysupersecretpassword CHANGEZ ICI!!!! TYPEORM_PORT=5432 TYPEORM_TYPE=postgres grist_db.env # # https://hub.docker.com/_/postgres POSTGRES_DB=grist POSTGRES_USER=grist POSTGRES_PASSWORD=mysupersecretpassword CHANGEZ ICI!!!!","title":"Example docker nginx"},{"location":"install/example-docker-nginx/#exemple-dutilisation-de-docker-et-nginx","text":"","title":"Exemple d’utilisation de Docker et NGINX"},{"location":"install/example-docker-nginx/#cet-exemple-a-ete-initialement-redige-par-akito","text":"Ceci est un exemple complet de configuration Docker pour Grist. Les fichiers docker-compose.yml suivants sont n\u00e9cessaires. Vous devrez ajuster les variables d\u2019environnement selon vos besoins.","title":"Cet exemple a \u00e9t\u00e9 initialement r\u00e9dig\u00e9 par Akito."},{"location":"install/example-docker-nginx/#exigences","text":"Vous devez avoir la distribution Docker la plus r\u00e9cente, y compris l\u2019extension docker compose install\u00e9e. Pour pr\u00e9parer l\u2019environnement h\u00f4te, cr\u00e9ez un r\u00e9pertoire vide et, \u00e0 l\u2019int\u00e9rieur, ex\u00e9cutez : sudo -u \"$(id -un 1000):$(id -un 1000)\" mkdir -p ./config/nginx/site-confs ./data ./database/data","title":"Exigences"},{"location":"install/example-docker-nginx/#proxy-inverse-nginx-avec-https-automatique","text":"Pour que le HTTPS automatique fonctionne, vous devez d\u2019abord configurer des entr\u00e9es DNS appropri\u00e9es pour le serveur sur lequel vous ex\u00e9cutez ce proxy inverse. Ce proxy inverse est d\u00e9coupl\u00e9 de Grist, dans un docker-compose.yml s\u00e9par\u00e9, vous pouvez donc fournir commod\u00e9ment des backends suppl\u00e9mentaires vers lesquels il peut router le trafic - par exemple, Authelia pour l\u2019authentification. Cette configuration utilise SWAG, une image Docker qui regroupe le proxy inverse NGINX avec des services utiles, y compris la g\u00e9n\u00e9ration et le renouvellement de certificats TLS. Voici le fichier docker-compose.yml g\u00e9rant l\u2019instance NGINX. version: \"3.9\" services: letsencrypt: image: lscr.io/linuxserver/swag # NGINX avec HTTPS automatique container_name: nginx-letsencrypt-master network_mode: \"host\" environment: - PUID=1000 # Changement optionnel - PGID=1000 # Changement optionnel - TZ=Europe/London # Changez ici ! - URL=mydomain.eu # Changez ici, dans ./config/nginx/site-confs/grist.conf et dans les fichiers .env ! - SUBDOMAINS=grist,webhook.grist # Changez ici, dans ./config/nginx/site-confs/grist.conf et dans les fichiers .env ! - VALIDATION=http - EMAIL=admin@mydomain.eu # Changez ici ! - ONLY_SUBDOMAINS=true - STAGING=false # Activez si vous testez ! volumes: - ./config:/config restart: unless-stopped","title":"Proxy inverse NGINX avec HTTPS automatique"},{"location":"install/example-docker-nginx/#configuration-nginx","text":"La configuration suivante doit \u00eatre plac\u00e9e dans ./config/nginx/site-confs/grist.conf , pour que l\u2019instance NGINX route correctement vers Grist. server { listen 443 ssl http2; listen [::]:443 ssl http2; # Ajustez selon vos besoins ! server_name grist.mydomain.eu webhook.grist.mydomain.eu; # activez les confs de proxy inverse en sous-dossier include /config/nginx/proxy-confs/*.subfolder.conf; # activez pour l'authentification LDAP (n\u00e9cessite ldap-location.conf dans le bloc location) #include /config/nginx/ldap-server.conf; # activez pour Authelia (n\u00e9cessite authelia-location.conf dans le bloc location) #include /config/nginx/authelia-server.conf; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \"upgrade\"; } }","title":"Configuration NGINX"},{"location":"install/example-docker-nginx/#grist","text":"Voici le docker-compose.yml pour le backend Grist. Il contient le d\u00e9ploiement de l\u2019application Grist, qui est accompagn\u00e9e d\u2019une base de donn\u00e9es PostgreSQL. # https://github.com/gristlabs/grist-core#using-grist version: \"3.9\" services: grist: image: gristlabs/grist:1.0.8 # Changez ici ! --> https://hub.docker.com/r/gristlabs/grist/tags container_name: grist user: \"1000\" # Changement optionnel env_file: - ./grist.env volumes: - ./data:/persist ports: - 127.0.0.1:3000:8080 depends_on: - database database: image: postgres:15-alpine container_name: grist_db user: \"1000\" # Changement optionnel env_file: - ./grist_db.env volumes: - ./database/data:/var/lib/postgresql/data","title":"Grist"},{"location":"install/example-docker-nginx/#environnement","text":"Les fichiers .env suivants doivent \u00eatre situ\u00e9s dans le m\u00eame dossier que le docker-compose.yml de Grist.","title":"Environnement"},{"location":"install/example-docker-nginx/#gristenv","text":"# https://github.com/gristlabs/grist-core#environment-variables PORT=8080 APP_HOME_URL=https://grist.mydomain.eu GRIST_ALLOWED_HOSTS=webhook.grist.mydomain.eu # Remplacez par les domaines cibles du webhook GRIST_DOMAIN=grist.mydomain.eu GRIST_SINGLE_ORG=myorg GRIST_HIDE_UI_ELEMENTS=billing GRIST_LIST_PUBLIC_SITES=false GRIST_MAX_UPLOAD_ATTACHMENT_MB=10 GRIST_MAX_UPLOAD_IMPORT_MB=300 GRIST_ORG_IN_PATH=false GRIST_PAGE_TITLE_SUFFIX=_blank GRIST_FORCE_LOGIN=true GRIST_SUPPORT_ANON=false GRIST_THROTTLE_CPU=true GRIST_SANDBOX_FLAVOR=gvisor PYTHON_VERSION=3 PYTHON_VERSION_ON_CREATION=3 # Base de donn\u00e9es TYPEORM_DATABASE=grist TYPEORM_USERNAME=grist TYPEORM_HOST=grist_db TYPEORM_LOGGING=false TYPEORM_PASSWORD=mysupersecretpassword CHANGEZ ICI!!!! TYPEORM_PORT=5432 TYPEORM_TYPE=postgres","title":"grist.env"},{"location":"install/example-docker-nginx/#grist_dbenv","text":"# https://hub.docker.com/_/postgres POSTGRES_DB=grist POSTGRES_USER=grist POSTGRES_PASSWORD=mysupersecretpassword CHANGEZ ICI!!!!","title":"grist_db.env"},{"location":"install/forwarded-headers/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . En-t\u00eates Transf\u00e9r\u00e9s # Vous pouvez avoir un middleware qui effectue l\u2019authentification et transmet ensuite l\u2019identit\u00e9 aux applications web dans un en-t\u00eate. Si c\u2019est le cas, Grist peut \u00eatre configur\u00e9 pour respecter cet en-t\u00eate. Avertissement La logique de redirection pour l\u2019authentification utilisant des en-t\u00eates transf\u00e9r\u00e9s suppose actuellement une configuration d\u2019un seul espace d\u2019\u00e9quipe et peut mal se comporter pour des configurations multi-sites. Pour que cela fonctionne, voici ce que vous devez faire : D\u00e9finissez GRIST_FORWARD_AUTH_HEADER sur un en-t\u00eate qui contiendra les emails des utilisateurs autoris\u00e9s, par exemple x-forwarded-user . Cela doit correspondre \u00e0 ce que votre middleware d\u00e9finira. Assurez-vous que le chemin /auth/login est g\u00e9r\u00e9 par votre middleware avant d\u2019atteindre Grist. D\u00e9finissez GRIST_FORWARD_AUTH_LOGOUT_PATH sur un chemin qui d\u00e9clenchera une d\u00e9connexion pour votre middleware (par exemple, /_oauth/logout ). Assurez-vous que le chemin de d\u00e9connexion est g\u00e9r\u00e9 par votre middleware ! Si vous souhaitez autoriser l\u2019acc\u00e8s anonyme dans certains cas, assurez-vous que tous les autres chemins de Grist sont libres de votre middleware. Grist d\u00e9clenchera le middleware (en redirigeant vers /auth/login ) si n\u00e9cessaire. Il est conseill\u00e9 de supprimer GRIST_FORWARD_AUTH_HEADER des requ\u00eates externes sur tous les chemins qui ne sont pas g\u00e9r\u00e9s par votre middleware. Votre middleware peut vous permettre de sp\u00e9cifier o\u00f9 rediriger l\u2019utilisateur apr\u00e8s la d\u00e9connexion. Cela devrait \u00eatre /signed-out sur le site Grist. Exemple : traefik-forward-auth # traefik-forward-auth est \u201cUn service d\u2019authentification minimale qui fournit une connexion OAuth/SSO et une authentification pour le proxy inverse/\u00e9quilibreur de charge traefik.\u201d Le GRIST_FORWARD_AUTH_HEADER doit \u00eatre X-Forwarded-User , et cela doit \u00eatre d\u00e9fini dans les param\u00e8tres authResponseHeaders pour traefik. Le GRIST_FORWARD_AUTH_LOGOUT_PATH doit \u00eatre /_oauth/logout , sauf si vous avez modifi\u00e9 le param\u00e8tre url-path par d\u00e9faut pour traefik-forward-auth. LOGOUT_REDIRECT pour traefik-forward-auth doit \u00eatre https:///signed-out . Il existe des exemples pratiques sur Un mod\u00e8le pour l\u2019auto-h\u00e9bergement de Grist avec traefik et docker compose et Grist Omnibus . D\u00e9pannage # Pour beaucoup, cette m\u00e9thode d\u2019authentification fonctionne tr\u00e8s bien. Un utilisateur avec plusieurs applications web servies par le m\u00eame middleware a eu des difficult\u00e9s \u00e0 coordonner les d\u00e9connexions. Cela pourrait \u00eatre r\u00e9solu en appliquant le middleware \u00e0 tous les chemins de Grist et en d\u00e9finissant GRIST_IGNORE_SESSION=true afin que Grist n\u2019ait aucune notion distincte de qui est connect\u00e9. Mais alors, partager certains documents avec tout le monde publiquement (sans se connecter) est devenu un probl\u00e8me. Notez qu\u2019avec GRIST_IGNORE_SESSION=true , Grist fera confiance \u00e0 GRIST_FORWARD_AUTH_HEADER sur toutes les requ\u00eates, il est donc imp\u00e9ratif que vous ayez un middleware qui remplace ou supprime cet en-t\u00eate pour toutes les requ\u00eates externes avant de les transf\u00e9rer \u00e0 Grist. Si au contraire vous voulez \u00eatre s\u00fbr que l\u2019utilisateur doit \u00eatre connect\u00e9 avant d\u2019utiliser Grist de quelque mani\u00e8re que ce soit, vous pouvez d\u00e9finir GRIST_FORCE_LOGIN=true .","title":"Forwarded headers"},{"location":"install/forwarded-headers/#en-tetes-transferes","text":"Vous pouvez avoir un middleware qui effectue l\u2019authentification et transmet ensuite l\u2019identit\u00e9 aux applications web dans un en-t\u00eate. Si c\u2019est le cas, Grist peut \u00eatre configur\u00e9 pour respecter cet en-t\u00eate. Avertissement La logique de redirection pour l\u2019authentification utilisant des en-t\u00eates transf\u00e9r\u00e9s suppose actuellement une configuration d\u2019un seul espace d\u2019\u00e9quipe et peut mal se comporter pour des configurations multi-sites. Pour que cela fonctionne, voici ce que vous devez faire : D\u00e9finissez GRIST_FORWARD_AUTH_HEADER sur un en-t\u00eate qui contiendra les emails des utilisateurs autoris\u00e9s, par exemple x-forwarded-user . Cela doit correspondre \u00e0 ce que votre middleware d\u00e9finira. Assurez-vous que le chemin /auth/login est g\u00e9r\u00e9 par votre middleware avant d\u2019atteindre Grist. D\u00e9finissez GRIST_FORWARD_AUTH_LOGOUT_PATH sur un chemin qui d\u00e9clenchera une d\u00e9connexion pour votre middleware (par exemple, /_oauth/logout ). Assurez-vous que le chemin de d\u00e9connexion est g\u00e9r\u00e9 par votre middleware ! Si vous souhaitez autoriser l\u2019acc\u00e8s anonyme dans certains cas, assurez-vous que tous les autres chemins de Grist sont libres de votre middleware. Grist d\u00e9clenchera le middleware (en redirigeant vers /auth/login ) si n\u00e9cessaire. Il est conseill\u00e9 de supprimer GRIST_FORWARD_AUTH_HEADER des requ\u00eates externes sur tous les chemins qui ne sont pas g\u00e9r\u00e9s par votre middleware. Votre middleware peut vous permettre de sp\u00e9cifier o\u00f9 rediriger l\u2019utilisateur apr\u00e8s la d\u00e9connexion. Cela devrait \u00eatre /signed-out sur le site Grist.","title":"En-t\u00eates Transf\u00e9r\u00e9s"},{"location":"install/forwarded-headers/#exemple-traefik-forward-auth","text":"traefik-forward-auth est \u201cUn service d\u2019authentification minimale qui fournit une connexion OAuth/SSO et une authentification pour le proxy inverse/\u00e9quilibreur de charge traefik.\u201d Le GRIST_FORWARD_AUTH_HEADER doit \u00eatre X-Forwarded-User , et cela doit \u00eatre d\u00e9fini dans les param\u00e8tres authResponseHeaders pour traefik. Le GRIST_FORWARD_AUTH_LOGOUT_PATH doit \u00eatre /_oauth/logout , sauf si vous avez modifi\u00e9 le param\u00e8tre url-path par d\u00e9faut pour traefik-forward-auth. LOGOUT_REDIRECT pour traefik-forward-auth doit \u00eatre https:///signed-out . Il existe des exemples pratiques sur Un mod\u00e8le pour l\u2019auto-h\u00e9bergement de Grist avec traefik et docker compose et Grist Omnibus .","title":"Exemple : traefik-forward-auth"},{"location":"install/forwarded-headers/#depannage","text":"Pour beaucoup, cette m\u00e9thode d\u2019authentification fonctionne tr\u00e8s bien. Un utilisateur avec plusieurs applications web servies par le m\u00eame middleware a eu des difficult\u00e9s \u00e0 coordonner les d\u00e9connexions. Cela pourrait \u00eatre r\u00e9solu en appliquant le middleware \u00e0 tous les chemins de Grist et en d\u00e9finissant GRIST_IGNORE_SESSION=true afin que Grist n\u2019ait aucune notion distincte de qui est connect\u00e9. Mais alors, partager certains documents avec tout le monde publiquement (sans se connecter) est devenu un probl\u00e8me. Notez qu\u2019avec GRIST_IGNORE_SESSION=true , Grist fera confiance \u00e0 GRIST_FORWARD_AUTH_HEADER sur toutes les requ\u00eates, il est donc imp\u00e9ratif que vous ayez un middleware qui remplace ou supprime cet en-t\u00eate pour toutes les requ\u00eates externes avant de les transf\u00e9rer \u00e0 Grist. Si au contraire vous voulez \u00eatre s\u00fbr que l\u2019utilisateur doit \u00eatre connect\u00e9 avant d\u2019utiliser Grist de quelque mani\u00e8re que ce soit, vous pouvez d\u00e9finir GRIST_FORCE_LOGIN=true .","title":"D\u00e9pannage"},{"location":"install/grist-connect/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . GristConnect # Discourse est un logiciel de forum populaire con\u00e7u pour \u00eatre int\u00e9gr\u00e9 \u00e0 de nombreux sites (y compris le n\u00f4tre ). Il est ennuyeux si les utilisateurs ont besoin d\u2019un identifiant pour un forum s\u00e9par\u00e9 de leur identifiant sur le reste d\u2019un site. Le protocole cr\u00e9\u00e9 par Discourse pour r\u00e9soudre ce probl\u00e8me est bien fait et s\u2019appelle DiscourseConnect . Nous avons d\u00e9cid\u00e9 de faire en sorte que Grist prenne en charge le m\u00eame protocole, de sorte que tout logiciel disposant de plugins permettant \u00e0 Discourse d\u2019utiliser ses identifiants (comme WordPress) puisse \u00e9galement permettre \u00e0 Grist d\u2019utiliser ses identifiants. Ce n\u2019est pas une norme officielle, nous avons donc appel\u00e9 notre impl\u00e9mentation \u201cGristConnect\u201d plut\u00f4t que \u201cDiscourseConnect\u201d. La configuration de GristConnect n\u00e9cessite quelques r\u00e9glages pour Grist, ainsi qu\u2019un plugin ou un codage personnalis\u00e9 pour votre site ou SSO. Les param\u00e8tres Grist sont les suivants : GRIST_CONNECT_URL : d\u00e9finir cette variable d\u2019environnement activera GristConnect. Il doit s\u2019agir d\u2019une adresse URL d\u2019un site externe vers lequel les utilisateurs seront redirig\u00e9s lors d\u2019une demande de connexion/inscription. GRIST_CONNECT_SECRET : (obligatoire) une cl\u00e9 secr\u00e8te, utilis\u00e9e pour signer (hacher) les param\u00e8tres de requ\u00eate dans les URL utilis\u00e9es pendant le flux de connexion. GRIST_CONNECT_LOGOUT_URL : (optionnel) une adresse URL vers laquelle les utilisateurs seront redirig\u00e9s apr\u00e8s s\u2019\u00eatre d\u00e9connect\u00e9s. Par d\u00e9faut - la page de d\u00e9connexion existante de Grist. GRIST_CONNECT_ENDPOINT : (optionnel) un point de terminaison de rappel expos\u00e9 par Grist o\u00f9 les utilisateurs doivent \u00eatre redirig\u00e9s apr\u00e8s une tentative de connexion r\u00e9ussie sur le site du fournisseur d\u2019identit\u00e9 externe (valeur par d\u00e9faut : /connect/login ). Pour votre site ou SSO, vous pouvez constater que le logiciel que vous utilisez prend en charge DiscourseConnect, auquel cas vous pouvez l\u2019activer et le coordonner avec les param\u00e8tres Grist. Sinon, voici les d\u00e9tails exacts de ce qui doit se passer : Lorsque les utilisateurs essaient de se connecter \u00e0 Grist, ils sont redirig\u00e9s vers une GRIST_CONNECT_URL avec des param\u00e8tres de requ\u00eate sign\u00e9s, par exemple, https://auth-provider.example.com?sso=PAYLOADBASE64&sig=cAlculateDHash La charge utile est une cha\u00eene de requ\u00eate encod\u00e9e en Base64 contenant : nonce - un jeton unique g\u00e9n\u00e9r\u00e9 par Grist return_url - une URL pour rediriger l\u2019utilisateur apr\u00e8s une connexion r\u00e9ussie - cela sera toujours d\u00e9fini sur l\u2019URL compl\u00e8te de Grist pour GRIST_CONNECT_ENDPOINT . L\u2019utilisateur doit se connecter en utilisant l\u2019\u00e9cran de connexion de GRIST_CONNECT_URL . Un fournisseur externe doit cr\u00e9er une nouvelle charge utile encod\u00e9e en URL avec les param\u00e8tres suivants : nonce - (obligatoire) un jeton envoy\u00e9 par Grist external_id - (obligatoire) toute cha\u00eene unique \u00e0 l\u2019utilisateur et qui ne changera jamais email - (obligatoire) un email utilisateur valide name - (obligatoire) un nom d\u2019utilisateur avatar_url - (optionnel) une URL vers la photo de profil de l\u2019utilisateur. Notez que Grist acceptera \u00e9galement le param\u00e8tre picture pour le m\u00eame objectif. Cette charge utile doit \u00eatre encod\u00e9e en base64 et correctement \u00e9chapp\u00e9e pour \u00eatre une cha\u00eene de requ\u00eate valide. Un fournisseur doit calculer un hachage HMAC_SHA256 de la charge utile. Un utilisateur doit rediriger vers le point de terminaison GRIST_CONNECT_ENDPOINT avec des param\u00e8tres de cha\u00eene de requ\u00eate sign\u00e9s, par exemple, https://grist.customhost.com/connect/login?sso=ENCODEDPAYLOD&sig=HASH Grist cr\u00e9era un nouvel utilisateur ou mettra \u00e0 jour un utilisateur existant. Les utilisateurs seront identifi\u00e9s par le param\u00e8tre external_id . L\u2019utilisateur sera connect\u00e9 \u00e0 Grist.","title":"GristConnect"},{"location":"install/grist-connect/#gristconnect","text":"Discourse est un logiciel de forum populaire con\u00e7u pour \u00eatre int\u00e9gr\u00e9 \u00e0 de nombreux sites (y compris le n\u00f4tre ). Il est ennuyeux si les utilisateurs ont besoin d\u2019un identifiant pour un forum s\u00e9par\u00e9 de leur identifiant sur le reste d\u2019un site. Le protocole cr\u00e9\u00e9 par Discourse pour r\u00e9soudre ce probl\u00e8me est bien fait et s\u2019appelle DiscourseConnect . Nous avons d\u00e9cid\u00e9 de faire en sorte que Grist prenne en charge le m\u00eame protocole, de sorte que tout logiciel disposant de plugins permettant \u00e0 Discourse d\u2019utiliser ses identifiants (comme WordPress) puisse \u00e9galement permettre \u00e0 Grist d\u2019utiliser ses identifiants. Ce n\u2019est pas une norme officielle, nous avons donc appel\u00e9 notre impl\u00e9mentation \u201cGristConnect\u201d plut\u00f4t que \u201cDiscourseConnect\u201d. La configuration de GristConnect n\u00e9cessite quelques r\u00e9glages pour Grist, ainsi qu\u2019un plugin ou un codage personnalis\u00e9 pour votre site ou SSO. Les param\u00e8tres Grist sont les suivants : GRIST_CONNECT_URL : d\u00e9finir cette variable d\u2019environnement activera GristConnect. Il doit s\u2019agir d\u2019une adresse URL d\u2019un site externe vers lequel les utilisateurs seront redirig\u00e9s lors d\u2019une demande de connexion/inscription. GRIST_CONNECT_SECRET : (obligatoire) une cl\u00e9 secr\u00e8te, utilis\u00e9e pour signer (hacher) les param\u00e8tres de requ\u00eate dans les URL utilis\u00e9es pendant le flux de connexion. GRIST_CONNECT_LOGOUT_URL : (optionnel) une adresse URL vers laquelle les utilisateurs seront redirig\u00e9s apr\u00e8s s\u2019\u00eatre d\u00e9connect\u00e9s. Par d\u00e9faut - la page de d\u00e9connexion existante de Grist. GRIST_CONNECT_ENDPOINT : (optionnel) un point de terminaison de rappel expos\u00e9 par Grist o\u00f9 les utilisateurs doivent \u00eatre redirig\u00e9s apr\u00e8s une tentative de connexion r\u00e9ussie sur le site du fournisseur d\u2019identit\u00e9 externe (valeur par d\u00e9faut : /connect/login ). Pour votre site ou SSO, vous pouvez constater que le logiciel que vous utilisez prend en charge DiscourseConnect, auquel cas vous pouvez l\u2019activer et le coordonner avec les param\u00e8tres Grist. Sinon, voici les d\u00e9tails exacts de ce qui doit se passer : Lorsque les utilisateurs essaient de se connecter \u00e0 Grist, ils sont redirig\u00e9s vers une GRIST_CONNECT_URL avec des param\u00e8tres de requ\u00eate sign\u00e9s, par exemple, https://auth-provider.example.com?sso=PAYLOADBASE64&sig=cAlculateDHash La charge utile est une cha\u00eene de requ\u00eate encod\u00e9e en Base64 contenant : nonce - un jeton unique g\u00e9n\u00e9r\u00e9 par Grist return_url - une URL pour rediriger l\u2019utilisateur apr\u00e8s une connexion r\u00e9ussie - cela sera toujours d\u00e9fini sur l\u2019URL compl\u00e8te de Grist pour GRIST_CONNECT_ENDPOINT . L\u2019utilisateur doit se connecter en utilisant l\u2019\u00e9cran de connexion de GRIST_CONNECT_URL . Un fournisseur externe doit cr\u00e9er une nouvelle charge utile encod\u00e9e en URL avec les param\u00e8tres suivants : nonce - (obligatoire) un jeton envoy\u00e9 par Grist external_id - (obligatoire) toute cha\u00eene unique \u00e0 l\u2019utilisateur et qui ne changera jamais email - (obligatoire) un email utilisateur valide name - (obligatoire) un nom d\u2019utilisateur avatar_url - (optionnel) une URL vers la photo de profil de l\u2019utilisateur. Notez que Grist acceptera \u00e9galement le param\u00e8tre picture pour le m\u00eame objectif. Cette charge utile doit \u00eatre encod\u00e9e en base64 et correctement \u00e9chapp\u00e9e pour \u00eatre une cha\u00eene de requ\u00eate valide. Un fournisseur doit calculer un hachage HMAC_SHA256 de la charge utile. Un utilisateur doit rediriger vers le point de terminaison GRIST_CONNECT_ENDPOINT avec des param\u00e8tres de cha\u00eene de requ\u00eate sign\u00e9s, par exemple, https://grist.customhost.com/connect/login?sso=ENCODEDPAYLOD&sig=HASH Grist cr\u00e9era un nouvel utilisateur ou mettra \u00e0 jour un utilisateur existant. Les utilisateurs seront identifi\u00e9s par le param\u00e8tre external_id . L\u2019utilisateur sera connect\u00e9 \u00e0 Grist.","title":"GristConnect"},{"location":"install/oidc/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . OpenID Connect # Configuration pour OIDC, utile pour les connexions single-sign-on des organisations. Un bon aper\u00e7u informatif de l\u2019OIDC est disponible sur https://developer.okta.com/blog/2019/10/21/illustrated-guide-to-oauth-and-oidc Remarque : SP est le \u201cFournisseur de Services\u201d, dans notre cas, l\u2019application Grist. IdP est le \u201cFournisseur d\u2019Identit\u00e9\u201d, l\u00e0 o\u00f9 les utilisateurs se connectent, par exemple Keycloak, Authelia, \u2026 OIDC est l\u2019acronyme pour OpenID Connect Variables d\u2019environnement attendues : GRIST_OIDC_IDP_ISSUER - l\u2019URL de l\u2019\u00e9metteur pour l\u2019IdP, pass\u00e9 \u00e0 node-openid-client, voir : https://github.com/panva/node-openid-client/blob/a84d022f195f82ca1c97f8f6b2567ebcef8738c3/docs/README.md#issuerdiscoverissuer . Cette variable active le syst\u00e8me de connexion OIDC. GRIST_OIDC_IDP_CLIENT_ID - l\u2019ID client pour l\u2019application, tel qu\u2019enregistr\u00e9 aupr\u00e8s de l\u2019IdP. GRIST_OIDC_IDP_CLIENT_SECRET - le secret client pour l\u2019application, tel qu\u2019enregistr\u00e9 aupr\u00e8s de l\u2019IdP. GRIST_OIDC_IDP_SCOPES (optionnel) - les scopes \u00e0 demander \u00e0 l\u2019IdP, sous forme de liste s\u00e9par\u00e9e par des espaces. Par d\u00e9faut \"openid email profile\" . GRIST_OIDC_SP_HOST (optionnel) - il s\u2019agit simplement de l\u2019URL de base du site Grist, tel que https:// (lorsque OIDC est actif, il y aura un point de terminaison /oauth2/callback disponible ici pour impl\u00e9menter le protocole). Si omis, APP_HOME_URL sera utilis\u00e9. GRIST_OIDC_IDP_END_SESSION_ENDPOINT (optionnel) - Si d\u00e9fini, remplace le end_session_endpoint de l\u2019IdP par une URL alternative pour rediriger l\u2019utilisateur lors de la d\u00e9connexion (pour un IdP qui a un point de terminaison de d\u00e9connexion mais ne supporte pas la sp\u00e9cification OIDC RP-Initiated Logout). GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT (optionnel) - Si d\u00e9fini sur \u201ctrue\u201d, lors de la d\u00e9connexion, il n\u2019y aura aucune tentative d\u2019appeler le end_session_endpoint de l\u2019IdP (l\u2019utilisateur restera connect\u00e9 \u00e0 l\u2019IdP). Vous ne devez le d\u00e9finir sur \u201ctrue\u201d que si l\u2019IdP ne fournit pas un tel point de terminaison (par exemple si vous utilisez Gitlab). GRIST_OIDC_SP_PROFILE_NAME_ATTR (optionnel) - La cl\u00e9 de la propri\u00e9t\u00e9 d\u2019utilisateur \u00e0 utiliser pour le nom de l\u2019utilisateur. Si omis, le nom sera la concat\u00e9nation de given_name + family_name s\u2019ils sont fournis ou la propri\u00e9t\u00e9 name sinon. GRIST_OIDC_SP_PROFILE_EMAIL_ATTR (optionnel) - La cl\u00e9 de la propri\u00e9t\u00e9 d\u2019utilisateur \u00e0 utiliser pour l\u2019email de l\u2019utilisateur. Par d\u00e9faut \u201cemail\u201d. GRIST_OIDC_IDP_ENABLED_PROTECTIONS (optionnel) - Une liste s\u00e9par\u00e9e par des virgules des protections \u00e0 activer. Les valeurs prises en charge sont PKCE , STATE , NONCE . Par d\u00e9faut PKCE,STATE , qui sont les param\u00e8tres recommand\u00e9s. Il est fortement recommand\u00e9 d\u2019activer STATE , et au moins l\u2019un de PKCE ou NONCE , selon ce que votre fournisseur OIDC requiert/supporte. GRIST_OIDC_IDP_ACR_VALUES (optionnel) - Une liste s\u00e9par\u00e9e par des espaces des valeurs ACR \u00e0 demander \u00e0 l\u2019IdP. GRIST_OIDC_IDP_EXTRA_CLIENT_METADATA (optionnel) - Un objet JSON avec des m\u00e9tadonn\u00e9es client suppl\u00e9mentaires \u00e0 passer \u00e0 openid-client. Sachez que la d\u00e9finition de cet objet peut remplacer toutes les autres valeurs pass\u00e9es au client openid. Plus d\u2019infos : https://github.com/panva/node-openid-client/tree/main/docs#new-clientmetadata-jwks-options Exemple : Gitlab # Voir comment cr\u00e9er une application OAuth2 dans Gitlab dans cette documentation . Lors de la cr\u00e9ation de l\u2019application, d\u00e9finissez l\u2019URI de redirection sur https:///oauth2/callback (ou http://localhost:8484/oauth2/callback si test\u00e9 localement, changez 8484 pour le port que vous \u00e9coutez) et s\u00e9lectionnez les scopes que vous sp\u00e9cifierez dans GRIST_OIDC_IDP_SCOPES . Une fois l\u2019application configur\u00e9e, d\u00e9marrez Grist avec ces param\u00e8tres : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https://gitlab.com/.well-known/openid-configuration GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID client g\u00e9n\u00e9r\u00e9 par Gitlab pour l'application GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Gitlab pour l'application GRIST_OIDC_IDP_CLIENT_SECRET=... # Gitlab ne propose pas `end_session_endpoint` GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT=true Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" . Exemple : Auth0 # Cr\u00e9ez une application dans Auth0 comme expliqu\u00e9 dans cette documentation (vous pouvez s\u00e9lectionner le type d\u2019application nomm\u00e9 Regular Web Applications ). Une fois l\u2019application cr\u00e9\u00e9e, assurez-vous d\u2019ajouter au moins la configuration suivante pour l\u2019application : URL de rappel autoris\u00e9es : https:///oauth2/callback URL de d\u00e9connexion autoris\u00e9es : http:///* (vous pouvez \u00e9galement remplacer le caract\u00e8re g\u00e9n\u00e9rique par le chemin complet pour \u00eatre plus strict) Ensuite, vous devriez pouvoir d\u00e9marrer Grist avec les param\u00e8tres suivants : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https:// GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID client g\u00e9n\u00e9r\u00e9 par Auth0 pour l'application GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Auth0 pour l'application GRIST_OIDC_IDP_CLIENT_SECRET=... Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" . Exemple : Keycloak # Tout d\u2019abord, configurez Keycloak comme expliqu\u00e9 dans l\u2019un de ces guides \u201cGetting started\u201d : https://www.keycloak.org/guides#getting-started . Une fois Keycloak configur\u00e9 avec un domaine et un utilisateur, cr\u00e9ez un nouveau client avec la configuration suivante : Type de client : OpenID Connect Flux d\u2019authentification : Flux standard URL racine : https:// URI de redirection valides : /oauth2/callback URI de redirection post-d\u00e9connexion valides : /* (vous pouvez \u00e9galement remplacer le caract\u00e8re g\u00e9n\u00e9rique par le chemin complet pour \u00eatre plus strict) Soumettez vos param\u00e8tres et allez \u00e0 l\u2019onglet Credentials pour r\u00e9cup\u00e9rer le secret client. Ensuite, vous pouvez d\u00e9marrer Grist avec la configuration suivante : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https:///realms/ GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID que vous avez choisi pour le client Keycloak GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Keycloak r\u00e9cup\u00e9r\u00e9 pr\u00e9c\u00e9demment GRIST_OIDC_IDP_CLIENT_SECRET=... Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" .","title":"OIDC"},{"location":"install/oidc/#openid-connect","text":"Configuration pour OIDC, utile pour les connexions single-sign-on des organisations. Un bon aper\u00e7u informatif de l\u2019OIDC est disponible sur https://developer.okta.com/blog/2019/10/21/illustrated-guide-to-oauth-and-oidc Remarque : SP est le \u201cFournisseur de Services\u201d, dans notre cas, l\u2019application Grist. IdP est le \u201cFournisseur d\u2019Identit\u00e9\u201d, l\u00e0 o\u00f9 les utilisateurs se connectent, par exemple Keycloak, Authelia, \u2026 OIDC est l\u2019acronyme pour OpenID Connect Variables d\u2019environnement attendues : GRIST_OIDC_IDP_ISSUER - l\u2019URL de l\u2019\u00e9metteur pour l\u2019IdP, pass\u00e9 \u00e0 node-openid-client, voir : https://github.com/panva/node-openid-client/blob/a84d022f195f82ca1c97f8f6b2567ebcef8738c3/docs/README.md#issuerdiscoverissuer . Cette variable active le syst\u00e8me de connexion OIDC. GRIST_OIDC_IDP_CLIENT_ID - l\u2019ID client pour l\u2019application, tel qu\u2019enregistr\u00e9 aupr\u00e8s de l\u2019IdP. GRIST_OIDC_IDP_CLIENT_SECRET - le secret client pour l\u2019application, tel qu\u2019enregistr\u00e9 aupr\u00e8s de l\u2019IdP. GRIST_OIDC_IDP_SCOPES (optionnel) - les scopes \u00e0 demander \u00e0 l\u2019IdP, sous forme de liste s\u00e9par\u00e9e par des espaces. Par d\u00e9faut \"openid email profile\" . GRIST_OIDC_SP_HOST (optionnel) - il s\u2019agit simplement de l\u2019URL de base du site Grist, tel que https:// (lorsque OIDC est actif, il y aura un point de terminaison /oauth2/callback disponible ici pour impl\u00e9menter le protocole). Si omis, APP_HOME_URL sera utilis\u00e9. GRIST_OIDC_IDP_END_SESSION_ENDPOINT (optionnel) - Si d\u00e9fini, remplace le end_session_endpoint de l\u2019IdP par une URL alternative pour rediriger l\u2019utilisateur lors de la d\u00e9connexion (pour un IdP qui a un point de terminaison de d\u00e9connexion mais ne supporte pas la sp\u00e9cification OIDC RP-Initiated Logout). GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT (optionnel) - Si d\u00e9fini sur \u201ctrue\u201d, lors de la d\u00e9connexion, il n\u2019y aura aucune tentative d\u2019appeler le end_session_endpoint de l\u2019IdP (l\u2019utilisateur restera connect\u00e9 \u00e0 l\u2019IdP). Vous ne devez le d\u00e9finir sur \u201ctrue\u201d que si l\u2019IdP ne fournit pas un tel point de terminaison (par exemple si vous utilisez Gitlab). GRIST_OIDC_SP_PROFILE_NAME_ATTR (optionnel) - La cl\u00e9 de la propri\u00e9t\u00e9 d\u2019utilisateur \u00e0 utiliser pour le nom de l\u2019utilisateur. Si omis, le nom sera la concat\u00e9nation de given_name + family_name s\u2019ils sont fournis ou la propri\u00e9t\u00e9 name sinon. GRIST_OIDC_SP_PROFILE_EMAIL_ATTR (optionnel) - La cl\u00e9 de la propri\u00e9t\u00e9 d\u2019utilisateur \u00e0 utiliser pour l\u2019email de l\u2019utilisateur. Par d\u00e9faut \u201cemail\u201d. GRIST_OIDC_IDP_ENABLED_PROTECTIONS (optionnel) - Une liste s\u00e9par\u00e9e par des virgules des protections \u00e0 activer. Les valeurs prises en charge sont PKCE , STATE , NONCE . Par d\u00e9faut PKCE,STATE , qui sont les param\u00e8tres recommand\u00e9s. Il est fortement recommand\u00e9 d\u2019activer STATE , et au moins l\u2019un de PKCE ou NONCE , selon ce que votre fournisseur OIDC requiert/supporte. GRIST_OIDC_IDP_ACR_VALUES (optionnel) - Une liste s\u00e9par\u00e9e par des espaces des valeurs ACR \u00e0 demander \u00e0 l\u2019IdP. GRIST_OIDC_IDP_EXTRA_CLIENT_METADATA (optionnel) - Un objet JSON avec des m\u00e9tadonn\u00e9es client suppl\u00e9mentaires \u00e0 passer \u00e0 openid-client. Sachez que la d\u00e9finition de cet objet peut remplacer toutes les autres valeurs pass\u00e9es au client openid. Plus d\u2019infos : https://github.com/panva/node-openid-client/tree/main/docs#new-clientmetadata-jwks-options","title":"OpenID Connect"},{"location":"install/oidc/#exemple-gitlab","text":"Voir comment cr\u00e9er une application OAuth2 dans Gitlab dans cette documentation . Lors de la cr\u00e9ation de l\u2019application, d\u00e9finissez l\u2019URI de redirection sur https:///oauth2/callback (ou http://localhost:8484/oauth2/callback si test\u00e9 localement, changez 8484 pour le port que vous \u00e9coutez) et s\u00e9lectionnez les scopes que vous sp\u00e9cifierez dans GRIST_OIDC_IDP_SCOPES . Une fois l\u2019application configur\u00e9e, d\u00e9marrez Grist avec ces param\u00e8tres : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https://gitlab.com/.well-known/openid-configuration GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID client g\u00e9n\u00e9r\u00e9 par Gitlab pour l'application GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Gitlab pour l'application GRIST_OIDC_IDP_CLIENT_SECRET=... # Gitlab ne propose pas `end_session_endpoint` GRIST_OIDC_IDP_SKIP_END_SESSION_ENDPOINT=true Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" .","title":"Exemple : Gitlab"},{"location":"install/oidc/#exemple-auth0","text":"Cr\u00e9ez une application dans Auth0 comme expliqu\u00e9 dans cette documentation (vous pouvez s\u00e9lectionner le type d\u2019application nomm\u00e9 Regular Web Applications ). Une fois l\u2019application cr\u00e9\u00e9e, assurez-vous d\u2019ajouter au moins la configuration suivante pour l\u2019application : URL de rappel autoris\u00e9es : https:///oauth2/callback URL de d\u00e9connexion autoris\u00e9es : http:///* (vous pouvez \u00e9galement remplacer le caract\u00e8re g\u00e9n\u00e9rique par le chemin complet pour \u00eatre plus strict) Ensuite, vous devriez pouvoir d\u00e9marrer Grist avec les param\u00e8tres suivants : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https:// GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID client g\u00e9n\u00e9r\u00e9 par Auth0 pour l'application GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Auth0 pour l'application GRIST_OIDC_IDP_CLIENT_SECRET=... Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" .","title":"Exemple : Auth0"},{"location":"install/oidc/#exemple-keycloak","text":"Tout d\u2019abord, configurez Keycloak comme expliqu\u00e9 dans l\u2019un de ces guides \u201cGetting started\u201d : https://www.keycloak.org/guides#getting-started . Une fois Keycloak configur\u00e9 avec un domaine et un utilisateur, cr\u00e9ez un nouveau client avec la configuration suivante : Type de client : OpenID Connect Flux d\u2019authentification : Flux standard URL racine : https:// URI de redirection valides : /oauth2/callback URI de redirection post-d\u00e9connexion valides : /* (vous pouvez \u00e9galement remplacer le caract\u00e8re g\u00e9n\u00e9rique par le chemin complet pour \u00eatre plus strict) Soumettez vos param\u00e8tres et allez \u00e0 l\u2019onglet Credentials pour r\u00e9cup\u00e9rer le secret client. Ensuite, vous pouvez d\u00e9marrer Grist avec la configuration suivante : GRIST_OIDC_SP_HOST=https:// # ou http://localhost:8484 GRIST_OIDC_IDP_ISSUER=https:///realms/ GRIST_OIDC_IDP_SCOPES=openid profile email # l'ID que vous avez choisi pour le client Keycloak GRIST_OIDC_IDP_CLIENT_ID=... # le secret client g\u00e9n\u00e9r\u00e9 par Keycloak r\u00e9cup\u00e9r\u00e9 pr\u00e9c\u00e9demment GRIST_OIDC_IDP_CLIENT_SECRET=... Ce format est adapt\u00e9 pour un fichier .env ou similaire. Lors d\u2019une invocation shell, n\u2019oubliez pas de citer les valeurs avec des espaces, comme GRIST_OIDC_IDP_SCOPES=\"openid profile email\" .","title":"Exemple : Keycloak"},{"location":"install/saml/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . SAML # Configuration pour SAML, utile pour les connexions d\u2019entreprise \u00e0 authentification unique (SSO). Un bon aper\u00e7u informatif de SAML est disponible sur https://www.okta.com/integrate/documentation/saml/ Note : SP est \u201cService Provider\u201d (Fournisseur de Service), dans notre cas, l\u2019application Grist. IdP est \u201cIdentity Provider\u201d (Fournisseur d\u2019Identit\u00e9), un endroit o\u00f9 les utilisateurs se connectent, par exemple Okta ou Google Apps. Nous aurons besoin d\u2019un ou plusieurs certificats de l\u2019IdP, au format PEM. Il s\u2019agit d\u2019une cl\u00e9 publique que Grist utilisera pour v\u00e9rifier que les messages de l\u2019IdP sont l\u00e9gitimes. Nous aurons besoin d\u2019une paire de cl\u00e9s priv\u00e9e et publique pour que Grist puisse communiquer avec l\u2019IdP. L\u2019IdP devra conna\u00eetre la cl\u00e9 publique de Grist pour v\u00e9rifier que les messages de Grist sont l\u00e9gitimes. Variables d\u2019environnement attendues : GRIST_SAML_SP_HOST - c\u2019est simplement l\u2019URL de base du site Grist, comme https:// (lorsque SAML est actif, il y aura une endpoint /saml/assert disponible ici pour impl\u00e9menter le protocole). GRIST_SAML_SP_KEY - chemin vers un fichier contenant notre cl\u00e9 priv\u00e9e, au format PEM. C\u2019est la cl\u00e9 priv\u00e9e de la paire de cl\u00e9s cr\u00e9\u00e9e pour que Grist l\u2019utilise avec l\u2019IdP. GRIST_SAML_SP_CERT - chemin vers un fichier contenant notre cl\u00e9 publique, au format PEM. C\u2019est la cl\u00e9 publique de la paire de cl\u00e9s cr\u00e9\u00e9e pour que Grist l\u2019utilise avec l\u2019IdP. Ce n\u2019est pas la cl\u00e9 publique/certificat de l\u2019IdP. GRIST_SAML_IDP_LOGIN - URL de connexion pour rediriger l\u2019utilisateur pour la connexion. GRIST_SAML_IDP_LOGOUT - URL de d\u00e9connexion pour rediriger l\u2019utilisateur pour la d\u00e9connexion. GRIST_SAML_IDP_SKIP_SLO - si d\u00e9fini et non vide, ne pas tenter le flux \u201cSingle Logout\u201d SAML, mais simplement rediriger vers GRIST_SAML_IDP_LOGOUT apr\u00e8s avoir effac\u00e9 la session. La possibilit\u00e9 de ce flux d\u00e9pendra de l\u2019IdP. GRIST_SAML_IDP_CERTS - liste de chemins s\u00e9par\u00e9s par des virgules pour les certificats de l\u2019IdP, au format PEM. Ce n\u2019est pas la cl\u00e9 priv\u00e9e ou publique cr\u00e9\u00e9e pour Grist. GRIST_SAML_IDP_UNENCRYPTED - si d\u00e9fini et non vide, autoriser les assertions non chiffr\u00e9es, en s\u2019appuyant sur https pour la confidentialit\u00e9. Exemple : Auth0 # Par exemple, lors de l\u2019ex\u00e9cution en local et en http, les param\u00e8tres qui fonctionnent avec l\u2019 IdP SAML Auth0 sont : GRIST_SAML_IDP_SKIP_SLO non d\u00e9fini GRIST_SAML_SP_HOST = http://localhost:8484 GRIST_SAML_IDP_UNENCRYPTED = 1 GRIST_SAML_IDP_LOGIN = https://...auth0.com/samlp/xxxx GRIST_SAML_IDP_LOGOUT = https://...auth0.com/samlp/xxxx (ce sont les m\u00eames pour Auth0) GRIST_SAML_IDP_CERTS = .../auth0.pem (t\u00e9l\u00e9charg\u00e9 selon les instructions d\u2019Auth0) GRIST_SAML_SP_KEY = .../saml.pem (cr\u00e9\u00e9) GRIST_SAML_SP_CERT = .../saml.crt (cr\u00e9\u00e9) Lorsqu\u2019il est utilis\u00e9 avec docker, assurez-vous que les fichiers de cl\u00e9 et de certificat sont accessibles dans un volume partag\u00e9. La paire cl\u00e9/certificat a \u00e9t\u00e9 cr\u00e9\u00e9e en suivant les instructions ici : Auth0 : utiliser un certificat personnalis\u00e9 pour signer les requ\u00eates Auth0 en tant que fournisseur d\u2019identit\u00e9 SAML Dans vos param\u00e8tres Auth0, assurez-vous \u00e9galement que : L\u2019URL de rappel de l\u2019application est d\u00e9finie sur https:///saml/assert . Exemple : Authentik # Dans Authentik , ajoutez un fournisseur appel\u00e9 Grist avec : URL ACS : https:///saml/assert D\u00e9finir la liaison du fournisseur de services sur Post S\u00e9lectionnez ou ajoutez un certificat de signature. Vous devrez le t\u00e9l\u00e9charger pour l\u2019utiliser comme GRIST_SAML_IDP_CERTS dans la configuration de Grist. Ajoutez un certificat de v\u00e9rification. Ce sera la partie publique d\u2019une paire de cl\u00e9s que vous cr\u00e9ez pour GRIST_SAML_SP_KEY / GRIST_SAML_SP_CERT dans la configuration de Grist. Ensuite, toujours dans Authentik, ajoutez une application \u00e9galement appel\u00e9e Grist (je ne suis pas tr\u00e8s imaginatif) qui : Utilise le fournisseur Grist . A Launch URL d\u00e9fini sur https:// . Les param\u00e8tres de Grist suivent le m\u00eame sch\u00e9ma que pour Auth0. Les URL de connexion et de d\u00e9connexion avec Authentik au moment de la r\u00e9daction ressemblent \u00e0 : GRIST_SAML_IDP_LOGIN = https://...authentik.../application/saml/grist/sso/binding/redirect/ GRIST_SAML_IDP_LOGOUT = https://...authentik.../if/session-end/grist/ Exemple : Google # Dans Google Admin , sous la section \u201cApps\u201d, dans \u201cWeb and Mobile Apps\u201d, ajoutez une nouvelle application SAML personnalis\u00e9e. D\u00e9finissez le nom de l\u2019application, la description et l\u2019ic\u00f4ne \u00e0 votre convenance, puis cliquez sur Suivant. Prenez note du contenu du champ SSO URL , et t\u00e9l\u00e9chargez le certificat fourni. Configurez l\u2019application dans Google Admin comme suit : URL ACS : https:///saml/assert ID d\u2019entit\u00e9 : https:///saml/metadata.xml Cochez la case R\u00e9ponse sign\u00e9e. Laissez Start URL vide, et les param\u00e8tres Name ID par d\u00e9faut. Cliquez sur Suivant, et \u00e9ventuellement, sous Attributs, ajoutez deux mappages pour la population automatique des noms : Attribut de l\u2019annuaire Google First Name d\u00e9fini sur l\u2019attribut de l\u2019application FirstName Attribut de l\u2019annuaire Google Last Name d\u00e9fini sur l\u2019attribut de l\u2019application LastName Puis cliquez sur Terminer, et configurez les param\u00e8tres de Grist : GRIST_SAML_IDP_SKIP_SLO = true GRIST_SAML_SP_HOST = https:// GRIST_SAML_IDP_UNENCRYPTED = true GRIST_SAML_IDP_LOGIN = https://accounts.google.com/o/saml2/idp?idpid=xxxx (fourni par Google comme SSO URL ) GRIST_SAML_IDP_LOGOUT = https:// (puisque Google ne prend pas en charge Single Logout, renvoyez simplement l\u2019utilisateur \u00e0 la page d\u2019accueil) GRIST_SAML_IDP_CERTS = .../google.pem (fourni par Google plus t\u00f4t) GRIST_SAML_SP_KEY = .../saml.pem GRIST_SAML_SP_CERT = .../saml.crt Pour cr\u00e9er la paire de cl\u00e9s utilis\u00e9e dans GRIST_SAML_SP_KEY et GRIST_SAML_SP_CERT , suivez les m\u00eames instructions que pour Auth0 et Authentik. Note : Google ne v\u00e9rifie pas les messages SAML entrants, ils ne permettent donc pas de t\u00e9l\u00e9charger une cl\u00e9 publique \u00e0 cette fin. D\u00e9pannage # Nous nous attendons \u00e0 ce que l\u2019IdP nous fournisse name_id, un identifiant unique pour l\u2019utilisateur. Nous utilisons \u00e9galement des attributs optionnels pour le nom de l\u2019utilisateur, pour lesquels nous acceptons n\u2019importe lequel de : FirstName LastName http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname Vous devrez peut-\u00eatre ajuster les param\u00e8tres par d\u00e9faut de votre IdP pour correspondre aux attentes de Grist.","title":"SAML"},{"location":"install/saml/#saml","text":"Configuration pour SAML, utile pour les connexions d\u2019entreprise \u00e0 authentification unique (SSO). Un bon aper\u00e7u informatif de SAML est disponible sur https://www.okta.com/integrate/documentation/saml/ Note : SP est \u201cService Provider\u201d (Fournisseur de Service), dans notre cas, l\u2019application Grist. IdP est \u201cIdentity Provider\u201d (Fournisseur d\u2019Identit\u00e9), un endroit o\u00f9 les utilisateurs se connectent, par exemple Okta ou Google Apps. Nous aurons besoin d\u2019un ou plusieurs certificats de l\u2019IdP, au format PEM. Il s\u2019agit d\u2019une cl\u00e9 publique que Grist utilisera pour v\u00e9rifier que les messages de l\u2019IdP sont l\u00e9gitimes. Nous aurons besoin d\u2019une paire de cl\u00e9s priv\u00e9e et publique pour que Grist puisse communiquer avec l\u2019IdP. L\u2019IdP devra conna\u00eetre la cl\u00e9 publique de Grist pour v\u00e9rifier que les messages de Grist sont l\u00e9gitimes. Variables d\u2019environnement attendues : GRIST_SAML_SP_HOST - c\u2019est simplement l\u2019URL de base du site Grist, comme https:// (lorsque SAML est actif, il y aura une endpoint /saml/assert disponible ici pour impl\u00e9menter le protocole). GRIST_SAML_SP_KEY - chemin vers un fichier contenant notre cl\u00e9 priv\u00e9e, au format PEM. C\u2019est la cl\u00e9 priv\u00e9e de la paire de cl\u00e9s cr\u00e9\u00e9e pour que Grist l\u2019utilise avec l\u2019IdP. GRIST_SAML_SP_CERT - chemin vers un fichier contenant notre cl\u00e9 publique, au format PEM. C\u2019est la cl\u00e9 publique de la paire de cl\u00e9s cr\u00e9\u00e9e pour que Grist l\u2019utilise avec l\u2019IdP. Ce n\u2019est pas la cl\u00e9 publique/certificat de l\u2019IdP. GRIST_SAML_IDP_LOGIN - URL de connexion pour rediriger l\u2019utilisateur pour la connexion. GRIST_SAML_IDP_LOGOUT - URL de d\u00e9connexion pour rediriger l\u2019utilisateur pour la d\u00e9connexion. GRIST_SAML_IDP_SKIP_SLO - si d\u00e9fini et non vide, ne pas tenter le flux \u201cSingle Logout\u201d SAML, mais simplement rediriger vers GRIST_SAML_IDP_LOGOUT apr\u00e8s avoir effac\u00e9 la session. La possibilit\u00e9 de ce flux d\u00e9pendra de l\u2019IdP. GRIST_SAML_IDP_CERTS - liste de chemins s\u00e9par\u00e9s par des virgules pour les certificats de l\u2019IdP, au format PEM. Ce n\u2019est pas la cl\u00e9 priv\u00e9e ou publique cr\u00e9\u00e9e pour Grist. GRIST_SAML_IDP_UNENCRYPTED - si d\u00e9fini et non vide, autoriser les assertions non chiffr\u00e9es, en s\u2019appuyant sur https pour la confidentialit\u00e9.","title":"SAML"},{"location":"install/saml/#exemple-auth0","text":"Par exemple, lors de l\u2019ex\u00e9cution en local et en http, les param\u00e8tres qui fonctionnent avec l\u2019 IdP SAML Auth0 sont : GRIST_SAML_IDP_SKIP_SLO non d\u00e9fini GRIST_SAML_SP_HOST = http://localhost:8484 GRIST_SAML_IDP_UNENCRYPTED = 1 GRIST_SAML_IDP_LOGIN = https://...auth0.com/samlp/xxxx GRIST_SAML_IDP_LOGOUT = https://...auth0.com/samlp/xxxx (ce sont les m\u00eames pour Auth0) GRIST_SAML_IDP_CERTS = .../auth0.pem (t\u00e9l\u00e9charg\u00e9 selon les instructions d\u2019Auth0) GRIST_SAML_SP_KEY = .../saml.pem (cr\u00e9\u00e9) GRIST_SAML_SP_CERT = .../saml.crt (cr\u00e9\u00e9) Lorsqu\u2019il est utilis\u00e9 avec docker, assurez-vous que les fichiers de cl\u00e9 et de certificat sont accessibles dans un volume partag\u00e9. La paire cl\u00e9/certificat a \u00e9t\u00e9 cr\u00e9\u00e9e en suivant les instructions ici : Auth0 : utiliser un certificat personnalis\u00e9 pour signer les requ\u00eates Auth0 en tant que fournisseur d\u2019identit\u00e9 SAML Dans vos param\u00e8tres Auth0, assurez-vous \u00e9galement que : L\u2019URL de rappel de l\u2019application est d\u00e9finie sur https:///saml/assert .","title":"Exemple : Auth0"},{"location":"install/saml/#exemple-authentik","text":"Dans Authentik , ajoutez un fournisseur appel\u00e9 Grist avec : URL ACS : https:///saml/assert D\u00e9finir la liaison du fournisseur de services sur Post S\u00e9lectionnez ou ajoutez un certificat de signature. Vous devrez le t\u00e9l\u00e9charger pour l\u2019utiliser comme GRIST_SAML_IDP_CERTS dans la configuration de Grist. Ajoutez un certificat de v\u00e9rification. Ce sera la partie publique d\u2019une paire de cl\u00e9s que vous cr\u00e9ez pour GRIST_SAML_SP_KEY / GRIST_SAML_SP_CERT dans la configuration de Grist. Ensuite, toujours dans Authentik, ajoutez une application \u00e9galement appel\u00e9e Grist (je ne suis pas tr\u00e8s imaginatif) qui : Utilise le fournisseur Grist . A Launch URL d\u00e9fini sur https:// . Les param\u00e8tres de Grist suivent le m\u00eame sch\u00e9ma que pour Auth0. Les URL de connexion et de d\u00e9connexion avec Authentik au moment de la r\u00e9daction ressemblent \u00e0 : GRIST_SAML_IDP_LOGIN = https://...authentik.../application/saml/grist/sso/binding/redirect/ GRIST_SAML_IDP_LOGOUT = https://...authentik.../if/session-end/grist/","title":"Exemple : Authentik"},{"location":"install/saml/#exemple-google","text":"Dans Google Admin , sous la section \u201cApps\u201d, dans \u201cWeb and Mobile Apps\u201d, ajoutez une nouvelle application SAML personnalis\u00e9e. D\u00e9finissez le nom de l\u2019application, la description et l\u2019ic\u00f4ne \u00e0 votre convenance, puis cliquez sur Suivant. Prenez note du contenu du champ SSO URL , et t\u00e9l\u00e9chargez le certificat fourni. Configurez l\u2019application dans Google Admin comme suit : URL ACS : https:///saml/assert ID d\u2019entit\u00e9 : https:///saml/metadata.xml Cochez la case R\u00e9ponse sign\u00e9e. Laissez Start URL vide, et les param\u00e8tres Name ID par d\u00e9faut. Cliquez sur Suivant, et \u00e9ventuellement, sous Attributs, ajoutez deux mappages pour la population automatique des noms : Attribut de l\u2019annuaire Google First Name d\u00e9fini sur l\u2019attribut de l\u2019application FirstName Attribut de l\u2019annuaire Google Last Name d\u00e9fini sur l\u2019attribut de l\u2019application LastName Puis cliquez sur Terminer, et configurez les param\u00e8tres de Grist : GRIST_SAML_IDP_SKIP_SLO = true GRIST_SAML_SP_HOST = https:// GRIST_SAML_IDP_UNENCRYPTED = true GRIST_SAML_IDP_LOGIN = https://accounts.google.com/o/saml2/idp?idpid=xxxx (fourni par Google comme SSO URL ) GRIST_SAML_IDP_LOGOUT = https:// (puisque Google ne prend pas en charge Single Logout, renvoyez simplement l\u2019utilisateur \u00e0 la page d\u2019accueil) GRIST_SAML_IDP_CERTS = .../google.pem (fourni par Google plus t\u00f4t) GRIST_SAML_SP_KEY = .../saml.pem GRIST_SAML_SP_CERT = .../saml.crt Pour cr\u00e9er la paire de cl\u00e9s utilis\u00e9e dans GRIST_SAML_SP_KEY et GRIST_SAML_SP_CERT , suivez les m\u00eames instructions que pour Auth0 et Authentik. Note : Google ne v\u00e9rifie pas les messages SAML entrants, ils ne permettent donc pas de t\u00e9l\u00e9charger une cl\u00e9 publique \u00e0 cette fin.","title":"Exemple : Google"},{"location":"install/saml/#depannage","text":"Nous nous attendons \u00e0 ce que l\u2019IdP nous fournisse name_id, un identifiant unique pour l\u2019utilisateur. Nous utilisons \u00e9galement des attributs optionnels pour le nom de l\u2019utilisateur, pour lesquels nous acceptons n\u2019importe lequel de : FirstName LastName http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname Vous devrez peut-\u00eatre ajuster les param\u00e8tres par d\u00e9faut de votre IdP pour correspondre aux attentes de Grist.","title":"D\u00e9pannage"},{"location":"newsletters/2020-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2020 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mai 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Copier comme Mod\u00e8le. Vous souhaitez utiliser votre document soigneusement \u00e9labor\u00e9 avec toutes nouvelles donn\u00e9es ? Cliquez sur le menu \u201cPartager\u201d en haut ( ), et s\u00e9lectionnez \u201cCopier comme Mod\u00e8le\u201d 1 . La copie aura toute la structure, les formules et les mises en page, mais aucune des donn\u00e9es. Lien vers une cellule sp\u00e9cifique. S\u00e9lectionnez une cellule et appuyez sur \u2318 \u21e7 A (Mac) ou Ctrl + Shift + A (Windows). Partagez le lien copi\u00e9 pour que votre destinataire ouvre votre document \u00e0 la m\u00eame cellule s\u00e9lectionn\u00e9e. Plus d\u2019infos ici . Quoi de Neuf # Grist est constamment am\u00e9lior\u00e9. Voici quelques-unes des modifications r\u00e9centes : Les nouveaux documents Grist ont des URLs mieux pr\u00e9sent\u00e9es , incluant le titre du document. Maintenant, lorsque vous voyez un lien Grist, il est facile de se rappeler \u00e0 quel document il correspond. Les colonnes de r\u00e9f\u00e9rence offrent d\u00e9sormais une auto-compl\u00e9tion plus utile . Pour d\u00e9finir une valeur de r\u00e9f\u00e9rence, commencez \u00e0 taper, et voyez les suggestions de la table li\u00e9e class\u00e9es par meilleure correspondance. Les graphiques ont une nouvelle option \u201c\u00c9chelle Logarithmique de l\u2019Axe Y\u201d, pour afficher les donn\u00e9es sur une \u00e9chelle logarithmique , ce qui est important dans de nombreuses applications de science des donn\u00e9es. Super-utilisateur ? Si vous avez envie de bidouiller, il existe d\u00e9sormais un moyen exp\u00e9rimental d\u2019ajouter vos propres composants \u00e0 Grist. Voir Widget de page personnalis\u00e9 pour plus d\u2019infos. Grist @ New York Tech Meetup # Nous avons pr\u00e9sent\u00e9 une belle d\u00e9monstration au NY Tech Meetup en f\u00e9vrier dernier. Nous avons enfin une vid\u00e9o de notre d\u00e9mo et de la session de questions-r\u00e9ponses \u00e0 partager avec vous : https://www.youtube.com/watch?v=a2RlRGRnr9Q Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os introductives : S\u00e9rie de Vid\u00e9os Grist Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus profond\u00e9ment comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur Donner un Avis lien pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com . Apr\u00e8s la mise \u00e0 jour de juillet 2020, s\u00e9lectionnez \u201cDupliquer le Document\u201d, et cochez la case \u201cComme Mod\u00e8le\u201d dans la bo\u00eete de dialogue qui s\u2019ouvre. Voir Copier des Documents . \u21a9","title":"2020/05"},{"location":"newsletters/2020-05/#bulletin-de-mai-2020","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mai 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mai 2020"},{"location":"newsletters/2020-05/#conseils-rapides","text":"Copier comme Mod\u00e8le. Vous souhaitez utiliser votre document soigneusement \u00e9labor\u00e9 avec toutes nouvelles donn\u00e9es ? Cliquez sur le menu \u201cPartager\u201d en haut ( ), et s\u00e9lectionnez \u201cCopier comme Mod\u00e8le\u201d 1 . La copie aura toute la structure, les formules et les mises en page, mais aucune des donn\u00e9es. Lien vers une cellule sp\u00e9cifique. S\u00e9lectionnez une cellule et appuyez sur \u2318 \u21e7 A (Mac) ou Ctrl + Shift + A (Windows). Partagez le lien copi\u00e9 pour que votre destinataire ouvre votre document \u00e0 la m\u00eame cellule s\u00e9lectionn\u00e9e. Plus d\u2019infos ici .","title":"Conseils Rapides"},{"location":"newsletters/2020-05/#quoi-de-neuf","text":"Grist est constamment am\u00e9lior\u00e9. Voici quelques-unes des modifications r\u00e9centes : Les nouveaux documents Grist ont des URLs mieux pr\u00e9sent\u00e9es , incluant le titre du document. Maintenant, lorsque vous voyez un lien Grist, il est facile de se rappeler \u00e0 quel document il correspond. Les colonnes de r\u00e9f\u00e9rence offrent d\u00e9sormais une auto-compl\u00e9tion plus utile . Pour d\u00e9finir une valeur de r\u00e9f\u00e9rence, commencez \u00e0 taper, et voyez les suggestions de la table li\u00e9e class\u00e9es par meilleure correspondance. Les graphiques ont une nouvelle option \u201c\u00c9chelle Logarithmique de l\u2019Axe Y\u201d, pour afficher les donn\u00e9es sur une \u00e9chelle logarithmique , ce qui est important dans de nombreuses applications de science des donn\u00e9es. Super-utilisateur ? Si vous avez envie de bidouiller, il existe d\u00e9sormais un moyen exp\u00e9rimental d\u2019ajouter vos propres composants \u00e0 Grist. Voir Widget de page personnalis\u00e9 pour plus d\u2019infos.","title":"Quoi de Neuf"},{"location":"newsletters/2020-05/#grist-new-york-tech-meetup","text":"Nous avons pr\u00e9sent\u00e9 une belle d\u00e9monstration au NY Tech Meetup en f\u00e9vrier dernier. Nous avons enfin une vid\u00e9o de notre d\u00e9mo et de la session de questions-r\u00e9ponses \u00e0 partager avec vous : https://www.youtube.com/watch?v=a2RlRGRnr9Q","title":"Grist @ New York Tech Meetup"},{"location":"newsletters/2020-05/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os introductives : S\u00e9rie de Vid\u00e9os Grist Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus profond\u00e9ment comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur Donner un Avis lien pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com . Apr\u00e8s la mise \u00e0 jour de juillet 2020, s\u00e9lectionnez \u201cDupliquer le Document\u201d, et cochez la case \u201cComme Mod\u00e8le\u201d dans la bo\u00eete de dialogue qui s\u2019ouvre. Voir Copier des Documents . \u21a9","title":"Apprendre Grist"},{"location":"newsletters/2020-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2020 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juin 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Obtenez le Trimestre Calendaire. Si vous avez une colonne de type Date, vous pouvez en extraire des parties avec des fonctions similaires \u00e0 Excel pour ann\u00e9e , mois , et plus . Mais comment obtenir le trimestre ? Cette formule produira des valeurs comme \u201c2020 T2\u201d : \"%s T%s\" % ($MyDate.year, CEILING($MyDate.month, 3) / 3) Cr\u00e9er des Hyperliens. Pour cr\u00e9er une colonne de liens dans Grist, d\u00e9finissez le type de colonne sur Texte, et cliquez sur le bouton \u201cHyperLien\u201d sous FORMAT DE CELLULE : Maintenant, une valeur comme Grist Labs https://getgrist.com affichera un lien vers https://getgrist.com avec \u201cGrist Labs\u201d comme texte. Voir ci-dessous pour un exemple de Club de Lecture qui utilise des formules de mani\u00e8re extensive pour g\u00e9n\u00e9rer des liens utiles. Quoi de Neuf # Travaillez en toute s\u00e9curit\u00e9 sur des modifications complexes. \u00c0 mesure que votre document ou tableur prend de l\u2019importance, la facilit\u00e9 de faire des modifications peut \u00eatre \u00e9clips\u00e9e par la peur de casser quelque chose. Grist a maintenant un outil pour vous aider. Cliquez sur \u201cDupliquer le Document\u201d 1 dans le menu Partager : Vous obtiendrez une copie non enregistr\u00e9e de votre document. Vous pouvez y exp\u00e9rimenter sans craindre d\u2019affecter l\u2019original. Faites des modifications grandes ou petites, une ou plusieurs. Une fois satisfait, ouvrez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cEnregistrer la Copie\u201d et cliquez sur \u201cRemplacer l\u2019Original\u201d : Grist vous avertira si le remplacement risque d\u2019\u00e9craser des modifications r\u00e9centes dans l\u2019original. Examinez et restaurez des sauvegardes. Grist enregistre automatiquement des sauvegardes de vos documents au fur et \u00e0 mesure que vous travaillez dessus. Vous pouvez maintenant les visualiser facilement. Cliquez sur \u201cHistorique du Document\u201d dans le panneau de gauche, puis cliquez sur l\u2019onglet \u201cInstantan\u00e9s\u201d dans le panneau de droite : Vous pouvez ouvrir n\u2019importe lequel des instantan\u00e9s list\u00e9s. Vous pouvez revenir \u00e0 une ancienne version en utilisant l\u2019option \u201cRemplacer l\u2019Original\u201d 2 , ou enregistrer une ancienne version comme un nouveau document. Nouveaux Exemples # Voici quelques exemples de ce que vous pouvez faire avec Grist : Analysez les D\u00e9penses de Carte de Cr\u00e9dit : Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit. Les membres de la carte American Express peuvent utiliser le mod\u00e8le pr\u00eat \u00e0 l\u2019emploi dans l\u2019exemple. Listes de Livres avec Appairage Biblioth\u00e8que et Magasin : La gestion des liens et les formules de Grist peuvent vous aider avec votre club de lecture, en ajoutant des liens automatiques vers des biblioth\u00e8ques, des magasins, des sites de critiques et d\u2019autres r\u00e9f\u00e9rences. Les m\u00eames id\u00e9es pourraient fonctionner avec des meubles Ikea, des commandes alimentaires, tout ce que vous aimez. D\u00e9monstration d\u2019Aper\u00e7u de Grist # Int\u00e9ress\u00e9 par un aper\u00e7u des fonctionnalit\u00e9s de Grist sur un exemple r\u00e9aliste ? D\u00e9couvrez notre nouvelle vid\u00e9o de d\u00e9monstration : https://www.youtube.com/watch?v=XYZ_ZGSxU00 . Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment les diff\u00e9rentes fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner un Avis lien en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com . Apr\u00e8s la mise \u00e0 jour de juillet 2020, utilisez l\u2019option \u201cTravailler sur une Copie\u201d pour cette fonctionnalit\u00e9. Voir Copier des Documents . \u21a9 Ce menu a \u00e9t\u00e9 mis \u00e0 jour en juillet 2020, voir Sauvegardes Automatiques . \u21a9","title":"2020/06"},{"location":"newsletters/2020-06/#bulletin-de-juin-2020","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juin 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juin 2020"},{"location":"newsletters/2020-06/#conseils-rapides","text":"Obtenez le Trimestre Calendaire. Si vous avez une colonne de type Date, vous pouvez en extraire des parties avec des fonctions similaires \u00e0 Excel pour ann\u00e9e , mois , et plus . Mais comment obtenir le trimestre ? Cette formule produira des valeurs comme \u201c2020 T2\u201d : \"%s T%s\" % ($MyDate.year, CEILING($MyDate.month, 3) / 3) Cr\u00e9er des Hyperliens. Pour cr\u00e9er une colonne de liens dans Grist, d\u00e9finissez le type de colonne sur Texte, et cliquez sur le bouton \u201cHyperLien\u201d sous FORMAT DE CELLULE : Maintenant, une valeur comme Grist Labs https://getgrist.com affichera un lien vers https://getgrist.com avec \u201cGrist Labs\u201d comme texte. Voir ci-dessous pour un exemple de Club de Lecture qui utilise des formules de mani\u00e8re extensive pour g\u00e9n\u00e9rer des liens utiles.","title":"Conseils Rapides"},{"location":"newsletters/2020-06/#quoi-de-neuf","text":"Travaillez en toute s\u00e9curit\u00e9 sur des modifications complexes. \u00c0 mesure que votre document ou tableur prend de l\u2019importance, la facilit\u00e9 de faire des modifications peut \u00eatre \u00e9clips\u00e9e par la peur de casser quelque chose. Grist a maintenant un outil pour vous aider. Cliquez sur \u201cDupliquer le Document\u201d 1 dans le menu Partager : Vous obtiendrez une copie non enregistr\u00e9e de votre document. Vous pouvez y exp\u00e9rimenter sans craindre d\u2019affecter l\u2019original. Faites des modifications grandes ou petites, une ou plusieurs. Une fois satisfait, ouvrez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cEnregistrer la Copie\u201d et cliquez sur \u201cRemplacer l\u2019Original\u201d : Grist vous avertira si le remplacement risque d\u2019\u00e9craser des modifications r\u00e9centes dans l\u2019original. Examinez et restaurez des sauvegardes. Grist enregistre automatiquement des sauvegardes de vos documents au fur et \u00e0 mesure que vous travaillez dessus. Vous pouvez maintenant les visualiser facilement. Cliquez sur \u201cHistorique du Document\u201d dans le panneau de gauche, puis cliquez sur l\u2019onglet \u201cInstantan\u00e9s\u201d dans le panneau de droite : Vous pouvez ouvrir n\u2019importe lequel des instantan\u00e9s list\u00e9s. Vous pouvez revenir \u00e0 une ancienne version en utilisant l\u2019option \u201cRemplacer l\u2019Original\u201d 2 , ou enregistrer une ancienne version comme un nouveau document.","title":"Quoi de Neuf"},{"location":"newsletters/2020-06/#nouveaux-exemples","text":"Voici quelques exemples de ce que vous pouvez faire avec Grist : Analysez les D\u00e9penses de Carte de Cr\u00e9dit : Grist offre un moyen pratique d\u2019explorer rapidement vos transactions par carte de cr\u00e9dit. Les membres de la carte American Express peuvent utiliser le mod\u00e8le pr\u00eat \u00e0 l\u2019emploi dans l\u2019exemple. Listes de Livres avec Appairage Biblioth\u00e8que et Magasin : La gestion des liens et les formules de Grist peuvent vous aider avec votre club de lecture, en ajoutant des liens automatiques vers des biblioth\u00e8ques, des magasins, des sites de critiques et d\u2019autres r\u00e9f\u00e9rences. Les m\u00eames id\u00e9es pourraient fonctionner avec des meubles Ikea, des commandes alimentaires, tout ce que vous aimez.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-06/#demonstration-dapercu-de-grist","text":"Int\u00e9ress\u00e9 par un aper\u00e7u des fonctionnalit\u00e9s de Grist sur un exemple r\u00e9aliste ? D\u00e9couvrez notre nouvelle vid\u00e9o de d\u00e9monstration : https://www.youtube.com/watch?v=XYZ_ZGSxU00 .","title":"D\u00e9monstration d’Aper\u00e7u de Grist"},{"location":"newsletters/2020-06/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment les diff\u00e9rentes fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner un Avis lien en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com . Apr\u00e8s la mise \u00e0 jour de juillet 2020, utilisez l\u2019option \u201cTravailler sur une Copie\u201d pour cette fonctionnalit\u00e9. Voir Copier des Documents . \u21a9 Ce menu a \u00e9t\u00e9 mis \u00e0 jour en juillet 2020, voir Sauvegardes Automatiques . \u21a9","title":"Apprendre Grist"},{"location":"newsletters/2020-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2020 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juillet 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Revoir la Logique du Document. Le lien \u201cVue Code\u201d dans le panneau de gauche affiche un module Python qui d\u00e9crit le mod\u00e8le de donn\u00e9es complet de votre document : toutes les tables, toutes les colonnes avec leurs types, et toutes les formules. C\u2019est un excellent aper\u00e7u de la logique qui alimente les calculs d\u2019un document. Liens pour Composer des Emails. Si vous avez une colonne comme \u201cEmail\u201d, essayez d\u2019ajouter une colonne de formule avec la formule \"mailto:\" + $Email , d\u00e9finissez son type sur Texte , et le FORMAT DE CELLULE sur HyperLink . Vous pouvez maintenant cliquer sur un lien pour composer un email \u00e0 cette adresse. Voir Nouveaux Exemples ci-dessous pour bien plus de choses que vous pouvez faire avec cela. Quoi de Neuf # Plus d\u2019 options de format de nombre . Formatage en un clic pour les montants en dollars, les pourcentages, afficher les nombres n\u00e9gatifs entre parenth\u00e8ses, et plus encore : R\u00e9tention des sauvegardes plus longue. Grist effectue des sauvegardes automatiques r\u00e9guli\u00e8res de vos documents pendant que vous travaillez dessus. Il les conserve maintenant plus longtemps, m\u00eame sur le plan gratuit. R\u00e9cup\u00e9rer ou purger des documents supprim\u00e9s. Les documents supprim\u00e9s sont d\u00e9plac\u00e9s dans la Corbeille. Il est maintenant facile de les r\u00e9cup\u00e9rer. Les documents dans la Corbeille sont supprim\u00e9s d\u00e9finitivement apr\u00e8s 30 jours, ou vous pouvez les supprimer d\u00e9finitivement vous-m\u00eame pour les purger de nos syst\u00e8mes plus t\u00f4t. Utilisez votre propre domaine. Si vous utilisez Grist pour partager des donn\u00e9es avec vos propres clients et que vous souhaitez qu\u2019elles soient servies depuis votre propre domaine, cette option est maintenant disponible en tant qu\u2019ajout au Plan \u00c9quipe . Int\u00e9gration Zapier. L\u2019 int\u00e9gration de Grist sur Zapier est maintenant disponible en version b\u00eata. Allez-y et connectez Grist \u00e0 d\u2019autres applications. Nouveaux Exemples # Voici un exemple de ce que vous pouvez faire avec Grist : Pr\u00e9parer des Emails en utilisant des Formules : Transformez des cellules en liens qui ouvrent un programme de messagerie pour composer un nouveau message, et pr\u00e9remplir ses destinataires, son sujet, et plus encore. Vous pouvez essentiellement cr\u00e9er des mod\u00e8les d\u2019email en utilisant les formules Grist. Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner un Feedback lien pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/07"},{"location":"newsletters/2020-07/#bulletin-de-juillet-2020","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juillet 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juillet 2020"},{"location":"newsletters/2020-07/#conseils-rapides","text":"Revoir la Logique du Document. Le lien \u201cVue Code\u201d dans le panneau de gauche affiche un module Python qui d\u00e9crit le mod\u00e8le de donn\u00e9es complet de votre document : toutes les tables, toutes les colonnes avec leurs types, et toutes les formules. C\u2019est un excellent aper\u00e7u de la logique qui alimente les calculs d\u2019un document. Liens pour Composer des Emails. Si vous avez une colonne comme \u201cEmail\u201d, essayez d\u2019ajouter une colonne de formule avec la formule \"mailto:\" + $Email , d\u00e9finissez son type sur Texte , et le FORMAT DE CELLULE sur HyperLink . Vous pouvez maintenant cliquer sur un lien pour composer un email \u00e0 cette adresse. Voir Nouveaux Exemples ci-dessous pour bien plus de choses que vous pouvez faire avec cela.","title":"Conseils Rapides"},{"location":"newsletters/2020-07/#quoi-de-neuf","text":"Plus d\u2019 options de format de nombre . Formatage en un clic pour les montants en dollars, les pourcentages, afficher les nombres n\u00e9gatifs entre parenth\u00e8ses, et plus encore : R\u00e9tention des sauvegardes plus longue. Grist effectue des sauvegardes automatiques r\u00e9guli\u00e8res de vos documents pendant que vous travaillez dessus. Il les conserve maintenant plus longtemps, m\u00eame sur le plan gratuit. R\u00e9cup\u00e9rer ou purger des documents supprim\u00e9s. Les documents supprim\u00e9s sont d\u00e9plac\u00e9s dans la Corbeille. Il est maintenant facile de les r\u00e9cup\u00e9rer. Les documents dans la Corbeille sont supprim\u00e9s d\u00e9finitivement apr\u00e8s 30 jours, ou vous pouvez les supprimer d\u00e9finitivement vous-m\u00eame pour les purger de nos syst\u00e8mes plus t\u00f4t. Utilisez votre propre domaine. Si vous utilisez Grist pour partager des donn\u00e9es avec vos propres clients et que vous souhaitez qu\u2019elles soient servies depuis votre propre domaine, cette option est maintenant disponible en tant qu\u2019ajout au Plan \u00c9quipe . Int\u00e9gration Zapier. L\u2019 int\u00e9gration de Grist sur Zapier est maintenant disponible en version b\u00eata. Allez-y et connectez Grist \u00e0 d\u2019autres applications.","title":"Quoi de Neuf"},{"location":"newsletters/2020-07/#nouveaux-exemples","text":"Voici un exemple de ce que vous pouvez faire avec Grist : Pr\u00e9parer des Emails en utilisant des Formules : Transformez des cellules en liens qui ouvrent un programme de messagerie pour composer un nouveau message, et pr\u00e9remplir ses destinataires, son sujet, et plus encore. Vous pouvez essentiellement cr\u00e9er des mod\u00e8les d\u2019email en utilisant les formules Grist.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-07/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner un Feedback lien pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-08/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019ao\u00fbt 2020 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Ao\u00fbt 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Conseils Rapides # D\u00e9calages de Date. Il est facile de se tromper en calculant des dates. DATEADD est un moyen simple et fiable d\u2019ajouter des ann\u00e9es, des mois, des semaines et des jours \u00e0 une date. Par exemple, pour calculer trois mois \u00e0 partir d\u2019une date sp\u00e9cifique, faites DATEADD($date, months=3) . Pour une semaine et un jour avant cela, faites DATEADD($date, months=3, weeks=-1, day=-1) . Simple! Noms de Colonnes. Parfois, il y a une tension entre choisir un nom de colonne comme une \u00e9tiquette descriptive pour expliquer de quoi il s\u2019agit, et choisir quelque chose de court et accrocheur qui soit confortable dans les formules. Vous pouvez avoir les deux! Il suffit d\u2019ouvrir les options de colonne et de d\u00e9cocher \u201c Utiliser le nom comme ID? \u201d. Ensuite, vous pouvez d\u00e9finir le nom utilis\u00e9 comme \u00e9tiquette et le nom utilis\u00e9 dans les formules s\u00e9par\u00e9ment. Et comme toujours avec Grist, si vous changez d\u2019avis plus tard, vous pouvez changer ou relier les noms et toutes vos formules se mettront \u00e0 jour automatiquement. Quoi de Neuf # Trier vos documents par date de modification. Vous pouvez maintenant choisir d\u2019ordonner vos documents de sorte que les plus r\u00e9cemment modifi\u00e9s apparaissent en premier, en utilisant la nouvelle option Par Nom / Par Date de Modification en haut \u00e0 droite des listes de documents. Lister les documents sous forme d\u2019ic\u00f4nes. Vous pouvez maintenant \u00e9galement contr\u00f4ler si les documents s\u2019affichent sous forme de grille d\u2019ic\u00f4nes ou de liste de noms, en utilisant les nouvelles ic\u00f4nes de grille et de pile en haut \u00e0 droite des listes de documents. Widgets personnalis\u00e9s r\u00e9actifs. Nous avons simplifi\u00e9 la cr\u00e9ation de Widgets Personnalis\u00e9s pour les d\u00e9veloppeurs web, offrant de nouvelles vues r\u00e9actives de vos donn\u00e9es qui se mettent \u00e0 jour automatiquement. Un d\u00e9veloppeur n\u2019a qu\u2019\u00e0 appeler grist.onRecord(s) pour s\u2019abonner \u00e0 un enregistrement ou un ensemble d\u2019enregistrements li\u00e9s au widget; apr\u00e8s cela, la pr\u00e9sentation est une question de pr\u00e9paration des ressources HTML/CSS/JS (aucune connaissance sp\u00e9cifique de Grist n\u2019est n\u00e9cessaire). L\u2019utilisateur du widget contr\u00f4le la s\u00e9lection des donn\u00e9es en utilisant le Lien de Widgets r\u00e9gulier. Nous invitons les d\u00e9veloppeurs web \u00e0 essayer de cr\u00e9er de nouveaux widgets ou visualisations, et nous serions ravis d\u2019entendre parler des r\u00e9sultats (envoyez-nous un mail \u00e0 support@getgrist.com ). Nouveaux Exemples # Voici un exemple de ce que vous pouvez faire avec Grist : Pr\u00e9paration des Factures : Pr\u00e9visualisez des factures imprimables c\u00f4te \u00e0 c\u00f4te avec vos donn\u00e9es clients et commandes. Entrez rapidement des \u00e9l\u00e9ments facturables en utilisant des formules, et voyez la facture se mettre \u00e0 jour imm\u00e9diatement comme toute autre partie d\u2019une feuille de calcul. C\u2019est aussi un exemple du type de nouvelle visualisation qui peut \u00eatre construite avec des Widgets Personnalis\u00e9s . Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions? Cliquez sur le lien Donner votre avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/08"},{"location":"newsletters/2020-08/#bulletin-daout-2020","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Ao\u00fbt 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin d’ao\u00fbt 2020"},{"location":"newsletters/2020-08/#conseils-rapides","text":"D\u00e9calages de Date. Il est facile de se tromper en calculant des dates. DATEADD est un moyen simple et fiable d\u2019ajouter des ann\u00e9es, des mois, des semaines et des jours \u00e0 une date. Par exemple, pour calculer trois mois \u00e0 partir d\u2019une date sp\u00e9cifique, faites DATEADD($date, months=3) . Pour une semaine et un jour avant cela, faites DATEADD($date, months=3, weeks=-1, day=-1) . Simple! Noms de Colonnes. Parfois, il y a une tension entre choisir un nom de colonne comme une \u00e9tiquette descriptive pour expliquer de quoi il s\u2019agit, et choisir quelque chose de court et accrocheur qui soit confortable dans les formules. Vous pouvez avoir les deux! Il suffit d\u2019ouvrir les options de colonne et de d\u00e9cocher \u201c Utiliser le nom comme ID? \u201d. Ensuite, vous pouvez d\u00e9finir le nom utilis\u00e9 comme \u00e9tiquette et le nom utilis\u00e9 dans les formules s\u00e9par\u00e9ment. Et comme toujours avec Grist, si vous changez d\u2019avis plus tard, vous pouvez changer ou relier les noms et toutes vos formules se mettront \u00e0 jour automatiquement.","title":"Conseils Rapides"},{"location":"newsletters/2020-08/#quoi-de-neuf","text":"Trier vos documents par date de modification. Vous pouvez maintenant choisir d\u2019ordonner vos documents de sorte que les plus r\u00e9cemment modifi\u00e9s apparaissent en premier, en utilisant la nouvelle option Par Nom / Par Date de Modification en haut \u00e0 droite des listes de documents. Lister les documents sous forme d\u2019ic\u00f4nes. Vous pouvez maintenant \u00e9galement contr\u00f4ler si les documents s\u2019affichent sous forme de grille d\u2019ic\u00f4nes ou de liste de noms, en utilisant les nouvelles ic\u00f4nes de grille et de pile en haut \u00e0 droite des listes de documents. Widgets personnalis\u00e9s r\u00e9actifs. Nous avons simplifi\u00e9 la cr\u00e9ation de Widgets Personnalis\u00e9s pour les d\u00e9veloppeurs web, offrant de nouvelles vues r\u00e9actives de vos donn\u00e9es qui se mettent \u00e0 jour automatiquement. Un d\u00e9veloppeur n\u2019a qu\u2019\u00e0 appeler grist.onRecord(s) pour s\u2019abonner \u00e0 un enregistrement ou un ensemble d\u2019enregistrements li\u00e9s au widget; apr\u00e8s cela, la pr\u00e9sentation est une question de pr\u00e9paration des ressources HTML/CSS/JS (aucune connaissance sp\u00e9cifique de Grist n\u2019est n\u00e9cessaire). L\u2019utilisateur du widget contr\u00f4le la s\u00e9lection des donn\u00e9es en utilisant le Lien de Widgets r\u00e9gulier. Nous invitons les d\u00e9veloppeurs web \u00e0 essayer de cr\u00e9er de nouveaux widgets ou visualisations, et nous serions ravis d\u2019entendre parler des r\u00e9sultats (envoyez-nous un mail \u00e0 support@getgrist.com ).","title":"Quoi de Neuf"},{"location":"newsletters/2020-08/#nouveaux-exemples","text":"Voici un exemple de ce que vous pouvez faire avec Grist : Pr\u00e9paration des Factures : Pr\u00e9visualisez des factures imprimables c\u00f4te \u00e0 c\u00f4te avec vos donn\u00e9es clients et commandes. Entrez rapidement des \u00e9l\u00e9ments facturables en utilisant des formules, et voyez la facture se mettre \u00e0 jour imm\u00e9diatement comme toute autre partie d\u2019une feuille de calcul. C\u2019est aussi un exemple du type de nouvelle visualisation qui peut \u00eatre construite avec des Widgets Personnalis\u00e9s .","title":"Nouveaux Exemples"},{"location":"newsletters/2020-08/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions? Cliquez sur le lien Donner votre avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-09/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Septembre 2020 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Septembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Raccourcis Clavier. Grist prend en charge de nombreux raccourcis clavier, y compris plusieurs provenant d\u2019Excel et de Google Sheets. Ils sont list\u00e9s ici , et \u00e9galement disponibles dans Grist en appuyant sur F1 ou \u2318 / (Mac) ou Ctrl + / (Windows). Colonnes R\u00e9f\u00e9renc\u00e9es. Avec le curseur n\u2019importe o\u00f9 dans une colonne de type R\u00e9f\u00e9rence (utilis\u00e9e pour stocker un pointeur vers un autre enregistrement), le panneau Options de Colonne \u00e0 droite a une section appel\u00e9e \u201cAjouter des Colonnes R\u00e9f\u00e9renc\u00e9es\u201d. Cela permet d\u2019ajouter rapidement n\u2019importe quel champ de l\u2019enregistrement li\u00e9. Si vous appuyez sur Entr\u00e9e sur la colonne ajout\u00e9e, vous remarquerez qu\u2019il s\u2019agit simplement d\u2019une colonne de formule, telle que $Contact.Email . Quoi de Neuf # Partage Public. Vous pouvez d\u00e9sormais partager vos documents publiquement. Dans le menu \u201cPartager\u201d ( ) en haut, s\u00e9lectionnez \u201cG\u00e9rer les Utilisateurs\u201d. Ensuite, basculez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cAcc\u00e8s Public\u201d sur \u201cActiv\u00e9\u201d: Une fois que vous confirmez le changement, toute personne ayant le lien vers votre document pourra le consulter. Ils n\u2019ont m\u00eame pas besoin d\u2019avoir un compte Grist. Le bouton \u201cCopier le Lien\u201d est pratique pour copier le lien dans le presse-papiers pour le coller dans un email, un tweet, ou ailleurs. Vous pouvez \u00e9galement permettre \u00e0 toute personne ayant le lien vers votre document de le modifier : il suffit de changer le r\u00f4le dans la ligne Acc\u00e8s Public en \u00c9diteur. Notez que cela permet \u00e0 n\u2019importe qui avec le lien de modifier absolument tout dans votre document, y compris de supprimer toutes les donn\u00e9es. Les instantan\u00e9s dans l\u2019 Historique du Document devraient aider en cas de probl\u00e8me. Suggestions de Formules Am\u00e9lior\u00e9es. Lors de la saisie de formules, Grist est d\u00e9sormais plus utile en sugg\u00e9rant des fonctions courantes, en incluant leurs param\u00e8tres, et un lien vers la documentation. Nouveaux Exemples # Voici un exemple de ce que vous pouvez faire avec Grist : Suivi de la Paie : Ce mod\u00e8le est pratique pour les petites entreprises, en particulier celles avec des employ\u00e9s \u00e0 temps partiel. Grist peut vous aider \u00e0 suivre les heures de travail, les taux et les r\u00f4les des employ\u00e9s, et \u00e0 r\u00e9duire les erreurs avec des r\u00e9sum\u00e9s de paie \u00e0 jour et des historiques d\u00e9taill\u00e9s des taux et des heures. Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Questions ou suggestions ? Cliquez sur le lien Donner votre Avis en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/09"},{"location":"newsletters/2020-09/#bulletin-de-septembre-2020","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Septembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Septembre 2020"},{"location":"newsletters/2020-09/#conseils-rapides","text":"Raccourcis Clavier. Grist prend en charge de nombreux raccourcis clavier, y compris plusieurs provenant d\u2019Excel et de Google Sheets. Ils sont list\u00e9s ici , et \u00e9galement disponibles dans Grist en appuyant sur F1 ou \u2318 / (Mac) ou Ctrl + / (Windows). Colonnes R\u00e9f\u00e9renc\u00e9es. Avec le curseur n\u2019importe o\u00f9 dans une colonne de type R\u00e9f\u00e9rence (utilis\u00e9e pour stocker un pointeur vers un autre enregistrement), le panneau Options de Colonne \u00e0 droite a une section appel\u00e9e \u201cAjouter des Colonnes R\u00e9f\u00e9renc\u00e9es\u201d. Cela permet d\u2019ajouter rapidement n\u2019importe quel champ de l\u2019enregistrement li\u00e9. Si vous appuyez sur Entr\u00e9e sur la colonne ajout\u00e9e, vous remarquerez qu\u2019il s\u2019agit simplement d\u2019une colonne de formule, telle que $Contact.Email .","title":"Conseils Rapides"},{"location":"newsletters/2020-09/#quoi-de-neuf","text":"Partage Public. Vous pouvez d\u00e9sormais partager vos documents publiquement. Dans le menu \u201cPartager\u201d ( ) en haut, s\u00e9lectionnez \u201cG\u00e9rer les Utilisateurs\u201d. Ensuite, basculez le menu d\u00e9roulant \u00e0 c\u00f4t\u00e9 de \u201cAcc\u00e8s Public\u201d sur \u201cActiv\u00e9\u201d: Une fois que vous confirmez le changement, toute personne ayant le lien vers votre document pourra le consulter. Ils n\u2019ont m\u00eame pas besoin d\u2019avoir un compte Grist. Le bouton \u201cCopier le Lien\u201d est pratique pour copier le lien dans le presse-papiers pour le coller dans un email, un tweet, ou ailleurs. Vous pouvez \u00e9galement permettre \u00e0 toute personne ayant le lien vers votre document de le modifier : il suffit de changer le r\u00f4le dans la ligne Acc\u00e8s Public en \u00c9diteur. Notez que cela permet \u00e0 n\u2019importe qui avec le lien de modifier absolument tout dans votre document, y compris de supprimer toutes les donn\u00e9es. Les instantan\u00e9s dans l\u2019 Historique du Document devraient aider en cas de probl\u00e8me. Suggestions de Formules Am\u00e9lior\u00e9es. Lors de la saisie de formules, Grist est d\u00e9sormais plus utile en sugg\u00e9rant des fonctions courantes, en incluant leurs param\u00e8tres, et un lien vers la documentation.","title":"Quoi de Neuf"},{"location":"newsletters/2020-09/#nouveaux-exemples","text":"Voici un exemple de ce que vous pouvez faire avec Grist : Suivi de la Paie : Ce mod\u00e8le est pratique pour les petites entreprises, en particulier celles avec des employ\u00e9s \u00e0 temps partiel. Grist peut vous aider \u00e0 suivre les heures de travail, les taux et les r\u00f4les des employ\u00e9s, et \u00e0 r\u00e9duire les erreurs avec des r\u00e9sum\u00e9s de paie \u00e0 jour et des historiques d\u00e9taill\u00e9s des taux et des heures.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-09/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Questions ou suggestions ? Cliquez sur le lien Donner votre Avis en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-10/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Octobre 2020 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Octobre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Remplir un Intervalle. Pour remplir un intervalle de cellules avec la m\u00eame valeur, entrez la valeur dans la cellule du haut, puis s\u00e9lectionnez l\u2019intervalle en dessous en commen\u00e7ant par cette cellule (ce que vous pouvez faire en faisant glisser la souris, ou en Shift -cliquant sur la cellule du bas), puis appuyez sur Ctrl + D (Windows) ou \u2318 D (Mac). Souvenez-vous de \u201cD\u201d pour remplir D essous. Les raccourcis habituels Copier-Coller fonctionnent aussi \u2013 Ctrl + C Ctrl + V (Windows) ou \u2318 C \u2318 V (Mac). Coller une valeur dans un intervalle plus grand remplira l\u2019intervalle avec plusieurs copies de la valeur. Expressions Conditionnelles. Si vous avez une formule comme $Birthday.year , vous constaterez que lorsque la colonne Birthday est vide, la formule affiche une erreur. Il est facile de l\u2019\u00e9viter en utilisant les expressions conditionnelles de Python : $Birthday.year if $Birthday else None La m\u00eame id\u00e9e peut aider dans d\u2019autres situations, par exemple pour \u00e9viter une ZeroDivisionError : $Total / $Count if $Count else 0 Quoi de Neuf # Impression. Vous pouvez maintenant facilement imprimer n\u2019importe quelle vue sur votre \u00e9cran, qu\u2019il s\u2019agisse d\u2019une table de donn\u00e9es, d\u2019une fiche, ou d\u2019une vue personnalis\u00e9e. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points en haut de la vue, et s\u00e9lectionnez \u201cImprimer la Vue\u201d : L\u2019impression fonctionne \u00e9galement pour des vues \u00e0 usage sp\u00e9cial telles que Factures ou \u00c9tiquettes d\u2019Envoi (voir ci-dessous). B\u00eata Open Source # Nous sommes ravis d\u2019annoncer que nous rendons Grist open-source ! La version open-source doit \u00eatre consid\u00e9r\u00e9e comme en B\u00eata pour le moment, mais les d\u00e9veloppeurs enthousiastes sont les bienvenus pour la d\u00e9couvrir : https://github.com/gristlabs/grist-core . Le service s\u00e9curis\u00e9 g\u00e9r\u00e9 que vous connaissez et aimez reste inchang\u00e9, et sera d\u2019autant plus fort gr\u00e2ce \u00e0 l\u2019engagement avec la communaut\u00e9 open-source. Placer notre code dans le domaine public apporte \u00e9galement une confiance accrue dans la qualit\u00e9 du code et dans la disponibilit\u00e9 \u00e0 long terme de Grist. En savoir plus sur Pourquoi Open Source . Nouveaux Exemples # Imprimer des \u00c9tiquettes d\u2019Envoi . Cette vue personnalis\u00e9e prend en charge les tailles d\u2019\u00e9tiquettes populaires et facilite la cr\u00e9ation d\u2019\u00e9tiquettes imprimables et leur disponibilit\u00e9 en un clic. C\u2019est un autre exemple de l\u2019extensibilit\u00e9 de Grist. Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner votre Avis lien en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/10"},{"location":"newsletters/2020-10/#bulletin-doctobre-2020","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Octobre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’Octobre 2020"},{"location":"newsletters/2020-10/#conseils-rapides","text":"Remplir un Intervalle. Pour remplir un intervalle de cellules avec la m\u00eame valeur, entrez la valeur dans la cellule du haut, puis s\u00e9lectionnez l\u2019intervalle en dessous en commen\u00e7ant par cette cellule (ce que vous pouvez faire en faisant glisser la souris, ou en Shift -cliquant sur la cellule du bas), puis appuyez sur Ctrl + D (Windows) ou \u2318 D (Mac). Souvenez-vous de \u201cD\u201d pour remplir D essous. Les raccourcis habituels Copier-Coller fonctionnent aussi \u2013 Ctrl + C Ctrl + V (Windows) ou \u2318 C \u2318 V (Mac). Coller une valeur dans un intervalle plus grand remplira l\u2019intervalle avec plusieurs copies de la valeur. Expressions Conditionnelles. Si vous avez une formule comme $Birthday.year , vous constaterez que lorsque la colonne Birthday est vide, la formule affiche une erreur. Il est facile de l\u2019\u00e9viter en utilisant les expressions conditionnelles de Python : $Birthday.year if $Birthday else None La m\u00eame id\u00e9e peut aider dans d\u2019autres situations, par exemple pour \u00e9viter une ZeroDivisionError : $Total / $Count if $Count else 0","title":"Conseils Rapides"},{"location":"newsletters/2020-10/#quoi-de-neuf","text":"Impression. Vous pouvez maintenant facilement imprimer n\u2019importe quelle vue sur votre \u00e9cran, qu\u2019il s\u2019agisse d\u2019une table de donn\u00e9es, d\u2019une fiche, ou d\u2019une vue personnalis\u00e9e. Cliquez sur l\u2019ic\u00f4ne \u00e0 trois points en haut de la vue, et s\u00e9lectionnez \u201cImprimer la Vue\u201d : L\u2019impression fonctionne \u00e9galement pour des vues \u00e0 usage sp\u00e9cial telles que Factures ou \u00c9tiquettes d\u2019Envoi (voir ci-dessous).","title":"Quoi de Neuf"},{"location":"newsletters/2020-10/#beta-open-source","text":"Nous sommes ravis d\u2019annoncer que nous rendons Grist open-source ! La version open-source doit \u00eatre consid\u00e9r\u00e9e comme en B\u00eata pour le moment, mais les d\u00e9veloppeurs enthousiastes sont les bienvenus pour la d\u00e9couvrir : https://github.com/gristlabs/grist-core . Le service s\u00e9curis\u00e9 g\u00e9r\u00e9 que vous connaissez et aimez reste inchang\u00e9, et sera d\u2019autant plus fort gr\u00e2ce \u00e0 l\u2019engagement avec la communaut\u00e9 open-source. Placer notre code dans le domaine public apporte \u00e9galement une confiance accrue dans la qualit\u00e9 du code et dans la disponibilit\u00e9 \u00e0 long terme de Grist. En savoir plus sur Pourquoi Open Source .","title":"B\u00eata Open Source"},{"location":"newsletters/2020-10/#nouveaux-exemples","text":"Imprimer des \u00c9tiquettes d\u2019Envoi . Cette vue personnalis\u00e9e prend en charge les tailles d\u2019\u00e9tiquettes populaires et facilite la cr\u00e9ation d\u2019\u00e9tiquettes imprimables et leur disponibilit\u00e9 en un clic. C\u2019est un autre exemple de l\u2019extensibilit\u00e9 de Grist.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-10/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le Donner votre Avis lien en bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-11/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Novembre 2020 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Novembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Annonce Open Source # Nous sommes heureux d\u2019annoncer la version b\u00eata de la version open source de Grist ! En tant que feuille de calcul moderne et puissante, Grist s\u2019int\u00e8gre bien dans l\u2019\u00e9cosyst\u00e8me open source et est aussi conviviale pour les d\u00e9veloppeurs hackers que pour les utilisateurs hackers. Rejoignez la discussion sur HackerNews . Lisez l\u2019annonce . Cela int\u00e9ressera les utilisateurs techniquement avertis qui souhaitent \u00e9tendre Grist, ou ceux ayant des exigences inhabituelles. Pendant ce temps, le service que vous connaissez et aimez reste l\u2019option la mieux support\u00e9e et la plus rentable, et b\u00e9n\u00e9ficiera de la confiance accrue dans le code source de Grist. Conseils Rapides # Ajouter un Enregistrement. Certains des raccourcis les plus simples sont les plus utiles. Pour ajouter un enregistrement, appuyez sur Ctrl + = (Windows) ou \u2318 = (Mac). Appuyez sur Shift en m\u00eame temps pour ins\u00e9rer l\u2019enregistrement au-dessus du curseur plut\u00f4t qu\u2019en dessous. Cr\u00e9er un Identifiant Unique. Disons que vous souhaitez r\u00e9f\u00e9rencer des enregistrements dans une table, mais que vous n\u2019avez pas de colonne qui identifie chaque enregistrement de mani\u00e8re unique. Peut-\u00eatre avez-vous des personnes avec First_Name et Last_Name , ou des sessions avec Program_Name et Date . Pour utiliser ces tables comme cible d\u2019une colonne de R\u00e9f\u00e9rence, vous aurez besoin d\u2019un identifiant unique. Vous pouvez en cr\u00e9er un en utilisant une formule qui assemble les champs identifiant un enregistrement de mani\u00e8re unique. Par exemple, cr\u00e9ez une colonne Full_Name avec la formule $Last_Name + \", \" + $First_Name ou une colonne Session_Name avec la formule \"[%s] %s\" % ($Date, $Program_Name) Cette derni\u00e8re est une syntaxe Python pour formater des cha\u00eenes : chaque occurrence de %s dans la cha\u00eene entre guillemets est remplac\u00e9e par une valeur de la liste entre parenth\u00e8ses. Quoi de Neuf # Am\u00e9lioration des Pi\u00e8ces Jointes. La pr\u00e9visualisation des pi\u00e8ces jointes a \u00e9t\u00e9 grandement am\u00e9lior\u00e9e et prend en charge l\u2019affichage des fichiers PDF, vid\u00e9o et audio. Double-cliquez simplement sur une cellule avec des pi\u00e8ces jointes pour pr\u00e9visualiser son contenu : Voir les Diff\u00e9rences. Vous pouvez maintenant voir les diff\u00e9rences entre une copie d\u2019un document que vous faites en utilisant \u201cTravailler sur une copie\u201d et l\u2019original, ainsi que ce qui a chang\u00e9 depuis une sauvegarde dans l\u2019historique du document. Trouvez l\u2019\u00e9l\u00e9ment de menu \u201cComparer\u201d dans le menu Partager : Cette fonctionnalit\u00e9 est exp\u00e9rimentale pour le moment, mais est d\u00e9j\u00e0 assez utile : Cela prend en charge le flux de travail de tester des modifications , qui devrait \u00eatre familier aux utilisateurs de syst\u00e8mes de contr\u00f4le de version tels que Git. L\u2019un de ses avantages est de permettre aux utilisateurs en lecture seule de proposer des modifications, m\u00eame s\u2019ils ne peuvent pas modifier le document directement. Nouveaux Exemples # Chasse au Tr\u00e9sor : Encore mieux que d\u2019utiliser Grist pour le travail, c\u2019est d\u2019utiliser Grist pour le plaisir ! D\u00e9couvrez ce mod\u00e8le qui vous aide \u00e0 planifier une chasse au tr\u00e9sor sans perdre le fil. Conspirez avec des parents ou des amis en ligne pour cr\u00e9er une piste d\u2019indices, puis regardez et riez pendant que le reste de votre foyer se d\u00e9bat pour la suivre. Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour acqu\u00e9rir une compr\u00e9hension plus approfondie de la mani\u00e8re dont diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/11"},{"location":"newsletters/2020-11/#bulletin-de-novembre-2020","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Novembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Novembre 2020"},{"location":"newsletters/2020-11/#annonce-open-source","text":"Nous sommes heureux d\u2019annoncer la version b\u00eata de la version open source de Grist ! En tant que feuille de calcul moderne et puissante, Grist s\u2019int\u00e8gre bien dans l\u2019\u00e9cosyst\u00e8me open source et est aussi conviviale pour les d\u00e9veloppeurs hackers que pour les utilisateurs hackers. Rejoignez la discussion sur HackerNews . Lisez l\u2019annonce . Cela int\u00e9ressera les utilisateurs techniquement avertis qui souhaitent \u00e9tendre Grist, ou ceux ayant des exigences inhabituelles. Pendant ce temps, le service que vous connaissez et aimez reste l\u2019option la mieux support\u00e9e et la plus rentable, et b\u00e9n\u00e9ficiera de la confiance accrue dans le code source de Grist.","title":"Annonce Open Source"},{"location":"newsletters/2020-11/#conseils-rapides","text":"Ajouter un Enregistrement. Certains des raccourcis les plus simples sont les plus utiles. Pour ajouter un enregistrement, appuyez sur Ctrl + = (Windows) ou \u2318 = (Mac). Appuyez sur Shift en m\u00eame temps pour ins\u00e9rer l\u2019enregistrement au-dessus du curseur plut\u00f4t qu\u2019en dessous. Cr\u00e9er un Identifiant Unique. Disons que vous souhaitez r\u00e9f\u00e9rencer des enregistrements dans une table, mais que vous n\u2019avez pas de colonne qui identifie chaque enregistrement de mani\u00e8re unique. Peut-\u00eatre avez-vous des personnes avec First_Name et Last_Name , ou des sessions avec Program_Name et Date . Pour utiliser ces tables comme cible d\u2019une colonne de R\u00e9f\u00e9rence, vous aurez besoin d\u2019un identifiant unique. Vous pouvez en cr\u00e9er un en utilisant une formule qui assemble les champs identifiant un enregistrement de mani\u00e8re unique. Par exemple, cr\u00e9ez une colonne Full_Name avec la formule $Last_Name + \", \" + $First_Name ou une colonne Session_Name avec la formule \"[%s] %s\" % ($Date, $Program_Name) Cette derni\u00e8re est une syntaxe Python pour formater des cha\u00eenes : chaque occurrence de %s dans la cha\u00eene entre guillemets est remplac\u00e9e par une valeur de la liste entre parenth\u00e8ses.","title":"Conseils Rapides"},{"location":"newsletters/2020-11/#quoi-de-neuf","text":"Am\u00e9lioration des Pi\u00e8ces Jointes. La pr\u00e9visualisation des pi\u00e8ces jointes a \u00e9t\u00e9 grandement am\u00e9lior\u00e9e et prend en charge l\u2019affichage des fichiers PDF, vid\u00e9o et audio. Double-cliquez simplement sur une cellule avec des pi\u00e8ces jointes pour pr\u00e9visualiser son contenu : Voir les Diff\u00e9rences. Vous pouvez maintenant voir les diff\u00e9rences entre une copie d\u2019un document que vous faites en utilisant \u201cTravailler sur une copie\u201d et l\u2019original, ainsi que ce qui a chang\u00e9 depuis une sauvegarde dans l\u2019historique du document. Trouvez l\u2019\u00e9l\u00e9ment de menu \u201cComparer\u201d dans le menu Partager : Cette fonctionnalit\u00e9 est exp\u00e9rimentale pour le moment, mais est d\u00e9j\u00e0 assez utile : Cela prend en charge le flux de travail de tester des modifications , qui devrait \u00eatre familier aux utilisateurs de syst\u00e8mes de contr\u00f4le de version tels que Git. L\u2019un de ses avantages est de permettre aux utilisateurs en lecture seule de proposer des modifications, m\u00eame s\u2019ils ne peuvent pas modifier le document directement.","title":"Quoi de Neuf"},{"location":"newsletters/2020-11/#nouveaux-exemples","text":"Chasse au Tr\u00e9sor : Encore mieux que d\u2019utiliser Grist pour le travail, c\u2019est d\u2019utiliser Grist pour le plaisir ! D\u00e9couvrez ce mod\u00e8le qui vous aide \u00e0 planifier une chasse au tr\u00e9sor sans perdre le fil. Conspirez avec des parents ou des amis en ligne pour cr\u00e9er une piste d\u2019indices, puis regardez et riez pendant que le reste de votre foyer se d\u00e9bat pour la suivre.","title":"Nouveaux Exemples"},{"location":"newsletters/2020-11/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour acqu\u00e9rir une compr\u00e9hension plus approfondie de la mani\u00e8re dont diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2020-12/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de D\u00e9cembre 2020 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill D\u00e9cembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Quoi de Neuf # Vous voulez v\u00e9rifier comment votre document a r\u00e9cemment chang\u00e9 ? Il suffit d\u2019appuyer sur le bouton Historique du Document en bas \u00e0 gauche de votre document, de choisir un instantan\u00e9 \u00e0 droite, de cliquer sur le symbole \u00e0 trois points ( ) \u00e0 c\u00f4t\u00e9, et de s\u00e9lectionner l\u2019une des nouvelles options Comparer \u00e0 Pr\u00e9c\u00e9dent ou Comparer \u00e0 Actuel . \u00c0 Venir # Grist vous a apport\u00e9 beaucoup de nouvelles fonctionnalit\u00e9s en 2020, et il semble que 2021 sera une autre ann\u00e9e exceptionnelle. Une grande fonctionnalit\u00e9 que nous attendons avec impatience est le contr\u00f4le d\u2019acc\u00e8s granulaire, o\u00f9 vous pourrez d\u00e9terminer qui peut voir (ou \u00e9diter) quelles parties de votre document au niveau de la table, de la colonne et de la ligne. Plusieurs d\u2019entre vous l\u2019ont demand\u00e9 de diff\u00e9rentes mani\u00e8res, et nous sommes heureux d\u2019avoir une solution en main qui couvrira de nombreux cas d\u2019utilisation. Si vous \u00eates int\u00e9ress\u00e9 par un acc\u00e8s anticip\u00e9, faites-le nous savoir ! Nouveaux Exemples # Afficher une Carte . Ce widget personnalis\u00e9 affiche une liste de lieux sous forme de carte g\u00e9ographique. Donc, si vous faites une liste des endroits o\u00f9 vous voulez aller une fois que les voyages seront \u00e0 nouveau possibles, vous pouvez les disposer et commencer \u00e0 faire des plans\u2026 Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus profond\u00e9ment comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2020/12"},{"location":"newsletters/2020-12/#bulletin-de-decembre-2020","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill D\u00e9cembre 2020 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin de D\u00e9cembre 2020"},{"location":"newsletters/2020-12/#quoi-de-neuf","text":"Vous voulez v\u00e9rifier comment votre document a r\u00e9cemment chang\u00e9 ? Il suffit d\u2019appuyer sur le bouton Historique du Document en bas \u00e0 gauche de votre document, de choisir un instantan\u00e9 \u00e0 droite, de cliquer sur le symbole \u00e0 trois points ( ) \u00e0 c\u00f4t\u00e9, et de s\u00e9lectionner l\u2019une des nouvelles options Comparer \u00e0 Pr\u00e9c\u00e9dent ou Comparer \u00e0 Actuel .","title":"Quoi de Neuf"},{"location":"newsletters/2020-12/#a-venir","text":"Grist vous a apport\u00e9 beaucoup de nouvelles fonctionnalit\u00e9s en 2020, et il semble que 2021 sera une autre ann\u00e9e exceptionnelle. Une grande fonctionnalit\u00e9 que nous attendons avec impatience est le contr\u00f4le d\u2019acc\u00e8s granulaire, o\u00f9 vous pourrez d\u00e9terminer qui peut voir (ou \u00e9diter) quelles parties de votre document au niveau de la table, de la colonne et de la ligne. Plusieurs d\u2019entre vous l\u2019ont demand\u00e9 de diff\u00e9rentes mani\u00e8res, et nous sommes heureux d\u2019avoir une solution en main qui couvrira de nombreux cas d\u2019utilisation. Si vous \u00eates int\u00e9ress\u00e9 par un acc\u00e8s anticip\u00e9, faites-le nous savoir !","title":"\u00c0 Venir"},{"location":"newsletters/2020-12/#nouveaux-exemples","text":"Afficher une Carte . Ce widget personnalis\u00e9 affiche une liste de lieux sous forme de carte g\u00e9ographique. Donc, si vous faites une liste des endroits o\u00f9 vous voulez aller une fois que les voyages seront \u00e0 nouveau possibles, vous pouvez les disposer et commencer \u00e0 faire des plans\u2026","title":"Nouveaux Exemples"},{"location":"newsletters/2020-12/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus profond\u00e9ment comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2021-01/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Janvier 2021 # /* restaurer certains d\u00e9fauts mal surcharg\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; margin-bottom: -32px; display: inline-block; width: 80px; height: 128px; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } .center { text-align: center; } Grist pour le Moulin Janvier 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Conseils Rapides # Entrer des Formules. Pour entrer une formule dans Grist, appuyez simplement sur le signe \u00e9gal ( = ) sur le clavier. Pour modifier une formule existante, appuyez sur Entr\u00e9e . Contrairement \u00e0 une feuille de calcul typique, une formule Grist s\u2019applique \u00e0 toute la colonne, et vous pouvez modifier cette formule unique via n\u2019importe laquelle des cellules de la colonne. En savoir plus sur les formules . Utiliser le S\u00e9lecteur de Date. Si vous convertissez une colonne en type Date, vous pourrez entrer des dates en utilisant l\u2019interface de s\u00e9lection de date. Pour convertir une colonne, ouvrez le panneau \u201cColonne\u201d \u00e0 droite, et s\u00e9lectionnez \u201cDate\u201d sous Type de Colonne : Il existe \u00e9galement des options pour formater les dates ! Voir ici pour plus d\u2019informations . Nouvel Exemple # Dans notre article Gestion des T\u00e2ches , nous partageons un document similaire \u00e0 celui que nous utilisons en interne chez Grist Labs pour g\u00e9rer notre travail. Ce document simple fonctionne mieux pour nous que n\u2019importe quel logiciel personnalis\u00e9, gr\u00e2ce \u00e0 la combinaison de la liaison de donn\u00e9es, des menus d\u00e9roulants pour attribuer des t\u00e2ches, du copier-coller facile lorsque n\u00e9cessaire, et de la collaboration en direct. Et il fonctionne tout aussi bien dans un environnement de travail enti\u00e8rement \u00e0 distance, lorsque toutes nos r\u00e9unions se font par vid\u00e9o. Trouver un Consultant, Devenir un Consultant # Obtenez de l\u2019aide pour la construction. De nombreuses entreprises ont des donn\u00e9es complexes. N\u2019h\u00e9sitez pas \u00e0 nous contacter pour obtenir de l\u2019aide pour la construction de votre base de donn\u00e9es. Une bonne fa\u00e7on est de nous envoyer un email \u00e0 support@getgrist.com avec une description de ce que vous souhaitez pour votre base de donn\u00e9es (peut-\u00eatre m\u00eame esquisser quelques \u00e9crans sur papier et envoyer des photos). Ensuite, planifiez un appel . Souvent, cela suffit pour d\u00e9marrer et continuer par vous-m\u00eame. Pour des projets plus importants, ou des int\u00e9grations personnalis\u00e9es, nous pouvons recommander un consultant avec qui travailler. Aidez les autres ! \u00cates-vous un freelance ? Aimez-vous construire dans Grist et organiser des donn\u00e9es ? Nous serions ravis de vous soutenir et de vous ajouter \u00e0 notre liste de consultants Grist ind\u00e9pendants. Veuillez remplir ce formulaire d\u2019int\u00e9r\u00eat : s\u2019inscrire pour devenir consultant Grist . Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis en bas \u00e0 gauche de l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2021/01"},{"location":"newsletters/2021-01/#bulletin-de-janvier-2021","text":"/* restaurer certains d\u00e9fauts mal surcharg\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; margin-bottom: -32px; display: inline-block; width: 80px; height: 128px; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } .center { text-align: center; } Grist pour le Moulin Janvier 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Janvier 2021"},{"location":"newsletters/2021-01/#conseils-rapides","text":"Entrer des Formules. Pour entrer une formule dans Grist, appuyez simplement sur le signe \u00e9gal ( = ) sur le clavier. Pour modifier une formule existante, appuyez sur Entr\u00e9e . Contrairement \u00e0 une feuille de calcul typique, une formule Grist s\u2019applique \u00e0 toute la colonne, et vous pouvez modifier cette formule unique via n\u2019importe laquelle des cellules de la colonne. En savoir plus sur les formules . Utiliser le S\u00e9lecteur de Date. Si vous convertissez une colonne en type Date, vous pourrez entrer des dates en utilisant l\u2019interface de s\u00e9lection de date. Pour convertir une colonne, ouvrez le panneau \u201cColonne\u201d \u00e0 droite, et s\u00e9lectionnez \u201cDate\u201d sous Type de Colonne : Il existe \u00e9galement des options pour formater les dates ! Voir ici pour plus d\u2019informations .","title":"Conseils Rapides"},{"location":"newsletters/2021-01/#nouvel-exemple","text":"Dans notre article Gestion des T\u00e2ches , nous partageons un document similaire \u00e0 celui que nous utilisons en interne chez Grist Labs pour g\u00e9rer notre travail. Ce document simple fonctionne mieux pour nous que n\u2019importe quel logiciel personnalis\u00e9, gr\u00e2ce \u00e0 la combinaison de la liaison de donn\u00e9es, des menus d\u00e9roulants pour attribuer des t\u00e2ches, du copier-coller facile lorsque n\u00e9cessaire, et de la collaboration en direct. Et il fonctionne tout aussi bien dans un environnement de travail enti\u00e8rement \u00e0 distance, lorsque toutes nos r\u00e9unions se font par vid\u00e9o.","title":"Nouvel Exemple"},{"location":"newsletters/2021-01/#trouver-un-consultant-devenir-un-consultant","text":"Obtenez de l\u2019aide pour la construction. De nombreuses entreprises ont des donn\u00e9es complexes. N\u2019h\u00e9sitez pas \u00e0 nous contacter pour obtenir de l\u2019aide pour la construction de votre base de donn\u00e9es. Une bonne fa\u00e7on est de nous envoyer un email \u00e0 support@getgrist.com avec une description de ce que vous souhaitez pour votre base de donn\u00e9es (peut-\u00eatre m\u00eame esquisser quelques \u00e9crans sur papier et envoyer des photos). Ensuite, planifiez un appel . Souvent, cela suffit pour d\u00e9marrer et continuer par vous-m\u00eame. Pour des projets plus importants, ou des int\u00e9grations personnalis\u00e9es, nous pouvons recommander un consultant avec qui travailler. Aidez les autres ! \u00cates-vous un freelance ? Aimez-vous construire dans Grist et organiser des donn\u00e9es ? Nous serions ravis de vous soutenir et de vous ajouter \u00e0 notre liste de consultants Grist ind\u00e9pendants. Veuillez remplir ce formulaire d\u2019int\u00e9r\u00eat : s\u2019inscrire pour devenir consultant Grist .","title":"Trouver un Consultant, Devenir un Consultant"},{"location":"newsletters/2021-01/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour mieux comprendre comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis en bas \u00e0 gauche de l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2021-02/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de F\u00e9vrier 2021 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } .center { text-align: center; } Grist for the Mill F\u00e9vrier 2021 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Conseils Rapides # Totaux. Pour calculer les totaux d\u2019une colonne, les utilisateurs de tableurs ajoutent souvent une formule \u00e0 la derni\u00e8re ligne de leur table. Dans Grist, chaque ligne est un enregistrement de base de donn\u00e9es, y compris la derni\u00e8re ligne. Mais les totaux sont certainement disponibles ! Au lieu d\u2019ajouter une ligne pour les totaux, ajoutez une table de r\u00e9sum\u00e9 d\u2019une ligne. Cliquez sur le bouton \u201cAjouter Nouveau\u201d, et s\u00e9lectionnez \u201cAjouter Vue \u00e0 la Page\u201d. Dans la bo\u00eete de dialogue qui s\u2019ouvre, cliquez sur l\u2019ic\u00f4ne de sommation ( ) \u00e0 c\u00f4t\u00e9 de la table pour laquelle vous souhaitez obtenir des totaux : Cliquez sur \u201cAjouter \u00e0 la Page\u201d, et vous verrez un r\u00e9sum\u00e9 d\u2019une ligne de votre table. Utilisez la poign\u00e9e de d\u00e9placement juste \u00e0 gauche du titre pour le d\u00e9placer sous votre table (l\u00e0 o\u00f9 vous attendez normalement les totaux). Grist cr\u00e9e automatiquement des sommes de toutes les colonnes num\u00e9riques. Vous pouvez supprimer celles dont vous n\u2019avez pas besoin, en ajouter de nouvelles, ou modifier celles pour lesquelles vous avez besoin de quelque chose d\u2019autre qu\u2019une somme (peut-\u00eatre AVERAGE , MAX , ou un calcul Python enti\u00e8rement personnalis\u00e9). Lisez Tables de r\u00e9sum\u00e9 pour en savoir plus sur les tables de r\u00e9sum\u00e9 et leurs nombreuses utilisations. Partage en Temps R\u00e9el. M\u00eame avec le plan gratuit, vous pouvez partager un document et collaborer dessus. Tout changement que vous ou un autre \u00e9diteur effectuez appara\u00eetra imm\u00e9diatement sur l\u2019\u00e9cran de l\u2019autre personne. Pour partager un document, cliquez sur l\u2019ic\u00f4ne de partage ( ), et s\u00e9lectionnez \u201cG\u00e9rer les Utilisateurs\u201d. Dans la bo\u00eete de dialogue qui s\u2019ouvre, tapez l\u2019adresse e-mail de la personne \u00e0 inviter. Changez son r\u00f4le de Lecteur \u00e0 \u00c9diteur si vous souhaitez lui donner la permission de modifier. Ensuite, cliquez sur Confirmer. Votre collaborateur a maintenant acc\u00e8s \u00e0 votre document, et Grist lui enverra un e-mail avec un lien vers celui-ci. En savoir plus sur Partage . Quoi de Neuf # Le support mobile de Grist a beaucoup progress\u00e9 r\u00e9cemment, et nous sommes heureux de dire que vous pouvez maintenant utiliser Grist de mani\u00e8re assez confortable dans les navigateurs mobiles tels que Chrome, Safari et Firefox. Sur les petits \u00e9crans, vous pouvez trouver la liste des pages \u00e0 partir du bouton dans la barre inf\u00e9rieure : Pour les pages avec plusieurs vues, seule la vue active est d\u00e9velopp\u00e9e. Les autres vues sont r\u00e9duites jusqu\u2019\u00e0 ce que vous les touchiez pour les d\u00e9velopper : Pour modifier une cellule, il suffit de la toucher deux fois. Le support mobile est encore en cours de d\u00e9veloppement. Pour revenir \u00e0 la version de bureau sur un appareil mobile, ouvrez le menu de votre compte et s\u00e9lectionnez l\u2019option \u201cBasculer en Mode Mobile\u201d : Veuillez signaler tout probl\u00e8me et partager vos suggestions d\u2019am\u00e9liorations ! Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour approfondir votre compr\u00e9hension de la mani\u00e8re dont diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un e-mail \u00e0 support@getgrist.com .","title":"2021/02"},{"location":"newsletters/2021-02/#bulletin-de-fevrier-2021","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } .center { text-align: center; } Grist for the Mill F\u00e9vrier 2021 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin de F\u00e9vrier 2021"},{"location":"newsletters/2021-02/#conseils-rapides","text":"Totaux. Pour calculer les totaux d\u2019une colonne, les utilisateurs de tableurs ajoutent souvent une formule \u00e0 la derni\u00e8re ligne de leur table. Dans Grist, chaque ligne est un enregistrement de base de donn\u00e9es, y compris la derni\u00e8re ligne. Mais les totaux sont certainement disponibles ! Au lieu d\u2019ajouter une ligne pour les totaux, ajoutez une table de r\u00e9sum\u00e9 d\u2019une ligne. Cliquez sur le bouton \u201cAjouter Nouveau\u201d, et s\u00e9lectionnez \u201cAjouter Vue \u00e0 la Page\u201d. Dans la bo\u00eete de dialogue qui s\u2019ouvre, cliquez sur l\u2019ic\u00f4ne de sommation ( ) \u00e0 c\u00f4t\u00e9 de la table pour laquelle vous souhaitez obtenir des totaux : Cliquez sur \u201cAjouter \u00e0 la Page\u201d, et vous verrez un r\u00e9sum\u00e9 d\u2019une ligne de votre table. Utilisez la poign\u00e9e de d\u00e9placement juste \u00e0 gauche du titre pour le d\u00e9placer sous votre table (l\u00e0 o\u00f9 vous attendez normalement les totaux). Grist cr\u00e9e automatiquement des sommes de toutes les colonnes num\u00e9riques. Vous pouvez supprimer celles dont vous n\u2019avez pas besoin, en ajouter de nouvelles, ou modifier celles pour lesquelles vous avez besoin de quelque chose d\u2019autre qu\u2019une somme (peut-\u00eatre AVERAGE , MAX , ou un calcul Python enti\u00e8rement personnalis\u00e9). Lisez Tables de r\u00e9sum\u00e9 pour en savoir plus sur les tables de r\u00e9sum\u00e9 et leurs nombreuses utilisations. Partage en Temps R\u00e9el. M\u00eame avec le plan gratuit, vous pouvez partager un document et collaborer dessus. Tout changement que vous ou un autre \u00e9diteur effectuez appara\u00eetra imm\u00e9diatement sur l\u2019\u00e9cran de l\u2019autre personne. Pour partager un document, cliquez sur l\u2019ic\u00f4ne de partage ( ), et s\u00e9lectionnez \u201cG\u00e9rer les Utilisateurs\u201d. Dans la bo\u00eete de dialogue qui s\u2019ouvre, tapez l\u2019adresse e-mail de la personne \u00e0 inviter. Changez son r\u00f4le de Lecteur \u00e0 \u00c9diteur si vous souhaitez lui donner la permission de modifier. Ensuite, cliquez sur Confirmer. Votre collaborateur a maintenant acc\u00e8s \u00e0 votre document, et Grist lui enverra un e-mail avec un lien vers celui-ci. En savoir plus sur Partage .","title":"Conseils Rapides"},{"location":"newsletters/2021-02/#quoi-de-neuf","text":"Le support mobile de Grist a beaucoup progress\u00e9 r\u00e9cemment, et nous sommes heureux de dire que vous pouvez maintenant utiliser Grist de mani\u00e8re assez confortable dans les navigateurs mobiles tels que Chrome, Safari et Firefox. Sur les petits \u00e9crans, vous pouvez trouver la liste des pages \u00e0 partir du bouton dans la barre inf\u00e9rieure : Pour les pages avec plusieurs vues, seule la vue active est d\u00e9velopp\u00e9e. Les autres vues sont r\u00e9duites jusqu\u2019\u00e0 ce que vous les touchiez pour les d\u00e9velopper : Pour modifier une cellule, il suffit de la toucher deux fois. Le support mobile est encore en cours de d\u00e9veloppement. Pour revenir \u00e0 la version de bureau sur un appareil mobile, ouvrez le menu de votre compte et s\u00e9lectionnez l\u2019option \u201cBasculer en Mode Mobile\u201d : Veuillez signaler tout probl\u00e8me et partager vos suggestions d\u2019am\u00e9liorations !","title":"Quoi de Neuf"},{"location":"newsletters/2021-02/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie de Vid\u00e9os Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour approfondir votre compr\u00e9hension de la mani\u00e8re dont diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un Avis pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un e-mail \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2021-03/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mars 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mars 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Permissions avanc\u00e9es # Grist propose d\u00e9sormais des \u201cpermissions avanc\u00e9es\u201d pour un contr\u00f4le pr\u00e9cis de qui peut voir (ou modifier) quelles parties de votre document au niveau de la table, de la colonne et de la ligne. En d\u00e9cembre, nous avons invit\u00e9 ceux qui \u00e9taient int\u00e9ress\u00e9s par un acc\u00e8s anticip\u00e9 \u00e0 essayer cette fonctionnalit\u00e9. Nous avons apport\u00e9 de nombreuses am\u00e9liorations et sommes maintenant ravis d\u2019ouvrir cette fonctionnalit\u00e9 au public. Choses \u00e0 savoir sur les permissions avanc\u00e9es : Jusqu\u2019\u00e0 pr\u00e9sent, tous ceux avec qui vous partagiez un document voyaient le m\u00eame contenu. D\u00e9sormais, leurs vues peuvent \u00eatre filtr\u00e9es. Par exemple, une table ou une colonne peut \u00eatre visible uniquement pour certains utilisateurs. Ou certains utilisateurs peuvent ne voir que les lignes qui r\u00e9pondent \u00e0 une condition. Jusqu\u2019\u00e0 pr\u00e9sent, tous les \u00e9diteurs et propri\u00e9taires d\u2019un document pouvaient modifier n\u2019importe quel aspect de son contenu. D\u00e9sormais, les propri\u00e9taires de documents peuvent contr\u00f4ler ce que des \u00e9diteurs sp\u00e9cifiques peuvent modifier. Par exemple, une table ou une colonne peut \u00eatre verrouill\u00e9e pour certains \u00e9diteurs. Ou certains \u00e9diteurs peuvent uniquement mettre \u00e0 jour, ajouter ou supprimer des lignes qui r\u00e9pondent \u00e0 une condition. Si vous en avez besoin, les \u00e9diteurs peuvent \u00eatre organis\u00e9s en groupes ou \u00e9quipes en utilisant une table au sein du document lui-m\u00eame, et des permissions peuvent \u00eatre accord\u00e9es syst\u00e9matiquement. Vous pouvez cr\u00e9er des liens sp\u00e9ciaux pour donner un acc\u00e8s ad-hoc \u00e0 des parties du document, y compris des documents partag\u00e9s avec le public. Les permissions avanc\u00e9es sont marqu\u00e9es comme une fonctionnalit\u00e9 Beta, ce qui signifie que leur conception est susceptible d\u2019\u00e9voluer, et parfois cela n\u00e9cessitera des mises \u00e0 jour des documents qui les utilisent. Nous ne ferons pas de tels changements \u00e0 la l\u00e9g\u00e8re. Les permissions avanc\u00e9es de Grist vous donnent un grand pouvoir. Avec ce pouvoir vient une grande responsabilit\u00e9. Prenez le temps de lire notre documentation , explorer les exemples , et tester les r\u00e8gles que vous cr\u00e9ez . N\u2019h\u00e9sitez pas \u00e0 nous consulter \u00e9galement \u00e0 support@getgrist.com . Nous serons ravis de vous aider. Nouvel Exemple # Les permissions avanc\u00e9es vous permettent de contr\u00f4ler comment un document partag\u00e9 est utilis\u00e9, et de maintenir une s\u00e9paration des r\u00f4les et des responsabilit\u00e9s. Dans notre exemple Liste de Prospects , nous supposons qu\u2019un entrepreneur utilise Grist comme un suivi ad-hoc des prospects pour les ventes et les conseillers potentiels, et montrons comment ils peuvent utiliser les permissions avanc\u00e9es pour fa\u00e7onner la collaboration. Conseils Rapides # Couleur de Cellule . Vous pouvez ajouter une touche de couleur \u00e0 une colonne en utilisant l\u2019option Couleur de Cellule pour les Colonnes (dans les tables) ou les Champs (dans les fiches). La couleur s\u2019appliquera de mani\u00e8re coh\u00e9rente dans toutes les vues o\u00f9 les cellules de cette colonne apparaissent. Requ\u00eates SQL . Les documents Grist sont \u00e9galement t\u00e9l\u00e9chargeables en tant que bases de donn\u00e9es SQL, au format SQLite. Si vous t\u00e9l\u00e9chargez votre document (via le bouton ), vous pouvez le consulter en utilisant l\u2019outil standard sqlite3 (disponible sur le site SQLite ) ou depuis presque n\u2019importe quel langage ou outil de base de donn\u00e9es. Vos tables et colonnes dans Grist appara\u00eetront exactement comme des tables et colonnes SQLite. Voici une requ\u00eate contre le document d\u2019exemple Liste de Prospects : Vous n\u2019aurez peut-\u00eatre pas besoin de faire cela souvent, mais quand vous en aurez besoin, c\u2019est tr\u00e8s pratique. Nous avons r\u00e9cemment am\u00e9lior\u00e9 l\u2019ad\u00e9quation entre les types de colonnes SQLite et les types de colonnes Grist, donc si un importateur de base de donn\u00e9es ne parvient pas \u00e0 reconna\u00eetre une colonne, essayez de recr\u00e9er la colonne ou de la convertir en un type plus pr\u00e9cis (par exemple, Integer, Text, Numeric, Date, DateTime, etc.). Apprendre Grist # Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un retour pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"2021/03"},{"location":"newsletters/2021-03/#bulletin-de-mars-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mars 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mars 2021"},{"location":"newsletters/2021-03/#permissions-avancees","text":"Grist propose d\u00e9sormais des \u201cpermissions avanc\u00e9es\u201d pour un contr\u00f4le pr\u00e9cis de qui peut voir (ou modifier) quelles parties de votre document au niveau de la table, de la colonne et de la ligne. En d\u00e9cembre, nous avons invit\u00e9 ceux qui \u00e9taient int\u00e9ress\u00e9s par un acc\u00e8s anticip\u00e9 \u00e0 essayer cette fonctionnalit\u00e9. Nous avons apport\u00e9 de nombreuses am\u00e9liorations et sommes maintenant ravis d\u2019ouvrir cette fonctionnalit\u00e9 au public. Choses \u00e0 savoir sur les permissions avanc\u00e9es : Jusqu\u2019\u00e0 pr\u00e9sent, tous ceux avec qui vous partagiez un document voyaient le m\u00eame contenu. D\u00e9sormais, leurs vues peuvent \u00eatre filtr\u00e9es. Par exemple, une table ou une colonne peut \u00eatre visible uniquement pour certains utilisateurs. Ou certains utilisateurs peuvent ne voir que les lignes qui r\u00e9pondent \u00e0 une condition. Jusqu\u2019\u00e0 pr\u00e9sent, tous les \u00e9diteurs et propri\u00e9taires d\u2019un document pouvaient modifier n\u2019importe quel aspect de son contenu. D\u00e9sormais, les propri\u00e9taires de documents peuvent contr\u00f4ler ce que des \u00e9diteurs sp\u00e9cifiques peuvent modifier. Par exemple, une table ou une colonne peut \u00eatre verrouill\u00e9e pour certains \u00e9diteurs. Ou certains \u00e9diteurs peuvent uniquement mettre \u00e0 jour, ajouter ou supprimer des lignes qui r\u00e9pondent \u00e0 une condition. Si vous en avez besoin, les \u00e9diteurs peuvent \u00eatre organis\u00e9s en groupes ou \u00e9quipes en utilisant une table au sein du document lui-m\u00eame, et des permissions peuvent \u00eatre accord\u00e9es syst\u00e9matiquement. Vous pouvez cr\u00e9er des liens sp\u00e9ciaux pour donner un acc\u00e8s ad-hoc \u00e0 des parties du document, y compris des documents partag\u00e9s avec le public. Les permissions avanc\u00e9es sont marqu\u00e9es comme une fonctionnalit\u00e9 Beta, ce qui signifie que leur conception est susceptible d\u2019\u00e9voluer, et parfois cela n\u00e9cessitera des mises \u00e0 jour des documents qui les utilisent. Nous ne ferons pas de tels changements \u00e0 la l\u00e9g\u00e8re. Les permissions avanc\u00e9es de Grist vous donnent un grand pouvoir. Avec ce pouvoir vient une grande responsabilit\u00e9. Prenez le temps de lire notre documentation , explorer les exemples , et tester les r\u00e8gles que vous cr\u00e9ez . N\u2019h\u00e9sitez pas \u00e0 nous consulter \u00e9galement \u00e0 support@getgrist.com . Nous serons ravis de vous aider.","title":"Permissions avanc\u00e9es"},{"location":"newsletters/2021-03/#nouvel-exemple","text":"Les permissions avanc\u00e9es vous permettent de contr\u00f4ler comment un document partag\u00e9 est utilis\u00e9, et de maintenir une s\u00e9paration des r\u00f4les et des responsabilit\u00e9s. Dans notre exemple Liste de Prospects , nous supposons qu\u2019un entrepreneur utilise Grist comme un suivi ad-hoc des prospects pour les ventes et les conseillers potentiels, et montrons comment ils peuvent utiliser les permissions avanc\u00e9es pour fa\u00e7onner la collaboration.","title":"Nouvel Exemple"},{"location":"newsletters/2021-03/#conseils-rapides","text":"Couleur de Cellule . Vous pouvez ajouter une touche de couleur \u00e0 une colonne en utilisant l\u2019option Couleur de Cellule pour les Colonnes (dans les tables) ou les Champs (dans les fiches). La couleur s\u2019appliquera de mani\u00e8re coh\u00e9rente dans toutes les vues o\u00f9 les cellules de cette colonne apparaissent. Requ\u00eates SQL . Les documents Grist sont \u00e9galement t\u00e9l\u00e9chargeables en tant que bases de donn\u00e9es SQL, au format SQLite. Si vous t\u00e9l\u00e9chargez votre document (via le bouton ), vous pouvez le consulter en utilisant l\u2019outil standard sqlite3 (disponible sur le site SQLite ) ou depuis presque n\u2019importe quel langage ou outil de base de donn\u00e9es. Vos tables et colonnes dans Grist appara\u00eetront exactement comme des tables et colonnes SQLite. Voici une requ\u00eate contre le document d\u2019exemple Liste de Prospects : Vous n\u2019aurez peut-\u00eatre pas besoin de faire cela souvent, mais quand vous en aurez besoin, c\u2019est tr\u00e8s pratique. Nous avons r\u00e9cemment am\u00e9lior\u00e9 l\u2019ad\u00e9quation entre les types de colonnes SQLite et les types de colonnes Grist, donc si un importateur de base de donn\u00e9es ne parvient pas \u00e0 reconna\u00eetre une colonne, essayez de recr\u00e9er la colonne ou de la convertir en un type plus pr\u00e9cis (par exemple, Integer, Text, Numeric, Date, DateTime, etc.).","title":"Conseils Rapides"},{"location":"newsletters/2021-03/#apprendre-grist","text":"Commencez rapidement avec les concepts de base de Grist en regardant cette playlist de quelques tr\u00e8s courtes vid\u00e9os d\u2019introduction : S\u00e9rie Vid\u00e9o Grist . Chacun de nos Exemples & Mod\u00e8les en vedette a un tutoriel associ\u00e9 qui montre \u00e9tape par \u00e9tape comment le construire \u00e0 partir de z\u00e9ro. Lisez-en un pour comprendre plus en profondeur comment diverses fonctionnalit\u00e9s interagissent. Visitez notre Centre d\u2019Aide pour trouver tout ce qui pr\u00e9c\u00e8de, ainsi que la documentation compl\u00e8te du produit. Des questions ou des suggestions ? Cliquez sur le lien Donner un retour pr\u00e8s du bas \u00e0 gauche dans l\u2019application Grist, ou envoyez simplement un email \u00e0 support@getgrist.com .","title":"Apprendre Grist"},{"location":"newsletters/2021-04/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Avril 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Avril 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Comprendre le Partage de Liens # Le mois dernier, nous avons lanc\u00e9 des contr\u00f4les d\u2019acc\u00e8s granulaires qui permettent de limiter qui peut voir ou modifier quelles parties d\u2019un document, jusqu\u2019\u00e0 des colonnes et des lignes individuelles. Ce m\u00eame niveau de contr\u00f4le peut \u00eatre d\u00e9fini pour les documents partag\u00e9s via des liens avec des tiers qui n\u2019ont pas de compte Grist ou qui ne font pas partie de votre organisation. Par exemple, vous pouvez vouloir partager l\u2019historique des achats avec un client, permettre au personnel de voir uniquement leurs horaires de travail, ou montrer \u00e0 un client l\u2019\u00e9tat de son projet. Dans Grist, les \u201ccl\u00e9s de lien\u201d sont des param\u00e8tres URL qui, combin\u00e9s avec les r\u00e8gles de contr\u00f4le d\u2019acc\u00e8s, d\u00e9termineront quelles donn\u00e9es un destinataire de lien est autoris\u00e9 \u00e0 voir. Cr\u00e9er des Cl\u00e9s de Lien Uniques en 4 \u00c9tapes # La meilleure fa\u00e7on d\u2019apprendre est de pratiquer. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et \u00e9diter pour approfondir votre compr\u00e9hension du partage de liens. Dans notre exemple, vous \u00eates un tuteur priv\u00e9 qui utilise Grist pour suivre les heures, les paiements et les donn\u00e9es des clients. Vous souhaitez partager l\u2019historique des sessions et des paiements avec les parents via un lien qui ne montre que les donn\u00e9es de leur famille. Suivez notre guide en 4 \u00e9tapes pour apprendre \u00e0 partager des donn\u00e9es limit\u00e9es via des liens . Le tuteur priv\u00e9 peut voir toutes les donn\u00e9es, mais un parent ne peut voir que les donn\u00e9es de sa famille. Apprendre Comment Quoi de Neuf # Vous pouvez maintenant cr\u00e9er des boutons de filtre dans une barre au-dessus de toute vue dans Grist. La barre de filtre peut \u00eatre activ\u00e9e ou d\u00e9sactiv\u00e9e, et \u00e9dit\u00e9e pour n\u2019inclure que les boutons pour les colonnes que vous filtrez couramment. La barre peut \u00e9galement \u00eatre enregistr\u00e9e afin que tous ceux qui ont acc\u00e8s au document puissent plus facilement filtrer les donn\u00e9es. Conseils Rapides # Geler les identifiants uniques . Lorsque vous utilisez la fonction UUID() de Grist, vous pouvez vouloir geler les valeurs attribu\u00e9es \u00e0 chaque enregistrement. Si vous ne le faites pas, l\u2019identifiant unique sera g\u00e9n\u00e9r\u00e9 \u00e0 nouveau lorsque vous rouvrirez le document. Pour geler les identifiants uniques, convertissez la colonne en colonne de donn\u00e9es, et d\u00e9finissez la formule par d\u00e9faut pour les nouveaux enregistrements sur UUID() afin que les nouvelles lignes se voient \u00e9galement attribuer un identifiant unique. Cr\u00e9er des liens dans les cellules . Pour cr\u00e9er une colonne de liens dans Grist, d\u00e9finissez le type de colonne sur Texte, et cliquez sur le bouton \u201cHyperLink\u201d sous Format de Cellule. Cl\u00e9s de Lien et Acc\u00e8s Public. Si vous g\u00e9n\u00e9rez des liens uniques vers des vues limit\u00e9es de donn\u00e9es, assurez-vous d\u2019avoir activ\u00e9 l\u2019Acc\u00e8s Public sous \u201cG\u00e9rer les Utilisateurs\u201d pour permettre le partage de liens. Les spectateurs qui acc\u00e8dent \u00e0 votre document via des liens seront toujours limit\u00e9s conform\u00e9ment \u00e0 vos permissions avanc\u00e9es. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/04"},{"location":"newsletters/2021-04/#bulletin-davril-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Avril 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’Avril 2021"},{"location":"newsletters/2021-04/#comprendre-le-partage-de-liens","text":"Le mois dernier, nous avons lanc\u00e9 des contr\u00f4les d\u2019acc\u00e8s granulaires qui permettent de limiter qui peut voir ou modifier quelles parties d\u2019un document, jusqu\u2019\u00e0 des colonnes et des lignes individuelles. Ce m\u00eame niveau de contr\u00f4le peut \u00eatre d\u00e9fini pour les documents partag\u00e9s via des liens avec des tiers qui n\u2019ont pas de compte Grist ou qui ne font pas partie de votre organisation. Par exemple, vous pouvez vouloir partager l\u2019historique des achats avec un client, permettre au personnel de voir uniquement leurs horaires de travail, ou montrer \u00e0 un client l\u2019\u00e9tat de son projet. Dans Grist, les \u201ccl\u00e9s de lien\u201d sont des param\u00e8tres URL qui, combin\u00e9s avec les r\u00e8gles de contr\u00f4le d\u2019acc\u00e8s, d\u00e9termineront quelles donn\u00e9es un destinataire de lien est autoris\u00e9 \u00e0 voir.","title":"Comprendre le Partage de Liens"},{"location":"newsletters/2021-04/#creer-des-cles-de-lien-uniques-en-4-etapes","text":"La meilleure fa\u00e7on d\u2019apprendre est de pratiquer. Nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et \u00e9diter pour approfondir votre compr\u00e9hension du partage de liens. Dans notre exemple, vous \u00eates un tuteur priv\u00e9 qui utilise Grist pour suivre les heures, les paiements et les donn\u00e9es des clients. Vous souhaitez partager l\u2019historique des sessions et des paiements avec les parents via un lien qui ne montre que les donn\u00e9es de leur famille. Suivez notre guide en 4 \u00e9tapes pour apprendre \u00e0 partager des donn\u00e9es limit\u00e9es via des liens . Le tuteur priv\u00e9 peut voir toutes les donn\u00e9es, mais un parent ne peut voir que les donn\u00e9es de sa famille. Apprendre Comment","title":"Cr\u00e9er des Cl\u00e9s de Lien Uniques en 4 \u00c9tapes"},{"location":"newsletters/2021-04/#quoi-de-neuf","text":"Vous pouvez maintenant cr\u00e9er des boutons de filtre dans une barre au-dessus de toute vue dans Grist. La barre de filtre peut \u00eatre activ\u00e9e ou d\u00e9sactiv\u00e9e, et \u00e9dit\u00e9e pour n\u2019inclure que les boutons pour les colonnes que vous filtrez couramment. La barre peut \u00e9galement \u00eatre enregistr\u00e9e afin que tous ceux qui ont acc\u00e8s au document puissent plus facilement filtrer les donn\u00e9es.","title":"Quoi de Neuf"},{"location":"newsletters/2021-04/#conseils-rapides","text":"Geler les identifiants uniques . Lorsque vous utilisez la fonction UUID() de Grist, vous pouvez vouloir geler les valeurs attribu\u00e9es \u00e0 chaque enregistrement. Si vous ne le faites pas, l\u2019identifiant unique sera g\u00e9n\u00e9r\u00e9 \u00e0 nouveau lorsque vous rouvrirez le document. Pour geler les identifiants uniques, convertissez la colonne en colonne de donn\u00e9es, et d\u00e9finissez la formule par d\u00e9faut pour les nouveaux enregistrements sur UUID() afin que les nouvelles lignes se voient \u00e9galement attribuer un identifiant unique. Cr\u00e9er des liens dans les cellules . Pour cr\u00e9er une colonne de liens dans Grist, d\u00e9finissez le type de colonne sur Texte, et cliquez sur le bouton \u201cHyperLink\u201d sous Format de Cellule. Cl\u00e9s de Lien et Acc\u00e8s Public. Si vous g\u00e9n\u00e9rez des liens uniques vers des vues limit\u00e9es de donn\u00e9es, assurez-vous d\u2019avoir activ\u00e9 l\u2019Acc\u00e8s Public sous \u201cG\u00e9rer les Utilisateurs\u201d pour permettre le partage de liens. Les spectateurs qui acc\u00e8dent \u00e0 votre document via des liens seront toujours limit\u00e9s conform\u00e9ment \u00e0 vos permissions avanc\u00e9es. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"Conseils Rapides"},{"location":"newsletters/2021-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mai 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Organiser les Donn\u00e9es avec des Colonnes de R\u00e9f\u00e9rence # Les colonnes de r\u00e9f\u00e9rence sont au c\u0153ur de ce que Grist fait de mieux : faciliter la mise en place d\u2019une base de donn\u00e9es relationnelle et cr\u00e9er des mises en page tr\u00e8s productives. Si vous n\u2019\u00eates pas familier avec les bases de donn\u00e9es, comprendre les colonnes de r\u00e9f\u00e9rence peut sembler un peu compliqu\u00e9. C\u2019est pourquoi nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et \u00e9diter pour approfondir votre compr\u00e9hension des colonnes de r\u00e9f\u00e9rence. Dans notre exemple, vous \u00eates un candidat \u00e0 un emploi qui utilise Grist pour suivre l\u2019\u00e9tat de vos candidatures dans plusieurs entreprises. Vous souhaitez un tableau de bord simple qui vous permette de voir facilement l\u2019\u00e9tat de vos candidatures en un coup d\u2019\u0153il, et d\u2019ajouter de nouveaux emplois, entretiens et autres jalons. Suivez notre guide en 3 \u00e9tapes pour apprendre \u00e0 utiliser les colonnes de r\u00e9f\u00e9rence . Quoi de Neuf # Listes de Choix # Vous pouvez d\u00e9sormais s\u00e9lectionner plusieurs options dans une colonne Liste de Choix. Dans la capture d\u2019\u00e9cran ci-dessous, plusieurs expositions canines sont s\u00e9lectionn\u00e9es \u00e0 partir d\u2019une liste de choix, au lieu d\u2019une seule. Am\u00e9liorations de la Recherche # Lors de la recherche dans Grist, la recherche reste d\u00e9sormais sur la m\u00eame page par d\u00e9faut. Si vous souhaitez rechercher sur toutes les pages, il suffit de cocher la case. Hyperliens dans le M\u00eame Document # Auparavant, tous les hyperliens s\u2019ouvraient dans un nouvel onglet. D\u00e9sormais, les hyperliens qui pointent vers une autre partie du m\u00eame document s\u2019ouvriront dans le m\u00eame onglet. Cela facilite le saut vers les parties pertinentes des documents volumineux. Conseils Rapides # Ajouter un nouvel enregistrement \u00e0 partir de la liste d\u00e9roulante de la colonne de r\u00e9f\u00e9rence. Vous pouvez ajouter une nouvelle valeur \u00e0 la liste d\u00e9roulante dans une colonne de r\u00e9f\u00e9rence sans passer \u00e0 la table sous-jacente. Il suffit de taper la valeur que vous souhaitez ajouter et de s\u00e9lectionner la valeur + dans la liste d\u00e9roulante. Grist ajoutera automatiquement un nouvel enregistrement contenant cette valeur \u00e0 la table sous-jacente et ins\u00e9rera la r\u00e9f\u00e9rence appropri\u00e9e. Modifier la Mise en Page de la Vue Fiche. Lorsque vous convertissez une table en vue fiche, vous pouvez vouloir d\u00e9placer les champs pour un format plus intuitif. Cliquez sur le menu ... au-dessus de la vue que vous souhaitez modifier, puis s\u00e9lectionnez MODIFIER LA MISE EN PAGE. Cliquez et faites glisser les champs pour les repositionner, puis cliquez sur ENREGISTRER LA MISE EN PAGE. Th\u00e8mes de la Vue Liste de Fiches. La vue liste de fiches aligne les fiches verticalement. Grist propose trois th\u00e8mes int\u00e9gr\u00e9s parmi lesquels choisir, selon vos besoins et la mani\u00e8re dont vous souhaitez visualiser les donn\u00e9es. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/05"},{"location":"newsletters/2021-05/#bulletin-de-mai-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Mai 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mai 2021"},{"location":"newsletters/2021-05/#organiser-les-donnees-avec-des-colonnes-de-reference","text":"Les colonnes de r\u00e9f\u00e9rence sont au c\u0153ur de ce que Grist fait de mieux : faciliter la mise en place d\u2019une base de donn\u00e9es relationnelle et cr\u00e9er des mises en page tr\u00e8s productives. Si vous n\u2019\u00eates pas familier avec les bases de donn\u00e9es, comprendre les colonnes de r\u00e9f\u00e9rence peut sembler un peu compliqu\u00e9. C\u2019est pourquoi nous avons cr\u00e9\u00e9 un mod\u00e8le simple que vous pouvez copier et \u00e9diter pour approfondir votre compr\u00e9hension des colonnes de r\u00e9f\u00e9rence. Dans notre exemple, vous \u00eates un candidat \u00e0 un emploi qui utilise Grist pour suivre l\u2019\u00e9tat de vos candidatures dans plusieurs entreprises. Vous souhaitez un tableau de bord simple qui vous permette de voir facilement l\u2019\u00e9tat de vos candidatures en un coup d\u2019\u0153il, et d\u2019ajouter de nouveaux emplois, entretiens et autres jalons. Suivez notre guide en 3 \u00e9tapes pour apprendre \u00e0 utiliser les colonnes de r\u00e9f\u00e9rence .","title":"Organiser les Donn\u00e9es avec des Colonnes de R\u00e9f\u00e9rence"},{"location":"newsletters/2021-05/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-05/#listes-de-choix","text":"Vous pouvez d\u00e9sormais s\u00e9lectionner plusieurs options dans une colonne Liste de Choix. Dans la capture d\u2019\u00e9cran ci-dessous, plusieurs expositions canines sont s\u00e9lectionn\u00e9es \u00e0 partir d\u2019une liste de choix, au lieu d\u2019une seule.","title":"Listes de Choix"},{"location":"newsletters/2021-05/#ameliorations-de-la-recherche","text":"Lors de la recherche dans Grist, la recherche reste d\u00e9sormais sur la m\u00eame page par d\u00e9faut. Si vous souhaitez rechercher sur toutes les pages, il suffit de cocher la case.","title":"Am\u00e9liorations de la Recherche"},{"location":"newsletters/2021-05/#hyperliens-dans-le-meme-document","text":"Auparavant, tous les hyperliens s\u2019ouvraient dans un nouvel onglet. D\u00e9sormais, les hyperliens qui pointent vers une autre partie du m\u00eame document s\u2019ouvriront dans le m\u00eame onglet. Cela facilite le saut vers les parties pertinentes des documents volumineux.","title":"Hyperliens dans le M\u00eame Document"},{"location":"newsletters/2021-05/#conseils-rapides","text":"Ajouter un nouvel enregistrement \u00e0 partir de la liste d\u00e9roulante de la colonne de r\u00e9f\u00e9rence. Vous pouvez ajouter une nouvelle valeur \u00e0 la liste d\u00e9roulante dans une colonne de r\u00e9f\u00e9rence sans passer \u00e0 la table sous-jacente. Il suffit de taper la valeur que vous souhaitez ajouter et de s\u00e9lectionner la valeur + dans la liste d\u00e9roulante. Grist ajoutera automatiquement un nouvel enregistrement contenant cette valeur \u00e0 la table sous-jacente et ins\u00e9rera la r\u00e9f\u00e9rence appropri\u00e9e. Modifier la Mise en Page de la Vue Fiche. Lorsque vous convertissez une table en vue fiche, vous pouvez vouloir d\u00e9placer les champs pour un format plus intuitif. Cliquez sur le menu ... au-dessus de la vue que vous souhaitez modifier, puis s\u00e9lectionnez MODIFIER LA MISE EN PAGE. Cliquez et faites glisser les champs pour les repositionner, puis cliquez sur ENREGISTRER LA MISE EN PAGE. Th\u00e8mes de la Vue Liste de Fiches. La vue liste de fiches aligne les fiches verticalement. Grist propose trois th\u00e8mes int\u00e9gr\u00e9s parmi lesquels choisir, selon vos besoins et la mani\u00e8re dont vous souhaitez visualiser les donn\u00e9es. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"Conseils Rapides"},{"location":"newsletters/2021-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2021 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juin 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Geler des Colonnes # Vous pouvez d\u00e9sormais geler des colonnes dans Grist ! Ma\u00eetrisez ces feuilles de calcul larges et visualisez vos donn\u00e9es \u00e0 votre mani\u00e8re. \u00c9diteur en Lecture Seule # Les membres de l\u2019\u00e9quipe avec un acc\u00e8s en lecture seule peuvent d\u00e9sormais ouvrir un \u00e9diteur de cellule pour lire plus facilement de longs textes, acc\u00e9der aux pi\u00e8ces jointes ou jeter un coup d\u2019\u0153il aux formules. Ils seront toujours emp\u00each\u00e9s de modifier la cellule, comme indiqu\u00e9 par l\u2019ic\u00f4ne de verrou gris. \u00c9diteur de cellule en lecture seule verrouill\u00e9 pour les modifications v. \u00e9diteur de cellule non restreint Conseils Rapides # Dupliquer le Document v Travailler sur une Copie. Lors de la modification de la structure d\u2019un document, il est bon de Travailler sur une copie . Cela ne sauvegarde pas automatiquement un duplicata de votre document. Cela cr\u00e9e une copie de travail non sauvegard\u00e9e o\u00f9 vous pouvez effectuer des modifications, puis choisir de remplacer le document actuel, copier vos nouvelles modifications dans un nouveau document ou abandonner vos modifications. Dupliquer le Document cr\u00e9e un nouveau document dupliqu\u00e9, et vous pouvez choisir de copier ou non les donn\u00e9es ou de conserver uniquement la structure du document. Exporter des Sauvegardes. Grist prend p\u00e9riodiquement des instantan\u00e9s de vos documents. Vous pouvez sauvegarder n\u2019importe quelle version de votre document (instantan\u00e9s actuels ou historiques) pour sauvegarder vos donn\u00e9es. Pour sauvegarder des instantan\u00e9s historiques, cliquez sur Historique du Document puis Instantan\u00e9s . S\u00e9lectionnez le menu de n\u2019importe quel instantan\u00e9 puis cliquez sur Ouvrir l'Instantan\u00e9 . Cliquez sur l\u2019ic\u00f4ne de partage pour ouvrir un menu \u00e0 partir duquel vous pouvez t\u00e9l\u00e9charger l\u2019int\u00e9gralit\u00e9 du document en tant que fichier Grist . Combiner des champs de texte avec des formules. Il peut arriver que vous ayez du texte dans plusieurs colonnes que vous souhaitez afficher dans une seule colonne. Par exemple, une table peut avoir des colonnes de pr\u00e9nom et de nom de famille. Vous pouvez facilement cr\u00e9er une colonne de nom complet avec la formule \"{}, {}\".format($Last_Name, $First_Name) . La partie entre guillemets est une cha\u00eene de format : chaque ensemble d\u2019accolades ( {} ) dans celle-ci est remplac\u00e9 par la valeur suivante des parenth\u00e8ses apr\u00e8s format . Dans ce cas, le nom complet serait affich\u00e9 comme Benson, Carla . Approfondir # Analyser les Donn\u00e9es avec des Tables R\u00e9sum\u00e9es et des Formules # Les tables r\u00e9sum\u00e9es et les formules sont des outils essentiels pour obtenir des informations exploitables \u00e0 partir de vos donn\u00e9es. Elles permettent de regrouper les enregistrements en cat\u00e9gories sp\u00e9cifiques, puis de calculer des sommes en utilisant ces groupes d\u2019enregistrements. Grist facilite la cr\u00e9ation de tables r\u00e9sum\u00e9es et le travail avec le champ $group dans les formules r\u00e9sum\u00e9es. Nous avons cr\u00e9\u00e9 un tutoriel vid\u00e9o qui vous aide \u00e0 ma\u00eetriser deux concepts cl\u00e9s : les tables r\u00e9sum\u00e9es et les formules r\u00e9sum\u00e9es. Le tutoriel vous guide dans la cr\u00e9ation de deux pages r\u00e9sum\u00e9es dans un mod\u00e8le avanc\u00e9 de suivi des feuilles de temps. APPRENDRE : Tables R\u00e9sum\u00e9es Nouveau Mod\u00e8le # Suivi Avanc\u00e9 des Feuilles de Temps # Le suivi des feuilles de temps facilite le suivi des feuilles de temps des contractuels sur plusieurs mois et d\u00e9partements. Il dispose d\u2019un tableau de bord o\u00f9 les contractuels peuvent soumettre leurs heures directement dans Grist et voir uniquement leurs donn\u00e9es historiques de feuilles de temps. Le service de paie de l\u2019entreprise peut voir les feuilles de temps de tout le monde, dans tous les comptes, sur tous les mois, et avoir acc\u00e8s \u00e0 des pages r\u00e9sum\u00e9es fournissant des donn\u00e9es utiles sur les d\u00e9penses. Ils peuvent \u00e9galement d\u00e9finir des permissions pour autoriser ou interdire les modifications des feuilles de temps certains mois. Le tutoriel des tables r\u00e9sum\u00e9es commence par une version inachev\u00e9e du mod\u00e8le et vous guide dans la cr\u00e9ation de deux nouvelles pages. Si vous souhaitez utiliser le mod\u00e8le complet, allez \u00e0 la solution du tutoriel. Notez qu\u2019il y a des permissions avanc\u00e9es en place pour le mod\u00e8le complet qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. Voir le Mod\u00e8le Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/06"},{"location":"newsletters/2021-06/#bulletin-de-juin-2021","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Juin 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juin 2021"},{"location":"newsletters/2021-06/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-06/#geler-des-colonnes","text":"Vous pouvez d\u00e9sormais geler des colonnes dans Grist ! Ma\u00eetrisez ces feuilles de calcul larges et visualisez vos donn\u00e9es \u00e0 votre mani\u00e8re.","title":"Geler des Colonnes"},{"location":"newsletters/2021-06/#editeur-en-lecture-seule","text":"Les membres de l\u2019\u00e9quipe avec un acc\u00e8s en lecture seule peuvent d\u00e9sormais ouvrir un \u00e9diteur de cellule pour lire plus facilement de longs textes, acc\u00e9der aux pi\u00e8ces jointes ou jeter un coup d\u2019\u0153il aux formules. Ils seront toujours emp\u00each\u00e9s de modifier la cellule, comme indiqu\u00e9 par l\u2019ic\u00f4ne de verrou gris. \u00c9diteur de cellule en lecture seule verrouill\u00e9 pour les modifications v. \u00e9diteur de cellule non restreint","title":"\u00c9diteur en Lecture Seule"},{"location":"newsletters/2021-06/#conseils-rapides","text":"Dupliquer le Document v Travailler sur une Copie. Lors de la modification de la structure d\u2019un document, il est bon de Travailler sur une copie . Cela ne sauvegarde pas automatiquement un duplicata de votre document. Cela cr\u00e9e une copie de travail non sauvegard\u00e9e o\u00f9 vous pouvez effectuer des modifications, puis choisir de remplacer le document actuel, copier vos nouvelles modifications dans un nouveau document ou abandonner vos modifications. Dupliquer le Document cr\u00e9e un nouveau document dupliqu\u00e9, et vous pouvez choisir de copier ou non les donn\u00e9es ou de conserver uniquement la structure du document. Exporter des Sauvegardes. Grist prend p\u00e9riodiquement des instantan\u00e9s de vos documents. Vous pouvez sauvegarder n\u2019importe quelle version de votre document (instantan\u00e9s actuels ou historiques) pour sauvegarder vos donn\u00e9es. Pour sauvegarder des instantan\u00e9s historiques, cliquez sur Historique du Document puis Instantan\u00e9s . S\u00e9lectionnez le menu de n\u2019importe quel instantan\u00e9 puis cliquez sur Ouvrir l'Instantan\u00e9 . Cliquez sur l\u2019ic\u00f4ne de partage pour ouvrir un menu \u00e0 partir duquel vous pouvez t\u00e9l\u00e9charger l\u2019int\u00e9gralit\u00e9 du document en tant que fichier Grist . Combiner des champs de texte avec des formules. Il peut arriver que vous ayez du texte dans plusieurs colonnes que vous souhaitez afficher dans une seule colonne. Par exemple, une table peut avoir des colonnes de pr\u00e9nom et de nom de famille. Vous pouvez facilement cr\u00e9er une colonne de nom complet avec la formule \"{}, {}\".format($Last_Name, $First_Name) . La partie entre guillemets est une cha\u00eene de format : chaque ensemble d\u2019accolades ( {} ) dans celle-ci est remplac\u00e9 par la valeur suivante des parenth\u00e8ses apr\u00e8s format . Dans ce cas, le nom complet serait affich\u00e9 comme Benson, Carla .","title":"Conseils Rapides"},{"location":"newsletters/2021-06/#approfondir","text":"","title":"Approfondir"},{"location":"newsletters/2021-06/#analyser-les-donnees-avec-des-tables-resumees-et-des-formules","text":"Les tables r\u00e9sum\u00e9es et les formules sont des outils essentiels pour obtenir des informations exploitables \u00e0 partir de vos donn\u00e9es. Elles permettent de regrouper les enregistrements en cat\u00e9gories sp\u00e9cifiques, puis de calculer des sommes en utilisant ces groupes d\u2019enregistrements. Grist facilite la cr\u00e9ation de tables r\u00e9sum\u00e9es et le travail avec le champ $group dans les formules r\u00e9sum\u00e9es. Nous avons cr\u00e9\u00e9 un tutoriel vid\u00e9o qui vous aide \u00e0 ma\u00eetriser deux concepts cl\u00e9s : les tables r\u00e9sum\u00e9es et les formules r\u00e9sum\u00e9es. Le tutoriel vous guide dans la cr\u00e9ation de deux pages r\u00e9sum\u00e9es dans un mod\u00e8le avanc\u00e9 de suivi des feuilles de temps. APPRENDRE : Tables R\u00e9sum\u00e9es","title":"Analyser les Donn\u00e9es avec des Tables R\u00e9sum\u00e9es et des Formules"},{"location":"newsletters/2021-06/#nouveau-modele","text":"","title":"Nouveau Mod\u00e8le"},{"location":"newsletters/2021-06/#suivi-avance-des-feuilles-de-temps","text":"Le suivi des feuilles de temps facilite le suivi des feuilles de temps des contractuels sur plusieurs mois et d\u00e9partements. Il dispose d\u2019un tableau de bord o\u00f9 les contractuels peuvent soumettre leurs heures directement dans Grist et voir uniquement leurs donn\u00e9es historiques de feuilles de temps. Le service de paie de l\u2019entreprise peut voir les feuilles de temps de tout le monde, dans tous les comptes, sur tous les mois, et avoir acc\u00e8s \u00e0 des pages r\u00e9sum\u00e9es fournissant des donn\u00e9es utiles sur les d\u00e9penses. Ils peuvent \u00e9galement d\u00e9finir des permissions pour autoriser ou interdire les modifications des feuilles de temps certains mois. Le tutoriel des tables r\u00e9sum\u00e9es commence par une version inachev\u00e9e du mod\u00e8le et vous guide dans la cr\u00e9ation de deux nouvelles pages. Si vous souhaitez utiliser le mod\u00e8le complet, allez \u00e0 la solution du tutoriel. Notez qu\u2019il y a des permissions avanc\u00e9es en place pour le mod\u00e8le complet qui vous emp\u00eacheront de voir certaines pages et la plupart des donn\u00e9es. Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. Voir le Mod\u00e8le Faites une copie pour devenir le propri\u00e9taire du document et voir toutes les donn\u00e9es et pages. Besoin d\u2019aide ? Visitez notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"Suivi Avanc\u00e9 des Feuilles de Temps"},{"location":"newsletters/2021-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Juillet 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Couleurs ! # Faites ressortir votre document Grist avec des couleurs ! Les options dans les colonnes Choix et Liste de choix peuvent d\u00e9sormais \u00eatre cod\u00e9es par couleur. En plus de rendre vos documents plus attrayants et amusants, les choix de couleurs facilitent la lecture et la compr\u00e9hension rapide des informations. En savoir plus. Int\u00e9gration avec Google Sheets # Vous pouvez d\u00e9sormais importer ou exporter facilement vos donn\u00e9es vers et depuis Grist et Google Drive. En savoir plus. Horodatages Automatiques et Stamps Utilisateur # Vous voulez savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour et par qui ? Il est maintenant possible de cr\u00e9er des colonnes qui estampillent le nom d\u2019un utilisateur ou l\u2019heure \u00e0 un enregistrement lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. En savoir plus sur les horodatages et les stamps d\u2019auteur . Nous avons \u00e9galement cr\u00e9\u00e9 un tutoriel vid\u00e9o \u00e9tape par \u00e9tape qui vous guide pour cr\u00e9er des colonnes d\u2019horodatage et de stamp utilisateur. Nouvelles Ressources # Pr\u00e9sentation du Forum Communautaire Grist # Nous avons lanc\u00e9 un Forum Communautaire Grist o\u00f9 vous pouvez rapidement rechercher des solutions, partager des id\u00e9es de projets, fournir des commentaires, sugg\u00e9rer des fonctionnalit\u00e9s et rester inform\u00e9 des derni\u00e8res fonctionnalit\u00e9s et annonces de Grist. Visiter le Forum Visitez notre Feuille de Route Produit # Vous voulez savoir sur quoi nous travaillons ? Notre feuille de route produit est d\u00e9sormais publique ! Si vous avez un compte Github, nous vous encourageons \u00e0 laisser des commentaires sur les \u00e9l\u00e9ments de la feuille de route. Nous aimons avoir de vos nouvelles. Visiter la Feuille de Route Conseils Rapides # Meilleures pratiques pour les colonnes de r\u00e9f\u00e9rence. Lors de la cr\u00e9ation d\u2019une colonne de r\u00e9f\u00e9rence, il est recommand\u00e9 de choisir une colonne d\u2019affichage qui est un identifiant unique pour l\u2019enregistrement. Par exemple, pour les enregistrements de personnes, cela pourrait \u00eatre le nom complet ou l\u2019email. Pour afficher d\u2019autres donn\u00e9es, telles que le d\u00e9partement ou l\u2019anniversaire, utilisez la formule $[Reference Column Id].[Referenced Record\u2019s Field] , (par exemple $Person.Department ). Vous pouvez consulter le fonctionnement de cette formule dans notre guide des colonnes de r\u00e9f\u00e9rence . \u00c9tiqueter les hyperliens avec du texte. Dans les colonnes d\u2019hyperliens, vous pouvez \u00e9tiqueter un lien avec du texte en ajoutant une \u00e9tiquette avant l\u2019url : [\u00e9tiquette du lien] url . Les crochets ne sont pas n\u00e9cessaires. Utiliser la recherche pour trouver une fiche. Si vous avez une vue fiche sur une page et que vous souhaitez rapidement trouver la bonne fiche, vous pouvez utiliser la barre de recherche sur la page pour rapidement afficher la fiche pertinente. Approfondir # Cr\u00e9er Facilement des Horodatages Automatiques et Stamps Utilisateur # Il est parfois utile de savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour ou cr\u00e9\u00e9 pour la derni\u00e8re fois, et par qui. Grist rend simple la cr\u00e9ation de colonnes qui estampillent l\u2019heure ou le nom d\u2019un utilisateur \u00e0 un enregistrement lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. Nous avons cr\u00e9\u00e9 un tutoriel vid\u00e9o qui vous guide pour cr\u00e9er des colonnes d\u2019horodatage et de stamp utilisateur en 3 \u00e9tapes faciles. APPRENDRE : Horodatages/Stamps Utilisateur Nouveau Mod\u00e8le # Suivi des Demandes de Subventions et des Financements # Ce mod\u00e8le aide les ONG \u00e0 suivre les demandes de subventions qui ont \u00e9t\u00e9 soumises aux fondations pour obtenir des financements. Le mod\u00e8le inclut \u00e9galement une vue d\u2019ensemble des financements qui montre les financements en cours et les financements attribu\u00e9s, r\u00e9partis par programme de l\u2019ONG. Ouvrir le Suivi des Subventions Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/07"},{"location":"newsletters/2021-07/#bulletin-de-juillet-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist pour le Moulin Juillet 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juillet 2021"},{"location":"newsletters/2021-07/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-07/#couleurs","text":"Faites ressortir votre document Grist avec des couleurs ! Les options dans les colonnes Choix et Liste de choix peuvent d\u00e9sormais \u00eatre cod\u00e9es par couleur. En plus de rendre vos documents plus attrayants et amusants, les choix de couleurs facilitent la lecture et la compr\u00e9hension rapide des informations. En savoir plus.","title":"Couleurs !"},{"location":"newsletters/2021-07/#integration-avec-google-sheets","text":"Vous pouvez d\u00e9sormais importer ou exporter facilement vos donn\u00e9es vers et depuis Grist et Google Drive. En savoir plus.","title":"Int\u00e9gration avec Google Sheets"},{"location":"newsletters/2021-07/#horodatages-automatiques-et-stamps-utilisateur","text":"Vous voulez savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour et par qui ? Il est maintenant possible de cr\u00e9er des colonnes qui estampillent le nom d\u2019un utilisateur ou l\u2019heure \u00e0 un enregistrement lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. En savoir plus sur les horodatages et les stamps d\u2019auteur . Nous avons \u00e9galement cr\u00e9\u00e9 un tutoriel vid\u00e9o \u00e9tape par \u00e9tape qui vous guide pour cr\u00e9er des colonnes d\u2019horodatage et de stamp utilisateur.","title":"Horodatages Automatiques et Stamps Utilisateur"},{"location":"newsletters/2021-07/#nouvelles-ressources","text":"","title":"Nouvelles Ressources"},{"location":"newsletters/2021-07/#presentation-du-forum-communautaire-grist","text":"Nous avons lanc\u00e9 un Forum Communautaire Grist o\u00f9 vous pouvez rapidement rechercher des solutions, partager des id\u00e9es de projets, fournir des commentaires, sugg\u00e9rer des fonctionnalit\u00e9s et rester inform\u00e9 des derni\u00e8res fonctionnalit\u00e9s et annonces de Grist. Visiter le Forum","title":"Pr\u00e9sentation du Forum Communautaire Grist"},{"location":"newsletters/2021-07/#visitez-notre-feuille-de-route-produit","text":"Vous voulez savoir sur quoi nous travaillons ? Notre feuille de route produit est d\u00e9sormais publique ! Si vous avez un compte Github, nous vous encourageons \u00e0 laisser des commentaires sur les \u00e9l\u00e9ments de la feuille de route. Nous aimons avoir de vos nouvelles. Visiter la Feuille de Route","title":"Visitez notre Feuille de Route Produit"},{"location":"newsletters/2021-07/#conseils-rapides","text":"Meilleures pratiques pour les colonnes de r\u00e9f\u00e9rence. Lors de la cr\u00e9ation d\u2019une colonne de r\u00e9f\u00e9rence, il est recommand\u00e9 de choisir une colonne d\u2019affichage qui est un identifiant unique pour l\u2019enregistrement. Par exemple, pour les enregistrements de personnes, cela pourrait \u00eatre le nom complet ou l\u2019email. Pour afficher d\u2019autres donn\u00e9es, telles que le d\u00e9partement ou l\u2019anniversaire, utilisez la formule $[Reference Column Id].[Referenced Record\u2019s Field] , (par exemple $Person.Department ). Vous pouvez consulter le fonctionnement de cette formule dans notre guide des colonnes de r\u00e9f\u00e9rence . \u00c9tiqueter les hyperliens avec du texte. Dans les colonnes d\u2019hyperliens, vous pouvez \u00e9tiqueter un lien avec du texte en ajoutant une \u00e9tiquette avant l\u2019url : [\u00e9tiquette du lien] url . Les crochets ne sont pas n\u00e9cessaires. Utiliser la recherche pour trouver une fiche. Si vous avez une vue fiche sur une page et que vous souhaitez rapidement trouver la bonne fiche, vous pouvez utiliser la barre de recherche sur la page pour rapidement afficher la fiche pertinente.","title":"Conseils Rapides"},{"location":"newsletters/2021-07/#approfondir","text":"","title":"Approfondir"},{"location":"newsletters/2021-07/#creer-facilement-des-horodatages-automatiques-et-stamps-utilisateur","text":"Il est parfois utile de savoir quand un enregistrement a \u00e9t\u00e9 mis \u00e0 jour ou cr\u00e9\u00e9 pour la derni\u00e8re fois, et par qui. Grist rend simple la cr\u00e9ation de colonnes qui estampillent l\u2019heure ou le nom d\u2019un utilisateur \u00e0 un enregistrement lorsqu\u2019il est mis \u00e0 jour ou cr\u00e9\u00e9. Nous avons cr\u00e9\u00e9 un tutoriel vid\u00e9o qui vous guide pour cr\u00e9er des colonnes d\u2019horodatage et de stamp utilisateur en 3 \u00e9tapes faciles. APPRENDRE : Horodatages/Stamps Utilisateur","title":"Cr\u00e9er Facilement des Horodatages Automatiques et Stamps Utilisateur"},{"location":"newsletters/2021-07/#nouveau-modele","text":"","title":"Nouveau Mod\u00e8le"},{"location":"newsletters/2021-07/#suivi-des-demandes-de-subventions-et-des-financements","text":"Ce mod\u00e8le aide les ONG \u00e0 suivre les demandes de subventions qui ont \u00e9t\u00e9 soumises aux fondations pour obtenir des financements. Le mod\u00e8le inclut \u00e9galement une vue d\u2019ensemble des financements qui montre les financements en cours et les financements attribu\u00e9s, r\u00e9partis par programme de l\u2019ONG. Ouvrir le Suivi des Subventions Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , ou contactez-nous \u00e0 support@getgrist.com .","title":"Suivi des Demandes de Subventions et des Financements"},{"location":"newsletters/2021-08/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019ao\u00fbt 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Ao\u00fbt 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Listes de r\u00e9f\u00e9rences # Il est d\u00e9sormais possible de relier un enregistrement dans une table \u00e0 plusieurs enregistrements dans une autre table. Choisissez le type de colonne Liste de r\u00e9f\u00e9rences pour \u00e9tablir une relation un \u00e0 plusieurs dans votre document. En savoir plus. Int\u00e9gration de Grist # Vous avez des donn\u00e9es \u00e0 partager sur votre site web ? Vous pouvez d\u00e9sormais int\u00e9grer des pages Grist en tant que donn\u00e9es en lecture seule qui se mettent \u00e0 jour en direct. Apprenez comment. Int\u00e9gration Pabbly # Vous pouvez d\u00e9sormais importer des donn\u00e9es dans Grist avec Pabbly ! En savoir plus sur le site de Pabbly. API bas\u00e9e sur les lignes # L\u2019API Grist est d\u00e9sormais plus pratique avec des points de terminaison bas\u00e9s sur les lignes (\u00e9galement appel\u00e9s bas\u00e9s sur les enregistrements). En savoir plus. Modifier le sous-domaine # Vous vous \u00eates inscrit \u00e0 un plan d\u2019\u00e9quipe, mais vous avez chang\u00e9 d\u2019avis sur le nom de sous-domaine \u00e0 utiliser pour votre site ? Vous pouvez d\u00e9sormais modifier votre sous-domaine depuis votre page de facturation. Cliquez sur l\u2019ic\u00f4ne de votre profil en haut \u00e0 droite pour acc\u00e9der \u00e0 votre page de facturation. Support des formules # Besoin d\u2019aide avec les formules ? Il y a une cat\u00e9gorie d\u00e9di\u00e9e dans notre forum communautaire o\u00f9 vous pouvez trouver des formules pour des cas d\u2019utilisation courants et demander de l\u2019aide. Visitez le Forum Grande biblioth\u00e8que de mod\u00e8les # Trouver le bon mod\u00e8le pour votre projet est devenu plus facile. Cliquez sur Exemples & Mod\u00e8les (dans le panneau de gauche de votre espace personnel ou espace d\u2019\u00e9quipe) pour trouver une biblioth\u00e8que plus large de mod\u00e8les \u00e0 choisir. VOIR TOUS LES MOD\u00c8LES Conseils rapides # Comptes multiples. Vous pouvez vous connecter avec plusieurs emails dans Grist pour passer facilement d\u2019un compte \u00e0 l\u2019autre. Cliquez sur l\u2019ic\u00f4ne de votre profil en haut \u00e0 droite, puis s\u00e9lectionnez \u201cAjouter un compte\u201d. Trouver des doublons. Trouvez des doublons en utilisant la formule : \"DUP\" if len(Products.lookupRecords(ProductCode=$ProductCode)) > 1 else \"\" Pour plus d\u2019aide, suivez ce guide. Colorier les valeurs conditionnelles. Utilisez une formule et des entr\u00e9es de colonne de choix color\u00e9es pour signaler les enregistrements qui n\u00e9cessitent une attention particuli\u00e8re. Suivez notre guide rapide. Nouveaux mod\u00e8les # Inventaire de restaurant # Suivez l\u2019inventaire de votre restaurant et les informations sur les fournisseurs, et cr\u00e9ez des bons de commande directement dans Grist. ALLER AU MOD\u00c8LE Commandes personnalis\u00e9es de restaurant # Cr\u00e9ez des commandes personnalis\u00e9es, calculez les co\u00fbts des ingr\u00e9dients et g\u00e9n\u00e9rez une nomenclature, le tout dans un seul document. ALLER AU MOD\u00c8LE Constructeur de produits personnalis\u00e9s # Cr\u00e9ez des produits personnalis\u00e9s et des contrats de production qui additionnent les co\u00fbts des composants et ajoutent votre marge b\u00e9n\u00e9ficiaire au co\u00fbt final. ALLER AU MOD\u00c8LE Vous avez des questions, des commentaires ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/08"},{"location":"newsletters/2021-08/#bulletin-daout-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Ao\u00fbt 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’ao\u00fbt 2021"},{"location":"newsletters/2021-08/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2021-08/#listes-de-references","text":"Il est d\u00e9sormais possible de relier un enregistrement dans une table \u00e0 plusieurs enregistrements dans une autre table. Choisissez le type de colonne Liste de r\u00e9f\u00e9rences pour \u00e9tablir une relation un \u00e0 plusieurs dans votre document. En savoir plus.","title":"Listes de r\u00e9f\u00e9rences"},{"location":"newsletters/2021-08/#integration-de-grist","text":"Vous avez des donn\u00e9es \u00e0 partager sur votre site web ? Vous pouvez d\u00e9sormais int\u00e9grer des pages Grist en tant que donn\u00e9es en lecture seule qui se mettent \u00e0 jour en direct. Apprenez comment.","title":"Int\u00e9gration de Grist"},{"location":"newsletters/2021-08/#integration-pabbly","text":"Vous pouvez d\u00e9sormais importer des donn\u00e9es dans Grist avec Pabbly ! En savoir plus sur le site de Pabbly.","title":"Int\u00e9gration Pabbly"},{"location":"newsletters/2021-08/#api-basee-sur-les-lignes","text":"L\u2019API Grist est d\u00e9sormais plus pratique avec des points de terminaison bas\u00e9s sur les lignes (\u00e9galement appel\u00e9s bas\u00e9s sur les enregistrements). En savoir plus.","title":"API bas\u00e9e sur les lignes"},{"location":"newsletters/2021-08/#modifier-le-sous-domaine","text":"Vous vous \u00eates inscrit \u00e0 un plan d\u2019\u00e9quipe, mais vous avez chang\u00e9 d\u2019avis sur le nom de sous-domaine \u00e0 utiliser pour votre site ? Vous pouvez d\u00e9sormais modifier votre sous-domaine depuis votre page de facturation. Cliquez sur l\u2019ic\u00f4ne de votre profil en haut \u00e0 droite pour acc\u00e9der \u00e0 votre page de facturation.","title":"Modifier le sous-domaine"},{"location":"newsletters/2021-08/#support-des-formules","text":"Besoin d\u2019aide avec les formules ? Il y a une cat\u00e9gorie d\u00e9di\u00e9e dans notre forum communautaire o\u00f9 vous pouvez trouver des formules pour des cas d\u2019utilisation courants et demander de l\u2019aide. Visitez le Forum","title":"Support des formules"},{"location":"newsletters/2021-08/#grande-bibliotheque-de-modeles","text":"Trouver le bon mod\u00e8le pour votre projet est devenu plus facile. Cliquez sur Exemples & Mod\u00e8les (dans le panneau de gauche de votre espace personnel ou espace d\u2019\u00e9quipe) pour trouver une biblioth\u00e8que plus large de mod\u00e8les \u00e0 choisir. VOIR TOUS LES MOD\u00c8LES","title":"Grande biblioth\u00e8que de mod\u00e8les"},{"location":"newsletters/2021-08/#conseils-rapides","text":"Comptes multiples. Vous pouvez vous connecter avec plusieurs emails dans Grist pour passer facilement d\u2019un compte \u00e0 l\u2019autre. Cliquez sur l\u2019ic\u00f4ne de votre profil en haut \u00e0 droite, puis s\u00e9lectionnez \u201cAjouter un compte\u201d. Trouver des doublons. Trouvez des doublons en utilisant la formule : \"DUP\" if len(Products.lookupRecords(ProductCode=$ProductCode)) > 1 else \"\" Pour plus d\u2019aide, suivez ce guide. Colorier les valeurs conditionnelles. Utilisez une formule et des entr\u00e9es de colonne de choix color\u00e9es pour signaler les enregistrements qui n\u00e9cessitent une attention particuli\u00e8re. Suivez notre guide rapide.","title":"Conseils rapides"},{"location":"newsletters/2021-08/#nouveaux-modeles","text":"","title":"Nouveaux mod\u00e8les"},{"location":"newsletters/2021-08/#inventaire-de-restaurant","text":"Suivez l\u2019inventaire de votre restaurant et les informations sur les fournisseurs, et cr\u00e9ez des bons de commande directement dans Grist. ALLER AU MOD\u00c8LE","title":"Inventaire de restaurant"},{"location":"newsletters/2021-08/#commandes-personnalisees-de-restaurant","text":"Cr\u00e9ez des commandes personnalis\u00e9es, calculez les co\u00fbts des ingr\u00e9dients et g\u00e9n\u00e9rez une nomenclature, le tout dans un seul document. ALLER AU MOD\u00c8LE","title":"Commandes personnalis\u00e9es de restaurant"},{"location":"newsletters/2021-08/#constructeur-de-produits-personnalises","text":"Cr\u00e9ez des produits personnalis\u00e9s et des contrats de production qui additionnent les co\u00fbts des composants et ajoutent votre marge b\u00e9n\u00e9ficiaire au co\u00fbt final. ALLER AU MOD\u00c8LE Vous avez des questions, des commentaires ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Constructeur de produits personnalis\u00e9s"},{"location":"newsletters/2021-09/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Septembre 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Septembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Importations Incr\u00e9mentales Am\u00e9lior\u00e9es # Vous pouvez maintenant s\u00e9lectionner une cl\u00e9 de fusion lors de l\u2019importation de plus de donn\u00e9es dans une table existante. Integrately et KonnectzIT # En plus de Zapier et Pabbly Actions, vous pouvez d\u00e9sormais cr\u00e9er des int\u00e9grations avec Integrately et KonnectzIT. \ud83d\ude80 En savoir plus sur le site web d\u2019Integrately et le site web de KonnectzIT . Devises Internationales # Lors du formatage des colonnes num\u00e9riques et enti\u00e8res, vous pouvez d\u00e9sormais choisir parmi une liste de devises mondiales. Vous pouvez d\u00e9finir la devise par d\u00e9faut dans les param\u00e8tres du document. En savoir plus sur les param\u00e8tres du document. Apprendre Grist # Construire avec Grist Webinar # Rejoignez les experts de Grist lors d\u2019un webinaire en direct pour apprendre les astuces qui vous aideront \u00e0 devenir un cr\u00e9ateur Grist expert. \ud83d\udcaa Le webinaire sera en direct le lundi 18 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis (New York). S\u2019INSCRIRE AU WEBINAIRE \u00cates-vous\u2026curieux de Python? # Il existe de nombreuses ressources en ligne pour apprendre Python. L\u2019un des d\u00e9veloppeurs de Grist, Alex Hall, a un projet parall\u00e8le pour apprendre Python appel\u00e9 futurecoder. Nous le recommandons! ALLER \u00c0 FUTURECODER Points Forts de la Communaut\u00e9 # Extraction des mois et trimestres \u00e0 partir des dates. Si vous avez une colonne de dates, vous pouvez r\u00e9sumer ces dates par mois ou par trimestre. Int\u00e9gration de Google Maps en lecture seule. Apprenez \u00e0 int\u00e9grer une carte Google dans un document Grist. Cr\u00e9ation de champs obligatoires. Il est possible de v\u00e9rifier si les champs obligatoires ont \u00e9t\u00e9 remplis, ou non. Aidez-nous \u00e0 faire conna\u00eetre Grist? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci! \ud83d\ude4f G2 Capterra TrustRadius Nouveaux Mod\u00e8les # Gestion de Location # Suivez les locataires, les baux, les revenus et les d\u00e9penses li\u00e9s aux propri\u00e9t\u00e9s locatives en un seul endroit. ALLER AU MOD\u00c8LE Financement d\u2019Entreprise # Planifiez et r\u00e9sumez facilement la structure de financement d\u2019une entreprise. ALLER AU MOD\u00c8LE Grand Livre G\u00e9n\u00e9ral # Construisez un grand livre g\u00e9n\u00e9ral des revenus et des d\u00e9penses li\u00e9s \u00e0 plusieurs entreprises, et r\u00e9sumez les donn\u00e9es dans des tableaux de bord utiles. ALLER AU MOD\u00c8LE Classement de Ligue Sportive # Suivez les matchs d\u2019une ligue sportive et g\u00e9n\u00e9rez automatiquement le classement de la saison. ALLER AU MOD\u00c8LE Suivi de Combat D&D # Ma\u00eetres de donjon, utilisez Grist pour planifier facilement les rencontres, calculer les chiffres cl\u00e9s et suivre les combats. (Lanceur de d\u00e9s inclus.) ALLER AU MOD\u00c8LE Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/09"},{"location":"newsletters/2021-09/#bulletin-de-septembre-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Septembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Septembre 2021"},{"location":"newsletters/2021-09/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-09/#importations-incrementales-ameliorees","text":"Vous pouvez maintenant s\u00e9lectionner une cl\u00e9 de fusion lors de l\u2019importation de plus de donn\u00e9es dans une table existante.","title":"Importations Incr\u00e9mentales Am\u00e9lior\u00e9es"},{"location":"newsletters/2021-09/#integrately-et-konnectzit","text":"En plus de Zapier et Pabbly Actions, vous pouvez d\u00e9sormais cr\u00e9er des int\u00e9grations avec Integrately et KonnectzIT. \ud83d\ude80 En savoir plus sur le site web d\u2019Integrately et le site web de KonnectzIT .","title":"Integrately et KonnectzIT"},{"location":"newsletters/2021-09/#devises-internationales","text":"Lors du formatage des colonnes num\u00e9riques et enti\u00e8res, vous pouvez d\u00e9sormais choisir parmi une liste de devises mondiales. Vous pouvez d\u00e9finir la devise par d\u00e9faut dans les param\u00e8tres du document. En savoir plus sur les param\u00e8tres du document.","title":"Devises Internationales"},{"location":"newsletters/2021-09/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2021-09/#construire-avec-grist-webinar","text":"Rejoignez les experts de Grist lors d\u2019un webinaire en direct pour apprendre les astuces qui vous aideront \u00e0 devenir un cr\u00e9ateur Grist expert. \ud83d\udcaa Le webinaire sera en direct le lundi 18 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis (New York). S\u2019INSCRIRE AU WEBINAIRE","title":"Construire avec Grist Webinar"},{"location":"newsletters/2021-09/#etes-vouscurieux-de-python","text":"Il existe de nombreuses ressources en ligne pour apprendre Python. L\u2019un des d\u00e9veloppeurs de Grist, Alex Hall, a un projet parall\u00e8le pour apprendre Python appel\u00e9 futurecoder. Nous le recommandons! ALLER \u00c0 FUTURECODER","title":"\u00cates-vous…curieux de Python?"},{"location":"newsletters/2021-09/#points-forts-de-la-communaute","text":"Extraction des mois et trimestres \u00e0 partir des dates. Si vous avez une colonne de dates, vous pouvez r\u00e9sumer ces dates par mois ou par trimestre. Int\u00e9gration de Google Maps en lecture seule. Apprenez \u00e0 int\u00e9grer une carte Google dans un document Grist. Cr\u00e9ation de champs obligatoires. Il est possible de v\u00e9rifier si les champs obligatoires ont \u00e9t\u00e9 remplis, ou non.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2021-09/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci! \ud83d\ude4f G2 Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist?"},{"location":"newsletters/2021-09/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2021-09/#gestion-de-location","text":"Suivez les locataires, les baux, les revenus et les d\u00e9penses li\u00e9s aux propri\u00e9t\u00e9s locatives en un seul endroit. ALLER AU MOD\u00c8LE","title":"Gestion de Location"},{"location":"newsletters/2021-09/#financement-dentreprise","text":"Planifiez et r\u00e9sumez facilement la structure de financement d\u2019une entreprise. ALLER AU MOD\u00c8LE","title":"Financement d’Entreprise"},{"location":"newsletters/2021-09/#grand-livre-general","text":"Construisez un grand livre g\u00e9n\u00e9ral des revenus et des d\u00e9penses li\u00e9s \u00e0 plusieurs entreprises, et r\u00e9sumez les donn\u00e9es dans des tableaux de bord utiles. ALLER AU MOD\u00c8LE","title":"Grand Livre G\u00e9n\u00e9ral"},{"location":"newsletters/2021-09/#classement-de-ligue-sportive","text":"Suivez les matchs d\u2019une ligue sportive et g\u00e9n\u00e9rez automatiquement le classement de la saison. ALLER AU MOD\u00c8LE","title":"Classement de Ligue Sportive"},{"location":"newsletters/2021-09/#suivi-de-combat-dd","text":"Ma\u00eetres de donjon, utilisez Grist pour planifier facilement les rencontres, calculer les chiffres cl\u00e9s et suivre les combats. (Lanceur de d\u00e9s inclus.) ALLER AU MOD\u00c8LE Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Suivi de Combat D&D"},{"location":"newsletters/2021-10/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Octobre 2021 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Octobre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # \u00c9dition des Choix # Vous pouvez d\u00e9sormais modifier les valeurs de choix existantes et appliquer ces modifications \u00e0 vos donn\u00e9es automatiquement ! Liens Inline # Les champs de texte convertissent d\u00e9sormais automatiquement les URL en hyperliens, y compris dans les cellules contenant \u00e0 la fois du texte brut et des URL. Aper\u00e7u des Modifications dans les Importations Incr\u00e9mentielles # Lors de l\u2019importation de donn\u00e9es suppl\u00e9mentaires dans une table existante et de l\u2019utilisation d\u2019une cl\u00e9 de fusion pour correspondre aux enregistrements en double, vous pouvez d\u00e9sormais pr\u00e9visualiser les modifications apport\u00e9es \u00e0 vos donn\u00e9es avant de valider l\u2019importation. En savoir plus . Apprendre Grist # Webinar Construire avec Grist # Inscrivez-vous au Webinar de Novembre Rejoignez les experts de Grist lors d\u2019un webinar en direct pour apprendre les meilleures pratiques de Grist. La moiti\u00e9 du webinar est d\u00e9di\u00e9e \u00e0 une session de questions-r\u00e9ponses en direct o\u00f9 vous pouvez obtenir des r\u00e9ponses \u00e0 vos questions. \ud83d\udca1 Le webinar aura lieu le jeudi 18 novembre \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis (New York). S\u2019INSCRIRE AU WEBINAR Regardez l\u2019Enregistrement du Webinar d\u2019Octobre Le 18 octobre, nous avons tenu notre premier webinar Construire avec Grist, ax\u00e9 sur les meilleures pratiques pour tirer le meilleur parti de Grist. Le PDG de Grist, Dmitry Sagalovskiy, a partag\u00e9 des conseils sur l\u2019adaptation des donn\u00e9es d\u2019une feuille de calcul \u00e0 une base de donn\u00e9es en utilisant le principe DRY, et sur la cr\u00e9ation de tableaux de bord en utilisant des vues li\u00e9es. D\u2019autres sujets abord\u00e9s incluent la recherche de la valeur la plus r\u00e9cente d\u2019une liste d\u2019enregistrements historiques, le filtrage par plusieurs champs, la compr\u00e9hension de la fonction de recherche et des r\u00e9f\u00e9rences de recherche, et plus encore. REGARDER L\u2019ENREGISTREMENT Vid\u00e9o sur les Permissions Avanc\u00e9es # Limiter l\u2019acc\u00e8s pour les membres de l\u2019\u00e9quipe Les permissions avanc\u00e9es sont une fonctionnalit\u00e9 b\u00eata de Grist qui permet de limiter l\u2019acc\u00e8s \u00e0 certaines parties de vos donn\u00e9es en fonction de r\u00e8gles personnalis\u00e9es. Les r\u00e8gles peuvent \u00eatre tr\u00e8s granulaires et accorder des permissions de visualisation ou d\u2019\u00e9dition bas\u00e9es sur un certain nombre de variables. L\u2019utilisation la plus courante des permissions avanc\u00e9es est pour les \u00e9quipes qui souhaitent limiter les enregistrements que les membres de l\u2019\u00e9quipe peuvent voir. Par exemple, il est souvent souhaitable que les repr\u00e9sentants commerciaux ne voient que les enregistrements li\u00e9s \u00e0 leurs propres ventes, tandis que leur manager peut voir tous les enregistrements. Nous expliquons comment configurer ces r\u00e8gles dans une vid\u00e9o de 5 minutes. REGARDER LA VID\u00c9O Points Forts de la Communaut\u00e9 # Calculateur d\u2019Heures Suppl\u00e9mentaires. Calculez et suivez automatiquement les taux d\u2019heures suppl\u00e9mentaires hebdomadaires. Calcul des termes. Supposons que vous vendiez des adh\u00e9sions qui durent 12 mois et que vous souhaitiez calculer automatiquement les dates d\u2019expiration des adh\u00e9sions. Apprenez comment calculer les dates futures. Nouveaux Mod\u00e8les # \u00c9quipe de Vente Bas\u00e9e sur les Comptes # Suivez les comptes, contacts et affaires de votre \u00e9quipe de vente. Les permissions avanc\u00e9es limitent l\u2019acc\u00e8s des repr\u00e9sentants commerciaux \u00e0 la visualisation et \u00e0 l\u2019\u00e9dition uniquement de leurs affaires, contacts et comptes. ALLER AU MOD\u00c8LE Suivi du Temps & Facturation # Enregistrez rapidement le temps pass\u00e9 sur les projets, r\u00e9sumez-le et cr\u00e9ez des factures. ALLER AU MOD\u00c8LE Base de Donn\u00e9es des T\u00e9moins Experts # Cr\u00e9ez une base de donn\u00e9es simple des t\u00e9moins experts qui peuvent \u00eatre appel\u00e9s \u00e0 t\u00e9moigner \u00e0 la barre. ALLER AU MOD\u00c8LE Tableau de Capitalisation # Suivez les actionnaires, les actions \u00e9mises et les options, ainsi que les pourcentages de propri\u00e9t\u00e9. ALLER AU MOD\u00c8LE Garderie pour Chiens # G\u00e9rez votre entreprise de garderie en un seul endroit. ALLER AU MOD\u00c8LE Chiffre de C\u00e9sar # L\u2019empereur romain Jules C\u00e9sar utilisait le Chiffre de C\u00e9sar pour crypter les messages. \u00c9crivez un message pour le crypter avec cette m\u00e9thode ancienne. ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/10"},{"location":"newsletters/2021-10/#bulletin-doctobre-2021","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #c4ffcd; padding: 16px 36px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; } .header-month { } .header-welcome { margin-top: 12px; color: #666666; } Grist for the Mill Octobre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’Octobre 2021"},{"location":"newsletters/2021-10/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-10/#edition-des-choix","text":"Vous pouvez d\u00e9sormais modifier les valeurs de choix existantes et appliquer ces modifications \u00e0 vos donn\u00e9es automatiquement !","title":"\u00c9dition des Choix"},{"location":"newsletters/2021-10/#liens-inline","text":"Les champs de texte convertissent d\u00e9sormais automatiquement les URL en hyperliens, y compris dans les cellules contenant \u00e0 la fois du texte brut et des URL.","title":"Liens Inline"},{"location":"newsletters/2021-10/#apercu-des-modifications-dans-les-importations-incrementielles","text":"Lors de l\u2019importation de donn\u00e9es suppl\u00e9mentaires dans une table existante et de l\u2019utilisation d\u2019une cl\u00e9 de fusion pour correspondre aux enregistrements en double, vous pouvez d\u00e9sormais pr\u00e9visualiser les modifications apport\u00e9es \u00e0 vos donn\u00e9es avant de valider l\u2019importation. En savoir plus .","title":"Aper\u00e7u des Modifications dans les Importations Incr\u00e9mentielles"},{"location":"newsletters/2021-10/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2021-10/#webinar-construire-avec-grist","text":"Inscrivez-vous au Webinar de Novembre Rejoignez les experts de Grist lors d\u2019un webinar en direct pour apprendre les meilleures pratiques de Grist. La moiti\u00e9 du webinar est d\u00e9di\u00e9e \u00e0 une session de questions-r\u00e9ponses en direct o\u00f9 vous pouvez obtenir des r\u00e9ponses \u00e0 vos questions. \ud83d\udca1 Le webinar aura lieu le jeudi 18 novembre \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis (New York). S\u2019INSCRIRE AU WEBINAR Regardez l\u2019Enregistrement du Webinar d\u2019Octobre Le 18 octobre, nous avons tenu notre premier webinar Construire avec Grist, ax\u00e9 sur les meilleures pratiques pour tirer le meilleur parti de Grist. Le PDG de Grist, Dmitry Sagalovskiy, a partag\u00e9 des conseils sur l\u2019adaptation des donn\u00e9es d\u2019une feuille de calcul \u00e0 une base de donn\u00e9es en utilisant le principe DRY, et sur la cr\u00e9ation de tableaux de bord en utilisant des vues li\u00e9es. D\u2019autres sujets abord\u00e9s incluent la recherche de la valeur la plus r\u00e9cente d\u2019une liste d\u2019enregistrements historiques, le filtrage par plusieurs champs, la compr\u00e9hension de la fonction de recherche et des r\u00e9f\u00e9rences de recherche, et plus encore. REGARDER L\u2019ENREGISTREMENT","title":"Webinar Construire avec Grist"},{"location":"newsletters/2021-10/#video-sur-les-permissions-avancees","text":"Limiter l\u2019acc\u00e8s pour les membres de l\u2019\u00e9quipe Les permissions avanc\u00e9es sont une fonctionnalit\u00e9 b\u00eata de Grist qui permet de limiter l\u2019acc\u00e8s \u00e0 certaines parties de vos donn\u00e9es en fonction de r\u00e8gles personnalis\u00e9es. Les r\u00e8gles peuvent \u00eatre tr\u00e8s granulaires et accorder des permissions de visualisation ou d\u2019\u00e9dition bas\u00e9es sur un certain nombre de variables. L\u2019utilisation la plus courante des permissions avanc\u00e9es est pour les \u00e9quipes qui souhaitent limiter les enregistrements que les membres de l\u2019\u00e9quipe peuvent voir. Par exemple, il est souvent souhaitable que les repr\u00e9sentants commerciaux ne voient que les enregistrements li\u00e9s \u00e0 leurs propres ventes, tandis que leur manager peut voir tous les enregistrements. Nous expliquons comment configurer ces r\u00e8gles dans une vid\u00e9o de 5 minutes. REGARDER LA VID\u00c9O","title":"Vid\u00e9o sur les Permissions Avanc\u00e9es"},{"location":"newsletters/2021-10/#points-forts-de-la-communaute","text":"Calculateur d\u2019Heures Suppl\u00e9mentaires. Calculez et suivez automatiquement les taux d\u2019heures suppl\u00e9mentaires hebdomadaires. Calcul des termes. Supposons que vous vendiez des adh\u00e9sions qui durent 12 mois et que vous souhaitiez calculer automatiquement les dates d\u2019expiration des adh\u00e9sions. Apprenez comment calculer les dates futures.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2021-10/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2021-10/#equipe-de-vente-basee-sur-les-comptes","text":"Suivez les comptes, contacts et affaires de votre \u00e9quipe de vente. Les permissions avanc\u00e9es limitent l\u2019acc\u00e8s des repr\u00e9sentants commerciaux \u00e0 la visualisation et \u00e0 l\u2019\u00e9dition uniquement de leurs affaires, contacts et comptes. ALLER AU MOD\u00c8LE","title":"\u00c9quipe de Vente Bas\u00e9e sur les Comptes"},{"location":"newsletters/2021-10/#suivi-du-temps-facturation","text":"Enregistrez rapidement le temps pass\u00e9 sur les projets, r\u00e9sumez-le et cr\u00e9ez des factures. ALLER AU MOD\u00c8LE","title":"Suivi du Temps & Facturation"},{"location":"newsletters/2021-10/#base-de-donnees-des-temoins-experts","text":"Cr\u00e9ez une base de donn\u00e9es simple des t\u00e9moins experts qui peuvent \u00eatre appel\u00e9s \u00e0 t\u00e9moigner \u00e0 la barre. ALLER AU MOD\u00c8LE","title":"Base de Donn\u00e9es des T\u00e9moins Experts"},{"location":"newsletters/2021-10/#tableau-de-capitalisation","text":"Suivez les actionnaires, les actions \u00e9mises et les options, ainsi que les pourcentages de propri\u00e9t\u00e9. ALLER AU MOD\u00c8LE","title":"Tableau de Capitalisation"},{"location":"newsletters/2021-10/#garderie-pour-chiens","text":"G\u00e9rez votre entreprise de garderie en un seul endroit. ALLER AU MOD\u00c8LE","title":"Garderie pour Chiens"},{"location":"newsletters/2021-10/#chiffre-de-cesar","text":"L\u2019empereur romain Jules C\u00e9sar utilisait le Chiffre de C\u00e9sar pour crypter les messages. \u00c9crivez un message pour le crypter avec cette m\u00e9thode ancienne. ALLER AU MOD\u00c8LE","title":"Chiffre de C\u00e9sar"},{"location":"newsletters/2021-10/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , rejoignez notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2021-11/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Novembre 2021 # /* r\u00e9tablir certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist pour le Moulin Novembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Mappage des Colonnes d\u2019Importation # Lors de l\u2019importation de donn\u00e9es suppl\u00e9mentaires dans une table existante dans Grist, vous pouvez maintenant mapper les colonnes de votre fichier aux colonnes de la table Grist. En savoir plus. Filtrer sur des Colonnes Cach\u00e9es # Il est maintenant possible de filtrer les tables en fonction des donn\u00e9es dans les colonnes cach\u00e9es. \ud83d\udc7b Plus d\u2019Options de Tri # Il existe maintenant plus d\u2019options de tri disponibles, y compris le tri naturel. En savoir plus sur les options de tri suppl\u00e9mentaires. Notez que les colonnes Choice ont une option de tri unique bas\u00e9e sur la position des choix dans la configuration des choix. Graphique en Anneau # Grist prend d\u00e9sormais en charge les graphiques en anneau ! Python 3.9 # Python 3.9 est le nouveau d\u00e9faut pour les nouveaux documents. Par rapport au d\u00e9faut pr\u00e9c\u00e9dent (2.7), il dispose de certains packages utiles tels que les fonctions de statistiques math\u00e9matiques. En savoir plus sur les versions de Python prises en charge. Produit du Jour n\u00b01 sur Product Hunt ! # Grist a atteint le statut de Produit du Jour sur Product Hunt ! \ud83c\udf89\ud83d\ude80\ud83d\udc31\u200d\ud83d\ude80 Merci de montrer votre soutien ! De nombreux cr\u00e9ateurs de Grist ont pris le temps de laisser des avis aimables et des mots d\u2019encouragement. Merci ! \ud83d\ude4f Apprendre Grist # Webinar Construire avec Grist # Rejoignez les experts de Grist lors d\u2019un webinar en direct pour apprendre les meilleures pratiques de Grist. Mercredi 15 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis (New York). INSCRIVEZ-VOUS AU WEBINAR DE D\u00c9CEMBRE Lors du webinar de novembre, Anais Concepcion, VP Produit de Grist, a discut\u00e9 de la diff\u00e9rence entre les formules typiques et les formules d\u2019initialisation, et quand utiliser lesquelles. Elle a \u00e9galement partag\u00e9 certaines de ses formules pr\u00e9f\u00e9r\u00e9es et a approfondi l\u2019utilisation des colonnes de r\u00e9f\u00e9rence dans les formules de recherche. REGARDER L\u2019ENREGISTREMENT DE NOVEMBRE Vid\u00e9o : Trouver des Valeurs Duplicates avec une Formule # Les formules sont un excellent moyen de trouver et de signaler les valeurs dupliqu\u00e9es dans une colonne. Cette vid\u00e9o d\u00e9compose une formule qui trouve les doublons pour approfondir votre compr\u00e9hension des formules et de Grist. REGARDER LA VID\u00c9O Points Forts de la Communaut\u00e9 # Diviser une cha\u00eene de texte en une liste. Si vous importez une longue cha\u00eene de texte, telle que des mots-cl\u00e9s s\u00e9par\u00e9s par des virgules, il serait utile de diviser cette cha\u00eene en une liste de valeurs pouvant \u00eatre filtr\u00e9es et regroup\u00e9es dans une colonne de liste de choix. Apprenez comment. Identifier les valeurs qui ne sont pas dans une autre table. Dans la vid\u00e9o ci-dessus, la formule trouve des doublons (ou des valeurs uniques) dans la m\u00eame colonne. Apprenez comment comparer les valeurs entre les tables. Nouveaux Mod\u00e8les # Recrutement # Suivez collaborativement les candidats \u00e0 un emploi et joignez les CV et les notes d\u2019entretien. ALLER AU MOD\u00c8LE Performance du Portefeuille # Suivez la valeur et la performance de votre portefeuille, y compris les P&L ferm\u00e9s et ouverts. ALLER AU MOD\u00c8LE Intervenants d\u2019\u00c9v\u00e9nements # Suivez les intervenants r\u00e9serv\u00e9s pour les \u00e9v\u00e9nements et marquez les \u00e9v\u00e9nements qui ne sont pas encore enti\u00e8rement r\u00e9serv\u00e9s. ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/11"},{"location":"newsletters/2021-11/#bulletin-de-novembre-2021","text":"/* r\u00e9tablir certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist pour le Moulin Novembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Novembre 2021"},{"location":"newsletters/2021-11/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2021-11/#mappage-des-colonnes-dimportation","text":"Lors de l\u2019importation de donn\u00e9es suppl\u00e9mentaires dans une table existante dans Grist, vous pouvez maintenant mapper les colonnes de votre fichier aux colonnes de la table Grist. En savoir plus.","title":"Mappage des Colonnes d’Importation"},{"location":"newsletters/2021-11/#filtrer-sur-des-colonnes-cachees","text":"Il est maintenant possible de filtrer les tables en fonction des donn\u00e9es dans les colonnes cach\u00e9es. \ud83d\udc7b","title":"Filtrer sur des Colonnes Cach\u00e9es"},{"location":"newsletters/2021-11/#plus-doptions-de-tri","text":"Il existe maintenant plus d\u2019options de tri disponibles, y compris le tri naturel. En savoir plus sur les options de tri suppl\u00e9mentaires. Notez que les colonnes Choice ont une option de tri unique bas\u00e9e sur la position des choix dans la configuration des choix.","title":"Plus d’Options de Tri"},{"location":"newsletters/2021-11/#graphique-en-anneau","text":"Grist prend d\u00e9sormais en charge les graphiques en anneau !","title":"Graphique en Anneau"},{"location":"newsletters/2021-11/#python-39","text":"Python 3.9 est le nouveau d\u00e9faut pour les nouveaux documents. Par rapport au d\u00e9faut pr\u00e9c\u00e9dent (2.7), il dispose de certains packages utiles tels que les fonctions de statistiques math\u00e9matiques. En savoir plus sur les versions de Python prises en charge.","title":"Python 3.9"},{"location":"newsletters/2021-11/#produit-du-jour-n1-sur-product-hunt","text":"Grist a atteint le statut de Produit du Jour sur Product Hunt ! \ud83c\udf89\ud83d\ude80\ud83d\udc31\u200d\ud83d\ude80 Merci de montrer votre soutien ! De nombreux cr\u00e9ateurs de Grist ont pris le temps de laisser des avis aimables et des mots d\u2019encouragement. Merci ! \ud83d\ude4f","title":"Produit du Jour n\u00b01 sur Product Hunt !"},{"location":"newsletters/2021-11/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2021-11/#webinar-construire-avec-grist","text":"Rejoignez les experts de Grist lors d\u2019un webinar en direct pour apprendre les meilleures pratiques de Grist. Mercredi 15 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis (New York). INSCRIVEZ-VOUS AU WEBINAR DE D\u00c9CEMBRE Lors du webinar de novembre, Anais Concepcion, VP Produit de Grist, a discut\u00e9 de la diff\u00e9rence entre les formules typiques et les formules d\u2019initialisation, et quand utiliser lesquelles. Elle a \u00e9galement partag\u00e9 certaines de ses formules pr\u00e9f\u00e9r\u00e9es et a approfondi l\u2019utilisation des colonnes de r\u00e9f\u00e9rence dans les formules de recherche. REGARDER L\u2019ENREGISTREMENT DE NOVEMBRE","title":"Webinar Construire avec Grist"},{"location":"newsletters/2021-11/#video-trouver-des-valeurs-duplicates-avec-une-formule","text":"Les formules sont un excellent moyen de trouver et de signaler les valeurs dupliqu\u00e9es dans une colonne. Cette vid\u00e9o d\u00e9compose une formule qui trouve les doublons pour approfondir votre compr\u00e9hension des formules et de Grist. REGARDER LA VID\u00c9O","title":"Vid\u00e9o : Trouver des Valeurs Duplicates avec une Formule"},{"location":"newsletters/2021-11/#points-forts-de-la-communaute","text":"Diviser une cha\u00eene de texte en une liste. Si vous importez une longue cha\u00eene de texte, telle que des mots-cl\u00e9s s\u00e9par\u00e9s par des virgules, il serait utile de diviser cette cha\u00eene en une liste de valeurs pouvant \u00eatre filtr\u00e9es et regroup\u00e9es dans une colonne de liste de choix. Apprenez comment. Identifier les valeurs qui ne sont pas dans une autre table. Dans la vid\u00e9o ci-dessus, la formule trouve des doublons (ou des valeurs uniques) dans la m\u00eame colonne. Apprenez comment comparer les valeurs entre les tables.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2021-11/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2021-11/#recrutement","text":"Suivez collaborativement les candidats \u00e0 un emploi et joignez les CV et les notes d\u2019entretien. ALLER AU MOD\u00c8LE","title":"Recrutement"},{"location":"newsletters/2021-11/#performance-du-portefeuille","text":"Suivez la valeur et la performance de votre portefeuille, y compris les P&L ferm\u00e9s et ouverts. ALLER AU MOD\u00c8LE","title":"Performance du Portefeuille"},{"location":"newsletters/2021-11/#intervenants-devenements","text":"Suivez les intervenants r\u00e9serv\u00e9s pour les \u00e9v\u00e9nements et marquez les \u00e9v\u00e9nements qui ne sont pas encore enti\u00e8rement r\u00e9serv\u00e9s. ALLER AU MOD\u00c8LE","title":"Intervenants d’\u00c9v\u00e9nements"},{"location":"newsletters/2021-11/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2021-12/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de d\u00e9cembre 2021 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist for the Mill D\u00e9cembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # D\u00e9clencheur instantan\u00e9 Zapier # Les int\u00e9grations de Grist avec Zapier sont devenues plus rapides ! Recherchez les d\u00e9clencheurs instantan\u00e9s Zapier lors de la cr\u00e9ation de vos zaps. En savoir plus sur les d\u00e9clencheurs. Apprendre Grist # Webinaire : Cr\u00e9er des mises en page hautement productives # Apprenez \u00e0 passer des tables \u00e0 des mises en page de type application. Nous partagerons des conseils sur la conception de workflows efficaces et la visualisation des donn\u00e9es. Mercredi 19 janvier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER Notre webinaire de d\u00e9cembre a abord\u00e9 comment importer et r\u00e9sumer des donn\u00e9es dans Grist. Dmitry montre comment cr\u00e9er une structure Grist qui extrait des informations de vos donn\u00e9es avec des tables de synth\u00e8se, puis importer des donn\u00e9es suppl\u00e9mentaires dans la structure existante. REGARDER L\u2019ENREGISTREMENT DE D\u00c9CEMBRE Vid\u00e9o : V\u00e9rification des champs obligatoires # Parfois, certains champs sont obligatoires, comme la colonne email d\u2019une table de contacts. Apprenez \u00e0 utiliser une formule pour v\u00e9rifier si les champs obligatoires sont remplis, et \u00e0 modifier d\u2019autres formules pour n\u2019\u00e9valuer que les enregistrements qui r\u00e9pondent aux exigences. REGARDER LA VID\u00c9O Points forts de la communaut\u00e9 # Cr\u00e9er des sous-cat\u00e9gories d\u00e9pendantes. Les sous-cat\u00e9gories d\u00e9pendantes peuvent \u00eatre utiles pour organiser les donn\u00e9es, par exemple l\u00e9gumes > oignon. Apprenez \u00e0 d\u00e9finir des sous-cat\u00e9gories d\u00e9pendantes. Comment r\u00e9soudre les erreurs dues aux cellules vides. Les formules s\u2019appliquent \u00e0 toutes les lignes d\u2019une colonne. Ainsi, lorsqu\u2019une ligne est vide, vous obtiendrez une erreur. C\u2019est correct mais inesth\u00e9tique. Voici comment y rem\u00e9dier. Tenir un journal des \u00e9v\u00e9nements. Parfois, il est utile de tenir un journal horodat\u00e9 des \u00e9v\u00e9nements, comme les changements de statut des enregistrements. Apprenez \u00e0 en cr\u00e9er un, avec une explication vid\u00e9o int\u00e9gr\u00e9e dans le document Grist. Nouveaux mod\u00e8les # Suivi des habitudes # Pr\u00e9parez-vous \u00e0 r\u00e9ussir vos r\u00e9solutions du Nouvel An ! Adoptez de meilleures habitudes avec ce simple suivi hebdomadaire des habitudes et des progr\u00e8s. ALLER AU MOD\u00c8LE Suivi des liens internes pour le SEO # Optimisez votre SEO avec un suivi des liens internes et un outil d\u2019audit simple pour trouver les pages orphelines et les pages les plus li\u00e9es. ALLER AU MOD\u00c8LE G\u00e9n\u00e9rateur de liens UTM # Cr\u00e9ez facilement et suivez les param\u00e8tres UTM de votre campagne marketing. ALLER AU MOD\u00c8LE G\u00e9n\u00e9rateur de m\u00e8mes # Cr\u00e9ez des m\u00e8mes directement dans Grist ! ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2021/12"},{"location":"newsletters/2021-12/#bulletin-de-decembre-2021","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist for the Mill D\u00e9cembre 2021 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de d\u00e9cembre 2021"},{"location":"newsletters/2021-12/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2021-12/#declencheur-instantane-zapier","text":"Les int\u00e9grations de Grist avec Zapier sont devenues plus rapides ! Recherchez les d\u00e9clencheurs instantan\u00e9s Zapier lors de la cr\u00e9ation de vos zaps. En savoir plus sur les d\u00e9clencheurs.","title":"D\u00e9clencheur instantan\u00e9 Zapier"},{"location":"newsletters/2021-12/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2021-12/#webinaire-creer-des-mises-en-page-hautement-productives","text":"Apprenez \u00e0 passer des tables \u00e0 des mises en page de type application. Nous partagerons des conseils sur la conception de workflows efficaces et la visualisation des donn\u00e9es. Mercredi 19 janvier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER Notre webinaire de d\u00e9cembre a abord\u00e9 comment importer et r\u00e9sumer des donn\u00e9es dans Grist. Dmitry montre comment cr\u00e9er une structure Grist qui extrait des informations de vos donn\u00e9es avec des tables de synth\u00e8se, puis importer des donn\u00e9es suppl\u00e9mentaires dans la structure existante. REGARDER L\u2019ENREGISTREMENT DE D\u00c9CEMBRE","title":"Webinaire : Cr\u00e9er des mises en page hautement productives"},{"location":"newsletters/2021-12/#video-verification-des-champs-obligatoires","text":"Parfois, certains champs sont obligatoires, comme la colonne email d\u2019une table de contacts. Apprenez \u00e0 utiliser une formule pour v\u00e9rifier si les champs obligatoires sont remplis, et \u00e0 modifier d\u2019autres formules pour n\u2019\u00e9valuer que les enregistrements qui r\u00e9pondent aux exigences. REGARDER LA VID\u00c9O","title":"Vid\u00e9o : V\u00e9rification des champs obligatoires"},{"location":"newsletters/2021-12/#points-forts-de-la-communaute","text":"Cr\u00e9er des sous-cat\u00e9gories d\u00e9pendantes. Les sous-cat\u00e9gories d\u00e9pendantes peuvent \u00eatre utiles pour organiser les donn\u00e9es, par exemple l\u00e9gumes > oignon. Apprenez \u00e0 d\u00e9finir des sous-cat\u00e9gories d\u00e9pendantes. Comment r\u00e9soudre les erreurs dues aux cellules vides. Les formules s\u2019appliquent \u00e0 toutes les lignes d\u2019une colonne. Ainsi, lorsqu\u2019une ligne est vide, vous obtiendrez une erreur. C\u2019est correct mais inesth\u00e9tique. Voici comment y rem\u00e9dier. Tenir un journal des \u00e9v\u00e9nements. Parfois, il est utile de tenir un journal horodat\u00e9 des \u00e9v\u00e9nements, comme les changements de statut des enregistrements. Apprenez \u00e0 en cr\u00e9er un, avec une explication vid\u00e9o int\u00e9gr\u00e9e dans le document Grist.","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2021-12/#nouveaux-modeles","text":"","title":"Nouveaux mod\u00e8les"},{"location":"newsletters/2021-12/#suivi-des-habitudes","text":"Pr\u00e9parez-vous \u00e0 r\u00e9ussir vos r\u00e9solutions du Nouvel An ! Adoptez de meilleures habitudes avec ce simple suivi hebdomadaire des habitudes et des progr\u00e8s. ALLER AU MOD\u00c8LE","title":"Suivi des habitudes"},{"location":"newsletters/2021-12/#suivi-des-liens-internes-pour-le-seo","text":"Optimisez votre SEO avec un suivi des liens internes et un outil d\u2019audit simple pour trouver les pages orphelines et les pages les plus li\u00e9es. ALLER AU MOD\u00c8LE","title":"Suivi des liens internes pour le SEO"},{"location":"newsletters/2021-12/#generateur-de-liens-utm","text":"Cr\u00e9ez facilement et suivez les param\u00e8tres UTM de votre campagne marketing. ALLER AU MOD\u00c8LE","title":"G\u00e9n\u00e9rateur de liens UTM"},{"location":"newsletters/2021-12/#generateur-de-memes","text":"Cr\u00e9ez des m\u00e8mes directement dans Grist ! ALLER AU MOD\u00c8LE","title":"G\u00e9n\u00e9rateur de m\u00e8mes"},{"location":"newsletters/2021-12/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-01/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Janvier 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist pour le Moulin Janvier 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Lancer et Supprimer les Visites de Document # Plusieurs mod\u00e8les ont des visites de document qui expliquent le flux de travail du mod\u00e8le. Pour relancer la visite, cliquez sur \u201cVisite de ce Document\u201d en bas du panneau de gauche. Pour supprimer la visite du document de votre copie d\u2019un mod\u00e8le, cliquez sur la petite ic\u00f4ne de poubelle \u00e0 c\u00f4t\u00e9 de \u201cVisite de ce Document.\u201d Apprendre Grist # Webinaire : Types de Colonnes et Contr\u00f4le de Version # Travaillez comme un expert Grist ! Approfondissez votre compr\u00e9hension des types de colonnes, des sauvegardes et des copies de travail des documents. Mercredi 16 f\u00e9vrier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER Lors du webinaire de janvier, Natalie a expliqu\u00e9 comment cr\u00e9er des mises en page productives dans Grist. Elle a couvert les liens de m\u00eame enregistrement et de r\u00e9f\u00e9rence, les vues fiche, le tri et le filtrage, les tableaux r\u00e9capitulatifs et les graphiques simples. REGARDER L\u2019ENREGISTREMENT DE JANVIER Points Forts de la Communaut\u00e9 # Afficher l\u2019historique Gmail pour un contact particulier. Si vous stockez des contacts dans Grist et utilisez Gmail pour leur envoyer des e-mails, il existe un moyen simple de cr\u00e9er une formule qui ouvre Gmail \u00e0 une liste de conversations avec ce contact. Basculer un interrupteur avec une condition. Apprenez \u00e0 utiliser une formule conditionnelle dans une colonne de bascule pour que l\u2019interrupteur s\u2019active ou se d\u00e9sactive en fonction de la valeur des donn\u00e9es dans d\u2019autres colonnes. Mettre un texte plus long dans une fiche. Parfois, un texte long rend une ligne trop haute et peu esth\u00e9tique. Il peut \u00eatre pr\u00e9f\u00e9rable de montrer le texte long dans sa propre fiche et d\u2019utiliser le lien de m\u00eame enregistrement pour s\u00e9lectionner la fiche. Apprenez comment. Nouveaux Mod\u00e8les # Gestionnaire d\u2019Inventaire # G\u00e9rez votre inventaire et suivez les commandes entrantes et sortantes. ALLER AU MOD\u00c8LE Suivi des Influenceurs # Suivez les interactions et les progr\u00e8s de vos campagnes de marketing d\u2019influence. ALLER AU MOD\u00c8LE Planificateur d\u2019Exercices # Cr\u00e9ez des plans d\u2019entra\u00eenement dans Grist et consultez-les rapidement \u00e0 la salle de sport pendant que vous soulevez des poids. \ud83d\udcaa ALLER AU MOD\u00c8LE Suivi des Offres de Logiciels # Si vous \u00eates toujours excit\u00e9 de tester les derniers produits SaaS, alors vous avez probablement achet\u00e9 de nombreuses offres \u00e0 vie et annuelles. Suivez vos offres et surveillez les expirations \u00e0 venir avec ce mod\u00e8le. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/01"},{"location":"newsletters/2022-01/#bulletin-de-janvier-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist pour le Moulin Janvier 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Janvier 2022"},{"location":"newsletters/2022-01/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-01/#lancer-et-supprimer-les-visites-de-document","text":"Plusieurs mod\u00e8les ont des visites de document qui expliquent le flux de travail du mod\u00e8le. Pour relancer la visite, cliquez sur \u201cVisite de ce Document\u201d en bas du panneau de gauche. Pour supprimer la visite du document de votre copie d\u2019un mod\u00e8le, cliquez sur la petite ic\u00f4ne de poubelle \u00e0 c\u00f4t\u00e9 de \u201cVisite de ce Document.\u201d","title":"Lancer et Supprimer les Visites de Document"},{"location":"newsletters/2022-01/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-01/#webinaire-types-de-colonnes-et-controle-de-version","text":"Travaillez comme un expert Grist ! Approfondissez votre compr\u00e9hension des types de colonnes, des sauvegardes et des copies de travail des documents. Mercredi 16 f\u00e9vrier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER Lors du webinaire de janvier, Natalie a expliqu\u00e9 comment cr\u00e9er des mises en page productives dans Grist. Elle a couvert les liens de m\u00eame enregistrement et de r\u00e9f\u00e9rence, les vues fiche, le tri et le filtrage, les tableaux r\u00e9capitulatifs et les graphiques simples. REGARDER L\u2019ENREGISTREMENT DE JANVIER","title":"Webinaire : Types de Colonnes et Contr\u00f4le de Version"},{"location":"newsletters/2022-01/#points-forts-de-la-communaute","text":"Afficher l\u2019historique Gmail pour un contact particulier. Si vous stockez des contacts dans Grist et utilisez Gmail pour leur envoyer des e-mails, il existe un moyen simple de cr\u00e9er une formule qui ouvre Gmail \u00e0 une liste de conversations avec ce contact. Basculer un interrupteur avec une condition. Apprenez \u00e0 utiliser une formule conditionnelle dans une colonne de bascule pour que l\u2019interrupteur s\u2019active ou se d\u00e9sactive en fonction de la valeur des donn\u00e9es dans d\u2019autres colonnes. Mettre un texte plus long dans une fiche. Parfois, un texte long rend une ligne trop haute et peu esth\u00e9tique. Il peut \u00eatre pr\u00e9f\u00e9rable de montrer le texte long dans sa propre fiche et d\u2019utiliser le lien de m\u00eame enregistrement pour s\u00e9lectionner la fiche. Apprenez comment.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-01/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-01/#gestionnaire-dinventaire","text":"G\u00e9rez votre inventaire et suivez les commandes entrantes et sortantes. ALLER AU MOD\u00c8LE","title":"Gestionnaire d’Inventaire"},{"location":"newsletters/2022-01/#suivi-des-influenceurs","text":"Suivez les interactions et les progr\u00e8s de vos campagnes de marketing d\u2019influence. ALLER AU MOD\u00c8LE","title":"Suivi des Influenceurs"},{"location":"newsletters/2022-01/#planificateur-dexercices","text":"Cr\u00e9ez des plans d\u2019entra\u00eenement dans Grist et consultez-les rapidement \u00e0 la salle de sport pendant que vous soulevez des poids. \ud83d\udcaa ALLER AU MOD\u00c8LE","title":"Planificateur d’Exercices"},{"location":"newsletters/2022-01/#suivi-des-offres-de-logiciels","text":"Si vous \u00eates toujours excit\u00e9 de tester les derniers produits SaaS, alors vous avez probablement achet\u00e9 de nombreuses offres \u00e0 vie et annuelles. Suivez vos offres et surveillez les expirations \u00e0 venir avec ce mod\u00e8le. ALLER AU MOD\u00c8LE","title":"Suivi des Offres de Logiciels"},{"location":"newsletters/2022-01/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-01/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-02/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de F\u00e9vrier 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist for the Mill F\u00e9vrier 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Menu de Widgets Personnalis\u00e9s # Ajouter des widgets personnalis\u00e9s est devenu plus facile ! S\u00e9lectionnez parmi un menu d\u00e9roulant de widgets pr\u00e9fabriqu\u00e9s facilement configurables dans le panneau de cr\u00e9ation. Les widgets personnalis\u00e9s incluent \u00c9diteur Markdown Bouton d\u2019action Afficher l\u2019image \u00e0 partir de l\u2019URL Carte interactive Factures Imprimer des \u00e9tiquettes Inspecteur d\u2019API \u2026et plus encore ! Permissions Avanc\u00e9es pour Utilisateurs Anonymes # Des permissions avanc\u00e9es granulaires peuvent d\u00e9sormais restreindre les documents partag\u00e9s publiquement et \u00e9ditables. Une nouvelle propri\u00e9t\u00e9 d\u2019utilisateur, user.SessionID, permet de limiter les donn\u00e9es que les visiteurs de votre document peuvent voir ou modifier. Cela ouvre de nouveaux cas d\u2019utilisation, tels que sondages simples et listes participatives mod\u00e9r\u00e9es par la communaut\u00e9 . PARTICIPEZ \u00c0 NOTRE SONDAGE Authentification \u00e0 Deux Facteurs # Grist prend d\u00e9sormais en charge l\u2019authentification \u00e0 deux facteurs pour les connexions par email + mot de passe. Allez dans vos param\u00e8tres de profil pour configurer l\u2019authentification \u00e0 deux facteurs avec des messages texte ou une application d\u2019authentification. Menu Contextuel des Cellules # Un clic droit sur n\u2019importe quelle cellule ouvre d\u00e9sormais un menu qui rend l\u2019\u00e9dition des donn\u00e9es dans Grist plus pratique. Apprendre Grist # Webinaire : Permissions Avanc\u00e9es Granulaires # Apprenez \u00e0 cr\u00e9er des permissions avanc\u00e9es qui d\u00e9terminent qui peut voir quelles colonnes, tables ou lignes de vos donn\u00e9es. Mercredi 16 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Lors du webinaire de f\u00e9vrier, Ana\u00efs a expliqu\u00e9 les types de colonnes et leur formatage, les sauvegardes automatiques et comment travailler sur des forks de votre document. REGARDER L\u2019ENREGISTREMENT DE F\u00c9VRIER Points Forts de la Communaut\u00e9 # Visites de documents. Nos mod\u00e8les ont souvent des visites de documents. Ce n\u2019est pas encore une fonctionnalit\u00e9 aboutie pour les utilisateurs, mais c\u2019est facile \u00e0 faire si vous le souhaitez. Voici comment. Comparer une valeur \u00e0 une valeur correspondante n jours auparavant. Supposons que vous deviez comparer une valeur telle que les hospitalisations aux hospitalisations d\u2019il y a 5 jours. Natalie explique une formule pour faire cela. Somme totale des enregistrements r\u00e9f\u00e9renc\u00e9s. Supposons que vous facturiez plusieurs services sur la m\u00eame facture et que dans Grist, vous ayez plusieurs enregistrements de Services pointant vers les m\u00eames enregistrements de Factures. Apprenez \u00e0 additionner le total des heures par facture. Nouveaux Mod\u00e8les # Listes Participatives # Les permissions avanc\u00e9es facilitent la mod\u00e9ration des listes participatives. Ce mod\u00e8le a des permissions avanc\u00e9es qui permettent aux contributeurs d\u2019ajouter de nouveaux enregistrements et de modifier ou mettre \u00e0 jour leurs contributions \u2014 sans se connecter. Les contributeurs peuvent voir tous les enregistrements, mais ne peuvent pas modifier ou supprimer les contributions des autres. Les mod\u00e9rateurs peuvent modifier ou supprimer n\u2019importe quelle donn\u00e9e, et ils peuvent \u00e9galement ajouter de nouveaux mod\u00e9rateurs \u00e0 la liste. Ce mod\u00e8le utilise \u00e9galement la vue carte. ALLER AU MOD\u00c8LE Sondage Simple # Avec le bon ensemble de permissions avanc\u00e9es, vous pouvez cr\u00e9er des sondages dans Grist ! Ce mod\u00e8le r\u00e9v\u00e8le comment. ALLER AU MOD\u00c8LE CRM des Ventes Num\u00e9riques # Suivez la vente de produits num\u00e9riques tels que des cours, des e-books, des programmes d\u2019adh\u00e9sion, et plus encore dans un CRM simple. ALLER AU MOD\u00c8LE Comparaison des Assurances Sant\u00e9 # Cr\u00e9ez une calculatrice facile \u00e0 utiliser pour que vos employ\u00e9s puissent comparer les plans d\u2019assurance sant\u00e9 offerts par votre organisation. ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/02"},{"location":"newsletters/2022-02/#bulletin-de-fevrier-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } Grist for the Mill F\u00e9vrier 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de F\u00e9vrier 2022"},{"location":"newsletters/2022-02/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-02/#menu-de-widgets-personnalises","text":"Ajouter des widgets personnalis\u00e9s est devenu plus facile ! S\u00e9lectionnez parmi un menu d\u00e9roulant de widgets pr\u00e9fabriqu\u00e9s facilement configurables dans le panneau de cr\u00e9ation. Les widgets personnalis\u00e9s incluent \u00c9diteur Markdown Bouton d\u2019action Afficher l\u2019image \u00e0 partir de l\u2019URL Carte interactive Factures Imprimer des \u00e9tiquettes Inspecteur d\u2019API \u2026et plus encore !","title":"Menu de Widgets Personnalis\u00e9s"},{"location":"newsletters/2022-02/#permissions-avancees-pour-utilisateurs-anonymes","text":"Des permissions avanc\u00e9es granulaires peuvent d\u00e9sormais restreindre les documents partag\u00e9s publiquement et \u00e9ditables. Une nouvelle propri\u00e9t\u00e9 d\u2019utilisateur, user.SessionID, permet de limiter les donn\u00e9es que les visiteurs de votre document peuvent voir ou modifier. Cela ouvre de nouveaux cas d\u2019utilisation, tels que sondages simples et listes participatives mod\u00e9r\u00e9es par la communaut\u00e9 . PARTICIPEZ \u00c0 NOTRE SONDAGE","title":"Permissions Avanc\u00e9es pour Utilisateurs Anonymes"},{"location":"newsletters/2022-02/#authentification-a-deux-facteurs","text":"Grist prend d\u00e9sormais en charge l\u2019authentification \u00e0 deux facteurs pour les connexions par email + mot de passe. Allez dans vos param\u00e8tres de profil pour configurer l\u2019authentification \u00e0 deux facteurs avec des messages texte ou une application d\u2019authentification.","title":"Authentification \u00e0 Deux Facteurs"},{"location":"newsletters/2022-02/#menu-contextuel-des-cellules","text":"Un clic droit sur n\u2019importe quelle cellule ouvre d\u00e9sormais un menu qui rend l\u2019\u00e9dition des donn\u00e9es dans Grist plus pratique.","title":"Menu Contextuel des Cellules"},{"location":"newsletters/2022-02/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-02/#webinaire-permissions-avancees-granulaires","text":"Apprenez \u00e0 cr\u00e9er des permissions avanc\u00e9es qui d\u00e9terminent qui peut voir quelles colonnes, tables ou lignes de vos donn\u00e9es. Mercredi 16 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Lors du webinaire de f\u00e9vrier, Ana\u00efs a expliqu\u00e9 les types de colonnes et leur formatage, les sauvegardes automatiques et comment travailler sur des forks de votre document. REGARDER L\u2019ENREGISTREMENT DE F\u00c9VRIER","title":"Webinaire : Permissions Avanc\u00e9es Granulaires"},{"location":"newsletters/2022-02/#points-forts-de-la-communaute","text":"Visites de documents. Nos mod\u00e8les ont souvent des visites de documents. Ce n\u2019est pas encore une fonctionnalit\u00e9 aboutie pour les utilisateurs, mais c\u2019est facile \u00e0 faire si vous le souhaitez. Voici comment. Comparer une valeur \u00e0 une valeur correspondante n jours auparavant. Supposons que vous deviez comparer une valeur telle que les hospitalisations aux hospitalisations d\u2019il y a 5 jours. Natalie explique une formule pour faire cela. Somme totale des enregistrements r\u00e9f\u00e9renc\u00e9s. Supposons que vous facturiez plusieurs services sur la m\u00eame facture et que dans Grist, vous ayez plusieurs enregistrements de Services pointant vers les m\u00eames enregistrements de Factures. Apprenez \u00e0 additionner le total des heures par facture.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-02/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-02/#listes-participatives","text":"Les permissions avanc\u00e9es facilitent la mod\u00e9ration des listes participatives. Ce mod\u00e8le a des permissions avanc\u00e9es qui permettent aux contributeurs d\u2019ajouter de nouveaux enregistrements et de modifier ou mettre \u00e0 jour leurs contributions \u2014 sans se connecter. Les contributeurs peuvent voir tous les enregistrements, mais ne peuvent pas modifier ou supprimer les contributions des autres. Les mod\u00e9rateurs peuvent modifier ou supprimer n\u2019importe quelle donn\u00e9e, et ils peuvent \u00e9galement ajouter de nouveaux mod\u00e9rateurs \u00e0 la liste. Ce mod\u00e8le utilise \u00e9galement la vue carte. ALLER AU MOD\u00c8LE","title":"Listes Participatives"},{"location":"newsletters/2022-02/#sondage-simple","text":"Avec le bon ensemble de permissions avanc\u00e9es, vous pouvez cr\u00e9er des sondages dans Grist ! Ce mod\u00e8le r\u00e9v\u00e8le comment. ALLER AU MOD\u00c8LE","title":"Sondage Simple"},{"location":"newsletters/2022-02/#crm-des-ventes-numeriques","text":"Suivez la vente de produits num\u00e9riques tels que des cours, des e-books, des programmes d\u2019adh\u00e9sion, et plus encore dans un CRM simple. ALLER AU MOD\u00c8LE","title":"CRM des Ventes Num\u00e9riques"},{"location":"newsletters/2022-02/#comparaison-des-assurances-sante","text":"Cr\u00e9ez une calculatrice facile \u00e0 utiliser pour que vos employ\u00e9s puissent comparer les plans d\u2019assurance sant\u00e9 offerts par votre organisation. ALLER AU MOD\u00c8LE","title":"Comparaison des Assurances Sant\u00e9"},{"location":"newsletters/2022-02/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-02/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-03/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mars 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mars 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Mise en forme conditionnelle ! Annonce du programme Sprouts Laissez-nous vous aider \u00e0 construire dans Grist ! Prochain webinaire \u2013 widgets personnalis\u00e9s Apprenez \u00e0 ajouter des cartes, des factures et d\u2019autres surprises. 3 nouveaux mod\u00e8les \u00c9v\u00e9nements, cadeaux, et plus encore. Grist et Wordle ??? Am\u00e9liorez votre jeu Wordle : \ud83d\udfe8\ud83d\udfe9\ud83d\udfe9\ud83d\udfe9\ud83d\udfe9 Programme Sprouts # Nous lan\u00e7ons un nouveau programme pour aider les \u00e9quipes \u00e0 d\u00e9marrer rapidement avec Grist. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, nous sommes l\u00e0 pour vous aider. Voici comment cela fonctionne : \u00c9ligibilit\u00e9. Toute personne disposant d\u2019un espace d\u2019\u00e9quipe est \u00e9ligible au programme Sprouts (m\u00eame pendant l\u2019essai gratuit). Planifiez un appel de consultation gratuit de 30 minutes. Envoyez un email \u00e0 success@getgrist.com et d\u00e9crivez votre cas d\u2019utilisation. Nous vous mettrons en relation avec un expert Grist de notre \u00e9quipe et planifierons une rencontre. Lors de cet appel, nous estimerons l\u2019ampleur du travail. Pour les projets rapides. Si nous estimons que votre projet peut \u00eatre r\u00e9alis\u00e9 en moins d\u2019une heure, nous le ferons nous-m\u00eames \u2014 gratuitement ! De nombreux cas d\u2019utilisation entrent dans cette cat\u00e9gorie. Pour les projets plus importants. Pour les projets de plus d\u2019une heure, nous recommanderons un prestataire form\u00e9 et v\u00e9rifi\u00e9 par Grist, ayant un acc\u00e8s rapide \u00e0 notre \u00e9quipe. Que vous choisissiez de travailler avec notre prestataire ou avec quelqu\u2019un d\u2019autre, nous planifierons un autre appel de 30 minutes pour nous assurer que tout le monde comprend le projet. Sur cette base, le prestataire estimera le travail et proposera un prix. Visitez notre site web pour soumettre une demande ! Quoi de neuf # Mise en forme conditionnelle # La mise en forme conditionnelle est enfin l\u00e0 ! \ud83c\udf8a Dans le panneau de cr\u00e9ation dans le menu de colonne, sous STYLE DE CELLULE, vous pouvez maintenant ajouter des styles conditionnels. Entrez une formule et stylisez la couleur de fond et de texte de la cellule. Vous pouvez ajouter plusieurs r\u00e8gles conditionnelles. En savoir plus. Am\u00e9lioration de la d\u00e9tection des types de colonnes # Lorsque vous importez ou copiez et collez des donn\u00e9es, Grist est maintenant beaucoup plus performant pour analyser les donn\u00e9es et deviner les types de colonnes. Ouf ! Cela signifie moins de nettoyage de donn\u00e9es lors de l\u2019importation de nouvelles donn\u00e9es ! \ud83c\udf89 Nouvelle m\u00e9thode API pour ajouter ou mettre \u00e0 jour # Nous avons ajout\u00e9 une nouvelle m\u00e9thode pour mettre \u00e0 jour un enregistrement existant ou, s\u2019il n\u2019existe pas, en ajouter un nouveau. En savoir plus. Grist-help est maintenant public ! # Notre Centre d\u2019aide est maintenu sur GitHub. Le r\u00e9pertoire est maintenant public , afin que la communaut\u00e9 puisse aider \u00e0 am\u00e9liorer notre documentation et nos tutoriels. Apprendre Grist # Webinaire : Widgets personnalis\u00e9s # Les widgets personnalis\u00e9s sont devenus plus faciles. Apprenez \u00e0 configurer des widgets personnalis\u00e9s \u00e0 partir du menu des widgets pr\u00e9d\u00e9finis dans le panneau de cr\u00e9ation. Jeudi 14 avril \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Lors du webinaire de mars, Anais a expliqu\u00e9 comment configurer des permissions avanc\u00e9es sur des documents priv\u00e9s et publics. REGARDER L\u2019ENREGISTREMENT DE MARS Points forts de la communaut\u00e9 # Am\u00e9liorez vos statistiques Wordle avec Grist ! David Smedberg a mis Grist \u00e0 l\u2019\u00e9preuve en cr\u00e9ant un document capable de suivre ses statistiques Wordle sur plusieurs appareils et d\u2019analyser ses meilleurs mots de devinette. Il a partag\u00e9 son document sur notre forum . Son article de blog d\u00e9taill\u00e9 sur son exp\u00e9rience est \u00e0 lire absolument. \ud83e\udd29 Fantastique ! Appliquer une formule uniquement aux lignes filtr\u00e9es/visibles. Grist applique les formules \u00e0 toute la colonne. Que faire si vous ne voulez transformer que les lignes filtr\u00e9es ? Voici une solution utile. Basculer activ\u00e9/d\u00e9sactiv\u00e9 si une pi\u00e8ce jointe est pr\u00e9sente. Supposons que vous ayez une colonne de pi\u00e8ces jointes et que vous souhaitiez filtrer les lignes ayant des pi\u00e8ces jointes. Voici comment basculer un interrupteur sur \u201cactiv\u00e9\u201d s\u2019il y a une pi\u00e8ce jointe. Afficher des images \u00e0 partir d\u2019URL. Voici comment configurer un widget personnalis\u00e9 pour pr\u00e9visualiser des images \u00e0 partir d\u2019URL. Nouveaux mod\u00e8les # Sponsors et participants \u00e0 un \u00e9v\u00e9nement # Suivez les inscriptions aux \u00e9v\u00e9nements et les revenus des billets, et r\u00e9conciliez les sponsors et les participants. ALLER AU MOD\u00c8LE Giveaway public # Organisez des giveaways publics sur la base du premier arriv\u00e9, premier servi. Ce mod\u00e8le utilise des permissions avanc\u00e9es pour limiter qui peut r\u00e9clamer quels cadeaux. ALLER AU MOD\u00c8LE Gestion de projet # Suivez les t\u00e2ches par d\u00e9partement et projet, et signalez rapidement les t\u00e2ches \u00e0 risque. ALLER AU MOD\u00c8LE Aider \u00e0 faire passer le mot ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/03"},{"location":"newsletters/2022-03/#bulletin-de-mars-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mars 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Mise en forme conditionnelle ! Annonce du programme Sprouts Laissez-nous vous aider \u00e0 construire dans Grist ! Prochain webinaire \u2013 widgets personnalis\u00e9s Apprenez \u00e0 ajouter des cartes, des factures et d\u2019autres surprises. 3 nouveaux mod\u00e8les \u00c9v\u00e9nements, cadeaux, et plus encore. Grist et Wordle ??? Am\u00e9liorez votre jeu Wordle : \ud83d\udfe8\ud83d\udfe9\ud83d\udfe9\ud83d\udfe9\ud83d\udfe9","title":"Bulletin de Mars 2022"},{"location":"newsletters/2022-03/#programme-sprouts","text":"Nous lan\u00e7ons un nouveau programme pour aider les \u00e9quipes \u00e0 d\u00e9marrer rapidement avec Grist. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, nous sommes l\u00e0 pour vous aider. Voici comment cela fonctionne : \u00c9ligibilit\u00e9. Toute personne disposant d\u2019un espace d\u2019\u00e9quipe est \u00e9ligible au programme Sprouts (m\u00eame pendant l\u2019essai gratuit). Planifiez un appel de consultation gratuit de 30 minutes. Envoyez un email \u00e0 success@getgrist.com et d\u00e9crivez votre cas d\u2019utilisation. Nous vous mettrons en relation avec un expert Grist de notre \u00e9quipe et planifierons une rencontre. Lors de cet appel, nous estimerons l\u2019ampleur du travail. Pour les projets rapides. Si nous estimons que votre projet peut \u00eatre r\u00e9alis\u00e9 en moins d\u2019une heure, nous le ferons nous-m\u00eames \u2014 gratuitement ! De nombreux cas d\u2019utilisation entrent dans cette cat\u00e9gorie. Pour les projets plus importants. Pour les projets de plus d\u2019une heure, nous recommanderons un prestataire form\u00e9 et v\u00e9rifi\u00e9 par Grist, ayant un acc\u00e8s rapide \u00e0 notre \u00e9quipe. Que vous choisissiez de travailler avec notre prestataire ou avec quelqu\u2019un d\u2019autre, nous planifierons un autre appel de 30 minutes pour nous assurer que tout le monde comprend le projet. Sur cette base, le prestataire estimera le travail et proposera un prix. Visitez notre site web pour soumettre une demande !","title":"Programme Sprouts"},{"location":"newsletters/2022-03/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-03/#mise-en-forme-conditionnelle","text":"La mise en forme conditionnelle est enfin l\u00e0 ! \ud83c\udf8a Dans le panneau de cr\u00e9ation dans le menu de colonne, sous STYLE DE CELLULE, vous pouvez maintenant ajouter des styles conditionnels. Entrez une formule et stylisez la couleur de fond et de texte de la cellule. Vous pouvez ajouter plusieurs r\u00e8gles conditionnelles. En savoir plus.","title":"Mise en forme conditionnelle"},{"location":"newsletters/2022-03/#amelioration-de-la-detection-des-types-de-colonnes","text":"Lorsque vous importez ou copiez et collez des donn\u00e9es, Grist est maintenant beaucoup plus performant pour analyser les donn\u00e9es et deviner les types de colonnes. Ouf ! Cela signifie moins de nettoyage de donn\u00e9es lors de l\u2019importation de nouvelles donn\u00e9es ! \ud83c\udf89","title":"Am\u00e9lioration de la d\u00e9tection des types de colonnes"},{"location":"newsletters/2022-03/#nouvelle-methode-api-pour-ajouter-ou-mettre-a-jour","text":"Nous avons ajout\u00e9 une nouvelle m\u00e9thode pour mettre \u00e0 jour un enregistrement existant ou, s\u2019il n\u2019existe pas, en ajouter un nouveau. En savoir plus.","title":"Nouvelle m\u00e9thode API pour ajouter ou mettre \u00e0 jour"},{"location":"newsletters/2022-03/#grist-help-est-maintenant-public","text":"Notre Centre d\u2019aide est maintenu sur GitHub. Le r\u00e9pertoire est maintenant public , afin que la communaut\u00e9 puisse aider \u00e0 am\u00e9liorer notre documentation et nos tutoriels.","title":"Grist-help est maintenant public !"},{"location":"newsletters/2022-03/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-03/#webinaire-widgets-personnalises","text":"Les widgets personnalis\u00e9s sont devenus plus faciles. Apprenez \u00e0 configurer des widgets personnalis\u00e9s \u00e0 partir du menu des widgets pr\u00e9d\u00e9finis dans le panneau de cr\u00e9ation. Jeudi 14 avril \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Lors du webinaire de mars, Anais a expliqu\u00e9 comment configurer des permissions avanc\u00e9es sur des documents priv\u00e9s et publics. REGARDER L\u2019ENREGISTREMENT DE MARS","title":"Webinaire : Widgets personnalis\u00e9s"},{"location":"newsletters/2022-03/#points-forts-de-la-communaute","text":"Am\u00e9liorez vos statistiques Wordle avec Grist ! David Smedberg a mis Grist \u00e0 l\u2019\u00e9preuve en cr\u00e9ant un document capable de suivre ses statistiques Wordle sur plusieurs appareils et d\u2019analyser ses meilleurs mots de devinette. Il a partag\u00e9 son document sur notre forum . Son article de blog d\u00e9taill\u00e9 sur son exp\u00e9rience est \u00e0 lire absolument. \ud83e\udd29 Fantastique ! Appliquer une formule uniquement aux lignes filtr\u00e9es/visibles. Grist applique les formules \u00e0 toute la colonne. Que faire si vous ne voulez transformer que les lignes filtr\u00e9es ? Voici une solution utile. Basculer activ\u00e9/d\u00e9sactiv\u00e9 si une pi\u00e8ce jointe est pr\u00e9sente. Supposons que vous ayez une colonne de pi\u00e8ces jointes et que vous souhaitiez filtrer les lignes ayant des pi\u00e8ces jointes. Voici comment basculer un interrupteur sur \u201cactiv\u00e9\u201d s\u2019il y a une pi\u00e8ce jointe. Afficher des images \u00e0 partir d\u2019URL. Voici comment configurer un widget personnalis\u00e9 pour pr\u00e9visualiser des images \u00e0 partir d\u2019URL.","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2022-03/#nouveaux-modeles","text":"","title":"Nouveaux mod\u00e8les"},{"location":"newsletters/2022-03/#sponsors-et-participants-a-un-evenement","text":"Suivez les inscriptions aux \u00e9v\u00e9nements et les revenus des billets, et r\u00e9conciliez les sponsors et les participants. ALLER AU MOD\u00c8LE","title":"Sponsors et participants \u00e0 un \u00e9v\u00e9nement"},{"location":"newsletters/2022-03/#giveaway-public","text":"Organisez des giveaways publics sur la base du premier arriv\u00e9, premier servi. Ce mod\u00e8le utilise des permissions avanc\u00e9es pour limiter qui peut r\u00e9clamer quels cadeaux. ALLER AU MOD\u00c8LE","title":"Giveaway public"},{"location":"newsletters/2022-03/#gestion-de-projet","text":"Suivez les t\u00e2ches par d\u00e9partement et projet, et signalez rapidement les t\u00e2ches \u00e0 risque. ALLER AU MOD\u00c8LE","title":"Gestion de projet"},{"location":"newsletters/2022-03/#aider-a-faire-passer-le-mot","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f G2 Capterra TrustRadius","title":"Aider \u00e0 faire passer le mot ?"},{"location":"newsletters/2022-03/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-04/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019information d\u2019avril 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin \u00c9diteur de texte enrichi ! Base de donn\u00e9es des parcs nationaux dans Grist ! Une ressource et une application maintenues par la communaut\u00e9, enti\u00e8rement construites dans Grist. Nouvelles options de police ! Gras, italique, soulign\u00e9, et barr\u00e9 votre texte. Prochain webinaire \u2013 retour aux bases Comment construire des flux de travail efficaces dans Grist. 2 nouveaux mod\u00e8les Suivi de temps simple et matrice de gestion du temps Covey. Quoi de neuf # \u00c9diteur de texte enrichi # Ajoutez une vue notepad \u00e0 votre document et affichez les donn\u00e9es d\u2019une colonne dans un \u00e9diteur de texte enrichi. Dans le menu des vues personnalis\u00e9es, s\u00e9lectionnez \u201cNotepad\u201d dans la liste des vues pr\u00e9d\u00e9finies. Nouveau s\u00e9lecteur de police et de couleur # Le s\u00e9lecteur de couleurs est devenu encore plus color\u00e9 ! Pimentez vos choix et colonnes avec plus d\u2019options de police et de couleur. Gras , italique , soulign\u00e9 , et barr\u00e9 sont l\u00e0 ! Ces options sont \u00e9galement disponibles avec le formatage conditionnel . Copier les param\u00e8tres de colonne # Si vous copiez des cellules dans une colonne vide, le type et les options de la colonne d\u2019origine seront \u00e9galement copi\u00e9s. Cela inclut le formatage num\u00e9rique et de date, les couleurs de cellule inconditionnelles et les configurations de choix. Notez que les r\u00e8gles conditionnelles ne seront pas copi\u00e9es. Nouvelle action Zapier - Cr\u00e9er ou mettre \u00e0 jour un enregistrement # Il y a une nouvelle action Grist dans Zapier. Lors de l\u2019importation de donn\u00e9es externes via Zapier, vous pouvez d\u00e9sormais mettre \u00e0 jour les enregistrements existants en fonction d\u2019une cl\u00e9 de fusion ou, s\u2019il n\u2019y a pas de correspondance, cr\u00e9er un nouvel enregistrement. En savoir plus sur Zapier. Cela s\u2019appuie sur le point de terminaison API r\u00e9cemment ajout\u00e9 add-or-update . Int\u00e9grateur Dropbox # Si vous stockez des fichiers dans Dropbox, int\u00e9grez vos fichiers directement dans Grist. S\u00e9lectionnez \u201cInt\u00e9grateur Dropbox\u201d dans la liste des vues personnalis\u00e9es. Apprendre Grist # Webinaire : Retour aux bases # On nous demande tout le temps comment commencer avec Grist. La meilleure fa\u00e7on de d\u00e9montrer est avec un cas d\u2019utilisation r\u00e9el. Nous prendrons un flux de travail de feuille de calcul et l\u2019am\u00e9liorerons dans Grist. Jeudi 19 mai \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI Lors du webinaire d\u2019avril, Natalie a expliqu\u00e9 comment configurer les vues personnalis\u00e9es les plus utiles. REGARDEZ L\u2019ENREGISTREMENT D\u2019AVRIL Programme Sprouts # Commencez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre fait pour vous. EN SAVOIR PLUS Points forts de la communaut\u00e9 # Utilisation des colonnes basculantes pour cr\u00e9er une exp\u00e9rience de type bouton. Josh utilise Grist sur mobile pour suivre l\u2019inventaire dans son magasin de fleurs. Il a partag\u00e9 comment il utilise les colonnes basculantes comme boutons pour rationaliser son flux de travail. R\u00e9sumer les donn\u00e9es de plusieurs tables. Affinez vos comp\u00e9tences en Python en suivant le guide de Natalie sur la fa\u00e7on de r\u00e9cup\u00e9rer des donn\u00e9es de plusieurs tables dans la m\u00eame table de r\u00e9sum\u00e9. Pour les auto-h\u00e9bergeurs, un mod\u00e8le pour Grist avec traefik et Docker compose. Ex\u00e9cuter Grist sur votre propre ordinateur est assez facile. L\u2019h\u00e9berger pour le partager avec d\u2019autres n\u00e9cessite quelques \u00e9tapes suppl\u00e9mentaires. Apprenez comment. Nouveaux mod\u00e8les # Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis # Votre ressource unique pour toutes les informations sur les parcs nationaux ! Recherchez des parcs par d\u00e9signation, \u00e9tat, activit\u00e9s, et plus encore. Laissez des avis et suivez vos voyages ! Cette base de donn\u00e9es est participative et maintenue par la communaut\u00e9. Il y a une page dans la base de donn\u00e9es pour soumettre des suggestions et des corrections. Si vous vous sentez inspir\u00e9 pour cr\u00e9er votre propre base de donn\u00e9es participative, consultez \u00e9galement l\u2019exemple plus simple de liste participative . Contactez-nous sur notre Forum Communautaire pour obtenir de l\u2019aide ou partager le r\u00e9sultat ! ALLER AU MOD\u00c8LE Suivi de temps simple # C\u2019est comme un chronom\u00e8tre dans une feuille de calcul ! Avec l\u2019avantage suppl\u00e9mentaire de cr\u00e9er un journal du temps total pass\u00e9 sur les t\u00e2ches. ALLER AU MOD\u00c8LE Matrice de gestion du temps Covey # Organisez votre liste de t\u00e2ches avec la m\u00e9thode de gestion du temps Covey. Priorisez par ce qui est urgent et important. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f \ud83c\udf1f Nouveau ! Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/04"},{"location":"newsletters/2022-04/#bulletin-dinformation-davril-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin \u00c9diteur de texte enrichi ! Base de donn\u00e9es des parcs nationaux dans Grist ! Une ressource et une application maintenues par la communaut\u00e9, enti\u00e8rement construites dans Grist. Nouvelles options de police ! Gras, italique, soulign\u00e9, et barr\u00e9 votre texte. Prochain webinaire \u2013 retour aux bases Comment construire des flux de travail efficaces dans Grist. 2 nouveaux mod\u00e8les Suivi de temps simple et matrice de gestion du temps Covey.","title":"Bulletin d’information d’avril 2022"},{"location":"newsletters/2022-04/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-04/#editeur-de-texte-enrichi","text":"Ajoutez une vue notepad \u00e0 votre document et affichez les donn\u00e9es d\u2019une colonne dans un \u00e9diteur de texte enrichi. Dans le menu des vues personnalis\u00e9es, s\u00e9lectionnez \u201cNotepad\u201d dans la liste des vues pr\u00e9d\u00e9finies.","title":"\u00c9diteur de texte enrichi"},{"location":"newsletters/2022-04/#nouveau-selecteur-de-police-et-de-couleur","text":"Le s\u00e9lecteur de couleurs est devenu encore plus color\u00e9 ! Pimentez vos choix et colonnes avec plus d\u2019options de police et de couleur. Gras , italique , soulign\u00e9 , et barr\u00e9 sont l\u00e0 ! Ces options sont \u00e9galement disponibles avec le formatage conditionnel .","title":"Nouveau s\u00e9lecteur de police et de couleur"},{"location":"newsletters/2022-04/#copier-les-parametres-de-colonne","text":"Si vous copiez des cellules dans une colonne vide, le type et les options de la colonne d\u2019origine seront \u00e9galement copi\u00e9s. Cela inclut le formatage num\u00e9rique et de date, les couleurs de cellule inconditionnelles et les configurations de choix. Notez que les r\u00e8gles conditionnelles ne seront pas copi\u00e9es.","title":"Copier les param\u00e8tres de colonne"},{"location":"newsletters/2022-04/#nouvelle-action-zapier-creer-ou-mettre-a-jour-un-enregistrement","text":"Il y a une nouvelle action Grist dans Zapier. Lors de l\u2019importation de donn\u00e9es externes via Zapier, vous pouvez d\u00e9sormais mettre \u00e0 jour les enregistrements existants en fonction d\u2019une cl\u00e9 de fusion ou, s\u2019il n\u2019y a pas de correspondance, cr\u00e9er un nouvel enregistrement. En savoir plus sur Zapier. Cela s\u2019appuie sur le point de terminaison API r\u00e9cemment ajout\u00e9 add-or-update .","title":"Nouvelle action Zapier - Cr\u00e9er ou mettre \u00e0 jour un enregistrement"},{"location":"newsletters/2022-04/#integrateur-dropbox","text":"Si vous stockez des fichiers dans Dropbox, int\u00e9grez vos fichiers directement dans Grist. S\u00e9lectionnez \u201cInt\u00e9grateur Dropbox\u201d dans la liste des vues personnalis\u00e9es.","title":"Int\u00e9grateur Dropbox"},{"location":"newsletters/2022-04/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-04/#webinaire-retour-aux-bases","text":"On nous demande tout le temps comment commencer avec Grist. La meilleure fa\u00e7on de d\u00e9montrer est avec un cas d\u2019utilisation r\u00e9el. Nous prendrons un flux de travail de feuille de calcul et l\u2019am\u00e9liorerons dans Grist. Jeudi 19 mai \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI Lors du webinaire d\u2019avril, Natalie a expliqu\u00e9 comment configurer les vues personnalis\u00e9es les plus utiles. REGARDEZ L\u2019ENREGISTREMENT D\u2019AVRIL","title":"Webinaire : Retour aux bases"},{"location":"newsletters/2022-04/#programme-sprouts","text":"Commencez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre fait pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-04/#points-forts-de-la-communaute","text":"Utilisation des colonnes basculantes pour cr\u00e9er une exp\u00e9rience de type bouton. Josh utilise Grist sur mobile pour suivre l\u2019inventaire dans son magasin de fleurs. Il a partag\u00e9 comment il utilise les colonnes basculantes comme boutons pour rationaliser son flux de travail. R\u00e9sumer les donn\u00e9es de plusieurs tables. Affinez vos comp\u00e9tences en Python en suivant le guide de Natalie sur la fa\u00e7on de r\u00e9cup\u00e9rer des donn\u00e9es de plusieurs tables dans la m\u00eame table de r\u00e9sum\u00e9. Pour les auto-h\u00e9bergeurs, un mod\u00e8le pour Grist avec traefik et Docker compose. Ex\u00e9cuter Grist sur votre propre ordinateur est assez facile. L\u2019h\u00e9berger pour le partager avec d\u2019autres n\u00e9cessite quelques \u00e9tapes suppl\u00e9mentaires. Apprenez comment.","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2022-04/#nouveaux-modeles","text":"","title":"Nouveaux mod\u00e8les"},{"location":"newsletters/2022-04/#base-de-donnees-des-parcs-nationaux-des-etats-unis","text":"Votre ressource unique pour toutes les informations sur les parcs nationaux ! Recherchez des parcs par d\u00e9signation, \u00e9tat, activit\u00e9s, et plus encore. Laissez des avis et suivez vos voyages ! Cette base de donn\u00e9es est participative et maintenue par la communaut\u00e9. Il y a une page dans la base de donn\u00e9es pour soumettre des suggestions et des corrections. Si vous vous sentez inspir\u00e9 pour cr\u00e9er votre propre base de donn\u00e9es participative, consultez \u00e9galement l\u2019exemple plus simple de liste participative . Contactez-nous sur notre Forum Communautaire pour obtenir de l\u2019aide ou partager le r\u00e9sultat ! ALLER AU MOD\u00c8LE","title":"Base de donn\u00e9es des parcs nationaux des \u00c9tats-Unis"},{"location":"newsletters/2022-04/#suivi-de-temps-simple","text":"C\u2019est comme un chronom\u00e8tre dans une feuille de calcul ! Avec l\u2019avantage suppl\u00e9mentaire de cr\u00e9er un journal du temps total pass\u00e9 sur les t\u00e2ches. ALLER AU MOD\u00c8LE","title":"Suivi de temps simple"},{"location":"newsletters/2022-04/#matrice-de-gestion-du-temps-covey","text":"Organisez votre liste de t\u00e2ches avec la m\u00e9thode de gestion du temps Covey. Priorisez par ce qui est urgent et important. ALLER AU MOD\u00c8LE","title":"Matrice de gestion du temps Covey"},{"location":"newsletters/2022-04/#aidez-nous-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f \ud83c\udf1f Nouveau ! Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-04/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2022 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Dans ce bulletin Page de Donn\u00e9es Sources ! Lier des Donn\u00e9es Connexes aux Tables de Synth\u00e8se Lors de la liaison des tables de synth\u00e8se et d\u2019autres vues, vous pouvez d\u00e9sormais lier \u00e9galement les colonnes de r\u00e9f\u00e9rence. Webinaire : Suivi des D\u00e9penses dans Grist vs Excel Comment cr\u00e9er des flux de travail efficaces dans Grist. Raccourci pour Dupliquer des Lignes Ctrl + Shift + D sur Windows, ou \u2318 \u21e7 D sur Mac. 2 Nouveaux Mod\u00e8les Pr\u00e9paration aux ouragans et gestion des employ\u00e9s temporaires. Quoi de Neuf # Donn\u00e9es Sources # Pr\u00e9sentation de la page de donn\u00e9es sources, une page sp\u00e9ciale qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document, facilitant ainsi la recherche et la navigation dans toutes vos donn\u00e9es. En savoir plus. Les Donn\u00e9es Sources \u00e9taient attendues depuis longtemps ! Dans Grist, il y a toujours eu une s\u00e9paration conceptuelle entre les vues et les donn\u00e9es sous-jacentes. En tant que cr\u00e9ateur Grist, vous vous \u00eates probablement retrouv\u00e9 dans la peau d\u2019un d\u00e9veloppeur d\u2019applications : \u00e0 un moment donn\u00e9, vous pensez aux relations dans les donn\u00e9es, et \u00e0 un autre moment, vous concevez comment pr\u00e9senter ces donn\u00e9es dans des vues productives et pratiques. Les donn\u00e9es sources rendent cette s\u00e9paration explicite. C\u2019est un endroit o\u00f9 vous pouvez toujours trouver les donn\u00e9es sous-jacentes et leur structure. Lors de la cr\u00e9ation de pages, votre liste de pages peut d\u00e9sormais \u00eatre limit\u00e9e aux vues les plus utiles, sans l\u2019encombrement des tables auxiliaires. Celles-ci restent disponibles \u00e0 tout moment dans la vue des donn\u00e9es sources. Lier des Donn\u00e9es R\u00e9f\u00e9renc\u00e9es aux Tables de Synth\u00e8se # Les tables qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes d\u2019une table de synth\u00e8se peuvent d\u00e9sormais \u00eatre li\u00e9es \u00e0 la table de synth\u00e8se elle-m\u00eame. Point de Terminaison API GET /attachments # Nouveau point de terminaison API. /attachments renverra la liste de toutes les m\u00e9tadonn\u00e9es des pi\u00e8ces jointes. En savoir plus. D\u00e9tails d\u2019Acc\u00e8s et Quitter un Document # Les non-propri\u00e9taires de documents peuvent d\u00e9sormais consulter leurs d\u00e9tails d\u2019acc\u00e8s et quitter un document s\u2019ils le souhaitent. Cliquez sur l\u2019ic\u00f4ne de partage en haut \u00e0 droite, puis sur \u00ab D\u00e9tails d\u2019acc\u00e8s \u00bb. Dans la fen\u00eatre contextuelle des d\u00e9tails d\u2019acc\u00e8s, vous pouvez cliquer sur l\u2019ic\u00f4ne de la corbeille pour quitter un document. Nouveau Raccourci Clavier # Nouveau raccourci clavier pour dupliquer les enregistrements s\u00e9lectionn\u00e9s ! Ctrl + Shift + D sur Windows, ou \u2318 \u21e7 D sur Mac. Apprendre Grist # Webinaire : Suivi des D\u00e9penses dans Grist vs Excel # Suivre les d\u00e9penses dans une feuille de calcul peut \u00eatre pratique, mais les feuilles de calcul traditionnelles n\u00e9cessitent beaucoup de maintenance \u2014 surtout avec les formules. Grist peut rendre le suivi des d\u00e9penses plus facile. Rejoignez-nous pour en savoir plus. Jeudi 16 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUIN En mai, nous sommes retourn\u00e9s aux bases. Natalie a pris un flux de travail de donn\u00e9es dans Google Sheets et l\u2019a transform\u00e9 en un tableau de bord productif dans Grist. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais que vous avez besoin d\u2019aide pour le construire, le programme Sprouts peut \u00eatre fait pour vous. EN SAVOIR PLUS Points Forts de la Communaut\u00e9 # Num\u00e9ros s\u00e9quentiels \u00e0 l\u2019aide de formules. Consultez ce fil de discussion avec quelques exemples sur comment obtenir des num\u00e9ros s\u00e9quentiels dans Grist. Concat\u00e9ner des donn\u00e9es dans des colonnes de types diff\u00e9rents. Concat\u00e9ner du texte est simple, mais que faire si vous souhaitez concat\u00e9ner diff\u00e9rents types de donn\u00e9es, tels que du texte, des colonnes de r\u00e9f\u00e9rence et des dates ? Apprenez comment. Num\u00e9ros commen\u00e7ant par z\u00e9ro. Natalie partage deux m\u00e9thodes. Nouveaux Mod\u00e8les # Pr\u00e9paration aux Ouragans # Vous vivez sur la c\u00f4te ? Ne stressez pas ! Utilisez ce mod\u00e8le pour vous assurer que vous avez tout ce dont vous avez besoin en cas d\u2019ouragan. ALLER AU MOD\u00c8LE Gestion des Employ\u00e9s Temporaires # G\u00e9rez facilement le personnel pour les \u00e9v\u00e9nements et suivez les feuilles de temps des employ\u00e9s. Ces donn\u00e9es d\u2019exemple sont ax\u00e9es sur le personnel pour les spectacles dans un th\u00e9\u00e2tre, mais le mod\u00e8le peut \u00eatre modifi\u00e9 pour la restauration, le personnel \u00e9v\u00e9nementiel, et plus encore. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/05"},{"location":"newsletters/2022-05/#bulletin-de-mai-2022","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Dans ce bulletin Page de Donn\u00e9es Sources ! Lier des Donn\u00e9es Connexes aux Tables de Synth\u00e8se Lors de la liaison des tables de synth\u00e8se et d\u2019autres vues, vous pouvez d\u00e9sormais lier \u00e9galement les colonnes de r\u00e9f\u00e9rence. Webinaire : Suivi des D\u00e9penses dans Grist vs Excel Comment cr\u00e9er des flux de travail efficaces dans Grist. Raccourci pour Dupliquer des Lignes Ctrl + Shift + D sur Windows, ou \u2318 \u21e7 D sur Mac. 2 Nouveaux Mod\u00e8les Pr\u00e9paration aux ouragans et gestion des employ\u00e9s temporaires.","title":"Bulletin de Mai 2022"},{"location":"newsletters/2022-05/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-05/#donnees-sources","text":"Pr\u00e9sentation de la page de donn\u00e9es sources, une page sp\u00e9ciale qui r\u00e9pertorie toutes les tables de donn\u00e9es de votre document, facilitant ainsi la recherche et la navigation dans toutes vos donn\u00e9es. En savoir plus. Les Donn\u00e9es Sources \u00e9taient attendues depuis longtemps ! Dans Grist, il y a toujours eu une s\u00e9paration conceptuelle entre les vues et les donn\u00e9es sous-jacentes. En tant que cr\u00e9ateur Grist, vous vous \u00eates probablement retrouv\u00e9 dans la peau d\u2019un d\u00e9veloppeur d\u2019applications : \u00e0 un moment donn\u00e9, vous pensez aux relations dans les donn\u00e9es, et \u00e0 un autre moment, vous concevez comment pr\u00e9senter ces donn\u00e9es dans des vues productives et pratiques. Les donn\u00e9es sources rendent cette s\u00e9paration explicite. C\u2019est un endroit o\u00f9 vous pouvez toujours trouver les donn\u00e9es sous-jacentes et leur structure. Lors de la cr\u00e9ation de pages, votre liste de pages peut d\u00e9sormais \u00eatre limit\u00e9e aux vues les plus utiles, sans l\u2019encombrement des tables auxiliaires. Celles-ci restent disponibles \u00e0 tout moment dans la vue des donn\u00e9es sources.","title":"Donn\u00e9es Sources"},{"location":"newsletters/2022-05/#lier-des-donnees-referencees-aux-tables-de-synthese","text":"Les tables qui r\u00e9f\u00e9rencent les donn\u00e9es sous-jacentes d\u2019une table de synth\u00e8se peuvent d\u00e9sormais \u00eatre li\u00e9es \u00e0 la table de synth\u00e8se elle-m\u00eame.","title":"Lier des Donn\u00e9es R\u00e9f\u00e9renc\u00e9es aux Tables de Synth\u00e8se"},{"location":"newsletters/2022-05/#point-de-terminaison-api-get-attachments","text":"Nouveau point de terminaison API. /attachments renverra la liste de toutes les m\u00e9tadonn\u00e9es des pi\u00e8ces jointes. En savoir plus.","title":"Point de Terminaison API GET /attachments"},{"location":"newsletters/2022-05/#details-dacces-et-quitter-un-document","text":"Les non-propri\u00e9taires de documents peuvent d\u00e9sormais consulter leurs d\u00e9tails d\u2019acc\u00e8s et quitter un document s\u2019ils le souhaitent. Cliquez sur l\u2019ic\u00f4ne de partage en haut \u00e0 droite, puis sur \u00ab D\u00e9tails d\u2019acc\u00e8s \u00bb. Dans la fen\u00eatre contextuelle des d\u00e9tails d\u2019acc\u00e8s, vous pouvez cliquer sur l\u2019ic\u00f4ne de la corbeille pour quitter un document.","title":"D\u00e9tails d’Acc\u00e8s et Quitter un Document"},{"location":"newsletters/2022-05/#nouveau-raccourci-clavier","text":"Nouveau raccourci clavier pour dupliquer les enregistrements s\u00e9lectionn\u00e9s ! Ctrl + Shift + D sur Windows, ou \u2318 \u21e7 D sur Mac.","title":"Nouveau Raccourci Clavier"},{"location":"newsletters/2022-05/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-05/#webinaire-suivi-des-depenses-dans-grist-vs-excel","text":"Suivre les d\u00e9penses dans une feuille de calcul peut \u00eatre pratique, mais les feuilles de calcul traditionnelles n\u00e9cessitent beaucoup de maintenance \u2014 surtout avec les formules. Grist peut rendre le suivi des d\u00e9penses plus facile. Rejoignez-nous pour en savoir plus. Jeudi 16 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUIN En mai, nous sommes retourn\u00e9s aux bases. Natalie a pris un flux de travail de donn\u00e9es dans Google Sheets et l\u2019a transform\u00e9 en un tableau de bord productif dans Grist. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL","title":"Webinaire : Suivi des D\u00e9penses dans Grist vs Excel"},{"location":"newsletters/2022-05/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais que vous avez besoin d\u2019aide pour le construire, le programme Sprouts peut \u00eatre fait pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-05/#points-forts-de-la-communaute","text":"Num\u00e9ros s\u00e9quentiels \u00e0 l\u2019aide de formules. Consultez ce fil de discussion avec quelques exemples sur comment obtenir des num\u00e9ros s\u00e9quentiels dans Grist. Concat\u00e9ner des donn\u00e9es dans des colonnes de types diff\u00e9rents. Concat\u00e9ner du texte est simple, mais que faire si vous souhaitez concat\u00e9ner diff\u00e9rents types de donn\u00e9es, tels que du texte, des colonnes de r\u00e9f\u00e9rence et des dates ? Apprenez comment. Num\u00e9ros commen\u00e7ant par z\u00e9ro. Natalie partage deux m\u00e9thodes.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-05/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-05/#preparation-aux-ouragans","text":"Vous vivez sur la c\u00f4te ? Ne stressez pas ! Utilisez ce mod\u00e8le pour vous assurer que vous avez tout ce dont vous avez besoin en cas d\u2019ouragan. ALLER AU MOD\u00c8LE","title":"Pr\u00e9paration aux Ouragans"},{"location":"newsletters/2022-05/#gestion-des-employes-temporaires","text":"G\u00e9rez facilement le personnel pour les \u00e9v\u00e9nements et suivez les feuilles de temps des employ\u00e9s. Ces donn\u00e9es d\u2019exemple sont ax\u00e9es sur le personnel pour les spectacles dans un th\u00e9\u00e2tre, mais le mod\u00e8le peut \u00eatre modifi\u00e9 pour la restauration, le personnel \u00e9v\u00e9nementiel, et plus encore. ALLER AU MOD\u00c8LE","title":"Gestion des Employ\u00e9s Temporaires"},{"location":"newsletters/2022-05/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-05/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2022 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce Bulletin Filtrage par Intervalle Bonne Fiert\u00e9 ! D\u00e9couvrez notre feuille de calcul arc-en-ciel ! \ud83c\udf08 Webinaire : Structurer les Donn\u00e9es Relationnelles Meilleurs conseils sur la structuration des donn\u00e9es dans Grist. 2 Nouveaux Mod\u00e8les Suivi des d\u00e9penses et planification des repas. PEEK(a-boo) Nouvelle fonction sp\u00e9ciale pour r\u00e9soudre les r\u00e9f\u00e9rences circulaires dans les formules d\u2019initialisation. Bonne Fiert\u00e9 ! # Nous esp\u00e9rons que vous avez pass\u00e9 un mois de la Fiert\u00e9 amusant et color\u00e9 ! Nous l\u2019avons fait. Feuille de calcul arc-en-ciel ! \ud83c\udff3\u200d\ud83c\udf08 ALLER \u00c0 LA FEUILLE DE CALCUL ARC-EN-CIEL Quoi de Neuf # Filtrage par Intervalle # Il est maintenant possible de filtrer les colonnes Num\u00e9riques et Date par un intervalle ! Gardez un \u0153il sur d\u2019autres am\u00e9liorations du filtrage dans un avenir proche. PEEK() # PEEK () \u00e9value une expression sans cr\u00e9er de d\u00e9pendances ni exiger que les valeurs r\u00e9f\u00e9renc\u00e9es soient \u00e0 jour, et utilise la valeur qu\u2019il trouve dans une cellule. Ceci est utile pour \u00e9viter les erreurs de r\u00e9f\u00e9rence circulaire, en particulier dans les formules d\u2019initialisation. En savoir plus. Voici un exemple de PEEK() en action. Notez que dans la colonne de formule d\u2019initialisation, les deux formules peuvent se r\u00e9f\u00e9rencer mutuellement sans cr\u00e9er d\u2019erreur circulaire. Apprendre Grist # Webinaire : Structurer les Donn\u00e9es dans Grist # Avant de pouvoir cr\u00e9er des mises en page productives, vous devez r\u00e9fl\u00e9chir \u00e0 la structuration de vos donn\u00e9es. En juillet, nous partagerons quelques meilleures pratiques et mettrons en \u00e9vidence les diff\u00e9rences dans la structuration des donn\u00e9es dans les feuilles de calcul par rapport \u00e0 Grist. Jeudi 21 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUILLET En juin, Anais a d\u00e9montr\u00e9 comment Grist peut simplifier les flux de travail de donn\u00e9es, tels que le suivi des d\u00e9penses, par rapport aux feuilles de calcul traditionnelles. REGARDER L\u2019ENREGISTREMENT DE JUIN Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts est peut-\u00eatre fait pour vous. EN SAVOIR PLUS Conseils Rapides # Toutes les colonnes de formule dans les tables de r\u00e9sum\u00e9 peuvent \u00eatre des s\u00e9ries dans les graphiques bas\u00e9s sur cette table de r\u00e9sum\u00e9. Par exemple, dans le mod\u00e8le de Grand Livre , les colonnes de Profit dans les tables de r\u00e9sum\u00e9 sont utilis\u00e9es dans les graphiques. Il existe des options de tri suppl\u00e9mentaires dans le menu de tri du panneau de cr\u00e9ation sous l\u2019ic\u00f4ne des trois points. Au cas o\u00f9 vous l\u2019auriez manqu\u00e9. Le lecteur vid\u00e9o Grist est un widget personnalis\u00e9 qui lit une vid\u00e9o \u00e0 partir d\u2019une URL, similaire \u00e0 la fa\u00e7on dont le visionneur d\u2019images affiche une image \u00e0 partir d\u2019une URL. Points Forts de la Communaut\u00e9 # Formules d\u2019initialisation conditionnelles. Utilisez une formule d\u2019initialisation pour remplir automatiquement des donn\u00e9es dans certains cas, mais pas dans d\u2019autres. D\u00e9finir la valeur par d\u00e9faut pour une colonne de r\u00e9f\u00e9rence. Utilisez des formules d\u2019initialisation pour d\u00e9finir des valeurs de r\u00e9f\u00e9rence par d\u00e9faut. Nouveaux Mod\u00e8les # Suivi des D\u00e9penses pour \u00c9quipes # G\u00e9rez toutes les d\u00e9penses des employ\u00e9s dans une seule feuille de calcul ! Fini de jongler avec les d\u00e9penses de dizaines d\u2019employ\u00e9s dans une liste principale. Avec les permissions avanc\u00e9es, les employ\u00e9s peuvent se connecter \u00e0 Grist, consulter et mettre \u00e0 jour uniquement leurs d\u00e9penses, et les tables de r\u00e9sum\u00e9 Grist s\u2019occupent du reste. ALLER AU MOD\u00c8LE Liste de Courses + Planificateur de Repas # Cr\u00e9ez des recettes, planifiez des menus hebdomadaires et faites une liste de courses en un seul endroit ! ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/06"},{"location":"newsletters/2022-06/#bulletin-de-juin-2022","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce Bulletin Filtrage par Intervalle Bonne Fiert\u00e9 ! D\u00e9couvrez notre feuille de calcul arc-en-ciel ! \ud83c\udf08 Webinaire : Structurer les Donn\u00e9es Relationnelles Meilleurs conseils sur la structuration des donn\u00e9es dans Grist. 2 Nouveaux Mod\u00e8les Suivi des d\u00e9penses et planification des repas. PEEK(a-boo) Nouvelle fonction sp\u00e9ciale pour r\u00e9soudre les r\u00e9f\u00e9rences circulaires dans les formules d\u2019initialisation.","title":"Bulletin de Juin 2022"},{"location":"newsletters/2022-06/#bonne-fierte","text":"Nous esp\u00e9rons que vous avez pass\u00e9 un mois de la Fiert\u00e9 amusant et color\u00e9 ! Nous l\u2019avons fait. Feuille de calcul arc-en-ciel ! \ud83c\udff3\u200d\ud83c\udf08 ALLER \u00c0 LA FEUILLE DE CALCUL ARC-EN-CIEL","title":"Bonne Fiert\u00e9 !"},{"location":"newsletters/2022-06/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-06/#filtrage-par-intervalle","text":"Il est maintenant possible de filtrer les colonnes Num\u00e9riques et Date par un intervalle ! Gardez un \u0153il sur d\u2019autres am\u00e9liorations du filtrage dans un avenir proche.","title":"Filtrage par Intervalle"},{"location":"newsletters/2022-06/#peek","text":"PEEK () \u00e9value une expression sans cr\u00e9er de d\u00e9pendances ni exiger que les valeurs r\u00e9f\u00e9renc\u00e9es soient \u00e0 jour, et utilise la valeur qu\u2019il trouve dans une cellule. Ceci est utile pour \u00e9viter les erreurs de r\u00e9f\u00e9rence circulaire, en particulier dans les formules d\u2019initialisation. En savoir plus. Voici un exemple de PEEK() en action. Notez que dans la colonne de formule d\u2019initialisation, les deux formules peuvent se r\u00e9f\u00e9rencer mutuellement sans cr\u00e9er d\u2019erreur circulaire.","title":"PEEK()"},{"location":"newsletters/2022-06/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-06/#webinaire-structurer-les-donnees-dans-grist","text":"Avant de pouvoir cr\u00e9er des mises en page productives, vous devez r\u00e9fl\u00e9chir \u00e0 la structuration de vos donn\u00e9es. En juillet, nous partagerons quelques meilleures pratiques et mettrons en \u00e9vidence les diff\u00e9rences dans la structuration des donn\u00e9es dans les feuilles de calcul par rapport \u00e0 Grist. Jeudi 21 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUILLET En juin, Anais a d\u00e9montr\u00e9 comment Grist peut simplifier les flux de travail de donn\u00e9es, tels que le suivi des d\u00e9penses, par rapport aux feuilles de calcul traditionnelles. REGARDER L\u2019ENREGISTREMENT DE JUIN","title":"Webinaire : Structurer les Donn\u00e9es dans Grist"},{"location":"newsletters/2022-06/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts est peut-\u00eatre fait pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-06/#conseils-rapides","text":"Toutes les colonnes de formule dans les tables de r\u00e9sum\u00e9 peuvent \u00eatre des s\u00e9ries dans les graphiques bas\u00e9s sur cette table de r\u00e9sum\u00e9. Par exemple, dans le mod\u00e8le de Grand Livre , les colonnes de Profit dans les tables de r\u00e9sum\u00e9 sont utilis\u00e9es dans les graphiques. Il existe des options de tri suppl\u00e9mentaires dans le menu de tri du panneau de cr\u00e9ation sous l\u2019ic\u00f4ne des trois points. Au cas o\u00f9 vous l\u2019auriez manqu\u00e9. Le lecteur vid\u00e9o Grist est un widget personnalis\u00e9 qui lit une vid\u00e9o \u00e0 partir d\u2019une URL, similaire \u00e0 la fa\u00e7on dont le visionneur d\u2019images affiche une image \u00e0 partir d\u2019une URL.","title":"Conseils Rapides"},{"location":"newsletters/2022-06/#points-forts-de-la-communaute","text":"Formules d\u2019initialisation conditionnelles. Utilisez une formule d\u2019initialisation pour remplir automatiquement des donn\u00e9es dans certains cas, mais pas dans d\u2019autres. D\u00e9finir la valeur par d\u00e9faut pour une colonne de r\u00e9f\u00e9rence. Utilisez des formules d\u2019initialisation pour d\u00e9finir des valeurs de r\u00e9f\u00e9rence par d\u00e9faut.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-06/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-06/#suivi-des-depenses-pour-equipes","text":"G\u00e9rez toutes les d\u00e9penses des employ\u00e9s dans une seule feuille de calcul ! Fini de jongler avec les d\u00e9penses de dizaines d\u2019employ\u00e9s dans une liste principale. Avec les permissions avanc\u00e9es, les employ\u00e9s peuvent se connecter \u00e0 Grist, consulter et mettre \u00e0 jour uniquement leurs d\u00e9penses, et les tables de r\u00e9sum\u00e9 Grist s\u2019occupent du reste. ALLER AU MOD\u00c8LE","title":"Suivi des D\u00e9penses pour \u00c9quipes"},{"location":"newsletters/2022-06/#liste-de-courses-planificateur-de-repas","text":"Cr\u00e9ez des recettes, planifiez des menus hebdomadaires et faites une liste de courses en un seul endroit ! ALLER AU MOD\u00c8LE","title":"Liste de Courses + Planificateur de Repas"},{"location":"newsletters/2022-06/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-06/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Juillet 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Aide-m\u00e9moire des Formules # Nouveau dans les formules Grist et Python ? Voici un aide-m\u00e9moire des formules avec les fonctions les plus couramment utilis\u00e9es et de nombreux exemples. ALLER \u00c0 L\u2019AIDE-M\u00c9MOIRE Si vous souhaitez une aide suppl\u00e9mentaire pour les formules, nous avons \u00e9galement un article approfondi ax\u00e9 sur les r\u00e9f\u00e9rences et les recherches avec plus d\u2019exemples. ALLER \u00c0 L\u2019ARTICLE Tables de R\u00e9sum\u00e9 dans les Donn\u00e9es Sources # Les tables de r\u00e9sum\u00e9 sont d\u00e9sormais r\u00e9pertori\u00e9es dans les donn\u00e9es sources, ce qui facilite la visualisation en un coup d\u2019\u0153il des tables de r\u00e9sum\u00e9 existant dans le document, et l\u2019examen de chacune d\u2019elles. Vous pouvez facilement identifier les tables de r\u00e9sum\u00e9 par l\u2019ic\u00f4ne sigma. Notez \u00e9galement les noms plus conviviaux pour les tables de r\u00e9sum\u00e9, comme Sales_summary . Quiconque a d\u00e9j\u00e0 remarqu\u00e9 GristSummary_5_Sales saura de quoi nous parlons. Apprendre Grist # Webinaire : Donn\u00e9es Relationnelles et Colonnes de R\u00e9f\u00e9rence # Le webinaire d\u2019ao\u00fbt se concentrera sur la mani\u00e8re de relier des donn\u00e9es dans Grist en utilisant des colonnes de r\u00e9f\u00e9rence, comment utiliser des donn\u00e9es li\u00e9es dans des tableaux de bord dynamiques, et comment effectuer des recherches. Jeudi 18 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAIRE D\u2019AO\u00dbT Comment structurer vos donn\u00e9es # En juillet, Anais a d\u00e9montr\u00e9 comment Grist peut simplifier les flux de travail de donn\u00e9es, tels que le suivi des d\u00e9penses, par rapport aux tableurs traditionnels. REGARDER L\u2019ENREGISTREMENT DE JUILLET Points Forts de la Communaut\u00e9 # R\u00e9sumer les donn\u00e9es avec un graphique en secteurs. Apprenez comment cr\u00e9er des graphiques en secteurs dans Grist. Trouver et mettre en \u00e9vidence les doublons avec un formatage conditionnel. Apprenez comment d\u00e9finir des styles conditionnels bas\u00e9s sur une formule qui retourne si une valeur est un doublon ou non. Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre pour vous. EN SAVOIR PLUS Nouveaux Mod\u00e8les # Tableau de Bord des Commissions de Vente # Les \u00e9quipes de vente et de comptabilit\u00e9 peuvent utiliser ce mod\u00e8le pour suivre les ventes et les commissions. Les repr\u00e9sentants commerciaux ne voient que leurs ventes individuelles et le classement g\u00e9n\u00e9ral. La direction peut tout voir. ALLER AU MOD\u00c8LE R\u00e9ponses aux Retours des Utilisateurs # Am\u00e9liorez votre produit en fonction des retours des clients ! Analysez et \u00e9valuez les r\u00e9ponses de vos enqu\u00eates utilisateurs. ALLER AU MOD\u00c8LE R\u00e9sultats du Score Net Promoteur # Gardez le doigt sur le pouls de la satisfaction de vos clients. Analysez et approfondissez les r\u00e9ponses de votre enqu\u00eate NPS. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/07"},{"location":"newsletters/2022-07/#bulletin-de-juillet-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Juillet 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin de Juillet 2022"},{"location":"newsletters/2022-07/#aide-memoire-des-formules","text":"Nouveau dans les formules Grist et Python ? Voici un aide-m\u00e9moire des formules avec les fonctions les plus couramment utilis\u00e9es et de nombreux exemples. ALLER \u00c0 L\u2019AIDE-M\u00c9MOIRE Si vous souhaitez une aide suppl\u00e9mentaire pour les formules, nous avons \u00e9galement un article approfondi ax\u00e9 sur les r\u00e9f\u00e9rences et les recherches avec plus d\u2019exemples. ALLER \u00c0 L\u2019ARTICLE","title":"Aide-m\u00e9moire des Formules"},{"location":"newsletters/2022-07/#tables-de-resume-dans-les-donnees-sources","text":"Les tables de r\u00e9sum\u00e9 sont d\u00e9sormais r\u00e9pertori\u00e9es dans les donn\u00e9es sources, ce qui facilite la visualisation en un coup d\u2019\u0153il des tables de r\u00e9sum\u00e9 existant dans le document, et l\u2019examen de chacune d\u2019elles. Vous pouvez facilement identifier les tables de r\u00e9sum\u00e9 par l\u2019ic\u00f4ne sigma. Notez \u00e9galement les noms plus conviviaux pour les tables de r\u00e9sum\u00e9, comme Sales_summary . Quiconque a d\u00e9j\u00e0 remarqu\u00e9 GristSummary_5_Sales saura de quoi nous parlons.","title":"Tables de R\u00e9sum\u00e9 dans les Donn\u00e9es Sources"},{"location":"newsletters/2022-07/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-07/#webinaire-donnees-relationnelles-et-colonnes-de-reference","text":"Le webinaire d\u2019ao\u00fbt se concentrera sur la mani\u00e8re de relier des donn\u00e9es dans Grist en utilisant des colonnes de r\u00e9f\u00e9rence, comment utiliser des donn\u00e9es li\u00e9es dans des tableaux de bord dynamiques, et comment effectuer des recherches. Jeudi 18 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAIRE D\u2019AO\u00dbT","title":"Webinaire : Donn\u00e9es Relationnelles et Colonnes de R\u00e9f\u00e9rence"},{"location":"newsletters/2022-07/#comment-structurer-vos-donnees","text":"En juillet, Anais a d\u00e9montr\u00e9 comment Grist peut simplifier les flux de travail de donn\u00e9es, tels que le suivi des d\u00e9penses, par rapport aux tableurs traditionnels. REGARDER L\u2019ENREGISTREMENT DE JUILLET","title":"Comment structurer vos donn\u00e9es"},{"location":"newsletters/2022-07/#points-forts-de-la-communaute","text":"R\u00e9sumer les donn\u00e9es avec un graphique en secteurs. Apprenez comment cr\u00e9er des graphiques en secteurs dans Grist. Trouver et mettre en \u00e9vidence les doublons avec un formatage conditionnel. Apprenez comment d\u00e9finir des styles conditionnels bas\u00e9s sur une formule qui retourne si une valeur est un doublon ou non.","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2022-07/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-07/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-07/#tableau-de-bord-des-commissions-de-vente","text":"Les \u00e9quipes de vente et de comptabilit\u00e9 peuvent utiliser ce mod\u00e8le pour suivre les ventes et les commissions. Les repr\u00e9sentants commerciaux ne voient que leurs ventes individuelles et le classement g\u00e9n\u00e9ral. La direction peut tout voir. ALLER AU MOD\u00c8LE","title":"Tableau de Bord des Commissions de Vente"},{"location":"newsletters/2022-07/#reponses-aux-retours-des-utilisateurs","text":"Am\u00e9liorez votre produit en fonction des retours des clients ! Analysez et \u00e9valuez les r\u00e9ponses de vos enqu\u00eates utilisateurs. ALLER AU MOD\u00c8LE","title":"R\u00e9ponses aux Retours des Utilisateurs"},{"location":"newsletters/2022-07/#resultats-du-score-net-promoteur","text":"Gardez le doigt sur le pouls de la satisfaction de vos clients. Analysez et approfondissez les r\u00e9ponses de votre enqu\u00eate NPS. ALLER AU MOD\u00c8LE","title":"R\u00e9sultats du Score Net Promoteur"},{"location":"newsletters/2022-07/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-07/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-08/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019ao\u00fbt 2022 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Ao\u00fbt 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Espaces d\u2019\u00e9quipe gratuits Membres d\u2019\u00e9quipe illimit\u00e9s + documents illimit\u00e9s, pour des documents de moins de 5 000 lignes. Styles conditionnels pour les lignes ! Appliquez des styles conditionnels \u00e0 une ligne enti\u00e8re. Aide aux formules am\u00e9lior\u00e9e Suggestions d\u2019autocompl\u00e9tion et messages d\u2019erreur plus utiles. \ud83d\udcaa Coup de projecteur sur la communaut\u00e9 open source ! Points forts des contributions cool de la communaut\u00e9 OSS. \ud83d\ude4f 2 nouveaux mod\u00e8les Organisateur de r\u00e9unions & carnet personnel, cr\u00e9\u00e9s par des utilisateurs g\u00e9niaux ! \ud83c\udf89 Webinaire : Cl\u00e9s de lien Partager des donn\u00e9es partielles avec des tiers. Espaces d\u2019\u00e9quipe gratuits # Grist est plus puissant lorsqu\u2019il est utilis\u00e9 de mani\u00e8re collaborative. C\u2019est pourquoi nous offrons d\u00e9sormais des espaces d\u2019\u00e9quipe gratuits pour toute votre \u00e9quipe. Membres d\u2019\u00e9quipe illimit\u00e9s + documents illimit\u00e9s, pour des documents de moins de 5 000 lignes. Les espaces d\u2019\u00e9quipe gratuits sont \u00e9galement enti\u00e8rement fonctionnels. CR\u00c9ER UN ESPACE D\u2019\u00c9QUIPE GRATUIT Quoi de neuf # Styles conditionnels pour les lignes # Vous pouvez d\u00e9sormais appliquer des styles conditionnels \u00e0 une ligne enti\u00e8re. Dans le panneau de cr\u00e9ation, c\u2019est sous l\u2019onglet Table > Vue . Aide aux formules am\u00e9lior\u00e9e + Autocompl\u00e9tion # \u00c9crire et d\u00e9panner des formules est devenu un peu plus facile avec des suggestions d\u2019autocompl\u00e9tion et des messages d\u2019erreur plus utiles. Par exemple, dans la capture d\u2019\u00e9cran ci-dessous, l\u2019autocompl\u00e9tion aide \u00e0 \u00e9crire la formule courante mais difficile \u00e0 retenir pour les recherches invers\u00e9es , et l\u2019erreur inclut une explication conviviale et des suggestions utiles pour la corriger. Vous voulez en savoir plus sur les formules ? Il y a beaucoup d\u2019informations sur les formules dans notre Centre d\u2019aide, y compris cette fiche de triche des formules r\u00e9cemment ajout\u00e9e. Ouvrir les donn\u00e9es sources depuis la vue # Vous pouvez ouvrir la table source d\u2019une vue sans quitter la page. Dans le menu de la vue, cliquez sur \u201cAfficher les donn\u00e9es sources\u201d. C\u2019est particuli\u00e8rement pratique pour les graphiques et les vues personnalis\u00e9es. Le panneau de gauche s\u2019\u00e9tend automatiquement # Saviez-vous que vous pouvez r\u00e9duire le menu de la page \u00e0 gauche pour vous donner plus d\u2019espace ? D\u00e9sormais, le menu r\u00e9duit s\u2019\u00e9tend automatiquement au survol, vous donnant plus de place sur les petits \u00e9crans ! \ud83c\udf89 Masquer plusieurs colonnes # Vous pouvez maintenant s\u00e9lectionner plusieurs colonnes, faire un clic droit pour ouvrir le menu des colonnes, et masquer toutes les colonnes s\u00e9lectionn\u00e9es en un clic. Contributions de la communaut\u00e9 et open source \ud83d\ude4f # Grist est open source . Nous sommes reconnaissants \u00e0 la communaut\u00e9 open source pour leurs contributions. Voici deux points forts r\u00e9cents. Renommer rapidement les pages # Pour renommer un nom de page, il vous suffit maintenant de cliquer. Merci, @LouisDelbosc ! Vues personnalis\u00e9es : Ajouter une description de colonne dans le panneau de cr\u00e9ation # Pour les d\u00e9veloppeurs de vues personnalis\u00e9es : lorsque vous sp\u00e9cifiez les colonnes auxquelles votre vue doit acc\u00e9der, vous pouvez d\u00e9sormais inclure une description pour aider \u00e0 guider vos utilisateurs de vues, comme montr\u00e9 ici . Merci, @yohanboniface ! Open Source + Points forts des d\u00e9veloppeurs \ud83d\udc69\u200d\ud83d\udcbb # grist-core omnibus. Paul a publi\u00e9 un grist-core omnibus pour faciliter l\u2019auto-h\u00e9bergement. Grist en tant qu\u2019application electron. L\u2019utilisateur stan-donarise a emball\u00e9 Grist en tant qu\u2019application electron qui fonctionne sur Windows 7 ou plus tard. Comme c\u2019est cool ! \ud83d\ude09 G\u00e9n\u00e9rer des docx \u00e0 partir d\u2019un mod\u00e8le. L\u2019utilisateur stan-donarise ne s\u2019est pas arr\u00eat\u00e9 l\u00e0. Il a int\u00e9gr\u00e9 docxtemplater dans une vue personnalis\u00e9e pour g\u00e9n\u00e9rer des rapports et des documents dans Grist. Apprendre Grist # Webinaire : Partager des donn\u00e9es partielles avec des cl\u00e9s de lien # En septembre, nous expliquerons comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Apprenez \u00e0 utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles, comme une seule ligne, avec des tiers. Jeudi 22 septembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAIRE DE SEPTEMBRE Donn\u00e9es relationnelles + Colonnes de r\u00e9f\u00e9rence # En ao\u00fbt, Natalie a plong\u00e9 profond\u00e9ment dans les colonnes de r\u00e9f\u00e9rence et comment les utiliser dans les tableaux de bord et les formules. REGARDER L\u2019ENREGISTREMENT D\u2019AO\u00dbT Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre pour vous. EN SAVOIR PLUS Nouveaux Mod\u00e8les # Organisateur de r\u00e9unions d\u2019\u00e9quipe # Utilisez ce mod\u00e8le pour stocker les comptes rendus de r\u00e9union d\u2019\u00e9quipe, les \u00e9l\u00e9ments d\u2019action, la documentation de projet et plus encore. Merci \u00e0 l\u2019utilisateur Grist Eduardo qui a partag\u00e9 ce mod\u00e8le avec nous. Il a \u00e9t\u00e9 l\u00e9g\u00e8rement modifi\u00e9 pour r\u00e9pondre \u00e0 des besoins plus g\u00e9n\u00e9raux. Vous voulez savoir comment cela a \u00e9t\u00e9 construit ? Regardez Natalie le construire lors du webinaire d\u2019ao\u00fbt. ALLER AU MOD\u00c8LE Carnet personnel # Organisez vos projets, informations de contact et t\u00e2ches dans ce carnet personnel. Ce mod\u00e8le a \u00e9t\u00e9 cr\u00e9\u00e9 par l\u2019utilisateur Grist Julien. Il a \u00e9t\u00e9 traduit et l\u00e9g\u00e8rement modifi\u00e9 pour r\u00e9pondre \u00e0 des besoins plus g\u00e9n\u00e9raux. D\u00e9couvrez sa pr\u00e9sentation dans le forum communautaire ! Si vous avez un mod\u00e8le cool que vous aimeriez partager, nous serions ravis d\u2019en entendre parler dans la vitrine communautaire ! ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/08"},{"location":"newsletters/2022-08/#bulletin-daout-2022","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Ao\u00fbt 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Espaces d\u2019\u00e9quipe gratuits Membres d\u2019\u00e9quipe illimit\u00e9s + documents illimit\u00e9s, pour des documents de moins de 5 000 lignes. Styles conditionnels pour les lignes ! Appliquez des styles conditionnels \u00e0 une ligne enti\u00e8re. Aide aux formules am\u00e9lior\u00e9e Suggestions d\u2019autocompl\u00e9tion et messages d\u2019erreur plus utiles. \ud83d\udcaa Coup de projecteur sur la communaut\u00e9 open source ! Points forts des contributions cool de la communaut\u00e9 OSS. \ud83d\ude4f 2 nouveaux mod\u00e8les Organisateur de r\u00e9unions & carnet personnel, cr\u00e9\u00e9s par des utilisateurs g\u00e9niaux ! \ud83c\udf89 Webinaire : Cl\u00e9s de lien Partager des donn\u00e9es partielles avec des tiers.","title":"Bulletin d’ao\u00fbt 2022"},{"location":"newsletters/2022-08/#espaces-dequipe-gratuits","text":"Grist est plus puissant lorsqu\u2019il est utilis\u00e9 de mani\u00e8re collaborative. C\u2019est pourquoi nous offrons d\u00e9sormais des espaces d\u2019\u00e9quipe gratuits pour toute votre \u00e9quipe. Membres d\u2019\u00e9quipe illimit\u00e9s + documents illimit\u00e9s, pour des documents de moins de 5 000 lignes. Les espaces d\u2019\u00e9quipe gratuits sont \u00e9galement enti\u00e8rement fonctionnels. CR\u00c9ER UN ESPACE D\u2019\u00c9QUIPE GRATUIT","title":"Espaces d’\u00e9quipe gratuits"},{"location":"newsletters/2022-08/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-08/#styles-conditionnels-pour-les-lignes","text":"Vous pouvez d\u00e9sormais appliquer des styles conditionnels \u00e0 une ligne enti\u00e8re. Dans le panneau de cr\u00e9ation, c\u2019est sous l\u2019onglet Table > Vue .","title":"Styles conditionnels pour les lignes"},{"location":"newsletters/2022-08/#aide-aux-formules-amelioree-autocompletion","text":"\u00c9crire et d\u00e9panner des formules est devenu un peu plus facile avec des suggestions d\u2019autocompl\u00e9tion et des messages d\u2019erreur plus utiles. Par exemple, dans la capture d\u2019\u00e9cran ci-dessous, l\u2019autocompl\u00e9tion aide \u00e0 \u00e9crire la formule courante mais difficile \u00e0 retenir pour les recherches invers\u00e9es , et l\u2019erreur inclut une explication conviviale et des suggestions utiles pour la corriger. Vous voulez en savoir plus sur les formules ? Il y a beaucoup d\u2019informations sur les formules dans notre Centre d\u2019aide, y compris cette fiche de triche des formules r\u00e9cemment ajout\u00e9e.","title":"Aide aux formules am\u00e9lior\u00e9e + Autocompl\u00e9tion"},{"location":"newsletters/2022-08/#ouvrir-les-donnees-sources-depuis-la-vue","text":"Vous pouvez ouvrir la table source d\u2019une vue sans quitter la page. Dans le menu de la vue, cliquez sur \u201cAfficher les donn\u00e9es sources\u201d. C\u2019est particuli\u00e8rement pratique pour les graphiques et les vues personnalis\u00e9es.","title":"Ouvrir les donn\u00e9es sources depuis la vue"},{"location":"newsletters/2022-08/#le-panneau-de-gauche-setend-automatiquement","text":"Saviez-vous que vous pouvez r\u00e9duire le menu de la page \u00e0 gauche pour vous donner plus d\u2019espace ? D\u00e9sormais, le menu r\u00e9duit s\u2019\u00e9tend automatiquement au survol, vous donnant plus de place sur les petits \u00e9crans ! \ud83c\udf89","title":"Le panneau de gauche s’\u00e9tend automatiquement"},{"location":"newsletters/2022-08/#masquer-plusieurs-colonnes","text":"Vous pouvez maintenant s\u00e9lectionner plusieurs colonnes, faire un clic droit pour ouvrir le menu des colonnes, et masquer toutes les colonnes s\u00e9lectionn\u00e9es en un clic.","title":"Masquer plusieurs colonnes"},{"location":"newsletters/2022-08/#contributions-de-la-communaute-et-open-source","text":"Grist est open source . Nous sommes reconnaissants \u00e0 la communaut\u00e9 open source pour leurs contributions. Voici deux points forts r\u00e9cents.","title":"Contributions de la communaut\u00e9 et open source \ud83d\ude4f"},{"location":"newsletters/2022-08/#renommer-rapidement-les-pages","text":"Pour renommer un nom de page, il vous suffit maintenant de cliquer. Merci, @LouisDelbosc !","title":"Renommer rapidement les pages"},{"location":"newsletters/2022-08/#vues-personnalisees-ajouter-une-description-de-colonne-dans-le-panneau-de-creation","text":"Pour les d\u00e9veloppeurs de vues personnalis\u00e9es : lorsque vous sp\u00e9cifiez les colonnes auxquelles votre vue doit acc\u00e9der, vous pouvez d\u00e9sormais inclure une description pour aider \u00e0 guider vos utilisateurs de vues, comme montr\u00e9 ici . Merci, @yohanboniface !","title":"Vues personnalis\u00e9es : Ajouter une description de colonne dans le panneau de cr\u00e9ation"},{"location":"newsletters/2022-08/#open-source-points-forts-des-developpeurs","text":"grist-core omnibus. Paul a publi\u00e9 un grist-core omnibus pour faciliter l\u2019auto-h\u00e9bergement. Grist en tant qu\u2019application electron. L\u2019utilisateur stan-donarise a emball\u00e9 Grist en tant qu\u2019application electron qui fonctionne sur Windows 7 ou plus tard. Comme c\u2019est cool ! \ud83d\ude09 G\u00e9n\u00e9rer des docx \u00e0 partir d\u2019un mod\u00e8le. L\u2019utilisateur stan-donarise ne s\u2019est pas arr\u00eat\u00e9 l\u00e0. Il a int\u00e9gr\u00e9 docxtemplater dans une vue personnalis\u00e9e pour g\u00e9n\u00e9rer des rapports et des documents dans Grist.","title":"Open Source + Points forts des d\u00e9veloppeurs \ud83d\udc69\u200d\ud83d\udcbb"},{"location":"newsletters/2022-08/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-08/#webinaire-partager-des-donnees-partielles-avec-des-cles-de-lien","text":"En septembre, nous expliquerons comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Apprenez \u00e0 utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles, comme une seule ligne, avec des tiers. Jeudi 22 septembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAIRE DE SEPTEMBRE","title":"Webinaire : Partager des donn\u00e9es partielles avec des cl\u00e9s de lien"},{"location":"newsletters/2022-08/#donnees-relationnelles-colonnes-de-reference","text":"En ao\u00fbt, Natalie a plong\u00e9 profond\u00e9ment dans les colonnes de r\u00e9f\u00e9rence et comment les utiliser dans les tableaux de bord et les formules. REGARDER L\u2019ENREGISTREMENT D\u2019AO\u00dbT","title":"Donn\u00e9es relationnelles + Colonnes de r\u00e9f\u00e9rence"},{"location":"newsletters/2022-08/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019experts. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-08/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-08/#organisateur-de-reunions-dequipe","text":"Utilisez ce mod\u00e8le pour stocker les comptes rendus de r\u00e9union d\u2019\u00e9quipe, les \u00e9l\u00e9ments d\u2019action, la documentation de projet et plus encore. Merci \u00e0 l\u2019utilisateur Grist Eduardo qui a partag\u00e9 ce mod\u00e8le avec nous. Il a \u00e9t\u00e9 l\u00e9g\u00e8rement modifi\u00e9 pour r\u00e9pondre \u00e0 des besoins plus g\u00e9n\u00e9raux. Vous voulez savoir comment cela a \u00e9t\u00e9 construit ? Regardez Natalie le construire lors du webinaire d\u2019ao\u00fbt. ALLER AU MOD\u00c8LE","title":"Organisateur de r\u00e9unions d’\u00e9quipe"},{"location":"newsletters/2022-08/#carnet-personnel","text":"Organisez vos projets, informations de contact et t\u00e2ches dans ce carnet personnel. Ce mod\u00e8le a \u00e9t\u00e9 cr\u00e9\u00e9 par l\u2019utilisateur Grist Julien. Il a \u00e9t\u00e9 traduit et l\u00e9g\u00e8rement modifi\u00e9 pour r\u00e9pondre \u00e0 des besoins plus g\u00e9n\u00e9raux. D\u00e9couvrez sa pr\u00e9sentation dans le forum communautaire ! Si vous avez un mod\u00e8le cool que vous aimeriez partager, nous serions ravis d\u2019en entendre parler dans la vitrine communautaire ! ALLER AU MOD\u00c8LE","title":"Carnet personnel"},{"location":"newsletters/2022-08/#aidez-nous-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-08/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-09/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Septembre 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Septembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Mode Sombre \ud83d\udd76 # Grist est maintenant disponible en mode sombre. \ud83d\ude0e Pour travailler en mode sombre, cliquez sur votre ic\u00f4ne utilisateur > param\u00e8tres du profil > s\u00e9lectionnez \u00ab Sombre \u00bb sous le param\u00e8tre d\u2019apparence. Contributions Open Source \ud83d\ude4f # Grist est open source . Nous sommes reconnaissants \u00e0 la communaut\u00e9 open source pour leurs contributions. Voici deux faits saillants r\u00e9cents d\u2019une \u00e9quipe qui utilise non seulement Grist, mais qui l\u2019am\u00e9liore pour tout le monde. Merci, @LouisDelbosc! Gestion Am\u00e9lior\u00e9e des Utilisateurs avec Autocompl\u00e9tion # Lors de l\u2019ajout d\u2019utilisateurs \u00e0 un document, la liste s\u2019autocompl\u00e9tera d\u00e9sormais avec les emails des membres de l\u2019\u00e9quipe. Ceci est actuellement disponible sur grist-core et sera int\u00e9gr\u00e9 dans Grist h\u00e9berg\u00e9 d\u2019ici lundi 3 octobre. Exporter une Table en XLSX # Il est maintenant possible d\u2019exporter une table en format XLSX depuis le menu de la vue. En savoir plus sur l\u2019exportation de tables vs documents. Apprendre Grist # Webinaire : Espaces d\u2019\u00c9quipe # Le mois prochain, nous lan\u00e7ons une s\u00e9rie ax\u00e9e sur Grist pour les \u00c9quipes . Cette s\u00e9rie de quatre vid\u00e9os couvrira tout ce que vous devez savoir sur les espaces d\u2019\u00e9quipe, les dossiers, la collaboration et les permissions avanc\u00e9es. En octobre, retour aux bases de l\u2019\u00e9quipe : espaces d\u2019\u00e9quipe, dossiers, partage, et plus encore. Jeudi 20 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019OCTOBRE Cl\u00e9s de Lien # Lors du webinaire de septembre, Natalie a d\u00e9montr\u00e9 comment utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles via des liens uniques. REGARDER L\u2019ENREGISTREMENT DE SEPTEMBRE Programme Sprouts # D\u00e9marrez rapidement avec l\u2019aide d\u2019un expert. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre fait pour vous. EN SAVOIR PLUS Nouveau Mod\u00e8le # B\u00e9n\u00e9volat pour \u00c9v\u00e9nements # Utilisez ce mod\u00e8le pour suivre quels b\u00e9n\u00e9voles travaillent sur quels \u00e9v\u00e9nements. Les cl\u00e9s de lien avec des permissions avanc\u00e9es accordent un acc\u00e8s sp\u00e9cifique \u00e0 chaque b\u00e9n\u00e9vole, leur permettant de consulter leur emploi du temps de b\u00e9n\u00e9volat et les d\u00e9tails de l\u2019\u00e9v\u00e9nement sans se connecter \u00e0 Grist. Vous voulez savoir comment nous l\u2019avons construit ? Regardez Natalie le construire lors du webinaire de septembre. ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 grandir, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/09"},{"location":"newsletters/2022-09/#bulletin-de-septembre-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Septembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Septembre 2022"},{"location":"newsletters/2022-09/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-09/#mode-sombre","text":"Grist est maintenant disponible en mode sombre. \ud83d\ude0e Pour travailler en mode sombre, cliquez sur votre ic\u00f4ne utilisateur > param\u00e8tres du profil > s\u00e9lectionnez \u00ab Sombre \u00bb sous le param\u00e8tre d\u2019apparence.","title":"Mode Sombre \ud83d\udd76"},{"location":"newsletters/2022-09/#contributions-open-source","text":"Grist est open source . Nous sommes reconnaissants \u00e0 la communaut\u00e9 open source pour leurs contributions. Voici deux faits saillants r\u00e9cents d\u2019une \u00e9quipe qui utilise non seulement Grist, mais qui l\u2019am\u00e9liore pour tout le monde. Merci, @LouisDelbosc!","title":"Contributions Open Source \ud83d\ude4f"},{"location":"newsletters/2022-09/#gestion-amelioree-des-utilisateurs-avec-autocompletion","text":"Lors de l\u2019ajout d\u2019utilisateurs \u00e0 un document, la liste s\u2019autocompl\u00e9tera d\u00e9sormais avec les emails des membres de l\u2019\u00e9quipe. Ceci est actuellement disponible sur grist-core et sera int\u00e9gr\u00e9 dans Grist h\u00e9berg\u00e9 d\u2019ici lundi 3 octobre.","title":"Gestion Am\u00e9lior\u00e9e des Utilisateurs avec Autocompl\u00e9tion"},{"location":"newsletters/2022-09/#exporter-une-table-en-xlsx","text":"Il est maintenant possible d\u2019exporter une table en format XLSX depuis le menu de la vue. En savoir plus sur l\u2019exportation de tables vs documents.","title":"Exporter une Table en XLSX"},{"location":"newsletters/2022-09/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-09/#webinaire-espaces-dequipe","text":"Le mois prochain, nous lan\u00e7ons une s\u00e9rie ax\u00e9e sur Grist pour les \u00c9quipes . Cette s\u00e9rie de quatre vid\u00e9os couvrira tout ce que vous devez savoir sur les espaces d\u2019\u00e9quipe, les dossiers, la collaboration et les permissions avanc\u00e9es. En octobre, retour aux bases de l\u2019\u00e9quipe : espaces d\u2019\u00e9quipe, dossiers, partage, et plus encore. Jeudi 20 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019OCTOBRE","title":"Webinaire : Espaces d’\u00c9quipe"},{"location":"newsletters/2022-09/#cles-de-lien","text":"Lors du webinaire de septembre, Natalie a d\u00e9montr\u00e9 comment utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles via des liens uniques. REGARDER L\u2019ENREGISTREMENT DE SEPTEMBRE","title":"Cl\u00e9s de Lien"},{"location":"newsletters/2022-09/#programme-sprouts","text":"D\u00e9marrez rapidement avec l\u2019aide d\u2019un expert. Si vous savez ce dont vous avez besoin, mais avez besoin d\u2019aide pour le construire, le programme Sprouts pourrait \u00eatre fait pour vous. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-09/#nouveau-modele","text":"","title":"Nouveau Mod\u00e8le"},{"location":"newsletters/2022-09/#benevolat-pour-evenements","text":"Utilisez ce mod\u00e8le pour suivre quels b\u00e9n\u00e9voles travaillent sur quels \u00e9v\u00e9nements. Les cl\u00e9s de lien avec des permissions avanc\u00e9es accordent un acc\u00e8s sp\u00e9cifique \u00e0 chaque b\u00e9n\u00e9vole, leur permettant de consulter leur emploi du temps de b\u00e9n\u00e9volat et les d\u00e9tails de l\u2019\u00e9v\u00e9nement sans se connecter \u00e0 Grist. Vous voulez savoir comment nous l\u2019avons construit ? Regardez Natalie le construire lors du webinaire de septembre. ALLER AU MOD\u00c8LE","title":"B\u00e9n\u00e9volat pour \u00c9v\u00e9nements"},{"location":"newsletters/2022-09/#aidez-nous-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 grandir, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-09/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-10/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Octobre 2022 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Octobre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Quoi de Neuf # Somme Rapide # Besoin de faire rapidement la somme ou de compter des valeurs ? S\u00e9lectionnez un intervalle, et un total et un compte pratiques appara\u00eetront dans le pied de la vue. Enfin ! \ud83d\ude09 Dupliquer une Table # Vous pouvez maintenant dupliquer rapidement une table ! Allez \u00e0 la page des donn\u00e9es sources et ouvrez le menu de la table. Vous pouvez dupliquer la structure d\u2019une table avec ou sans les donn\u00e9es de la table. Nouvelles M\u00e9thodes API pour Table et Colonne # Vous pouvez maintenant ajouter, modifier et lister des tables et des colonnes dans un document. Consultez notre r\u00e9f\u00e9rence API REST pour en savoir plus. Formatage Multi-colonnes # Vous pouvez maintenant s\u00e9lectionner plusieurs colonnes adjacentes et modifier leur type de colonne et leur formatage simultan\u00e9ment, vous faisant gagner du temps. Nouveau Raccourci pour Ajouter + Supprimer des Lignes # Les raccourcis pour supprimer ou ins\u00e9rer un enregistrement ont chang\u00e9, pour \u00e9viter d\u2019interf\u00e9rer avec le zoom de la page. Touche (Mac) Touche (Windows) Description \u2318 \u21e7 Enter Ctrl + Shift + Enter Ins\u00e9rer un nouvel enregistrement, avant celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Enter Ctrl + Enter Ins\u00e9rer un nouvel enregistrement, apr\u00e8s celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Delete Ctrl + Backspace , Ctrl + Delete Supprimer le(s) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s) Nouvelle Fonction PHONE_FORMAT() # Le formatage des num\u00e9ros de t\u00e9l\u00e9phone est devenu plus facile avec une nouvelle fonction utile. En savoir plus sur PHONE_FORMAT(). Apprendre Grist # Webinar : Construire des Flux de Travail d\u2019\u00c9quipe # En novembre, nous continuons notre s\u00e9rie Grist pour les \u00c9quipes . Le webinaire de novembre se concentrera sur la fa\u00e7on de construire des flux de travail productifs pour les \u00e9quipes, tout en utilisant des fonctionnalit\u00e9s qui rendent Grist facile \u00e0 utiliser par n\u2019importe qui dans votre \u00e9quipe. Mardi 22 novembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE NOVEMBRE Les Bases de l\u2019\u00c9quipe # En octobre, Natalie nous a guid\u00e9s \u00e0 travers les bases de l\u2019\u00e9quipe : espaces d\u2019\u00e9quipe, dossiers, partage, et plus encore. REGARDER L\u2019ENREGISTREMENT D\u2019OCTOBRE Programme Sprouts # Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS Nouveaux Mod\u00e8les # Planification de Roman # Chaque \u00e9crivain a son propre processus unique - mais pour la plupart, ce processus implique un certain niveau de planification. Notre mod\u00e8le de planification de roman arrive juste \u00e0 temps pour le NaNoWriMo de cette ann\u00e9e. Gardez la structure de votre roman, votre plan, vos recherches et vos notes au m\u00eame endroit ! Vous voulez plus de conseils sur l\u2019utilisation de ce mod\u00e8le ? Lisez notre blog. ALLER AU MOD\u00c8LE Organisateur de Repas Partag\u00e9 # Nous avons cr\u00e9\u00e9 ce mod\u00e8le en pensant \u00e0 Thanksgiving, mais il fonctionne pour tous les repas partag\u00e9s ! La logistique des repas partag\u00e9s peut \u00eatre difficile \u00e0 g\u00e9rer, mais ce mod\u00e8le facilite la gestion de qui apporte quoi. Tout le monde peut collaborer en notant ce qu\u2019il apporte et en s\u2019assurant que tous les essentiels sont couverts. ALLER AU MOD\u00c8LE Planificateur de Mariage # R\u00e9cemment fianc\u00e9 ? \ud83d\udc8d F\u00e9licitations ! Planifier un mariage peut \u00eatre chaotique mais pas pour vous car vous avez Grist \ud83d\ude0a Utilisez ce mod\u00e8le pour organiser les notes des fournisseurs, les listes d\u2019invit\u00e9s, les contrats et plus encore ! ALLER AU MOD\u00c8LE Aidez-nous \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/10"},{"location":"newsletters/2022-10/#bulletin-doctobre-2022","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Octobre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist.","title":"Bulletin d’Octobre 2022"},{"location":"newsletters/2022-10/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2022-10/#somme-rapide","text":"Besoin de faire rapidement la somme ou de compter des valeurs ? S\u00e9lectionnez un intervalle, et un total et un compte pratiques appara\u00eetront dans le pied de la vue. Enfin ! \ud83d\ude09","title":"Somme Rapide"},{"location":"newsletters/2022-10/#dupliquer-une-table","text":"Vous pouvez maintenant dupliquer rapidement une table ! Allez \u00e0 la page des donn\u00e9es sources et ouvrez le menu de la table. Vous pouvez dupliquer la structure d\u2019une table avec ou sans les donn\u00e9es de la table.","title":"Dupliquer une Table"},{"location":"newsletters/2022-10/#nouvelles-methodes-api-pour-table-et-colonne","text":"Vous pouvez maintenant ajouter, modifier et lister des tables et des colonnes dans un document. Consultez notre r\u00e9f\u00e9rence API REST pour en savoir plus.","title":"Nouvelles M\u00e9thodes API pour Table et Colonne"},{"location":"newsletters/2022-10/#formatage-multi-colonnes","text":"Vous pouvez maintenant s\u00e9lectionner plusieurs colonnes adjacentes et modifier leur type de colonne et leur formatage simultan\u00e9ment, vous faisant gagner du temps.","title":"Formatage Multi-colonnes"},{"location":"newsletters/2022-10/#nouveau-raccourci-pour-ajouter-supprimer-des-lignes","text":"Les raccourcis pour supprimer ou ins\u00e9rer un enregistrement ont chang\u00e9, pour \u00e9viter d\u2019interf\u00e9rer avec le zoom de la page. Touche (Mac) Touche (Windows) Description \u2318 \u21e7 Enter Ctrl + Shift + Enter Ins\u00e9rer un nouvel enregistrement, avant celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Enter Ctrl + Enter Ins\u00e9rer un nouvel enregistrement, apr\u00e8s celui actuellement s\u00e9lectionn\u00e9 dans une table non tri\u00e9e \u2318 Delete Ctrl + Backspace , Ctrl + Delete Supprimer le(s) enregistrement(s) actuellement s\u00e9lectionn\u00e9(s)","title":"Nouveau Raccourci pour Ajouter + Supprimer des Lignes"},{"location":"newsletters/2022-10/#nouvelle-fonction-phone_format","text":"Le formatage des num\u00e9ros de t\u00e9l\u00e9phone est devenu plus facile avec une nouvelle fonction utile. En savoir plus sur PHONE_FORMAT().","title":"Nouvelle Fonction PHONE_FORMAT()"},{"location":"newsletters/2022-10/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-10/#webinar-construire-des-flux-de-travail-dequipe","text":"En novembre, nous continuons notre s\u00e9rie Grist pour les \u00c9quipes . Le webinaire de novembre se concentrera sur la fa\u00e7on de construire des flux de travail productifs pour les \u00e9quipes, tout en utilisant des fonctionnalit\u00e9s qui rendent Grist facile \u00e0 utiliser par n\u2019importe qui dans votre \u00e9quipe. Mardi 22 novembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE NOVEMBRE","title":"Webinar : Construire des Flux de Travail d’\u00c9quipe"},{"location":"newsletters/2022-10/#les-bases-de-lequipe","text":"En octobre, Natalie nous a guid\u00e9s \u00e0 travers les bases de l\u2019\u00e9quipe : espaces d\u2019\u00e9quipe, dossiers, partage, et plus encore. REGARDER L\u2019ENREGISTREMENT D\u2019OCTOBRE","title":"Les Bases de l’\u00c9quipe"},{"location":"newsletters/2022-10/#programme-sprouts","text":"Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-10/#nouveaux-modeles","text":"","title":"Nouveaux Mod\u00e8les"},{"location":"newsletters/2022-10/#planification-de-roman","text":"Chaque \u00e9crivain a son propre processus unique - mais pour la plupart, ce processus implique un certain niveau de planification. Notre mod\u00e8le de planification de roman arrive juste \u00e0 temps pour le NaNoWriMo de cette ann\u00e9e. Gardez la structure de votre roman, votre plan, vos recherches et vos notes au m\u00eame endroit ! Vous voulez plus de conseils sur l\u2019utilisation de ce mod\u00e8le ? Lisez notre blog. ALLER AU MOD\u00c8LE","title":"Planification de Roman"},{"location":"newsletters/2022-10/#organisateur-de-repas-partage","text":"Nous avons cr\u00e9\u00e9 ce mod\u00e8le en pensant \u00e0 Thanksgiving, mais il fonctionne pour tous les repas partag\u00e9s ! La logistique des repas partag\u00e9s peut \u00eatre difficile \u00e0 g\u00e9rer, mais ce mod\u00e8le facilite la gestion de qui apporte quoi. Tout le monde peut collaborer en notant ce qu\u2019il apporte et en s\u2019assurant que tous les essentiels sont couverts. ALLER AU MOD\u00c8LE","title":"Organisateur de Repas Partag\u00e9"},{"location":"newsletters/2022-10/#planificateur-de-mariage","text":"R\u00e9cemment fianc\u00e9 ? \ud83d\udc8d F\u00e9licitations ! Planifier un mariage peut \u00eatre chaotique mais pas pour vous car vous avez Grist \ud83d\ude0a Utilisez ce mod\u00e8le pour organiser les notes des fournisseurs, les listes d\u2019invit\u00e9s, les contrats et plus encore ! ALLER AU MOD\u00c8LE","title":"Planificateur de Mariage"},{"location":"newsletters/2022-10/#aidez-nous-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez-nous \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-10/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-11/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Novembre 2022 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Novembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Exp\u00e9rience Grist : \u00c9crire des Formules Python avec l\u2019IA # Nous voyons de nombreux utilisateurs avanc\u00e9s de Grist qui utilisent toutes les fonctionnalit\u00e9s sauf les formules, ce qui est dommage, mais compr\u00e9hensible. Les formules peuvent \u00eatre intimidantes. Imaginez si \u00e9crire des formules de tableur \u00e9tait aussi simple que de poser une question. Nous avons r\u00e9cemment exp\u00e9riment\u00e9 avec OpenAI pour voir dans quelle mesure l\u2019IA pouvait \u00e9crire des formules Python dans Grist. L\u2019exp\u00e9rience a donn\u00e9 des r\u00e9sultats prometteurs que nous sommes ravis de partager ! Bien que cette fonctionnalit\u00e9 de g\u00e9n\u00e9ration de formules assist\u00e9e par IA ne fasse pas encore partie de Grist, cette exp\u00e9rience prouve sa valeur future : l\u2019IA peut \u00e9liminer une lutte courante pour l\u2019utilisateur de tableur d\u2019aujourd\u2019hui \u2014 \u00e9crire correctement des formules. Lisez-en plus sur l\u2019exp\u00e9rience sur notre blog. Il y a un sondage \u00e0 la fin o\u00f9 vous pouvez voter pour cette fonctionnalit\u00e9 et vous inscrire pour recevoir des mises \u00e0 jour sur notre g\u00e9n\u00e9ration de formules par IA. LIRE PLUS Vous souhaitez aider au d\u00e9veloppement de Grist ? # Nous travaillons toujours sur de grandes nouvelles fonctionnalit\u00e9s et aimerions recevoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester des fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un e-mail \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL Quoi de neuf # Am\u00e9liorations de Tri et de Filtrage # Nous avons am\u00e9lior\u00e9 l\u2019exp\u00e9rience de tri et de filtrage des tables et autres vues, la rendant plus facile \u00e0 utiliser. Les param\u00e8tres de sauvegarde et de r\u00e9initialisation sont d\u00e9sormais plus clairs d\u2019un coup d\u2019\u0153il, et les boutons de filtre sont plus flexibles. Auparavant, pour cr\u00e9er des boutons de filtre au-dessus d\u2019une vue, vous pouviez soit transformer tous vos filtres en boutons, soit aucun. D\u00e9sormais, vous pouvez \u00e9pingler les boutons de filtre individuellement. Par exemple, cette vue a deux filtres appliqu\u00e9s aux colonnes \u201cInvitation\u201d et \u201cMerci envoy\u00e9 ?\u201d. Seul l\u2019un d\u2019entre eux, \u201cMerci envoy\u00e9 ?\u201d, est \u00e9pingl\u00e9 en tant que bouton pour plus de commodit\u00e9. \u201cInvitation\u201d n\u2019est pas \u00e9pingl\u00e9, car il s\u2019assure que cette vue ne montre que les invit\u00e9s qui ont r\u00e9pondu oui au mariage. (Si vous en avez besoin, voici le mod\u00e8le de planification de mariage complet \u2014 et f\u00e9licitations !) Apprendre Grist # Webinaire : Modifier des Mod\u00e8les # Le webinaire de d\u00e9cembre se concentrera sur la mani\u00e8re d\u2019examiner sous le capot d\u2019un mod\u00e8le de notre galerie de mod\u00e8les et de le modifier pour r\u00e9pondre \u00e0 vos besoins. Jeudi 15 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE D\u00c9CEMBRE Conseils de Cr\u00e9ateurs pour des Flux de Travail Productifs # En novembre, Natalie a partag\u00e9 des conseils pour que les cr\u00e9ateurs tirent le meilleur parti de Grist tout en construisant des flux de travail productifs pour les \u00e9quipes, tout en utilisant des fonctionnalit\u00e9s qui rendent Grist facile \u00e0 utiliser par n\u2019importe qui. REGARDEZ L\u2019ENREGISTREMENT DE NOVEMBRE Programme Sprouts # Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS Mod\u00e8les # Suivi des Dons # C\u2019est toujours la saison des dons ! Gardez une trace de vos dons de charit\u00e9 en un seul endroit. Pour plus de conseils sur l\u2019utilisation de ce mod\u00e8le, lisez notre blog. ALLER AU MOD\u00c8LE \ud83c\udf84 Budget des Cadeaux de No\u00ebl # C\u2019est la saison ! Suivez et budg\u00e9tisez facilement vos cadeaux de vacances en un seul endroit. ALLER AU MOD\u00c8LE Organisateur de Potluck # Nous partageons \u00e0 nouveau ce mod\u00e8le car il peut encore \u00eatre utile en cette saison des f\u00eates ! Ce mod\u00e8le g\u00e8re la logistique des d\u00eeners potluck. Tout le monde peut collaborer en notant ce qu\u2019il apporte et en s\u2019assurant que tous les essentiels sont couverts. Pour des conseils sur son utilisation, lisez notre blog . ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/11"},{"location":"newsletters/2022-11/#bulletin-de-novembre-2022","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Novembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Novembre 2022"},{"location":"newsletters/2022-11/#experience-grist-ecrire-des-formules-python-avec-lia","text":"Nous voyons de nombreux utilisateurs avanc\u00e9s de Grist qui utilisent toutes les fonctionnalit\u00e9s sauf les formules, ce qui est dommage, mais compr\u00e9hensible. Les formules peuvent \u00eatre intimidantes. Imaginez si \u00e9crire des formules de tableur \u00e9tait aussi simple que de poser une question. Nous avons r\u00e9cemment exp\u00e9riment\u00e9 avec OpenAI pour voir dans quelle mesure l\u2019IA pouvait \u00e9crire des formules Python dans Grist. L\u2019exp\u00e9rience a donn\u00e9 des r\u00e9sultats prometteurs que nous sommes ravis de partager ! Bien que cette fonctionnalit\u00e9 de g\u00e9n\u00e9ration de formules assist\u00e9e par IA ne fasse pas encore partie de Grist, cette exp\u00e9rience prouve sa valeur future : l\u2019IA peut \u00e9liminer une lutte courante pour l\u2019utilisateur de tableur d\u2019aujourd\u2019hui \u2014 \u00e9crire correctement des formules. Lisez-en plus sur l\u2019exp\u00e9rience sur notre blog. Il y a un sondage \u00e0 la fin o\u00f9 vous pouvez voter pour cette fonctionnalit\u00e9 et vous inscrire pour recevoir des mises \u00e0 jour sur notre g\u00e9n\u00e9ration de formules par IA. LIRE PLUS","title":"Exp\u00e9rience Grist : \u00c9crire des Formules Python avec l’IA"},{"location":"newsletters/2022-11/#vous-souhaitez-aider-au-developpement-de-grist","text":"Nous travaillons toujours sur de grandes nouvelles fonctionnalit\u00e9s et aimerions recevoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester des fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un e-mail \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL","title":"Vous souhaitez aider au d\u00e9veloppement de Grist ?"},{"location":"newsletters/2022-11/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-11/#ameliorations-de-tri-et-de-filtrage","text":"Nous avons am\u00e9lior\u00e9 l\u2019exp\u00e9rience de tri et de filtrage des tables et autres vues, la rendant plus facile \u00e0 utiliser. Les param\u00e8tres de sauvegarde et de r\u00e9initialisation sont d\u00e9sormais plus clairs d\u2019un coup d\u2019\u0153il, et les boutons de filtre sont plus flexibles. Auparavant, pour cr\u00e9er des boutons de filtre au-dessus d\u2019une vue, vous pouviez soit transformer tous vos filtres en boutons, soit aucun. D\u00e9sormais, vous pouvez \u00e9pingler les boutons de filtre individuellement. Par exemple, cette vue a deux filtres appliqu\u00e9s aux colonnes \u201cInvitation\u201d et \u201cMerci envoy\u00e9 ?\u201d. Seul l\u2019un d\u2019entre eux, \u201cMerci envoy\u00e9 ?\u201d, est \u00e9pingl\u00e9 en tant que bouton pour plus de commodit\u00e9. \u201cInvitation\u201d n\u2019est pas \u00e9pingl\u00e9, car il s\u2019assure que cette vue ne montre que les invit\u00e9s qui ont r\u00e9pondu oui au mariage. (Si vous en avez besoin, voici le mod\u00e8le de planification de mariage complet \u2014 et f\u00e9licitations !)","title":"Am\u00e9liorations de Tri et de Filtrage"},{"location":"newsletters/2022-11/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-11/#webinaire-modifier-des-modeles","text":"Le webinaire de d\u00e9cembre se concentrera sur la mani\u00e8re d\u2019examiner sous le capot d\u2019un mod\u00e8le de notre galerie de mod\u00e8les et de le modifier pour r\u00e9pondre \u00e0 vos besoins. Jeudi 15 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE D\u00c9CEMBRE","title":"Webinaire : Modifier des Mod\u00e8les"},{"location":"newsletters/2022-11/#conseils-de-createurs-pour-des-flux-de-travail-productifs","text":"En novembre, Natalie a partag\u00e9 des conseils pour que les cr\u00e9ateurs tirent le meilleur parti de Grist tout en construisant des flux de travail productifs pour les \u00e9quipes, tout en utilisant des fonctionnalit\u00e9s qui rendent Grist facile \u00e0 utiliser par n\u2019importe qui. REGARDEZ L\u2019ENREGISTREMENT DE NOVEMBRE","title":"Conseils de Cr\u00e9ateurs pour des Flux de Travail Productifs"},{"location":"newsletters/2022-11/#programme-sprouts","text":"Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-11/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2022-11/#suivi-des-dons","text":"C\u2019est toujours la saison des dons ! Gardez une trace de vos dons de charit\u00e9 en un seul endroit. Pour plus de conseils sur l\u2019utilisation de ce mod\u00e8le, lisez notre blog. ALLER AU MOD\u00c8LE","title":"Suivi des Dons"},{"location":"newsletters/2022-11/#budget-des-cadeaux-de-noel","text":"C\u2019est la saison ! Suivez et budg\u00e9tisez facilement vos cadeaux de vacances en un seul endroit. ALLER AU MOD\u00c8LE","title":"\ud83c\udf84 Budget des Cadeaux de No\u00ebl"},{"location":"newsletters/2022-11/#organisateur-de-potluck","text":"Nous partageons \u00e0 nouveau ce mod\u00e8le car il peut encore \u00eatre utile en cette saison des f\u00eates ! Ce mod\u00e8le g\u00e8re la logistique des d\u00eeners potluck. Tout le monde peut collaborer en notant ce qu\u2019il apporte et en s\u2019assurant que tous les essentiels sont couverts. Pour des conseils sur son utilisation, lisez notre blog . ALLER AU MOD\u00c8LE","title":"Organisateur de Potluck"},{"location":"newsletters/2022-11/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-11/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2022-12/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de d\u00e9cembre 2022 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill D\u00e9cembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Nouveau filtre de date avec calendrier # Le filtrage des colonnes de date et de datetime est devenu plus facile. Vous pouvez maintenant s\u00e9lectionner un intervalle de dates en utilisant un s\u00e9lecteur de calendrier. Les limites de l\u2019intervalle peuvent \u00e9galement \u00eatre relatives \u2014 par exemple, du 1er jour de ce mois \u00e0 Aujourd'hui . Le filtre se mettra \u00e0 jour chaque jour. Instantan\u00e9s dans Grist Core # Auparavant, les instantan\u00e9s \u00e9taient disponibles sur Grist h\u00e9berg\u00e9 et le plan d\u2019entreprise autog\u00e9r\u00e9, et reposaient sur des services de stockage cloud commerciaux. D\u00e9sormais, la prise en charge des instantan\u00e9s est \u00e9galement disponible sur Grist Core \u2014 la version open source de Grist \u2014 et peut fonctionner avec des options de stockage autog\u00e9r\u00e9es open source telles que MinIO. \ud83c\udf89 Apprenez comment configurer les instantan\u00e9s . Suppression rapide des permissions avanc\u00e9es de table/colonne invalides # S\u2019il existe des permissions avanc\u00e9es pour une table ou une colonne qui a \u00e9t\u00e9 supprim\u00e9e, il y a maintenant un bouton pratique pour supprimer les r\u00e8gles qui s\u2019appliquent \u00e0 la colonne ou \u00e0 la table supprim\u00e9e. Vous gardez le contr\u00f4le sur les r\u00e8gles qui restent et celles qui sont supprim\u00e9es, vous n\u2019avez donc pas \u00e0 vous inqui\u00e9ter de la disparition des r\u00e8gles si vous r\u00e9organisez votre document. Dans cet exemple, la colonne Breeder_Retirement a \u00e9t\u00e9 supprim\u00e9e, donc la r\u00e8gle de colonne pour cette colonne doit \u00e9galement \u00eatre supprim\u00e9e. Interface utilisateur am\u00e9lior\u00e9e pour la r\u00e9daction de m\u00e9mos # Les permissions avanc\u00e9es ont maintenant un bouton m\u00e9mo pour ajouter des m\u00e9mos aux r\u00e8gles, rendant la r\u00e9daction et l\u2019\u00e9dition des m\u00e9mos plus pratiques. Les m\u00e9mos peuvent vraiment aider les coll\u00e8gues \u00e0 comprendre pourquoi ils ne peuvent pas faire quelque chose, car les m\u00e9mos sont affich\u00e9s dans une popup lorsqu\u2019une action est bloqu\u00e9e par une r\u00e8gle. Conseils # Pour vous aider, vous et vos co\u00e9quipiers, \u00e0 tirer le meilleur parti de Grist, des conseils apparaissent d\u00e9sormais lorsque vous explorez les fonctionnalit\u00e9s de Grist. Pour ignorer tous les conseils, cochez la case \u201cNe pas afficher les conseils\u201d. Contributions open source # Merci \u00e0 @jperon qui a cr\u00e9\u00e9 et partag\u00e9 un widget de tableau crois\u00e9 dynamique personnalis\u00e9. Trouvez-le dans notre d\u00e9p\u00f4t Github de widgets personnalis\u00e9s, grist-widget . Apprendre Grist # Webinaire : Permissions avanc\u00e9es pour les \u00e9quipes # Apprenez \u00e0 \u00e9crire des permissions avanc\u00e9es qui g\u00e8rent les autorisations des membres de l\u2019\u00e9quipe sur un document. Jeudi 19 janvier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER Modification des mod\u00e8les # En d\u00e9cembre, nous avons appris \u00e0 modifier un mod\u00e8le de notre galerie de mod\u00e8les pour mieux s\u2019adapter \u00e0 votre flux de travail. REGARDEZ L\u2019ENREGISTREMENT DE D\u00c9CEMBRE Programme Sprouts # Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS Mod\u00e8les # Gestion d\u2019\u00e9glise # L\u2019utilisateur de Grist Paul Janzen a construit un CRM pour g\u00e9rer les informations des paroissiens de son \u00e9glise. Il a partag\u00e9 le mod\u00e8le avec nous pour l\u2019inclure dans notre galerie. Merci ! \ud83d\ude4f ALLER AU MOD\u00c8LE Club de lecture # Une r\u00e9solution courante du Nouvel An est de lire plus de livres. Lancez vos habitudes de lecture avec un club de lecture ! Utilisez ce mod\u00e8le pour suivre les suggestions de livres, et trouvez des livres dans les magasins et les biblioth\u00e8ques en un clic. ALLER AU MOD\u00c8LE Vous voulez aider au d\u00e9veloppement de Grist ? # Nous travaillons toujours sur de nouvelles fonctionnalit\u00e9s importantes et aimerions avoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester les fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un email \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Vous avez des questions, des retours ou besoin d\u2019aide ? Consultez notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2022/12"},{"location":"newsletters/2022-12/#bulletin-de-decembre-2022","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill D\u00e9cembre 2022 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de d\u00e9cembre 2022"},{"location":"newsletters/2022-12/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2022-12/#nouveau-filtre-de-date-avec-calendrier","text":"Le filtrage des colonnes de date et de datetime est devenu plus facile. Vous pouvez maintenant s\u00e9lectionner un intervalle de dates en utilisant un s\u00e9lecteur de calendrier. Les limites de l\u2019intervalle peuvent \u00e9galement \u00eatre relatives \u2014 par exemple, du 1er jour de ce mois \u00e0 Aujourd'hui . Le filtre se mettra \u00e0 jour chaque jour.","title":"Nouveau filtre de date avec calendrier"},{"location":"newsletters/2022-12/#instantanes-dans-grist-core","text":"Auparavant, les instantan\u00e9s \u00e9taient disponibles sur Grist h\u00e9berg\u00e9 et le plan d\u2019entreprise autog\u00e9r\u00e9, et reposaient sur des services de stockage cloud commerciaux. D\u00e9sormais, la prise en charge des instantan\u00e9s est \u00e9galement disponible sur Grist Core \u2014 la version open source de Grist \u2014 et peut fonctionner avec des options de stockage autog\u00e9r\u00e9es open source telles que MinIO. \ud83c\udf89 Apprenez comment configurer les instantan\u00e9s .","title":"Instantan\u00e9s dans Grist Core"},{"location":"newsletters/2022-12/#suppression-rapide-des-permissions-avancees-de-tablecolonne-invalides","text":"S\u2019il existe des permissions avanc\u00e9es pour une table ou une colonne qui a \u00e9t\u00e9 supprim\u00e9e, il y a maintenant un bouton pratique pour supprimer les r\u00e8gles qui s\u2019appliquent \u00e0 la colonne ou \u00e0 la table supprim\u00e9e. Vous gardez le contr\u00f4le sur les r\u00e8gles qui restent et celles qui sont supprim\u00e9es, vous n\u2019avez donc pas \u00e0 vous inqui\u00e9ter de la disparition des r\u00e8gles si vous r\u00e9organisez votre document. Dans cet exemple, la colonne Breeder_Retirement a \u00e9t\u00e9 supprim\u00e9e, donc la r\u00e8gle de colonne pour cette colonne doit \u00e9galement \u00eatre supprim\u00e9e.","title":"Suppression rapide des permissions avanc\u00e9es de table/colonne invalides"},{"location":"newsletters/2022-12/#interface-utilisateur-amelioree-pour-la-redaction-de-memos","text":"Les permissions avanc\u00e9es ont maintenant un bouton m\u00e9mo pour ajouter des m\u00e9mos aux r\u00e8gles, rendant la r\u00e9daction et l\u2019\u00e9dition des m\u00e9mos plus pratiques. Les m\u00e9mos peuvent vraiment aider les coll\u00e8gues \u00e0 comprendre pourquoi ils ne peuvent pas faire quelque chose, car les m\u00e9mos sont affich\u00e9s dans une popup lorsqu\u2019une action est bloqu\u00e9e par une r\u00e8gle.","title":"Interface utilisateur am\u00e9lior\u00e9e pour la r\u00e9daction de m\u00e9mos"},{"location":"newsletters/2022-12/#conseils","text":"Pour vous aider, vous et vos co\u00e9quipiers, \u00e0 tirer le meilleur parti de Grist, des conseils apparaissent d\u00e9sormais lorsque vous explorez les fonctionnalit\u00e9s de Grist. Pour ignorer tous les conseils, cochez la case \u201cNe pas afficher les conseils\u201d.","title":"Conseils"},{"location":"newsletters/2022-12/#contributions-open-source","text":"Merci \u00e0 @jperon qui a cr\u00e9\u00e9 et partag\u00e9 un widget de tableau crois\u00e9 dynamique personnalis\u00e9. Trouvez-le dans notre d\u00e9p\u00f4t Github de widgets personnalis\u00e9s, grist-widget .","title":"Contributions open source"},{"location":"newsletters/2022-12/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2022-12/#webinaire-permissions-avancees-pour-les-equipes","text":"Apprenez \u00e0 \u00e9crire des permissions avanc\u00e9es qui g\u00e8rent les autorisations des membres de l\u2019\u00e9quipe sur un document. Jeudi 19 janvier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER","title":"Webinaire : Permissions avanc\u00e9es pour les \u00e9quipes"},{"location":"newsletters/2022-12/#modification-des-modeles","text":"En d\u00e9cembre, nous avons appris \u00e0 modifier un mod\u00e8le de notre galerie de mod\u00e8les pour mieux s\u2019adapter \u00e0 votre flux de travail. REGARDEZ L\u2019ENREGISTREMENT DE D\u00c9CEMBRE","title":"Modification des mod\u00e8les"},{"location":"newsletters/2022-12/#programme-sprouts","text":"Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. EN SAVOIR PLUS","title":"Programme Sprouts"},{"location":"newsletters/2022-12/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2022-12/#gestion-deglise","text":"L\u2019utilisateur de Grist Paul Janzen a construit un CRM pour g\u00e9rer les informations des paroissiens de son \u00e9glise. Il a partag\u00e9 le mod\u00e8le avec nous pour l\u2019inclure dans notre galerie. Merci ! \ud83d\ude4f ALLER AU MOD\u00c8LE","title":"Gestion d’\u00e9glise"},{"location":"newsletters/2022-12/#club-de-lecture","text":"Une r\u00e9solution courante du Nouvel An est de lire plus de livres. Lancez vos habitudes de lecture avec un club de lecture ! Utilisez ce mod\u00e8le pour suivre les suggestions de livres, et trouvez des livres dans les magasins et les biblioth\u00e8ques en un clic. ALLER AU MOD\u00c8LE","title":"Club de lecture"},{"location":"newsletters/2022-12/#vous-voulez-aider-au-developpement-de-grist","text":"Nous travaillons toujours sur de nouvelles fonctionnalit\u00e9s importantes et aimerions avoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester les fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un email \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL","title":"Vous voulez aider au d\u00e9veloppement de Grist ?"},{"location":"newsletters/2022-12/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2022-12/#nous-sommes-la-pour-vous-soutenir","text":"Vous avez des questions, des retours ou besoin d\u2019aide ? Consultez notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-01/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Janvier 2023 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Janvier 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Grist en Fran\u00e7ais, Espa\u00f1ol, Portugu\u00eas und Deutsch! # Grist est d\u00e9sormais disponible en plusieurs langues. Pour d\u00e9finir une langue, cliquez sur votre ic\u00f4ne utilisateur > param\u00e8tres du profil > s\u00e9lectionnez une langue dans le menu d\u00e9roulant. Nous sommes tr\u00e8s reconnaissants aux b\u00e9n\u00e9voles qui ont traduit Grist, \u00e0 savoir l\u2019\u00e9quipe de l\u2019ANCT et Paul Janzen. \ud83d\ude4f Les d\u00e9veloppeurs de l\u2019ANCT ont \u00e9galement fait le gros du travail pour rendre une bonne partie de l\u2019application traduisible. Merci bien! Vous souhaitez aider \u00e0 traduire Grist? Nous utilisons Weblate pour g\u00e9rer les traductions et nous accueillons volontiers les traducteurs b\u00e9n\u00e9voles. Merci \u00e0 tous ceux qui contribuent. Agrandir les Vues # Travailler sur de petits \u00e9crans devient plus facile! Il est maintenant possible d\u2019agrandir les vues en cliquant sur l\u2019ic\u00f4ne d\u2019agrandissement dans le coin sup\u00e9rieur droit. Voir Comme un Autre Utilisateur # Voir un document comme diff\u00e9rents membres de l\u2019\u00e9quipe est utile lors des tests de permissions avanc\u00e9es. Il est maintenant plus facile de parcourir les membres dans une banni\u00e8re \u201cVoir Comme\u201d sans quitter la page. Vous pouvez \u00e9galement voir comme un membre de l\u2019\u00e9quipe depuis le menu \u00e0 trois points dans le bouton des permissions avanc\u00e9es dans le panneau lat\u00e9ral gauche. R\u00e8gles par D\u00e9faut pour les Permissions Granulaires de Table # Lors de l\u2019\u00e9criture de permissions avanc\u00e9es, il est assez courant de r\u00e9p\u00e9ter la m\u00eame r\u00e8gle sur plusieurs tables \u2014 par exemple, toujours accorder aux propri\u00e9taires des permissions compl\u00e8tes de lecture et d\u2019\u00e9criture. Il y a maintenant une case \u00e0 cocher qui accordera automatiquement aux propri\u00e9taires un acc\u00e8s complet chaque fois que des r\u00e8gles de table sont ajout\u00e9es. Les r\u00e8gles qui sont automatiquement ajout\u00e9es aux nouvelles r\u00e8gles de table sont appel\u00e9es r\u00e8gles par d\u00e9faut. Vous pouvez modifier les r\u00e8gles par d\u00e9faut et m\u00eame ajouter des m\u00e9mos si n\u00e9cessaire. Basculement en Un Clic pour Refuser les Permissions de Sch\u00e9ma aux \u00c9diteurs # Par d\u00e9faut, les \u00e9diteurs d\u2019un document ont des permissions de sch\u00e9ma, ce qui leur permet de modifier la structure, les vues et les formules d\u2019un document. Les formules sont puissantes car un utilisateur d\u00e9termin\u00e9 peut r\u00e9cup\u00e9rer des informations auxquelles il n\u2019a pas acc\u00e8s en utilisant des formules. Pour se prot\u00e9ger contre cela, les \u00e9diteurs peuvent se voir refuser les permissions de sch\u00e9ma avec une r\u00e8gle d\u2019acc\u00e8s suppl\u00e9mentaire. Nous avons rendu cela plus facile avec une case \u00e0 cocher en un clic. Les Param\u00e8tres du Document ont D\u00e9plac\u00e9 # Vous pouvez maintenant trouver les param\u00e8tres du document dans la section \u201cOutils\u201d du panneau lat\u00e9ral gauche. Points Forts de la Communaut\u00e9 # @jperon a cr\u00e9\u00e9 et partag\u00e9 un widget QR code personnalis\u00e9. @enthus1ast a cr\u00e9\u00e9 une application qui sauvegarde p\u00e9riodiquement les documents Grist aux formats de fichiers SQLite, Xlsx et CSV. Merci \u00e0 vous deux! \ud83d\ude4f Apprendre Grist # Webinaire : Travailler avec les Dates # Les dates sont une partie courante des donn\u00e9es. Cependant, travailler avec elles dans les formules et les filtres peut \u00eatre intimidant. Dans le webinaire de ce mois-ci, nous partagerons des conseils pour travailler avec les dates. Jeudi 16 f\u00e9vrier \u00e0 14h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER Permissions Avanc\u00e9es pour les \u00c9quipes # En janvier, nous avons appris \u00e0 \u00e9crire des permissions avanc\u00e9es pour g\u00e9rer les permissions des membres de l\u2019\u00e9quipe sur un document. REGARDER L\u2019ENREGISTREMENT DE JANVIER Mod\u00e8les # Suivi des Habitudes # Pr\u00e9parez-vous au succ\u00e8s en adoptant de meilleures habitudes! Suivez vos progr\u00e8s avec ce simple suivi hebdomadaire des habitudes. ALLER AU MOD\u00c8LE D\u00e9penses de Carte de Cr\u00e9dit # Suivez les d\u00e9penses de carte de cr\u00e9dit des employ\u00e9s et analysez les d\u00e9penses en un seul endroit. ALLER AU MOD\u00c8LE Recrutement # Utilisez ce mod\u00e8le pour suivre les candidats postulant \u00e0 des r\u00f4les dans votre \u00e9quipe. Suivez collaborativement les candidats, et joignez des CV et des notes d\u2019entretien. ALLER AU MOD\u00c8LE Vous Voulez Aider au D\u00e9veloppement de Grist? # Nous travaillons toujours sur de grandes nouvelles fonctionnalit\u00e9s et aimerions recevoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester des fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un email \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL Aider \u00e0 faire conna\u00eetre Grist? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/01"},{"location":"newsletters/2023-01/#bulletin-de-janvier-2023","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Janvier 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Janvier 2023"},{"location":"newsletters/2023-01/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-01/#grist-en-francais-espanol-portugues-und-deutsch","text":"Grist est d\u00e9sormais disponible en plusieurs langues. Pour d\u00e9finir une langue, cliquez sur votre ic\u00f4ne utilisateur > param\u00e8tres du profil > s\u00e9lectionnez une langue dans le menu d\u00e9roulant. Nous sommes tr\u00e8s reconnaissants aux b\u00e9n\u00e9voles qui ont traduit Grist, \u00e0 savoir l\u2019\u00e9quipe de l\u2019ANCT et Paul Janzen. \ud83d\ude4f Les d\u00e9veloppeurs de l\u2019ANCT ont \u00e9galement fait le gros du travail pour rendre une bonne partie de l\u2019application traduisible. Merci bien! Vous souhaitez aider \u00e0 traduire Grist? Nous utilisons Weblate pour g\u00e9rer les traductions et nous accueillons volontiers les traducteurs b\u00e9n\u00e9voles. Merci \u00e0 tous ceux qui contribuent.","title":"Grist en Fran\u00e7ais, Espa\u00f1ol, Portugu\u00eas und Deutsch!"},{"location":"newsletters/2023-01/#agrandir-les-vues","text":"Travailler sur de petits \u00e9crans devient plus facile! Il est maintenant possible d\u2019agrandir les vues en cliquant sur l\u2019ic\u00f4ne d\u2019agrandissement dans le coin sup\u00e9rieur droit.","title":"Agrandir les Vues"},{"location":"newsletters/2023-01/#voir-comme-un-autre-utilisateur","text":"Voir un document comme diff\u00e9rents membres de l\u2019\u00e9quipe est utile lors des tests de permissions avanc\u00e9es. Il est maintenant plus facile de parcourir les membres dans une banni\u00e8re \u201cVoir Comme\u201d sans quitter la page. Vous pouvez \u00e9galement voir comme un membre de l\u2019\u00e9quipe depuis le menu \u00e0 trois points dans le bouton des permissions avanc\u00e9es dans le panneau lat\u00e9ral gauche.","title":"Voir Comme un Autre Utilisateur"},{"location":"newsletters/2023-01/#regles-par-defaut-pour-les-permissions-granulaires-de-table","text":"Lors de l\u2019\u00e9criture de permissions avanc\u00e9es, il est assez courant de r\u00e9p\u00e9ter la m\u00eame r\u00e8gle sur plusieurs tables \u2014 par exemple, toujours accorder aux propri\u00e9taires des permissions compl\u00e8tes de lecture et d\u2019\u00e9criture. Il y a maintenant une case \u00e0 cocher qui accordera automatiquement aux propri\u00e9taires un acc\u00e8s complet chaque fois que des r\u00e8gles de table sont ajout\u00e9es. Les r\u00e8gles qui sont automatiquement ajout\u00e9es aux nouvelles r\u00e8gles de table sont appel\u00e9es r\u00e8gles par d\u00e9faut. Vous pouvez modifier les r\u00e8gles par d\u00e9faut et m\u00eame ajouter des m\u00e9mos si n\u00e9cessaire.","title":"R\u00e8gles par D\u00e9faut pour les Permissions Granulaires de Table"},{"location":"newsletters/2023-01/#basculement-en-un-clic-pour-refuser-les-permissions-de-schema-aux-editeurs","text":"Par d\u00e9faut, les \u00e9diteurs d\u2019un document ont des permissions de sch\u00e9ma, ce qui leur permet de modifier la structure, les vues et les formules d\u2019un document. Les formules sont puissantes car un utilisateur d\u00e9termin\u00e9 peut r\u00e9cup\u00e9rer des informations auxquelles il n\u2019a pas acc\u00e8s en utilisant des formules. Pour se prot\u00e9ger contre cela, les \u00e9diteurs peuvent se voir refuser les permissions de sch\u00e9ma avec une r\u00e8gle d\u2019acc\u00e8s suppl\u00e9mentaire. Nous avons rendu cela plus facile avec une case \u00e0 cocher en un clic.","title":"Basculement en Un Clic pour Refuser les Permissions de Sch\u00e9ma aux \u00c9diteurs"},{"location":"newsletters/2023-01/#les-parametres-du-document-ont-deplace","text":"Vous pouvez maintenant trouver les param\u00e8tres du document dans la section \u201cOutils\u201d du panneau lat\u00e9ral gauche.","title":"Les Param\u00e8tres du Document ont D\u00e9plac\u00e9"},{"location":"newsletters/2023-01/#points-forts-de-la-communaute","text":"@jperon a cr\u00e9\u00e9 et partag\u00e9 un widget QR code personnalis\u00e9. @enthus1ast a cr\u00e9\u00e9 une application qui sauvegarde p\u00e9riodiquement les documents Grist aux formats de fichiers SQLite, Xlsx et CSV. Merci \u00e0 vous deux! \ud83d\ude4f","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2023-01/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-01/#webinaire-travailler-avec-les-dates","text":"Les dates sont une partie courante des donn\u00e9es. Cependant, travailler avec elles dans les formules et les filtres peut \u00eatre intimidant. Dans le webinaire de ce mois-ci, nous partagerons des conseils pour travailler avec les dates. Jeudi 16 f\u00e9vrier \u00e0 14h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER","title":"Webinaire : Travailler avec les Dates"},{"location":"newsletters/2023-01/#permissions-avancees-pour-les-equipes","text":"En janvier, nous avons appris \u00e0 \u00e9crire des permissions avanc\u00e9es pour g\u00e9rer les permissions des membres de l\u2019\u00e9quipe sur un document. REGARDER L\u2019ENREGISTREMENT DE JANVIER","title":"Permissions Avanc\u00e9es pour les \u00c9quipes"},{"location":"newsletters/2023-01/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-01/#suivi-des-habitudes","text":"Pr\u00e9parez-vous au succ\u00e8s en adoptant de meilleures habitudes! Suivez vos progr\u00e8s avec ce simple suivi hebdomadaire des habitudes. ALLER AU MOD\u00c8LE","title":"Suivi des Habitudes"},{"location":"newsletters/2023-01/#depenses-de-carte-de-credit","text":"Suivez les d\u00e9penses de carte de cr\u00e9dit des employ\u00e9s et analysez les d\u00e9penses en un seul endroit. ALLER AU MOD\u00c8LE","title":"D\u00e9penses de Carte de Cr\u00e9dit"},{"location":"newsletters/2023-01/#recrutement","text":"Utilisez ce mod\u00e8le pour suivre les candidats postulant \u00e0 des r\u00f4les dans votre \u00e9quipe. Suivez collaborativement les candidats, et joignez des CV et des notes d\u2019entretien. ALLER AU MOD\u00c8LE","title":"Recrutement"},{"location":"newsletters/2023-01/#vous-voulez-aider-au-developpement-de-grist","text":"Nous travaillons toujours sur de grandes nouvelles fonctionnalit\u00e9s et aimerions recevoir des retours pr\u00e9coces des utilisateurs avant que les fonctionnalit\u00e9s ne soient ajout\u00e9es \u00e0 Grist. Si vous souhaitez tester des fonctionnalit\u00e9s en avant-premi\u00e8re et fournir des retours, envoyez un email \u00e0 success@getgrist.com . ENVOYEZ-NOUS UN EMAIL","title":"Vous Voulez Aider au D\u00e9veloppement de Grist?"},{"location":"newsletters/2023-01/#aider-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aider \u00e0 faire conna\u00eetre Grist?"},{"location":"newsletters/2023-01/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-02/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de F\u00e9vrier 2023 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill F\u00e9vrier 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Plus de Langues Disponibles # Le mois dernier, nous avons annonc\u00e9 que Grist est d\u00e9sormais disponible en plusieurs langues gr\u00e2ce aux efforts des traducteurs b\u00e9n\u00e9voles. Depuis, d\u2019autres b\u00e9n\u00e9voles ont rejoint, d\u00e9passant largement nos attentes. Un grand merci \u00e0 tous ceux qui ont traduit Grist ! \ud83d\ude4f Il est maintenant traduit dans les langues suivantes : Chinois Fran\u00e7ais Allemand Italien Portugais Russe Espagnol Ukrainien Il y a aussi des traductions partielles du norv\u00e9gien Bokm\u00e5l et du polonais. Si vous \u00eates int\u00e9ress\u00e9 par la finalisation de ces traductions, visitez notre projet Weblate pour contribuer \u00e0 ces efforts. Si vous souhaitez que nous ajoutions une nouvelle langue \u00e0 Weblate, faites-nous savoir laquelle dans ce fil de discussion communautaire . Notez que la traduction chinoise est toute nouvelle et sera disponible dans le produit la semaine prochaine. Parole aux D\u00e9veloppeurs # Ce mois-ci, nous mettons en avant des projets parall\u00e8les int\u00e9ressants qui passionnent les ing\u00e9nieurs de Grist. Application Grist Electron # Paul travaille sur une version Electron de Grist ! C\u2019est un projet de longue date pour lui de faire de Grist une application autonome sur Windows, Mac et Linux. L\u2019ann\u00e9e derni\u00e8re, l\u2019utilisateur @stan-donarise a travaill\u00e9 sur une application Grist Electron pour Windows 7 ou plus . Paul a pris des id\u00e9es de cet effort, de ce fil de discussion sur le forum , et d\u2019une version autonome pr\u00e9coce de Grist d\u00e9velopp\u00e9e chez Grist Labs. D\u00e9couvrez le repo de l\u2019application Grist Electron sur Github . Utilisez-le avec vos propres documents Grist ou des documents de confiance car il n\u2019y a pas encore de sandbox. \ud83d\ude0f Pourquoi le Tri est Plus Difficile qu\u2019il n\u2019y Para\u00eet # De temps en temps, un utilisateur signale un bug de tri. Certains d\u00e9veloppeurs peuvent penser que le tri est facile. Voici pourquoi ce n\u2019est pas le cas, et une plong\u00e9e fascinante dans les coins inattendus du tri . Vos Documents Lourds Vous Ralentissent ? # Nos ing\u00e9nieurs ont \u00e9galement travaill\u00e9 sur des optimisations pour am\u00e9liorer les performances des formules. L\u2019outil de profilage Python py-spy a \u00e9t\u00e9 particuli\u00e8rement utile pour savoir o\u00f9 le temps CPU \u00e9tait pass\u00e9. Les tests sur un grand document ont montr\u00e9 une am\u00e9lioration de 26% de la vitesse de performance. Vos r\u00e9sultats peuvent varier, et nous serions curieux de savoir si quelqu\u2019un a remarqu\u00e9 l\u2019acc\u00e9l\u00e9ration. Apprendre Grist # Webinaire : Nettoyage des Donn\u00e9es # Typiquement, apr\u00e8s avoir import\u00e9 des donn\u00e9es dans Grist, l\u2019\u00e9tape suivante est de nettoyer ces donn\u00e9es. Nous partagerons des astuces pour assainir les donn\u00e9es efficacement, y compris quelques astuces propres \u00e0 Grist. Jeudi 16 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Travailler avec les Dates # En f\u00e9vrier, nous avons appris \u00e0 travailler avec les dates dans les filtres, les tables de r\u00e9sum\u00e9 et les formules. REGARDEZ L\u2019ENREGISTREMENT DE F\u00c9VRIER Mod\u00e8les # Gestion des T\u00e2ches # Organisez les t\u00e2ches de votre \u00e9quipe et guidez une r\u00e9union hebdomadaire. ALLER AU MOD\u00c8LE Paie # Notre simple suivi de la paie est l\u2019un de nos mod\u00e8les les plus populaires. Suivez les informations salariales des employ\u00e9s, les paiements de la paie et les d\u00e9penses de la paie par p\u00e9riode en un seul endroit. ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/02"},{"location":"newsletters/2023-02/#bulletin-de-fevrier-2023","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill F\u00e9vrier 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de F\u00e9vrier 2023"},{"location":"newsletters/2023-02/#plus-de-langues-disponibles","text":"Le mois dernier, nous avons annonc\u00e9 que Grist est d\u00e9sormais disponible en plusieurs langues gr\u00e2ce aux efforts des traducteurs b\u00e9n\u00e9voles. Depuis, d\u2019autres b\u00e9n\u00e9voles ont rejoint, d\u00e9passant largement nos attentes. Un grand merci \u00e0 tous ceux qui ont traduit Grist ! \ud83d\ude4f Il est maintenant traduit dans les langues suivantes : Chinois Fran\u00e7ais Allemand Italien Portugais Russe Espagnol Ukrainien Il y a aussi des traductions partielles du norv\u00e9gien Bokm\u00e5l et du polonais. Si vous \u00eates int\u00e9ress\u00e9 par la finalisation de ces traductions, visitez notre projet Weblate pour contribuer \u00e0 ces efforts. Si vous souhaitez que nous ajoutions une nouvelle langue \u00e0 Weblate, faites-nous savoir laquelle dans ce fil de discussion communautaire . Notez que la traduction chinoise est toute nouvelle et sera disponible dans le produit la semaine prochaine.","title":"Plus de Langues Disponibles"},{"location":"newsletters/2023-02/#parole-aux-developpeurs","text":"Ce mois-ci, nous mettons en avant des projets parall\u00e8les int\u00e9ressants qui passionnent les ing\u00e9nieurs de Grist.","title":"Parole aux D\u00e9veloppeurs"},{"location":"newsletters/2023-02/#application-grist-electron","text":"Paul travaille sur une version Electron de Grist ! C\u2019est un projet de longue date pour lui de faire de Grist une application autonome sur Windows, Mac et Linux. L\u2019ann\u00e9e derni\u00e8re, l\u2019utilisateur @stan-donarise a travaill\u00e9 sur une application Grist Electron pour Windows 7 ou plus . Paul a pris des id\u00e9es de cet effort, de ce fil de discussion sur le forum , et d\u2019une version autonome pr\u00e9coce de Grist d\u00e9velopp\u00e9e chez Grist Labs. D\u00e9couvrez le repo de l\u2019application Grist Electron sur Github . Utilisez-le avec vos propres documents Grist ou des documents de confiance car il n\u2019y a pas encore de sandbox. \ud83d\ude0f","title":"Application Grist Electron"},{"location":"newsletters/2023-02/#pourquoi-le-tri-est-plus-difficile-quil-ny-parait","text":"De temps en temps, un utilisateur signale un bug de tri. Certains d\u00e9veloppeurs peuvent penser que le tri est facile. Voici pourquoi ce n\u2019est pas le cas, et une plong\u00e9e fascinante dans les coins inattendus du tri .","title":"Pourquoi le Tri est Plus Difficile qu’il n’y Para\u00eet"},{"location":"newsletters/2023-02/#vos-documents-lourds-vous-ralentissent","text":"Nos ing\u00e9nieurs ont \u00e9galement travaill\u00e9 sur des optimisations pour am\u00e9liorer les performances des formules. L\u2019outil de profilage Python py-spy a \u00e9t\u00e9 particuli\u00e8rement utile pour savoir o\u00f9 le temps CPU \u00e9tait pass\u00e9. Les tests sur un grand document ont montr\u00e9 une am\u00e9lioration de 26% de la vitesse de performance. Vos r\u00e9sultats peuvent varier, et nous serions curieux de savoir si quelqu\u2019un a remarqu\u00e9 l\u2019acc\u00e9l\u00e9ration.","title":"Vos Documents Lourds Vous Ralentissent ?"},{"location":"newsletters/2023-02/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-02/#webinaire-nettoyage-des-donnees","text":"Typiquement, apr\u00e8s avoir import\u00e9 des donn\u00e9es dans Grist, l\u2019\u00e9tape suivante est de nettoyer ces donn\u00e9es. Nous partagerons des astuces pour assainir les donn\u00e9es efficacement, y compris quelques astuces propres \u00e0 Grist. Jeudi 16 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS","title":"Webinaire : Nettoyage des Donn\u00e9es"},{"location":"newsletters/2023-02/#travailler-avec-les-dates","text":"En f\u00e9vrier, nous avons appris \u00e0 travailler avec les dates dans les filtres, les tables de r\u00e9sum\u00e9 et les formules. REGARDEZ L\u2019ENREGISTREMENT DE F\u00c9VRIER","title":"Travailler avec les Dates"},{"location":"newsletters/2023-02/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-02/#gestion-des-taches","text":"Organisez les t\u00e2ches de votre \u00e9quipe et guidez une r\u00e9union hebdomadaire. ALLER AU MOD\u00c8LE","title":"Gestion des T\u00e2ches"},{"location":"newsletters/2023-02/#paie","text":"Notre simple suivi de la paie est l\u2019un de nos mod\u00e8les les plus populaires. Suivez les informations salariales des employ\u00e9s, les paiements de la paie et les d\u00e9penses de la paie par p\u00e9riode en un seul endroit. ALLER AU MOD\u00c8LE","title":"Paie"},{"location":"newsletters/2023-02/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2023-02/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-03/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mars 2023 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Mars 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Dans ce Bulletin Minimiser les Vues Faites de la place sur vos tableaux de bord en r\u00e9duisant les vues en boutons. Tutoriel de Base Grist Une mani\u00e8re pratique et interactive d\u2019apprendre Grist. Sondage Utilisateur Faites-nous part de votre avis ! \ud83d\udc40 Contributions Open Source \ud83d\ude4f Descriptions de colonnes, vue calendrier personnalis\u00e9e, et plus encore ! Vue Flashcards Personnalis\u00e9e Une nouvelle vue personnalis\u00e9e parfaite pour l\u2019apprentissage. Travailler chez Grist ! Deux postes en marketing sont ouverts chez Grist. Le Grand Sondage Grist ! \ud83d\udd25 # Aidez \u00e0 am\u00e9liorer Grist en r\u00e9pondant \u00e0 notre sondage de 5 questions sur l\u2019exp\u00e9rience utilisateur ! Il y a peut-\u00eatre m\u00eame un prix \u00e0 gagner ! \ud83c\udf08\ud83d\udcb0 PARTICIPER AU SONDAGE Vous voulez travailler chez Grist ? # Aimez-vous Grist et le marketing ? Consultez nos nouvelles offres d\u2019emploi sur https://www.getgrist.com/jobs/ . Quoi de Neuf # Minimiser les Vues # Besoin de plus de place sur votre tableau de bord ? Avez-vous une vue qui n\u2019a pas besoin d\u2019\u00eatre visible en permanence ? Vous pouvez maintenant r\u00e9duire les vues en boutons en haut de la page ! La vue s\u2019agrandira au clic et conservera le lien dynamique avec les autres vues de la page. Tutoriel de Base Grist en Produit # Apprendre Grist n\u2019a jamais \u00e9t\u00e9 aussi facile ! D\u00e9couvrez notre nouveau tutoriel pratique. Ce guide \u00e9tape par \u00e9tape vous donnera les bases pour passer des feuilles de calcul aux tableaux de bord productifs. Contributions Open Source # Descriptions de Colonnes # Merci \u00e0 @CamilleLegeron qui a rendu possible l\u2019ajout de descriptions aux colonnes. \ud83c\udf89\ud83d\ude4f Vous pouvez maintenant d\u00e9finir des descriptions de colonnes dans le panneau de cr\u00e9ation. Vue Calendrier Personnalis\u00e9e # @ToJans sur Twitter a partag\u00e9 sa vue calendrier personnalis\u00e9e, ainsi qu\u2019un lien que vous pouvez int\u00e9grer dans vos propres documents. Consultez son tweet . \u00c7a marche ! \ud83d\udcaa TASTEME() ?? # Le mois dernier, nous avons \u00e9galement re\u00e7u une nouvelle fonction de @DysfunctionalWerewolf. La fonction TASTEME() renvoie True pour un texte savoureux, False pour un texte non savoureux. C\u2019est\u2026utile ? \ud83e\udd14 @DysfunctionalWerewolf a montr\u00e9 la fonction en action sur Twitter @were_functions . Nous nous sommes amus\u00e9s \u00e0 essayer de percer le secret de ce qui est savoureux ou non ! Faites-nous savoir si vos donn\u00e9es sont, euh, approuv\u00e9es par les loups-garous ? Mise \u00e0 Jour sur l\u2019Application Grist Electron \u2014 Sandboxing ! # Bonne nouvelle, tout le monde ! L\u2019application Grist electron a maintenant le sandboxing par d\u00e9faut. Tout le monde peut t\u00e9l\u00e9charger l\u2019application sans avoir \u00e0 compiler \u00e0 partir de la source ou conna\u00eetre Docker. Enfin, un moyen super facile de faire fonctionner Grist localement sur votre ordinateur. En savoir plus sur Github . Trouvez le bon fichier de t\u00e9l\u00e9chargement dans cette liste . Sponsoriser Grist sur Github # Vous voulez montrer votre soutien \u00e0 notre projet open source ? Parlez de nous sur tous vos r\u00e9seaux sociaux et \u00e0 vos amis ! Si vous voulez faire encore plus, envisagez de nous sponsoriser sur Github. \ud83e\udde1 Nous sommes reconnaissants envers notre premier sponsor d\u2019entreprise Dotphoton, et envers le sponsor @emanuelegissi ! \ud83d\ude4f SPONSORISER GRIST Apprendre Grist # Webinar : Formules d\u2019Initialisation # Les formules Grist peuvent \u00eatre d\u00e9finies pour se d\u00e9clencher sur des \u00e9v\u00e9nements d\u2019enregistrement sp\u00e9cifiques. Apprenez tout sur les formules d\u2019initialisation, quand les utiliser, et les usages courants des formules d\u2019initialisation pour garder vos donn\u00e9es organis\u00e9es et productives. Mercredi 12 avril \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAR D\u2019AVRIL Nettoyage des Donn\u00e9es # En mars, Natalie a partag\u00e9 des astuces pour nettoyer vos donn\u00e9es rapidement dans Grist, y compris quelques astuces exclusives \u00e0 Grist. REGARDER L\u2019ENREGISTREMENT DE MARS Nouveau Mod\u00e8le et Vue Personnalis\u00e9e # Flashcards # Pr\u00eat \u00e0 r\u00e9ussir votre prochain test ? Vous obtiendrez \ud83d\udcaf en \u00e9tudiant avec ces petites merveilles. Les flashcards sont l\u2019une des formes d\u2019\u00e9tude les plus efficaces \u2014 et avec Grist, elles sont toutes au m\u00eame endroit. ALLER AU MOD\u00c8LE Aider \u00e0 faire conna\u00eetre Grist ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/03"},{"location":"newsletters/2023-03/#bulletin-de-mars-2023","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Mars 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et astuces pour les utilisateurs de Grist. Dans ce Bulletin Minimiser les Vues Faites de la place sur vos tableaux de bord en r\u00e9duisant les vues en boutons. Tutoriel de Base Grist Une mani\u00e8re pratique et interactive d\u2019apprendre Grist. Sondage Utilisateur Faites-nous part de votre avis ! \ud83d\udc40 Contributions Open Source \ud83d\ude4f Descriptions de colonnes, vue calendrier personnalis\u00e9e, et plus encore ! Vue Flashcards Personnalis\u00e9e Une nouvelle vue personnalis\u00e9e parfaite pour l\u2019apprentissage. Travailler chez Grist ! Deux postes en marketing sont ouverts chez Grist.","title":"Bulletin de Mars 2023"},{"location":"newsletters/2023-03/#le-grand-sondage-grist","text":"Aidez \u00e0 am\u00e9liorer Grist en r\u00e9pondant \u00e0 notre sondage de 5 questions sur l\u2019exp\u00e9rience utilisateur ! Il y a peut-\u00eatre m\u00eame un prix \u00e0 gagner ! \ud83c\udf08\ud83d\udcb0 PARTICIPER AU SONDAGE","title":"Le Grand Sondage Grist ! \ud83d\udd25"},{"location":"newsletters/2023-03/#vous-voulez-travailler-chez-grist","text":"Aimez-vous Grist et le marketing ? Consultez nos nouvelles offres d\u2019emploi sur https://www.getgrist.com/jobs/ .","title":"Vous voulez travailler chez Grist ?"},{"location":"newsletters/2023-03/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-03/#minimiser-les-vues","text":"Besoin de plus de place sur votre tableau de bord ? Avez-vous une vue qui n\u2019a pas besoin d\u2019\u00eatre visible en permanence ? Vous pouvez maintenant r\u00e9duire les vues en boutons en haut de la page ! La vue s\u2019agrandira au clic et conservera le lien dynamique avec les autres vues de la page.","title":"Minimiser les Vues"},{"location":"newsletters/2023-03/#tutoriel-de-base-grist-en-produit","text":"Apprendre Grist n\u2019a jamais \u00e9t\u00e9 aussi facile ! D\u00e9couvrez notre nouveau tutoriel pratique. Ce guide \u00e9tape par \u00e9tape vous donnera les bases pour passer des feuilles de calcul aux tableaux de bord productifs.","title":"Tutoriel de Base Grist en Produit"},{"location":"newsletters/2023-03/#contributions-open-source","text":"","title":"Contributions Open Source"},{"location":"newsletters/2023-03/#descriptions-de-colonnes","text":"Merci \u00e0 @CamilleLegeron qui a rendu possible l\u2019ajout de descriptions aux colonnes. \ud83c\udf89\ud83d\ude4f Vous pouvez maintenant d\u00e9finir des descriptions de colonnes dans le panneau de cr\u00e9ation.","title":"Descriptions de Colonnes"},{"location":"newsletters/2023-03/#vue-calendrier-personnalisee","text":"@ToJans sur Twitter a partag\u00e9 sa vue calendrier personnalis\u00e9e, ainsi qu\u2019un lien que vous pouvez int\u00e9grer dans vos propres documents. Consultez son tweet . \u00c7a marche ! \ud83d\udcaa","title":"Vue Calendrier Personnalis\u00e9e"},{"location":"newsletters/2023-03/#tasteme","text":"Le mois dernier, nous avons \u00e9galement re\u00e7u une nouvelle fonction de @DysfunctionalWerewolf. La fonction TASTEME() renvoie True pour un texte savoureux, False pour un texte non savoureux. C\u2019est\u2026utile ? \ud83e\udd14 @DysfunctionalWerewolf a montr\u00e9 la fonction en action sur Twitter @were_functions . Nous nous sommes amus\u00e9s \u00e0 essayer de percer le secret de ce qui est savoureux ou non ! Faites-nous savoir si vos donn\u00e9es sont, euh, approuv\u00e9es par les loups-garous ?","title":"TASTEME() ??"},{"location":"newsletters/2023-03/#mise-a-jour-sur-lapplication-grist-electron-sandboxing","text":"Bonne nouvelle, tout le monde ! L\u2019application Grist electron a maintenant le sandboxing par d\u00e9faut. Tout le monde peut t\u00e9l\u00e9charger l\u2019application sans avoir \u00e0 compiler \u00e0 partir de la source ou conna\u00eetre Docker. Enfin, un moyen super facile de faire fonctionner Grist localement sur votre ordinateur. En savoir plus sur Github . Trouvez le bon fichier de t\u00e9l\u00e9chargement dans cette liste .","title":"Mise \u00e0 Jour sur l’Application Grist Electron \u2014 Sandboxing !"},{"location":"newsletters/2023-03/#sponsoriser-grist-sur-github","text":"Vous voulez montrer votre soutien \u00e0 notre projet open source ? Parlez de nous sur tous vos r\u00e9seaux sociaux et \u00e0 vos amis ! Si vous voulez faire encore plus, envisagez de nous sponsoriser sur Github. \ud83e\udde1 Nous sommes reconnaissants envers notre premier sponsor d\u2019entreprise Dotphoton, et envers le sponsor @emanuelegissi ! \ud83d\ude4f SPONSORISER GRIST","title":"Sponsoriser Grist sur Github"},{"location":"newsletters/2023-03/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-03/#webinar-formules-dinitialisation","text":"Les formules Grist peuvent \u00eatre d\u00e9finies pour se d\u00e9clencher sur des \u00e9v\u00e9nements d\u2019enregistrement sp\u00e9cifiques. Apprenez tout sur les formules d\u2019initialisation, quand les utiliser, et les usages courants des formules d\u2019initialisation pour garder vos donn\u00e9es organis\u00e9es et productives. Mercredi 12 avril \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. S\u2019INSCRIRE AU WEBINAR D\u2019AVRIL","title":"Webinar : Formules d’Initialisation"},{"location":"newsletters/2023-03/#nettoyage-des-donnees","text":"En mars, Natalie a partag\u00e9 des astuces pour nettoyer vos donn\u00e9es rapidement dans Grist, y compris quelques astuces exclusives \u00e0 Grist. REGARDER L\u2019ENREGISTREMENT DE MARS","title":"Nettoyage des Donn\u00e9es"},{"location":"newsletters/2023-03/#nouveau-modele-et-vue-personnalisee","text":"","title":"Nouveau Mod\u00e8le et Vue Personnalis\u00e9e"},{"location":"newsletters/2023-03/#flashcards","text":"Pr\u00eat \u00e0 r\u00e9ussir votre prochain test ? Vous obtiendrez \ud83d\udcaf en \u00e9tudiant avec ces petites merveilles. Les flashcards sont l\u2019une des formes d\u2019\u00e9tude les plus efficaces \u2014 et avec Grist, elles sont toutes au m\u00eame endroit. ALLER AU MOD\u00c8LE","title":"Flashcards"},{"location":"newsletters/2023-03/#aider-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aider \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2023-03/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-04/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Avril 2023 # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2023 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Concours de Flashcards : Construisez le Meilleur Deck de Connaissances # En mai, nous parrainons un concours de flashcards. Construisez le meilleur deck de flashcards en utilisant notre Mod\u00e8le de Flashcards pour partager votre expertise sur n\u2019importe quel sujet. La communaut\u00e9 votera ensuite pour les trois decks de flashcards les plus \u00e9poustouflants. Chacun des trois gagnants recevra un thermos Grist rare et tr\u00e8s recherch\u00e9. EN SAVOIR PLUS Quoi de Neuf # Nous avons rickroll\u00e9, et vous pouvez aussi # Le mois dernier, nous vous avons invit\u00e9 \u00e0 r\u00e9pondre \u00e0 une enqu\u00eate Grist et avons r\u00e9compens\u00e9 votre gentillesse avec une blague du 1er avril : un rickroll dans Grist. La bonne nouvelle est que vous pouvez transmettre cela \u00e0 tout moment \u00e0 qui vous voulez avec n\u2019importe quel document. Prenez n\u2019importe quel lien d\u2019ancrage Grist et remplacez le r dans l\u2019URL par rr. Nous appelons cela \u201crickrow\u201d car ce r s\u2019ancre \u00e0 une ligne. Pour trouver un lien d\u2019ancrage, cliquez avec le bouton droit sur n\u2019importe quelle cellule et s\u00e9lectionnez \u201ccopier le lien d\u2019ancrage\u201d dans le menu contextuel (raccourci clavier indiqu\u00e9 dans le menu). Dans ce cas, le lien d\u2019ancrage est https://templates.getgrist.com/doc/lightweight-crm#a1.s1.r20.c2 Pour rickrow quelqu\u2019un, modifiez le lien d\u2019ancrage en https://templates.getgrist.com/doc/lightweight-crm#a1.s1.rr20.c2 Pour un rickrolling complet, assurez-vous que le destinataire peut acc\u00e9der au document ! Grist-static : Publiez des donn\u00e9es sur des sites statiques sans int\u00e9grations # Jetez un \u0153il \u00e0 la derni\u00e8re exp\u00e9rience de notre CTO Paul. Grist-static offre un moyen de visualiser et d\u2019interagir avec des fichiers .grist sur des sites web r\u00e9guliers, sans support back-end sp\u00e9cial n\u00e9cessaire. Grist-static est id\u00e9al pour afficher des rapports de tableur sur un site web, similaire aux rapports PDF, mais en mieux ! Avec grist-static, les spectateurs pourront changer les s\u00e9lections et exp\u00e9rimenter en modifiant les chiffres pour voir ce qui se passe. Chaque spectateur a sa propre copie, et ses modifications ne seront pas vues par les autres, ni stock\u00e9es. Ce serait \u00e9galement un moyen \u00e9volutif de montrer un document Grist \u00e0 des millions d\u2019utilisateurs simultan\u00e9s. Voir quelques exemples ici . En savoir plus sur Github . Nous voulons avoir de vos nouvelles. Voyez-vous d\u00e9j\u00e0 un cas d\u2019utilisation pour grist-static ? \u00cates-vous enthousiasm\u00e9 par cela ? Dites-le-nous en nous envoyant un e-mail \u00e0 support@getgrist.com , ou en postant dans notre forum communautaire . Ce n\u2019est que le d\u00e9but pour grist-static et vos commentaires aident \u00e0 orienter notre conception. Une autre attaque de loup-garou : MOONPHASE() # Une autre contribution de fonction par l\u2019utilisateur @were_functions sur Twitter. La fonction MOONPHASE() renvoie la phase de la lune \u00e0 la date donn\u00e9e. Voici ce qu\u2019elle nous dit sur la date de ce bulletin : MOONPHASE(TODAY()) est \ud83c\udf13. Avec d\u2019autres arguments, nous pouvons trouver qu\u2019il s\u2019est \u00e9coul\u00e9 8 jours depuis la nouvelle lune, ou 0,27 d\u2019un mois. Aussi que MOONPHASE(TODAY(), \"lunacy\") est \ud83d\udd7a. S\u00fbr pour l\u2019instant, mais il reste moins d\u2019une semaine avant la prochaine pleine lune. Quelqu\u2019un devrait commencer \u00e0 prendre la potion de l\u2019aconit. Essayez-le vous-m\u00eame ! Conseil : Remplacez \u201clunacy\u201d par \u201cdays\u201d pour calculer l\u2019\u00e2ge de la lune en jours, ou \u201cfraction\u201d pour calculer la fraction du mois lunaire depuis la nouvelle lune. Parrainer Grist sur Github # Vous voulez montrer votre soutien \u00e0 notre projet open source ? Parlez de nous sur tous vos r\u00e9seaux sociaux et dites-le \u00e0 vos amis ! Si vous voulez faire encore plus, envisagez de nous parrainer sur Github. \ud83e\udde1 PARRAINER GRIST-CORE Apprendre Grist # Webinaire : Importer des Donn\u00e9es # De nombreux utilisateurs de Grist ont import\u00e9 des tableurs dans Grist, mais tous ne sont pas conscients de toutes les fonctionnalit\u00e9s d\u2019importation int\u00e9ressantes que Grist offre, telles que les importations incr\u00e9mentielles, les champs de fusion et les transformations de formules. En mai, nous approfondirons l\u2019importation de donn\u00e9es comme un pro. Mardi 16 mai \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI Formules d\u2019Initialisation # En avril, nous avons tout appris sur les formules d\u2019initialisation, quand les utiliser et les utilisations courantes des formules d\u2019initialisation pour garder vos donn\u00e9es organis\u00e9es et productives. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL Nouveau Mod\u00e8le # Pr\u00e9paration aux Tests # Cr\u00e9ez des tests d\u2019\u00e9chantillons chronom\u00e9tr\u00e9s et des flashcards pour r\u00e9ussir votre prochain test ! ALLER AU MOD\u00c8LE Aidez \u00e0 faire passer le mot ? # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/04"},{"location":"newsletters/2023-04/#bulletin-davril-2023","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2023 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin d’Avril 2023"},{"location":"newsletters/2023-04/#concours-de-flashcards-construisez-le-meilleur-deck-de-connaissances","text":"En mai, nous parrainons un concours de flashcards. Construisez le meilleur deck de flashcards en utilisant notre Mod\u00e8le de Flashcards pour partager votre expertise sur n\u2019importe quel sujet. La communaut\u00e9 votera ensuite pour les trois decks de flashcards les plus \u00e9poustouflants. Chacun des trois gagnants recevra un thermos Grist rare et tr\u00e8s recherch\u00e9. EN SAVOIR PLUS","title":"Concours de Flashcards : Construisez le Meilleur Deck de Connaissances"},{"location":"newsletters/2023-04/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-04/#nous-avons-rickrolle-et-vous-pouvez-aussi","text":"Le mois dernier, nous vous avons invit\u00e9 \u00e0 r\u00e9pondre \u00e0 une enqu\u00eate Grist et avons r\u00e9compens\u00e9 votre gentillesse avec une blague du 1er avril : un rickroll dans Grist. La bonne nouvelle est que vous pouvez transmettre cela \u00e0 tout moment \u00e0 qui vous voulez avec n\u2019importe quel document. Prenez n\u2019importe quel lien d\u2019ancrage Grist et remplacez le r dans l\u2019URL par rr. Nous appelons cela \u201crickrow\u201d car ce r s\u2019ancre \u00e0 une ligne. Pour trouver un lien d\u2019ancrage, cliquez avec le bouton droit sur n\u2019importe quelle cellule et s\u00e9lectionnez \u201ccopier le lien d\u2019ancrage\u201d dans le menu contextuel (raccourci clavier indiqu\u00e9 dans le menu). Dans ce cas, le lien d\u2019ancrage est https://templates.getgrist.com/doc/lightweight-crm#a1.s1.r20.c2 Pour rickrow quelqu\u2019un, modifiez le lien d\u2019ancrage en https://templates.getgrist.com/doc/lightweight-crm#a1.s1.rr20.c2 Pour un rickrolling complet, assurez-vous que le destinataire peut acc\u00e9der au document !","title":"Nous avons rickroll\u00e9, et vous pouvez aussi"},{"location":"newsletters/2023-04/#grist-static-publiez-des-donnees-sur-des-sites-statiques-sans-integrations","text":"Jetez un \u0153il \u00e0 la derni\u00e8re exp\u00e9rience de notre CTO Paul. Grist-static offre un moyen de visualiser et d\u2019interagir avec des fichiers .grist sur des sites web r\u00e9guliers, sans support back-end sp\u00e9cial n\u00e9cessaire. Grist-static est id\u00e9al pour afficher des rapports de tableur sur un site web, similaire aux rapports PDF, mais en mieux ! Avec grist-static, les spectateurs pourront changer les s\u00e9lections et exp\u00e9rimenter en modifiant les chiffres pour voir ce qui se passe. Chaque spectateur a sa propre copie, et ses modifications ne seront pas vues par les autres, ni stock\u00e9es. Ce serait \u00e9galement un moyen \u00e9volutif de montrer un document Grist \u00e0 des millions d\u2019utilisateurs simultan\u00e9s. Voir quelques exemples ici . En savoir plus sur Github . Nous voulons avoir de vos nouvelles. Voyez-vous d\u00e9j\u00e0 un cas d\u2019utilisation pour grist-static ? \u00cates-vous enthousiasm\u00e9 par cela ? Dites-le-nous en nous envoyant un e-mail \u00e0 support@getgrist.com , ou en postant dans notre forum communautaire . Ce n\u2019est que le d\u00e9but pour grist-static et vos commentaires aident \u00e0 orienter notre conception.","title":"Grist-static : Publiez des donn\u00e9es sur des sites statiques sans int\u00e9grations"},{"location":"newsletters/2023-04/#une-autre-attaque-de-loup-garou-moonphase","text":"Une autre contribution de fonction par l\u2019utilisateur @were_functions sur Twitter. La fonction MOONPHASE() renvoie la phase de la lune \u00e0 la date donn\u00e9e. Voici ce qu\u2019elle nous dit sur la date de ce bulletin : MOONPHASE(TODAY()) est \ud83c\udf13. Avec d\u2019autres arguments, nous pouvons trouver qu\u2019il s\u2019est \u00e9coul\u00e9 8 jours depuis la nouvelle lune, ou 0,27 d\u2019un mois. Aussi que MOONPHASE(TODAY(), \"lunacy\") est \ud83d\udd7a. S\u00fbr pour l\u2019instant, mais il reste moins d\u2019une semaine avant la prochaine pleine lune. Quelqu\u2019un devrait commencer \u00e0 prendre la potion de l\u2019aconit. Essayez-le vous-m\u00eame ! Conseil : Remplacez \u201clunacy\u201d par \u201cdays\u201d pour calculer l\u2019\u00e2ge de la lune en jours, ou \u201cfraction\u201d pour calculer la fraction du mois lunaire depuis la nouvelle lune.","title":"Une autre attaque de loup-garou : MOONPHASE()"},{"location":"newsletters/2023-04/#parrainer-grist-sur-github","text":"Vous voulez montrer votre soutien \u00e0 notre projet open source ? Parlez de nous sur tous vos r\u00e9seaux sociaux et dites-le \u00e0 vos amis ! Si vous voulez faire encore plus, envisagez de nous parrainer sur Github. \ud83e\udde1 PARRAINER GRIST-CORE","title":"Parrainer Grist sur Github"},{"location":"newsletters/2023-04/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-04/#webinaire-importer-des-donnees","text":"De nombreux utilisateurs de Grist ont import\u00e9 des tableurs dans Grist, mais tous ne sont pas conscients de toutes les fonctionnalit\u00e9s d\u2019importation int\u00e9ressantes que Grist offre, telles que les importations incr\u00e9mentielles, les champs de fusion et les transformations de formules. En mai, nous approfondirons l\u2019importation de donn\u00e9es comme un pro. Mardi 16 mai \u00e0 12h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI","title":"Webinaire : Importer des Donn\u00e9es"},{"location":"newsletters/2023-04/#formules-dinitialisation","text":"En avril, nous avons tout appris sur les formules d\u2019initialisation, quand les utiliser et les utilisations courantes des formules d\u2019initialisation pour garder vos donn\u00e9es organis\u00e9es et productives. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL","title":"Formules d’Initialisation"},{"location":"newsletters/2023-04/#nouveau-modele","text":"","title":"Nouveau Mod\u00e8le"},{"location":"newsletters/2023-04/#preparation-aux-tests","text":"Cr\u00e9ez des tests d\u2019\u00e9chantillons chronom\u00e9tr\u00e9s et des flashcards pour r\u00e9ussir votre prochain test ! ALLER AU MOD\u00c8LE","title":"Pr\u00e9paration aux Tests"},{"location":"newsletters/2023-04/#aidez-a-faire-passer-le-mot","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire passer le mot ?"},{"location":"newsletters/2023-04/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2023 # /* r\u00e9tablir certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Concours de Flashcards : Votez pour le Meilleur Jeu ! # En mai, nous avons sponsoris\u00e9 un concours de flashcards. Les utilisateurs de Grist \u00e9taient invit\u00e9s \u00e0 cr\u00e9er le meilleur jeu de flashcards en utilisant notre Mod\u00e8le de Flashcards . Merci pour vos soumissions ! La communaut\u00e9 va maintenant voter pour les meilleurs jeux de flashcards ! VOTEZ Quoi de Neuf # Descriptions de Colonnes et de Widgets # En mars, @CamilleLegeron a rendu possible l\u2019ajout de descriptions aux colonnes. D\u00e9sormais, les colonnes avec des descriptions ont une ic\u00f4ne d\u2019information dans leurs en-t\u00eates, qui, lorsqu\u2019elle est survol\u00e9e ou cliqu\u00e9e, r\u00e9v\u00e8le la description respective. Cette fonctionnalit\u00e9 a \u00e9galement \u00e9t\u00e9 activ\u00e9e sur les widgets, fournissant encore plus de contexte \u00e0 votre \u00e9quipe. Pour d\u00e9finir une description de colonne ou de widget, cliquez sur le titre pour ouvrir la bo\u00eete de dialogue de renommage qui inclut d\u00e9sormais un champ de description. Alternativement, les descriptions peuvent \u00eatre d\u00e9finies dans le panneau de cr\u00e9ation. Webhooks ! # Nous sommes heureux de lancer la prise en charge des webhooks en version b\u00eata ! \ud83c\udf89 Les webhooks sont un moyen d\u2019envoyer des informations de Grist vers d\u2019autres applications. Par exemple, si un enregistrement est mis \u00e0 jour dans Grist, envoyez un message dans Slack. Lorsque vous \u00eates dans un document, naviguez vers la page des param\u00e8tres list\u00e9e dans le panneau de gauche sous \u201cOutils\u201d. Le bouton \u201cG\u00e9rer les Webhooks\u201d en bas vous m\u00e8nera \u00e0 la page des webhooks. La prise en charge non officielle de l\u2019API pour les webhooks est disponible depuis un certain temps, formant la base pour Zapier, Pabbly Connect et d\u2019autres int\u00e9grations. Cette API continuera de fonctionner et n\u2019est plus limit\u00e9e \u00e0 des partenaires sp\u00e9cifiques \u2014 vous pouvez maintenant l\u2019utiliser avec n\u2019importe quel site. Apprendre Grist # Webinar : D\u00e9construire un Mod\u00e8le, Suivi des Offres Logiciels # En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. Au cours des quatre prochains mois, nous reconstruirons des mod\u00e8les avec vous et mettrons en \u00e9vidence des sch\u00e9mas communs dans chaque document. En juin, nous vous montrerons comment nous avons construit le Suivi des Offres Logiciels . Le mod\u00e8le a trois pages, chacune avec plusieurs widgets ax\u00e9s sur diff\u00e9rents flux de travail, et pourtant le document est construit sur une seule table de donn\u00e9es. Nous vous montrerons pourquoi pour vous aider \u00e0 anticiper vos propres cas d\u2019utilisation o\u00f9 tout ce dont vous avez besoin est une table avec plusieurs vues. Jeudi 22 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR DE JUIN Importation de Donn\u00e9es # En mai, nous avons explor\u00e9 toutes les fonctionnalit\u00e9s d\u2019importation int\u00e9ressantes que Grist offre, telles que les importations incr\u00e9mentielles, les champs de fusion et les transformations de formules. REGARDEZ L\u2019ENREGISTREMENT DE MAI Mod\u00e8les # Suivi des D\u00e9penses pour les \u00c9quipes # G\u00e9rez toutes les d\u00e9penses des employ\u00e9s en un seul endroit. Fini de jongler avec les feuilles de calcul des d\u00e9penses des employ\u00e9s pour les int\u00e9grer dans une liste ma\u00eetresse chaque mois. Avec les permissions avanc\u00e9es, les employ\u00e9s peuvent se connecter \u00e0 Grist, voir et mettre \u00e0 jour uniquement leurs d\u00e9penses, et Grist s\u2019occupe du reste. Regardez le webinar de ce mod\u00e8le pour en savoir plus sur la fa\u00e7on dont ce mod\u00e8le a \u00e9t\u00e9 construit. ALLER AU MOD\u00c8LE Suivi du Temps Simple # Comme un chronom\u00e8tre dans une feuille de calcul pour cr\u00e9er un journal du temps pass\u00e9 sur les t\u00e2ches. ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/05"},{"location":"newsletters/2023-05/#bulletin-de-mai-2023","text":"/* r\u00e9tablir certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist.","title":"Bulletin de Mai 2023"},{"location":"newsletters/2023-05/#concours-de-flashcards-votez-pour-le-meilleur-jeu","text":"En mai, nous avons sponsoris\u00e9 un concours de flashcards. Les utilisateurs de Grist \u00e9taient invit\u00e9s \u00e0 cr\u00e9er le meilleur jeu de flashcards en utilisant notre Mod\u00e8le de Flashcards . Merci pour vos soumissions ! La communaut\u00e9 va maintenant voter pour les meilleurs jeux de flashcards ! VOTEZ","title":"Concours de Flashcards : Votez pour le Meilleur Jeu !"},{"location":"newsletters/2023-05/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-05/#descriptions-de-colonnes-et-de-widgets","text":"En mars, @CamilleLegeron a rendu possible l\u2019ajout de descriptions aux colonnes. D\u00e9sormais, les colonnes avec des descriptions ont une ic\u00f4ne d\u2019information dans leurs en-t\u00eates, qui, lorsqu\u2019elle est survol\u00e9e ou cliqu\u00e9e, r\u00e9v\u00e8le la description respective. Cette fonctionnalit\u00e9 a \u00e9galement \u00e9t\u00e9 activ\u00e9e sur les widgets, fournissant encore plus de contexte \u00e0 votre \u00e9quipe. Pour d\u00e9finir une description de colonne ou de widget, cliquez sur le titre pour ouvrir la bo\u00eete de dialogue de renommage qui inclut d\u00e9sormais un champ de description. Alternativement, les descriptions peuvent \u00eatre d\u00e9finies dans le panneau de cr\u00e9ation.","title":"Descriptions de Colonnes et de Widgets"},{"location":"newsletters/2023-05/#webhooks","text":"Nous sommes heureux de lancer la prise en charge des webhooks en version b\u00eata ! \ud83c\udf89 Les webhooks sont un moyen d\u2019envoyer des informations de Grist vers d\u2019autres applications. Par exemple, si un enregistrement est mis \u00e0 jour dans Grist, envoyez un message dans Slack. Lorsque vous \u00eates dans un document, naviguez vers la page des param\u00e8tres list\u00e9e dans le panneau de gauche sous \u201cOutils\u201d. Le bouton \u201cG\u00e9rer les Webhooks\u201d en bas vous m\u00e8nera \u00e0 la page des webhooks. La prise en charge non officielle de l\u2019API pour les webhooks est disponible depuis un certain temps, formant la base pour Zapier, Pabbly Connect et d\u2019autres int\u00e9grations. Cette API continuera de fonctionner et n\u2019est plus limit\u00e9e \u00e0 des partenaires sp\u00e9cifiques \u2014 vous pouvez maintenant l\u2019utiliser avec n\u2019importe quel site.","title":"Webhooks !"},{"location":"newsletters/2023-05/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-05/#webinar-deconstruire-un-modele-suivi-des-offres-logiciels","text":"En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. Au cours des quatre prochains mois, nous reconstruirons des mod\u00e8les avec vous et mettrons en \u00e9vidence des sch\u00e9mas communs dans chaque document. En juin, nous vous montrerons comment nous avons construit le Suivi des Offres Logiciels . Le mod\u00e8le a trois pages, chacune avec plusieurs widgets ax\u00e9s sur diff\u00e9rents flux de travail, et pourtant le document est construit sur une seule table de donn\u00e9es. Nous vous montrerons pourquoi pour vous aider \u00e0 anticiper vos propres cas d\u2019utilisation o\u00f9 tout ce dont vous avez besoin est une table avec plusieurs vues. Jeudi 22 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR DE JUIN","title":"Webinar : D\u00e9construire un Mod\u00e8le, Suivi des Offres Logiciels"},{"location":"newsletters/2023-05/#importation-de-donnees","text":"En mai, nous avons explor\u00e9 toutes les fonctionnalit\u00e9s d\u2019importation int\u00e9ressantes que Grist offre, telles que les importations incr\u00e9mentielles, les champs de fusion et les transformations de formules. REGARDEZ L\u2019ENREGISTREMENT DE MAI","title":"Importation de Donn\u00e9es"},{"location":"newsletters/2023-05/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-05/#suivi-des-depenses-pour-les-equipes","text":"G\u00e9rez toutes les d\u00e9penses des employ\u00e9s en un seul endroit. Fini de jongler avec les feuilles de calcul des d\u00e9penses des employ\u00e9s pour les int\u00e9grer dans une liste ma\u00eetresse chaque mois. Avec les permissions avanc\u00e9es, les employ\u00e9s peuvent se connecter \u00e0 Grist, voir et mettre \u00e0 jour uniquement leurs d\u00e9penses, et Grist s\u2019occupe du reste. Regardez le webinar de ce mod\u00e8le pour en savoir plus sur la fa\u00e7on dont ce mod\u00e8le a \u00e9t\u00e9 construit. ALLER AU MOD\u00c8LE","title":"Suivi des D\u00e9penses pour les \u00c9quipes"},{"location":"newsletters/2023-05/#suivi-du-temps-simple","text":"Comme un chronom\u00e8tre dans une feuille de calcul pour cr\u00e9er un journal du temps pass\u00e9 sur les t\u00e2ches. ALLER AU MOD\u00c8LE","title":"Suivi du Temps Simple"},{"location":"newsletters/2023-05/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2023-05/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2023 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Mise en \u00e9vidence des lignes de s\u00e9lection # Une petite mais puissante correction. Grist met d\u00e9sormais en \u00e9vidence la ligne s\u00e9lectionn\u00e9e li\u00e9e aux vues sur une page. Points Forts de la Communaut\u00e9 # @wunter8 a cr\u00e9\u00e9 un widget de calendrier qui est un excellent exemple de ce que les widgets personnalis\u00e9s peuvent faire. Qui sait, peut-\u00eatre que cela pourrait inspirer un widget de calendrier officiel ? \ud83d\udc40 (@ToJans a \u00e9galement partag\u00e9 un widget de calendrier en mars .) Les amateurs de bases de donn\u00e9es appr\u00e9cieront le PostgreSQL Foreign Data Wrapper de @John1, qui est un outil tr\u00e8s astucieux permettant d\u2019importer et de requ\u00eater des tables Grist dans PostgreSQL. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinar : D\u00e9construction du mod\u00e8le CRM de ventes num\u00e9riques # En juillet, nous reconstruirons notre mod\u00e8le CRM de ventes num\u00e9riques . Ce mod\u00e8le contient des sch\u00e9mas structurels courants utilis\u00e9s dans les documents Grist pour une vari\u00e9t\u00e9 de cas d\u2019utilisation. Il contient \u00e9galement des exemples simples et courants de formules de recherche, et analyse les m\u00eames donn\u00e9es de vente de deux mani\u00e8res : revenus \u00e0 vie par client et revenus \u00e0 vie par produit. Jeudi 20 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR DE JUILLET D\u00e9construction du mod\u00e8le de suivi des offres de logiciels # En juin, nous avons reconstruit le Suivi des offres de logiciels . Ce mod\u00e8le comporte plusieurs pages et vues ax\u00e9es sur diff\u00e9rents flux de travail, et pourtant le document est construit sur une seule table de donn\u00e9es. Nous vous montrons pourquoi pour vous aider \u00e0 anticiper vos propres cas d\u2019utilisation o\u00f9 tout ce dont vous avez besoin est une table avec plusieurs vues. REGARDEZ L\u2019ENREGISTREMENT DE JUIN Mod\u00e8les # Planificateur de Sorties Scolaires # Organiser une sortie scolaire n\u00e9cessite de jongler avec les autorisations parentales, les d\u00e9jeuners, les paiements, les accompagnateurs et autres membres du personnel. C\u2019est beaucoup ! Apportez de la zenitude \u00e0 votre planification de sorties scolaires avec ce nouveau mod\u00e8le. ALLER AU MOD\u00c8LE Suivi de Nutrition # Suivez votre nutrition, vos macros et vos calories avec ce mod\u00e8le simple cr\u00e9\u00e9 par l\u2019utilisateur Jawaad Mahmood. \ud83c\udf4f Consultez le post de pr\u00e9sentation de Jawaad dans notre communaut\u00e9 . ALLER AU MOD\u00c8LE Pr\u00e9paration aux Ouragans # La saison des ouragans est une pr\u00e9occupation pour beaucoup. Si vous \u00eates pr\u00e8s d\u2019une c\u00f4te, ne stressez pas ! Utilisez ce mod\u00e8le pour vous assurer d\u2019avoir tout ce dont vous avez besoin en cas d\u2019ouragan. ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist ? # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/06"},{"location":"newsletters/2023-06/#bulletin-de-juin-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2023 \u2022 getgrist.com Bienvenue \u00e0 notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juin 2023"},{"location":"newsletters/2023-06/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-06/#mise-en-evidence-des-lignes-de-selection","text":"Une petite mais puissante correction. Grist met d\u00e9sormais en \u00e9vidence la ligne s\u00e9lectionn\u00e9e li\u00e9e aux vues sur une page.","title":"Mise en \u00e9vidence des lignes de s\u00e9lection"},{"location":"newsletters/2023-06/#points-forts-de-la-communaute","text":"@wunter8 a cr\u00e9\u00e9 un widget de calendrier qui est un excellent exemple de ce que les widgets personnalis\u00e9s peuvent faire. Qui sait, peut-\u00eatre que cela pourrait inspirer un widget de calendrier officiel ? \ud83d\udc40 (@ToJans a \u00e9galement partag\u00e9 un widget de calendrier en mars .) Les amateurs de bases de donn\u00e9es appr\u00e9cieront le PostgreSQL Foreign Data Wrapper de @John1, qui est un outil tr\u00e8s astucieux permettant d\u2019importer et de requ\u00eater des tables Grist dans PostgreSQL. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2023-06/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-06/#webinar-deconstruction-du-modele-crm-de-ventes-numeriques","text":"En juillet, nous reconstruirons notre mod\u00e8le CRM de ventes num\u00e9riques . Ce mod\u00e8le contient des sch\u00e9mas structurels courants utilis\u00e9s dans les documents Grist pour une vari\u00e9t\u00e9 de cas d\u2019utilisation. Il contient \u00e9galement des exemples simples et courants de formules de recherche, et analyse les m\u00eames donn\u00e9es de vente de deux mani\u00e8res : revenus \u00e0 vie par client et revenus \u00e0 vie par produit. Jeudi 20 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR DE JUILLET","title":"Webinar : D\u00e9construction du mod\u00e8le CRM de ventes num\u00e9riques"},{"location":"newsletters/2023-06/#deconstruction-du-modele-de-suivi-des-offres-de-logiciels","text":"En juin, nous avons reconstruit le Suivi des offres de logiciels . Ce mod\u00e8le comporte plusieurs pages et vues ax\u00e9es sur diff\u00e9rents flux de travail, et pourtant le document est construit sur une seule table de donn\u00e9es. Nous vous montrons pourquoi pour vous aider \u00e0 anticiper vos propres cas d\u2019utilisation o\u00f9 tout ce dont vous avez besoin est une table avec plusieurs vues. REGARDEZ L\u2019ENREGISTREMENT DE JUIN","title":"D\u00e9construction du mod\u00e8le de suivi des offres de logiciels"},{"location":"newsletters/2023-06/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-06/#planificateur-de-sorties-scolaires","text":"Organiser une sortie scolaire n\u00e9cessite de jongler avec les autorisations parentales, les d\u00e9jeuners, les paiements, les accompagnateurs et autres membres du personnel. C\u2019est beaucoup ! Apportez de la zenitude \u00e0 votre planification de sorties scolaires avec ce nouveau mod\u00e8le. ALLER AU MOD\u00c8LE","title":"Planificateur de Sorties Scolaires"},{"location":"newsletters/2023-06/#suivi-de-nutrition","text":"Suivez votre nutrition, vos macros et vos calories avec ce mod\u00e8le simple cr\u00e9\u00e9 par l\u2019utilisateur Jawaad Mahmood. \ud83c\udf4f Consultez le post de pr\u00e9sentation de Jawaad dans notre communaut\u00e9 . ALLER AU MOD\u00c8LE","title":"Suivi de Nutrition"},{"location":"newsletters/2023-06/#preparation-aux-ouragans","text":"La saison des ouragans est une pr\u00e9occupation pour beaucoup. Si vous \u00eates pr\u00e8s d\u2019une c\u00f4te, ne stressez pas ! Utilisez ce mod\u00e8le pour vous assurer d\u2019avoir tout ce dont vous avez besoin en cas d\u2019ouragan. ALLER AU MOD\u00c8LE","title":"Pr\u00e9paration aux Ouragans"},{"location":"newsletters/2023-06/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist ?"},{"location":"newsletters/2023-06/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juillet 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Juillet a \u00e9t\u00e9 un grand mois pour Grist, avec une toute nouvelle fonctionnalit\u00e9 qui apporte une suite d\u2019autres am\u00e9liorations. Comme toujours, nous aimerions recevoir vos retours et nous accueillons volontiers tout exemple de choses cools/utile que vous cr\u00e9ez avec Grist. Quoi de neuf # Assistant de Formule IA # Il y a quelque temps, nous avons fait une exp\u00e9rience avec l\u2019IA pour voir comment elle pourrait aider les utilisateurs de Grist avec les formules. Nous sommes ravis d\u2019annoncer que l\u2019exp\u00e9rience est maintenant une fonctionnalit\u00e9 int\u00e9gr\u00e9e dans un Assistant de Formule IA ! R\u00e9sum\u00e9 : En utilisant un langage simple, discutez avec une IA pour vous aider \u00e0 cr\u00e9er des formules Grist. Grist envoie le contexte n\u00e9cessaire, donc pas besoin de d\u00e9crire la structure de vos donn\u00e9es. Parce que l\u2019Assistant IA utilise la structure de Grist, nous recommandons fortement de lire cette liste rapide de meilleures pratiques . Tous les comptes Grist obtiennent 100 cr\u00e9dits gratuitement \u2013 vous pouvez donc tester l\u2019assistant d\u00e8s maintenant ! Consultez l\u2019annonce compl\u00e8te . Apprenez \u00e0 utiliser l\u2019assistant et comment les donn\u00e9es sont g\u00e9r\u00e9es dans notre centre d\u2019aide . \u00c9diteur de formule flottant # Vous travaillez sur des formules complexes et vous vous sentez un peu \u00e0 l\u2019\u00e9troit ? Plus maintenant ! L\u2019Assistant de Formule IA apporte avec lui un nouvel \u00e9diteur de formule flottant. D\u00e9veloppez, r\u00e9duisez et d\u00e9placez l\u2019\u00e9diteur sur l\u2019\u00e9cran comme bon vous semble. Commencez simplement \u00e0 \u00e9diter n\u2019importe quelle colonne de formule et cliquez sur l\u2019ic\u00f4ne d\u2019agrandissement en haut \u00e0 droite de la cellule. Les modifications apport\u00e9es dans l\u2019\u00e9diteur flottant agrandi ne s\u2019appliqueront pas tant que vous n\u2019aurez pas cliqu\u00e9 sur le bouton Enregistrer. Fonctionnalit\u00e9 bonus : Pr\u00e9visualisez les modifications ! Cliquez sur le nouveau bouton Aper\u00e7u dans l\u2019\u00e9diteur flottant pour voir comment vos modifications affecteront la colonne en question. Testez facilement les formules sans mettre \u00e0 jour l\u2019ensemble de vos donn\u00e9es. Vos modifications ne s\u2019appliqueront pas tant que vous n\u2019aurez pas cliqu\u00e9 sur Enregistrer. \ud83e\udd29 Meilleure gestion des emojis dans les noms de Page # Chez Grist, nous aimons utiliser les emojis comme raccourcis visuels pour les noms de Page. Ils sont facilement reconnaissables et fonctionnent bien lorsque le panneau des Pages est minimis\u00e9. D\u00e9sormais, Grist d\u00e9tecte automatiquement lorsqu\u2019un emoji est utilis\u00e9 au d\u00e9but d\u2019un nom et le stylise en cons\u00e9quence. T\u00e9l\u00e9m\u00e9trie pour les utilisateurs auto-h\u00e9berg\u00e9s # Nous nous appuyons sur les donn\u00e9es d\u2019utilisation du produit pour nous aider \u00e0 am\u00e9liorer Grist. Les auto-h\u00e9bergeurs peuvent d\u00e9sormais choisir de partager des donn\u00e9es de t\u00e9l\u00e9m\u00e9trie limit\u00e9es avec nous. Nous ne collectons que des statistiques d\u2019utilisation, jamais le contenu des documents. Si vous \u00eates un fan de Grist qui s\u2019auto-h\u00e9berge, opter pour la t\u00e9l\u00e9m\u00e9trie est l\u2019un des meilleurs moyens de nous soutenir. Vous pouvez lire une liste d\u00e9taill\u00e9e de ce que nous collectons dans notre centre d\u2019aide . Pour opter, cliquez sur le bouton d\u2019opt-in sur la banni\u00e8re \u201cSupport Grist\u201d de votre page d\u2019accueil, ou modifiez la variable d\u2019environnement GRIST_TELEMETRY_LEVEL comme d\u00e9crit dans l\u2019aper\u00e7u de la t\u00e9l\u00e9m\u00e9trie de notre centre d\u2019aide . Vous pouvez vous d\u00e9sinscrire \u00e0 tout moment. Conseils & Astuces # Permissions avanc\u00e9es : Restreindre la cr\u00e9ation de nouveaux enregistrements jusqu\u2019\u00e0 ce que tous les champs obligatoires soient remplis # Dans le forum Showcase, Natalie nous explique comment utiliser les permissions avanc\u00e9es pour emp\u00eacher un utilisateur de cr\u00e9er de nouveaux enregistrements jusqu\u2019\u00e0 ce que tous les champs obligatoires soient remplis pour les enregistrements existants dans une table. Tr\u00e8s pratique pour la sanitation des donn\u00e9es ! Points forts de la communaut\u00e9 # @enthus1ast a construit un petit d\u00e9mon (\ud83d\ude08) comme syst\u00e8me de surveillance d\u2019infrastructure en utilisant Grist. En bonus, ils ont \u00e9galement fourni un client API REST \u00e9crit en Nim. @Leonard_Gallion a partag\u00e9 du code Python pratique qui vous permet de t\u00e9l\u00e9charger des documents en tant que fichiers .grist . Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinar : D\u00e9construire le mod\u00e8le d\u2019inscription aux cours # En ao\u00fbt, nous allons reconstruire notre mod\u00e8le d\u2019inscription aux cours . Ce mod\u00e8le utilise des colonnes de r\u00e9f\u00e9rence pour relier les donn\u00e9es dans cinq tables diff\u00e9rentes. Apprenez quand utiliser des colonnes de r\u00e9f\u00e9rence, dans quelle direction, et comment utiliser des tables d\u2019assistance pour mieux structurer vos donn\u00e9es. Vous apprendrez \u00e9galement comment construire des tableaux de bord productifs qui visualisent les m\u00eames donn\u00e9es sous diff\u00e9rents angles. Jeudi 17 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR D\u2019AO\u00dbT D\u00e9construire le mod\u00e8le CRM de ventes num\u00e9riques # En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En juillet, nous avons reconstruit notre mod\u00e8le CRM de ventes num\u00e9riques. Ce mod\u00e8le contient des sch\u00e9mas structurels courants utilis\u00e9s dans les documents Grist pour divers cas d\u2019utilisation. Il contient \u00e9galement des exemples simples et courants de formules d\u2019appairage, et analyse les m\u00eames donn\u00e9es de vente de deux mani\u00e8res : revenu \u00e0 vie par client et revenu \u00e0 vie par produit. REGARDEZ L\u2019ENREGISTREMENT DE JUILLET Mod\u00e8les # Budg\u00e9tisation # Ce mod\u00e8le de budget simplifie la d\u00e9finition d\u2019un budget, le suivi des revenus et des d\u00e9penses, et la comparaison des attentes avec la r\u00e9alit\u00e9 financi\u00e8re. \ud83d\udcb8 ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/07"},{"location":"newsletters/2023-07/#bulletin-de-juillet-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juillet 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Juillet a \u00e9t\u00e9 un grand mois pour Grist, avec une toute nouvelle fonctionnalit\u00e9 qui apporte une suite d\u2019autres am\u00e9liorations. Comme toujours, nous aimerions recevoir vos retours et nous accueillons volontiers tout exemple de choses cools/utile que vous cr\u00e9ez avec Grist.","title":"Bulletin de Juillet 2023"},{"location":"newsletters/2023-07/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2023-07/#assistant-de-formule-ia","text":"Il y a quelque temps, nous avons fait une exp\u00e9rience avec l\u2019IA pour voir comment elle pourrait aider les utilisateurs de Grist avec les formules. Nous sommes ravis d\u2019annoncer que l\u2019exp\u00e9rience est maintenant une fonctionnalit\u00e9 int\u00e9gr\u00e9e dans un Assistant de Formule IA ! R\u00e9sum\u00e9 : En utilisant un langage simple, discutez avec une IA pour vous aider \u00e0 cr\u00e9er des formules Grist. Grist envoie le contexte n\u00e9cessaire, donc pas besoin de d\u00e9crire la structure de vos donn\u00e9es. Parce que l\u2019Assistant IA utilise la structure de Grist, nous recommandons fortement de lire cette liste rapide de meilleures pratiques . Tous les comptes Grist obtiennent 100 cr\u00e9dits gratuitement \u2013 vous pouvez donc tester l\u2019assistant d\u00e8s maintenant ! Consultez l\u2019annonce compl\u00e8te . Apprenez \u00e0 utiliser l\u2019assistant et comment les donn\u00e9es sont g\u00e9r\u00e9es dans notre centre d\u2019aide .","title":"Assistant de Formule IA"},{"location":"newsletters/2023-07/#editeur-de-formule-flottant","text":"Vous travaillez sur des formules complexes et vous vous sentez un peu \u00e0 l\u2019\u00e9troit ? Plus maintenant ! L\u2019Assistant de Formule IA apporte avec lui un nouvel \u00e9diteur de formule flottant. D\u00e9veloppez, r\u00e9duisez et d\u00e9placez l\u2019\u00e9diteur sur l\u2019\u00e9cran comme bon vous semble. Commencez simplement \u00e0 \u00e9diter n\u2019importe quelle colonne de formule et cliquez sur l\u2019ic\u00f4ne d\u2019agrandissement en haut \u00e0 droite de la cellule. Les modifications apport\u00e9es dans l\u2019\u00e9diteur flottant agrandi ne s\u2019appliqueront pas tant que vous n\u2019aurez pas cliqu\u00e9 sur le bouton Enregistrer. Fonctionnalit\u00e9 bonus : Pr\u00e9visualisez les modifications ! Cliquez sur le nouveau bouton Aper\u00e7u dans l\u2019\u00e9diteur flottant pour voir comment vos modifications affecteront la colonne en question. Testez facilement les formules sans mettre \u00e0 jour l\u2019ensemble de vos donn\u00e9es. Vos modifications ne s\u2019appliqueront pas tant que vous n\u2019aurez pas cliqu\u00e9 sur Enregistrer.","title":"\u00c9diteur de formule flottant"},{"location":"newsletters/2023-07/#meilleure-gestion-des-emojis-dans-les-noms-de-page","text":"Chez Grist, nous aimons utiliser les emojis comme raccourcis visuels pour les noms de Page. Ils sont facilement reconnaissables et fonctionnent bien lorsque le panneau des Pages est minimis\u00e9. D\u00e9sormais, Grist d\u00e9tecte automatiquement lorsqu\u2019un emoji est utilis\u00e9 au d\u00e9but d\u2019un nom et le stylise en cons\u00e9quence.","title":"\ud83e\udd29 Meilleure gestion des emojis dans les noms de Page"},{"location":"newsletters/2023-07/#telemetrie-pour-les-utilisateurs-auto-heberges","text":"Nous nous appuyons sur les donn\u00e9es d\u2019utilisation du produit pour nous aider \u00e0 am\u00e9liorer Grist. Les auto-h\u00e9bergeurs peuvent d\u00e9sormais choisir de partager des donn\u00e9es de t\u00e9l\u00e9m\u00e9trie limit\u00e9es avec nous. Nous ne collectons que des statistiques d\u2019utilisation, jamais le contenu des documents. Si vous \u00eates un fan de Grist qui s\u2019auto-h\u00e9berge, opter pour la t\u00e9l\u00e9m\u00e9trie est l\u2019un des meilleurs moyens de nous soutenir. Vous pouvez lire une liste d\u00e9taill\u00e9e de ce que nous collectons dans notre centre d\u2019aide . Pour opter, cliquez sur le bouton d\u2019opt-in sur la banni\u00e8re \u201cSupport Grist\u201d de votre page d\u2019accueil, ou modifiez la variable d\u2019environnement GRIST_TELEMETRY_LEVEL comme d\u00e9crit dans l\u2019aper\u00e7u de la t\u00e9l\u00e9m\u00e9trie de notre centre d\u2019aide . Vous pouvez vous d\u00e9sinscrire \u00e0 tout moment.","title":"T\u00e9l\u00e9m\u00e9trie pour les utilisateurs auto-h\u00e9berg\u00e9s"},{"location":"newsletters/2023-07/#conseils-astuces","text":"","title":"Conseils & Astuces"},{"location":"newsletters/2023-07/#permissions-avancees-restreindre-la-creation-de-nouveaux-enregistrements-jusqua-ce-que-tous-les-champs-obligatoires-soient-remplis","text":"Dans le forum Showcase, Natalie nous explique comment utiliser les permissions avanc\u00e9es pour emp\u00eacher un utilisateur de cr\u00e9er de nouveaux enregistrements jusqu\u2019\u00e0 ce que tous les champs obligatoires soient remplis pour les enregistrements existants dans une table. Tr\u00e8s pratique pour la sanitation des donn\u00e9es !","title":"Permissions avanc\u00e9es : Restreindre la cr\u00e9ation de nouveaux enregistrements jusqu’\u00e0 ce que tous les champs obligatoires soient remplis"},{"location":"newsletters/2023-07/#points-forts-de-la-communaute","text":"@enthus1ast a construit un petit d\u00e9mon (\ud83d\ude08) comme syst\u00e8me de surveillance d\u2019infrastructure en utilisant Grist. En bonus, ils ont \u00e9galement fourni un client API REST \u00e9crit en Nim. @Leonard_Gallion a partag\u00e9 du code Python pratique qui vous permet de t\u00e9l\u00e9charger des documents en tant que fichiers .grist . Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2023-07/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-07/#webinar-deconstruire-le-modele-dinscription-aux-cours","text":"En ao\u00fbt, nous allons reconstruire notre mod\u00e8le d\u2019inscription aux cours . Ce mod\u00e8le utilise des colonnes de r\u00e9f\u00e9rence pour relier les donn\u00e9es dans cinq tables diff\u00e9rentes. Apprenez quand utiliser des colonnes de r\u00e9f\u00e9rence, dans quelle direction, et comment utiliser des tables d\u2019assistance pour mieux structurer vos donn\u00e9es. Vous apprendrez \u00e9galement comment construire des tableaux de bord productifs qui visualisent les m\u00eames donn\u00e9es sous diff\u00e9rents angles. Jeudi 17 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAR D\u2019AO\u00dbT","title":"Webinar : D\u00e9construire le mod\u00e8le d’inscription aux cours"},{"location":"newsletters/2023-07/#deconstruire-le-modele-crm-de-ventes-numeriques","text":"En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En juillet, nous avons reconstruit notre mod\u00e8le CRM de ventes num\u00e9riques. Ce mod\u00e8le contient des sch\u00e9mas structurels courants utilis\u00e9s dans les documents Grist pour divers cas d\u2019utilisation. Il contient \u00e9galement des exemples simples et courants de formules d\u2019appairage, et analyse les m\u00eames donn\u00e9es de vente de deux mani\u00e8res : revenu \u00e0 vie par client et revenu \u00e0 vie par produit. REGARDEZ L\u2019ENREGISTREMENT DE JUILLET","title":"D\u00e9construire le mod\u00e8le CRM de ventes num\u00e9riques"},{"location":"newsletters/2023-07/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-07/#budgetisation","text":"Ce mod\u00e8le de budget simplifie la d\u00e9finition d\u2019un budget, le suivi des revenus et des d\u00e9penses, et la comparaison des attentes avec la r\u00e9alit\u00e9 financi\u00e8re. \ud83d\udcb8 ALLER AU MOD\u00c8LE","title":"Budg\u00e9tisation"},{"location":"newsletters/2023-07/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-07/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Cherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-08/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019ao\u00fbt 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Ao\u00fbt 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Offre d\u2019emploi Nous recherchons un Cr\u00e9ateur Vid\u00e9o & Designer Graphique pour rejoindre notre \u00e9quipe. Venez travailler avec nous ! Visionneuse CSV Grist Lib\u00e9rez le CSV ! Ce nouvel outil permet aux utilisateurs de votre site de pr\u00e9visualiser les CSV avec la puissance de Grist. Assistant AI Support Llama Ex\u00e9cutez des mod\u00e8les Llama locaux avec l\u2019aide de llama2-cpp-python . \ud83e\udd99 Options de t\u00e9l\u00e9chargement de fichiers .grist R\u00e9duisez la taille des fichiers en t\u00e9l\u00e9chargeant sans historique, ou cr\u00e9ez des mod\u00e8les en t\u00e9l\u00e9chargeant uniquement la structure d\u2019un fichier. Refonte de l\u2019importation de fichiers Am\u00e9lioration du support pour l\u2019importation de plusieurs fichiers/feuilles et le mappage des colonnes. Widget QR Code personnalis\u00e9 G\u00e9n\u00e9rez des codes QR en un clin d\u2019\u0153il, directement dans Grist. \ud83e\udd33 Travailler chez Grist # Grist recherche actuellement un Cr\u00e9ateur Vid\u00e9o & Designer Graphique ayant une bonne compr\u00e9hension des outils de tableur-base de donn\u00e9es. Si vous \u00eates dou\u00e9 pour cr\u00e9er des vid\u00e9os engageantes et des designs graphiques visuellement attrayants, venez travailler avec nous ! Il s\u2019agit d\u2019un poste en contrat. Pour plus de d\u00e9tails, consultez la description du poste . Quoi de neuf # Visionneuse CSV Grist # Un autre mois, une autre mise \u00e0 jour excitante \u2013 cette fois pour le format de fichier v\u00e9n\u00e9rable que nous connaissons tous et aimons, le .csv . La Visionneuse CSV Grist est un outil gratuit qui donne aux CSV la puissance de Grist sur le web. Plus besoin de t\u00e9l\u00e9charger et d\u2019ouvrir les CSV dans une application externe, vous pouvez maintenant pr\u00e9visualiser et interagir avec les CSV dans une feuille de calcul aliment\u00e9e par Grist ! La visionneuse est open source, prend en charge des fonctionnalit\u00e9s telles que le filtrage, le tri, le copier/coller, et m\u00eame les formules. Et elle est facile \u00e0 installer, avec seulement deux lignes de HTML ajout\u00e9es \u00e0 n\u2019importe quel site web. Voyez-la en action Assistant AI \u2013 Support pour Llama # Les auto-h\u00e9bergeurs de Grist peuvent d\u00e9sormais utiliser la famille de mod\u00e8les auto-h\u00e9bergeables Llama via le wrapper llama2-cpp-python en configurant les variables d\u2019environnement \u00e9tendues li\u00e9es \u00e0 l\u2019Assistant AI . En-t\u00eates de colonnes stylis\u00e9es # Vous pouvez maintenant styliser les en-t\u00eates de colonnes ! Regardez ! (Merci \u00e0 @CamilleLegeron et l\u2019ANCT pour le PR.) Options de t\u00e9l\u00e9chargement de fichiers .grist # Vous pouvez maintenant t\u00e9l\u00e9charger la structure d\u2019un fichier .grist sans aucune donn\u00e9e, ce qui est utile pour la cr\u00e9ation de mod\u00e8les. Ou vous pouvez t\u00e9l\u00e9charger un .grist sans historique de document, ce qui r\u00e9duit la taille du fichier. Dans nos tests, nous avons vu des documents passer de 10,8 Mo \u00e0 1,5 Mo apr\u00e8s avoir omis l\u2019historique des fichiers. \ud83d\ude32 Refonte de l\u2019importation de fichiers # L\u2019importation de fichiers a \u00e9t\u00e9 mise \u00e0 jour avec un nouveau flux, avec un meilleur support pour plusieurs fichiers/feuilles et le mappage des colonnes. Plus d\u2019am\u00e9liorations # Grist a \u00e9t\u00e9 mis \u00e0 niveau de Python 3.9 \u00e0 3.11. Cette mise \u00e0 jour apporte les nouvelles fonctionnalit\u00e9s suivantes : L\u2019ex\u00e9cution devrait \u00eatre l\u00e9g\u00e8rement plus rapide. Support suppl\u00e9mentaire pour le module de statistiques , y compris les fonctions covariance , correlation , et linear_regression . Support pour le Matching de motifs structurels . Vous pouvez maintenant voir des marques ^ pointant vers le probl\u00e8me dans les tracebacks, ce qui peut aider \u00e0 d\u00e9boguer les erreurs. Les liens sont maintenant cliquables dans les vues et les infobulles de description de colonnes . La s\u00e9lection de grille prend d\u00e9sormais en charge les raccourcis CTRL/CMD+Shift+ . Si vous avez utilis\u00e9 ce raccourci dans d\u2019autres produits de tableur populaires, vous serez comme chez vous ! (Merci \u00e0 @Ocarthon pour sa contribution !) Astuces & Conseils # Grist pour les utilisateurs de tableurs # Nouveau sur Grist mais expert avec Excel/Google Sheets ? Notre nouveau post de blog couvre ce qui rend Grist diff\u00e9rent et pourquoi il est con\u00e7u de cette mani\u00e8re, sp\u00e9cifiquement pour les utilisateurs familiers avec les applications de tableur habituelles. Auto-h\u00e9bergement de grist-static # Le d\u00e9p\u00f4t GitHub de grist-static GitHub repo a \u00e9t\u00e9 mis \u00e0 jour avec des informations suppl\u00e9mentaires pour vous aider \u00e0 servir Grist sur votre propre site web ou CDN \u2013 y compris la nouvelle Visionneuse CSV. Points forts de la communaut\u00e9 # Le widget QR code astucieux de @jperon de janvier dernier a \u00e9t\u00e9 officiellement ajout\u00e9 en tant que widget personnalis\u00e9 ! \ud83c\udf89 Scannez le code ci-dessus pour visiter le post original, et cliquez ici pour en savoir plus sur les widgets personnalis\u00e9s. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : D\u00e9construire le mod\u00e8le de paie # En septembre, nous reconstruirons notre mod\u00e8le de paie . Ce mod\u00e8le utilise des formules pour rechercher les taux horaires en fonction de la personne, du r\u00f4le et de la date. Vous apprendrez \u00e9galement \u00e0 cr\u00e9er des tableaux de bord de synth\u00e8se dynamiques qui r\u00e9sument les donn\u00e9es par cat\u00e9gories et vous permettent d\u2019explorer les enregistrements dans ces cat\u00e9gories. Jeudi 21 septembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE SEPTEMBRE D\u00e9construire le mod\u00e8le d\u2019inscription aux cours # En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En ao\u00fbt, nous avons reconstruit notre mod\u00e8le d\u2019inscription aux cours . Ce mod\u00e8le utilise des colonnes de r\u00e9f\u00e9rence pour relier les donn\u00e9es dans cinq tables diff\u00e9rentes. Apprenez quand utiliser des colonnes de r\u00e9f\u00e9rence, dans quelle direction, et comment utiliser des tables d\u2019aide pour mieux structurer vos donn\u00e9es. REGARDEZ L\u2019ENREGISTREMENT D\u2019AO\u00dbT Mod\u00e8les # Propositions & Contrats # Natalie a cr\u00e9\u00e9 un tutoriel d\u00e9taill\u00e9 montrant comment ce mod\u00e8le (tr\u00e8s avanc\u00e9) a \u00e9t\u00e9 cr\u00e9\u00e9. Nous utilisons en fait une version de ce mod\u00e8le chez Grist pour g\u00e9rer les contrats, donc il est \u00e9prouv\u00e9 ! Non seulement ce mod\u00e8le peut \u00eatre utilis\u00e9 pour g\u00e9n\u00e9rer des contrats imprimables avec du contenu dynamique, mais il peut \u00e9galement g\u00e9n\u00e9rer les mod\u00e8les de contrat eux-m\u00eames . Vous pouvez donc avoir plusieurs versions de contrats dynamiques cr\u00e9\u00e9s \u00e0 partir du m\u00eame document Grist. \ud83e\udd2f ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/08"},{"location":"newsletters/2023-08/#bulletin-daout-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Ao\u00fbt 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Offre d\u2019emploi Nous recherchons un Cr\u00e9ateur Vid\u00e9o & Designer Graphique pour rejoindre notre \u00e9quipe. Venez travailler avec nous ! Visionneuse CSV Grist Lib\u00e9rez le CSV ! Ce nouvel outil permet aux utilisateurs de votre site de pr\u00e9visualiser les CSV avec la puissance de Grist. Assistant AI Support Llama Ex\u00e9cutez des mod\u00e8les Llama locaux avec l\u2019aide de llama2-cpp-python . \ud83e\udd99 Options de t\u00e9l\u00e9chargement de fichiers .grist R\u00e9duisez la taille des fichiers en t\u00e9l\u00e9chargeant sans historique, ou cr\u00e9ez des mod\u00e8les en t\u00e9l\u00e9chargeant uniquement la structure d\u2019un fichier. Refonte de l\u2019importation de fichiers Am\u00e9lioration du support pour l\u2019importation de plusieurs fichiers/feuilles et le mappage des colonnes. Widget QR Code personnalis\u00e9 G\u00e9n\u00e9rez des codes QR en un clin d\u2019\u0153il, directement dans Grist. \ud83e\udd33","title":"Bulletin d’ao\u00fbt 2023"},{"location":"newsletters/2023-08/#travailler-chez-grist","text":"Grist recherche actuellement un Cr\u00e9ateur Vid\u00e9o & Designer Graphique ayant une bonne compr\u00e9hension des outils de tableur-base de donn\u00e9es. Si vous \u00eates dou\u00e9 pour cr\u00e9er des vid\u00e9os engageantes et des designs graphiques visuellement attrayants, venez travailler avec nous ! Il s\u2019agit d\u2019un poste en contrat. Pour plus de d\u00e9tails, consultez la description du poste .","title":"Travailler chez Grist"},{"location":"newsletters/2023-08/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2023-08/#visionneuse-csv-grist","text":"Un autre mois, une autre mise \u00e0 jour excitante \u2013 cette fois pour le format de fichier v\u00e9n\u00e9rable que nous connaissons tous et aimons, le .csv . La Visionneuse CSV Grist est un outil gratuit qui donne aux CSV la puissance de Grist sur le web. Plus besoin de t\u00e9l\u00e9charger et d\u2019ouvrir les CSV dans une application externe, vous pouvez maintenant pr\u00e9visualiser et interagir avec les CSV dans une feuille de calcul aliment\u00e9e par Grist ! La visionneuse est open source, prend en charge des fonctionnalit\u00e9s telles que le filtrage, le tri, le copier/coller, et m\u00eame les formules. Et elle est facile \u00e0 installer, avec seulement deux lignes de HTML ajout\u00e9es \u00e0 n\u2019importe quel site web. Voyez-la en action","title":"Visionneuse CSV Grist"},{"location":"newsletters/2023-08/#assistant-ai-support-pour-llama","text":"Les auto-h\u00e9bergeurs de Grist peuvent d\u00e9sormais utiliser la famille de mod\u00e8les auto-h\u00e9bergeables Llama via le wrapper llama2-cpp-python en configurant les variables d\u2019environnement \u00e9tendues li\u00e9es \u00e0 l\u2019Assistant AI .","title":"Assistant AI \u2013 Support pour Llama"},{"location":"newsletters/2023-08/#en-tetes-de-colonnes-stylisees","text":"Vous pouvez maintenant styliser les en-t\u00eates de colonnes ! Regardez ! (Merci \u00e0 @CamilleLegeron et l\u2019ANCT pour le PR.)","title":"En-t\u00eates de colonnes stylis\u00e9es"},{"location":"newsletters/2023-08/#options-de-telechargement-de-fichiers-grist","text":"Vous pouvez maintenant t\u00e9l\u00e9charger la structure d\u2019un fichier .grist sans aucune donn\u00e9e, ce qui est utile pour la cr\u00e9ation de mod\u00e8les. Ou vous pouvez t\u00e9l\u00e9charger un .grist sans historique de document, ce qui r\u00e9duit la taille du fichier. Dans nos tests, nous avons vu des documents passer de 10,8 Mo \u00e0 1,5 Mo apr\u00e8s avoir omis l\u2019historique des fichiers. \ud83d\ude32","title":"Options de t\u00e9l\u00e9chargement de fichiers .grist"},{"location":"newsletters/2023-08/#refonte-de-limportation-de-fichiers","text":"L\u2019importation de fichiers a \u00e9t\u00e9 mise \u00e0 jour avec un nouveau flux, avec un meilleur support pour plusieurs fichiers/feuilles et le mappage des colonnes.","title":"Refonte de l’importation de fichiers"},{"location":"newsletters/2023-08/#plus-dameliorations","text":"Grist a \u00e9t\u00e9 mis \u00e0 niveau de Python 3.9 \u00e0 3.11. Cette mise \u00e0 jour apporte les nouvelles fonctionnalit\u00e9s suivantes : L\u2019ex\u00e9cution devrait \u00eatre l\u00e9g\u00e8rement plus rapide. Support suppl\u00e9mentaire pour le module de statistiques , y compris les fonctions covariance , correlation , et linear_regression . Support pour le Matching de motifs structurels . Vous pouvez maintenant voir des marques ^ pointant vers le probl\u00e8me dans les tracebacks, ce qui peut aider \u00e0 d\u00e9boguer les erreurs. Les liens sont maintenant cliquables dans les vues et les infobulles de description de colonnes . La s\u00e9lection de grille prend d\u00e9sormais en charge les raccourcis CTRL/CMD+Shift+ . Si vous avez utilis\u00e9 ce raccourci dans d\u2019autres produits de tableur populaires, vous serez comme chez vous ! (Merci \u00e0 @Ocarthon pour sa contribution !)","title":"Plus d’am\u00e9liorations"},{"location":"newsletters/2023-08/#astuces-conseils","text":"","title":"Astuces & Conseils"},{"location":"newsletters/2023-08/#grist-pour-les-utilisateurs-de-tableurs","text":"Nouveau sur Grist mais expert avec Excel/Google Sheets ? Notre nouveau post de blog couvre ce qui rend Grist diff\u00e9rent et pourquoi il est con\u00e7u de cette mani\u00e8re, sp\u00e9cifiquement pour les utilisateurs familiers avec les applications de tableur habituelles.","title":"Grist pour les utilisateurs de tableurs"},{"location":"newsletters/2023-08/#auto-hebergement-de-grist-static","text":"Le d\u00e9p\u00f4t GitHub de grist-static GitHub repo a \u00e9t\u00e9 mis \u00e0 jour avec des informations suppl\u00e9mentaires pour vous aider \u00e0 servir Grist sur votre propre site web ou CDN \u2013 y compris la nouvelle Visionneuse CSV.","title":"Auto-h\u00e9bergement de grist-static"},{"location":"newsletters/2023-08/#points-forts-de-la-communaute","text":"Le widget QR code astucieux de @jperon de janvier dernier a \u00e9t\u00e9 officiellement ajout\u00e9 en tant que widget personnalis\u00e9 ! \ud83c\udf89 Scannez le code ci-dessus pour visiter le post original, et cliquez ici pour en savoir plus sur les widgets personnalis\u00e9s. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2023-08/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-08/#webinaire-deconstruire-le-modele-de-paie","text":"En septembre, nous reconstruirons notre mod\u00e8le de paie . Ce mod\u00e8le utilise des formules pour rechercher les taux horaires en fonction de la personne, du r\u00f4le et de la date. Vous apprendrez \u00e9galement \u00e0 cr\u00e9er des tableaux de bord de synth\u00e8se dynamiques qui r\u00e9sument les donn\u00e9es par cat\u00e9gories et vous permettent d\u2019explorer les enregistrements dans ces cat\u00e9gories. Jeudi 21 septembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE SEPTEMBRE","title":"Webinaire : D\u00e9construire le mod\u00e8le de paie"},{"location":"newsletters/2023-08/#deconstruire-le-modele-dinscription-aux-cours","text":"En regardant nos mod\u00e8les, vous vous demandez peut-\u00eatre pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En ao\u00fbt, nous avons reconstruit notre mod\u00e8le d\u2019inscription aux cours . Ce mod\u00e8le utilise des colonnes de r\u00e9f\u00e9rence pour relier les donn\u00e9es dans cinq tables diff\u00e9rentes. Apprenez quand utiliser des colonnes de r\u00e9f\u00e9rence, dans quelle direction, et comment utiliser des tables d\u2019aide pour mieux structurer vos donn\u00e9es. REGARDEZ L\u2019ENREGISTREMENT D\u2019AO\u00dbT","title":"D\u00e9construire le mod\u00e8le d’inscription aux cours"},{"location":"newsletters/2023-08/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-08/#propositions-contrats","text":"Natalie a cr\u00e9\u00e9 un tutoriel d\u00e9taill\u00e9 montrant comment ce mod\u00e8le (tr\u00e8s avanc\u00e9) a \u00e9t\u00e9 cr\u00e9\u00e9. Nous utilisons en fait une version de ce mod\u00e8le chez Grist pour g\u00e9rer les contrats, donc il est \u00e9prouv\u00e9 ! Non seulement ce mod\u00e8le peut \u00eatre utilis\u00e9 pour g\u00e9n\u00e9rer des contrats imprimables avec du contenu dynamique, mais il peut \u00e9galement g\u00e9n\u00e9rer les mod\u00e8les de contrat eux-m\u00eames . Vous pouvez donc avoir plusieurs versions de contrats dynamiques cr\u00e9\u00e9s \u00e0 partir du m\u00eame document Grist. \ud83e\udd2f ALLER AU MOD\u00c8LE","title":"Propositions & Contrats"},{"location":"newsletters/2023-08/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-08/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-09/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de septembre 2023 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Septembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Vue calendrier \ud83d\uddd3\ufe0f # Le moment est venu\u2026 la Vue Calendrier Officielle de Grist est l\u00e0 ! Nous savons qu\u2019elle est pratique car nous avons d\u00e9j\u00e0 mis \u00e0 jour plusieurs de nos mod\u00e8les pour l\u2019inclure. \ud83d\ude05 Nous avons m\u00eame cr\u00e9\u00e9 de nouveaux mod\u00e8les qui mettent sp\u00e9cifiquement en avant la vue calendrier (plus d\u2019infos ci-dessous). Les \u00e9v\u00e9nements sont cr\u00e9\u00e9s \u00e0 l\u2019aide de colonnes Date ou DateTime associ\u00e9es Vues jour, semaine & mois \u00c9dition d\u2019\u00e9v\u00e9nements par glisser-d\u00e9poser Support pour le lien de curseur \u2013 s\u00e9lectionnez un \u00e9v\u00e9nement et mettez automatiquement \u00e0 jour une vue li\u00e9e (cela est utile si vous souhaitez voir les d\u00e9tails d\u2019un \u00e9v\u00e9nement dans une vue fiche, par exemple) VOIR LA DOCUMENTATION Point de terminaison SQL # Grist dispose d\u00e9sormais d\u2019un point de terminaison SQL qui vous permet d\u2019ex\u00e9cuter des requ\u00eates SELECT en lecture seule via l\u2019API Grist ! C\u2019est excitant pour un ensemble tr\u00e8s \u201cs\u00e9lect\u201d d\u2019utilisateurs de Grist. \ud83e\udd20 Par exemple, voici une simple requ\u00eate SQL effectu\u00e9e sur notre mod\u00e8le CRM L\u00e9ger (ce ne sont pas de vrais emails !) : SELECT Email FROM Contacts WHERE Due IS NOT NULL Voir ici pour la documentation compl\u00e8te de l\u2019API. Points Forts de la Communaut\u00e9 # @jperon a trouv\u00e9 un moyen de cr\u00e9er une vue de recherche avanc\u00e9e en utilisant la m\u00e9thode eval de Python. Voir le post de la communaut\u00e9 pour un exemple, car c\u2019est un peu compliqu\u00e9 \u00e0 expliquer. Un grand merci \u00e0 @prijatelj.francek pour son travail sur la nouvelle traduction slov\u00e8ne. Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Nouvelle vid\u00e9o d\u2019orientation # Les nouveaux utilisateurs de Grist verront une vid\u00e9o d\u2019orientation mise \u00e0 jour lorsqu\u2019ils s\u2019inscriront, ce qui peut \u00e9galement \u00eatre un rappel utile pour les utilisateurs existants. Webinaire : Calendrier # Les calendriers sont l\u00e0 ! Apprenez tous les trucs et astuces pour tirer le meilleur parti des vues calendrier dans vos documents. Les fiches se marient bien avec les calendriers, nous plongerons donc \u00e9galement dans les vues fiche. Jeudi 26 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019OCTOBRE D\u00e9construction du Mod\u00e8le de Paie # En regardant nos mod\u00e8les, vous pouvez vous demander pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En septembre, nous avons reconstruit notre Mod\u00e8le de Paie . Ce mod\u00e8le utilise des formules pour rechercher les taux horaires en fonction de la personne, du r\u00f4le et de la date. Apprenez \u00e0 construire des tableaux de bord de synth\u00e8se dynamiques qui r\u00e9sument les donn\u00e9es par cat\u00e9gories et vous permettent d\u2019explorer les enregistrements dans ces cat\u00e9gories. REGARDER L\u2019ENREGISTREMENT DE SEPTEMBRE Mod\u00e8les # Planification de Voyage # L\u2019\u00e9t\u00e9 est peut-\u00eatre termin\u00e9, mais cela signifie simplement qu\u2019il est temps de planifier votre prochain voyage. Utilisez le nouveau mod\u00e8le de Planification de Voyage de Grist pour planifier et organiser plusieurs voyages en un seul endroit, avec des itin\u00e9raires d\u00e9taill\u00e9s et des listes de bagages. Ce mod\u00e8le est \u00e9galement une excellente vitrine pour la nouvelle vue calendrier ! ALLER AU MOD\u00c8LE Calendrier de Contenu pour les R\u00e9seaux Sociaux # Mais attendez, il y a plus ! Nous avons adapt\u00e9 et am\u00e9lior\u00e9 le document que nous utilisons en interne pour suivre nos publications sur les r\u00e9seaux sociaux et l\u2019avons transform\u00e9 en mod\u00e8le. Cr\u00e9ez et suivez des campagnes, approuvez du contenu et planifiez des publications (texte/image/vid\u00e9o). Et oui, ce mod\u00e8le utilise \u00e9galement tr\u00e8s bien la nouvelle vue calendrier ! ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel Sprouts gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/09"},{"location":"newsletters/2023-09/#bulletin-de-septembre-2023","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Septembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de septembre 2023"},{"location":"newsletters/2023-09/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-09/#vue-calendrier","text":"Le moment est venu\u2026 la Vue Calendrier Officielle de Grist est l\u00e0 ! Nous savons qu\u2019elle est pratique car nous avons d\u00e9j\u00e0 mis \u00e0 jour plusieurs de nos mod\u00e8les pour l\u2019inclure. \ud83d\ude05 Nous avons m\u00eame cr\u00e9\u00e9 de nouveaux mod\u00e8les qui mettent sp\u00e9cifiquement en avant la vue calendrier (plus d\u2019infos ci-dessous). Les \u00e9v\u00e9nements sont cr\u00e9\u00e9s \u00e0 l\u2019aide de colonnes Date ou DateTime associ\u00e9es Vues jour, semaine & mois \u00c9dition d\u2019\u00e9v\u00e9nements par glisser-d\u00e9poser Support pour le lien de curseur \u2013 s\u00e9lectionnez un \u00e9v\u00e9nement et mettez automatiquement \u00e0 jour une vue li\u00e9e (cela est utile si vous souhaitez voir les d\u00e9tails d\u2019un \u00e9v\u00e9nement dans une vue fiche, par exemple) VOIR LA DOCUMENTATION","title":"Vue calendrier \ud83d\uddd3\ufe0f"},{"location":"newsletters/2023-09/#point-de-terminaison-sql","text":"Grist dispose d\u00e9sormais d\u2019un point de terminaison SQL qui vous permet d\u2019ex\u00e9cuter des requ\u00eates SELECT en lecture seule via l\u2019API Grist ! C\u2019est excitant pour un ensemble tr\u00e8s \u201cs\u00e9lect\u201d d\u2019utilisateurs de Grist. \ud83e\udd20 Par exemple, voici une simple requ\u00eate SQL effectu\u00e9e sur notre mod\u00e8le CRM L\u00e9ger (ce ne sont pas de vrais emails !) : SELECT Email FROM Contacts WHERE Due IS NOT NULL Voir ici pour la documentation compl\u00e8te de l\u2019API.","title":"Point de terminaison SQL"},{"location":"newsletters/2023-09/#points-forts-de-la-communaute","text":"@jperon a trouv\u00e9 un moyen de cr\u00e9er une vue de recherche avanc\u00e9e en utilisant la m\u00e9thode eval de Python. Voir le post de la communaut\u00e9 pour un exemple, car c\u2019est un peu compliqu\u00e9 \u00e0 expliquer. Un grand merci \u00e0 @prijatelj.francek pour son travail sur la nouvelle traduction slov\u00e8ne. Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2023-09/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-09/#nouvelle-video-dorientation","text":"Les nouveaux utilisateurs de Grist verront une vid\u00e9o d\u2019orientation mise \u00e0 jour lorsqu\u2019ils s\u2019inscriront, ce qui peut \u00e9galement \u00eatre un rappel utile pour les utilisateurs existants.","title":"Nouvelle vid\u00e9o d’orientation"},{"location":"newsletters/2023-09/#webinaire-calendrier","text":"Les calendriers sont l\u00e0 ! Apprenez tous les trucs et astuces pour tirer le meilleur parti des vues calendrier dans vos documents. Les fiches se marient bien avec les calendriers, nous plongerons donc \u00e9galement dans les vues fiche. Jeudi 26 octobre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019OCTOBRE","title":"Webinaire : Calendrier"},{"location":"newsletters/2023-09/#deconstruction-du-modele-de-paie","text":"En regardant nos mod\u00e8les, vous pouvez vous demander pourquoi ils sont structur\u00e9s d\u2019une certaine mani\u00e8re. En septembre, nous avons reconstruit notre Mod\u00e8le de Paie . Ce mod\u00e8le utilise des formules pour rechercher les taux horaires en fonction de la personne, du r\u00f4le et de la date. Apprenez \u00e0 construire des tableaux de bord de synth\u00e8se dynamiques qui r\u00e9sument les donn\u00e9es par cat\u00e9gories et vous permettent d\u2019explorer les enregistrements dans ces cat\u00e9gories. REGARDER L\u2019ENREGISTREMENT DE SEPTEMBRE","title":"D\u00e9construction du Mod\u00e8le de Paie"},{"location":"newsletters/2023-09/#modeles","text":"","title":"Mod\u00e8les"},{"location":"newsletters/2023-09/#planification-de-voyage","text":"L\u2019\u00e9t\u00e9 est peut-\u00eatre termin\u00e9, mais cela signifie simplement qu\u2019il est temps de planifier votre prochain voyage. Utilisez le nouveau mod\u00e8le de Planification de Voyage de Grist pour planifier et organiser plusieurs voyages en un seul endroit, avec des itin\u00e9raires d\u00e9taill\u00e9s et des listes de bagages. Ce mod\u00e8le est \u00e9galement une excellente vitrine pour la nouvelle vue calendrier ! ALLER AU MOD\u00c8LE","title":"Planification de Voyage"},{"location":"newsletters/2023-09/#calendrier-de-contenu-pour-les-reseaux-sociaux","text":"Mais attendez, il y a plus ! Nous avons adapt\u00e9 et am\u00e9lior\u00e9 le document que nous utilisons en interne pour suivre nos publications sur les r\u00e9seaux sociaux et l\u2019avons transform\u00e9 en mod\u00e8le. Cr\u00e9ez et suivez des campagnes, approuvez du contenu et planifiez des publications (texte/image/vid\u00e9o). Et oui, ce mod\u00e8le utilise \u00e9galement tr\u00e8s bien la nouvelle vue calendrier ! ALLER AU MOD\u00c8LE","title":"Calendrier de Contenu pour les R\u00e9seaux Sociaux"},{"location":"newsletters/2023-09/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-09/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel Sprouts gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-10/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Octobre 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Octobre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Nouveaux raccourcis de formule Il y a un nouveau menu d\u2019options lors de l\u2019ajout d\u2019une colonne, y compris des raccourcis de cible et de formule ! B\u00eata : Widget de graphique avanc\u00e9 personnalis\u00e9 Essayez un widget exp\u00e9rimental qui donne \u00e0 Grist des capacit\u00e9s de cr\u00e9ation de graphiques \u00e9tendues. B\u00eata : Widget de notebook JupyterLite Ex\u00e9cutez du code Python personnalis\u00e9 dans notre widget exp\u00e9rimental JupyterLite. \u00c9v\u00e9nements color\u00e9s dans le calendrier \ud83c\udf08 Vous pouvez d\u00e9sormais colorier les \u00e9v\u00e9nements, et am\u00e9liorer les performances pour un grand nombre d\u2019\u00e9v\u00e9nements. T\u00e9l\u00e9chargements de fichiers depuis le visualiseur CSV de Grist Les utilisateurs peuvent d\u00e9sormais t\u00e9l\u00e9charger des fichiers CSV et XLSX directement depuis le visualiseur CSV de Grist. Grist au NEC 2023 \ud83c\uddeb\ud83c\uddf7 Une mise \u00e0 jour rapide de notre voyage \u00e0 Bordeaux, o\u00f9 nous avons parl\u00e9 de Grist et des communs num\u00e9riques ! Quoi de neuf # Raccourcis de formule # Si vous ouvrez le menu \u00ab Ajouter une colonne \u00bb, vous verrez quelques nouvelles options qui n\u2019\u00e9taient pas l\u00e0 auparavant : Cibles et Raccourcis . Ce sont deux types de cr\u00e9ation de formule en un clic qui facilitent la construction de vos documents Grist. Cibles : Si votre table r\u00e9f\u00e9rence d\u2019autres tables, ou est r\u00e9f\u00e9renc\u00e9e dans d\u2019autres tables, vous pourrez acc\u00e9der aux donn\u00e9es associ\u00e9es en un seul clic et effectuer des op\u00e9rations telles que la somme ou la moyenne si applicable. Raccourcis : Les raccourcis introduisent une mani\u00e8re en un clic d\u2019ajouter des formules d\u2019initialisation courantes : horodatages, tampons d\u2019auteur, d\u00e9tection des doublons et cr\u00e9ation d\u2019identifiants uniques. En savoir plus dans notre documentation . Fonctionnalit\u00e9 b\u00eata : Widget de graphique avanc\u00e9 personnalis\u00e9 # Le widget de graphique avanc\u00e9 personnalis\u00e9 vous offre plus de puissance et de flexibilit\u00e9 que les graphiques int\u00e9gr\u00e9s de Grist, offrant une grande vari\u00e9t\u00e9 de types de graphiques ainsi qu\u2019un contr\u00f4le accru sur le style et la mise en page. Pour en savoir plus et l\u2019essayer vous-m\u00eame, consultez notre documentation b\u00eata , et n\u2019oubliez pas : cliquez r\u00e9guli\u00e8rement sur le bouton \u00ab Enregistrer \u00bb au-dessus du widget pour conserver votre configuration ! Fonctionnalit\u00e9 b\u00eata : Widget de notebook JupyterLite # Ce widget exp\u00e9rimental vous permet d\u2019ex\u00e9cuter du code Python personnalis\u00e9 dans JupyterLite , une version de JupyterLab fonctionnant enti\u00e8rement dans le navigateur. Il peut utiliser l\u2019 API du plugin de widget personnalis\u00e9 et acc\u00e9der ou modifier toutes les donn\u00e9es du document (sous r\u00e9serve des permissions avanc\u00e9es), ouvrant des possibilit\u00e9s presque illimit\u00e9es pour les utilisateurs avanc\u00e9s. Pour plus d\u2019informations sur la mise en route, consultez notre documentation b\u00eata . \u00c9v\u00e9nements color\u00e9s dans le widget de calendrier ! # Vous pouvez d\u00e9sormais coder par couleur les \u00e9v\u00e9nements dans le widget de calendrier ! Tout ce que vous avez \u00e0 faire est d\u2019assigner une colonne \u00ab Type \u00bb optionnelle qui contient la cat\u00e9gorie et le style de l\u2019\u00e9v\u00e9nement. \ud83c\udfa8 Liaison bidirectionnelle du curseur # Gr\u00e2ce au travail acharn\u00e9 de @jvorob (qui \u00e9tait avec nous pour l\u2019\u00e9t\u00e9 et va beaucoup nous manquer !), la liaison du curseur a re\u00e7u une mise \u00e0 niveau significative. Dans le cadre de cela, deux widgets peuvent d\u00e9sormais \u00eatre li\u00e9s dans les deux sens, permettant une interaction plus naturelle du curseur. La liaison bidirectionnelle prend tout son sens en action : T\u00e9l\u00e9chargements de fichiers depuis le visualiseur CSV de Grist # Vous pouvez d\u00e9sormais t\u00e9l\u00e9charger les fichiers affich\u00e9s dans le visualiseur CSV de Grist en tant que fichiers CSV et XLSX. Grist Labs au NEC 2023 # Une partie de l\u2019\u00e9quipe Grist s\u2019est rendue \u00e0 Bordeaux, en France, pour parler de l\u2019aspect no-code de Grist au NEC 2023 , une conf\u00e9rence ax\u00e9e sur les communs num\u00e9riques . Nous avons pu rencontrer des utilisateurs de Grist travaillant dans le secteur public, et m\u00eame certains de nos pr\u00e9cieux contributeurs open source de l\u2019 ANCT . Si vous \u00eates int\u00e9ress\u00e9 par la venue de membres de l\u2019\u00e9quipe Grist pour parler de la fa\u00e7on dont Grist est cool et utile lors de votre convention, contactez-nous ! Encore plus d\u2019am\u00e9liorations ! # Une \u00e9tape furtive mais majeure pour le backend de Grist : il a \u00e9t\u00e9 mis \u00e0 jour vers Node 18. H\u00e9bergeurs open source : Grist peut d\u00e9sormais servir des m\u00e9triques au syst\u00e8me de surveillance Prometheus via une nouvelle variable d\u2019environnement GRIST_PROMCLIENT_PORT . Points forts de la communaut\u00e9 # @jperon est de retour avec un nouveau widget de s\u00e9lection SQL personnalis\u00e9 qui tire parti du point de terminaison SQL du mois dernier. \ud83e\udd2f Merci \u00e0 @marumaru pour avoir lanc\u00e9 notre traduction japonaise ! Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Graphiques et tableaux r\u00e9capitulatifs # En novembre, nous apprendrons comment r\u00e9sumer et analyser des donn\u00e9es dans des graphiques et des tableaux r\u00e9capitulatifs, avec des astuces pour tirer le meilleur parti des tableaux r\u00e9capitulatifs. Lundi 20 novembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE NOVEMBRE Calendriers et fiches # En octobre, nous avons examin\u00e9 le nouveau widget de calendrier et d\u00e9couvert comment tirer le meilleur parti des vues de calendrier dans vos documents. \u00c9tant donn\u00e9 que les widgets de fiches se marient bien avec les calendriers, nous les avons \u00e9galement examin\u00e9s. REGARDEZ L\u2019ENREGISTREMENT D\u2019OCTOBRE Mod\u00e8les # Nous avons parcouru notre liste de mod\u00e8les et ajout\u00e9 une pinc\u00e9e de widgets de calendrier pour nous assurer qu\u2019ils sont aussi utiles que possible. Prenez, par exemple, le mod\u00e8le de suivi du temps + facturation , qui a maintenant une vue de calendrier : ALLER AU MOD\u00c8LE Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/10"},{"location":"newsletters/2023-10/#bulletin-doctobre-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin Octobre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Dans ce bulletin Nouveaux raccourcis de formule Il y a un nouveau menu d\u2019options lors de l\u2019ajout d\u2019une colonne, y compris des raccourcis de cible et de formule ! B\u00eata : Widget de graphique avanc\u00e9 personnalis\u00e9 Essayez un widget exp\u00e9rimental qui donne \u00e0 Grist des capacit\u00e9s de cr\u00e9ation de graphiques \u00e9tendues. B\u00eata : Widget de notebook JupyterLite Ex\u00e9cutez du code Python personnalis\u00e9 dans notre widget exp\u00e9rimental JupyterLite. \u00c9v\u00e9nements color\u00e9s dans le calendrier \ud83c\udf08 Vous pouvez d\u00e9sormais colorier les \u00e9v\u00e9nements, et am\u00e9liorer les performances pour un grand nombre d\u2019\u00e9v\u00e9nements. T\u00e9l\u00e9chargements de fichiers depuis le visualiseur CSV de Grist Les utilisateurs peuvent d\u00e9sormais t\u00e9l\u00e9charger des fichiers CSV et XLSX directement depuis le visualiseur CSV de Grist. Grist au NEC 2023 \ud83c\uddeb\ud83c\uddf7 Une mise \u00e0 jour rapide de notre voyage \u00e0 Bordeaux, o\u00f9 nous avons parl\u00e9 de Grist et des communs num\u00e9riques !","title":"Bulletin d’Octobre 2023"},{"location":"newsletters/2023-10/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2023-10/#raccourcis-de-formule","text":"Si vous ouvrez le menu \u00ab Ajouter une colonne \u00bb, vous verrez quelques nouvelles options qui n\u2019\u00e9taient pas l\u00e0 auparavant : Cibles et Raccourcis . Ce sont deux types de cr\u00e9ation de formule en un clic qui facilitent la construction de vos documents Grist. Cibles : Si votre table r\u00e9f\u00e9rence d\u2019autres tables, ou est r\u00e9f\u00e9renc\u00e9e dans d\u2019autres tables, vous pourrez acc\u00e9der aux donn\u00e9es associ\u00e9es en un seul clic et effectuer des op\u00e9rations telles que la somme ou la moyenne si applicable. Raccourcis : Les raccourcis introduisent une mani\u00e8re en un clic d\u2019ajouter des formules d\u2019initialisation courantes : horodatages, tampons d\u2019auteur, d\u00e9tection des doublons et cr\u00e9ation d\u2019identifiants uniques. En savoir plus dans notre documentation .","title":"Raccourcis de formule"},{"location":"newsletters/2023-10/#fonctionnalite-beta-widget-de-graphique-avance-personnalise","text":"Le widget de graphique avanc\u00e9 personnalis\u00e9 vous offre plus de puissance et de flexibilit\u00e9 que les graphiques int\u00e9gr\u00e9s de Grist, offrant une grande vari\u00e9t\u00e9 de types de graphiques ainsi qu\u2019un contr\u00f4le accru sur le style et la mise en page. Pour en savoir plus et l\u2019essayer vous-m\u00eame, consultez notre documentation b\u00eata , et n\u2019oubliez pas : cliquez r\u00e9guli\u00e8rement sur le bouton \u00ab Enregistrer \u00bb au-dessus du widget pour conserver votre configuration !","title":"Fonctionnalit\u00e9 b\u00eata : Widget de graphique avanc\u00e9 personnalis\u00e9"},{"location":"newsletters/2023-10/#fonctionnalite-beta-widget-de-notebook-jupyterlite","text":"Ce widget exp\u00e9rimental vous permet d\u2019ex\u00e9cuter du code Python personnalis\u00e9 dans JupyterLite , une version de JupyterLab fonctionnant enti\u00e8rement dans le navigateur. Il peut utiliser l\u2019 API du plugin de widget personnalis\u00e9 et acc\u00e9der ou modifier toutes les donn\u00e9es du document (sous r\u00e9serve des permissions avanc\u00e9es), ouvrant des possibilit\u00e9s presque illimit\u00e9es pour les utilisateurs avanc\u00e9s. Pour plus d\u2019informations sur la mise en route, consultez notre documentation b\u00eata .","title":"Fonctionnalit\u00e9 b\u00eata : Widget de notebook JupyterLite"},{"location":"newsletters/2023-10/#evenements-colores-dans-le-widget-de-calendrier","text":"Vous pouvez d\u00e9sormais coder par couleur les \u00e9v\u00e9nements dans le widget de calendrier ! Tout ce que vous avez \u00e0 faire est d\u2019assigner une colonne \u00ab Type \u00bb optionnelle qui contient la cat\u00e9gorie et le style de l\u2019\u00e9v\u00e9nement. \ud83c\udfa8","title":"\u00c9v\u00e9nements color\u00e9s dans le widget de calendrier !"},{"location":"newsletters/2023-10/#liaison-bidirectionnelle-du-curseur","text":"Gr\u00e2ce au travail acharn\u00e9 de @jvorob (qui \u00e9tait avec nous pour l\u2019\u00e9t\u00e9 et va beaucoup nous manquer !), la liaison du curseur a re\u00e7u une mise \u00e0 niveau significative. Dans le cadre de cela, deux widgets peuvent d\u00e9sormais \u00eatre li\u00e9s dans les deux sens, permettant une interaction plus naturelle du curseur. La liaison bidirectionnelle prend tout son sens en action :","title":"Liaison bidirectionnelle du curseur"},{"location":"newsletters/2023-10/#telechargements-de-fichiers-depuis-le-visualiseur-csv-de-grist","text":"Vous pouvez d\u00e9sormais t\u00e9l\u00e9charger les fichiers affich\u00e9s dans le visualiseur CSV de Grist en tant que fichiers CSV et XLSX.","title":"T\u00e9l\u00e9chargements de fichiers depuis le visualiseur CSV de Grist"},{"location":"newsletters/2023-10/#grist-labs-au-nec-2023","text":"Une partie de l\u2019\u00e9quipe Grist s\u2019est rendue \u00e0 Bordeaux, en France, pour parler de l\u2019aspect no-code de Grist au NEC 2023 , une conf\u00e9rence ax\u00e9e sur les communs num\u00e9riques . Nous avons pu rencontrer des utilisateurs de Grist travaillant dans le secteur public, et m\u00eame certains de nos pr\u00e9cieux contributeurs open source de l\u2019 ANCT . Si vous \u00eates int\u00e9ress\u00e9 par la venue de membres de l\u2019\u00e9quipe Grist pour parler de la fa\u00e7on dont Grist est cool et utile lors de votre convention, contactez-nous !","title":"Grist Labs au NEC 2023"},{"location":"newsletters/2023-10/#encore-plus-dameliorations","text":"Une \u00e9tape furtive mais majeure pour le backend de Grist : il a \u00e9t\u00e9 mis \u00e0 jour vers Node 18. H\u00e9bergeurs open source : Grist peut d\u00e9sormais servir des m\u00e9triques au syst\u00e8me de surveillance Prometheus via une nouvelle variable d\u2019environnement GRIST_PROMCLIENT_PORT .","title":"Encore plus d’am\u00e9liorations !"},{"location":"newsletters/2023-10/#points-forts-de-la-communaute","text":"@jperon est de retour avec un nouveau widget de s\u00e9lection SQL personnalis\u00e9 qui tire parti du point de terminaison SQL du mois dernier. \ud83e\udd2f Merci \u00e0 @marumaru pour avoir lanc\u00e9 notre traduction japonaise ! Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2023-10/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-10/#webinaire-graphiques-et-tableaux-recapitulatifs","text":"En novembre, nous apprendrons comment r\u00e9sumer et analyser des donn\u00e9es dans des graphiques et des tableaux r\u00e9capitulatifs, avec des astuces pour tirer le meilleur parti des tableaux r\u00e9capitulatifs. Lundi 20 novembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE NOVEMBRE","title":"Webinaire : Graphiques et tableaux r\u00e9capitulatifs"},{"location":"newsletters/2023-10/#calendriers-et-fiches","text":"En octobre, nous avons examin\u00e9 le nouveau widget de calendrier et d\u00e9couvert comment tirer le meilleur parti des vues de calendrier dans vos documents. \u00c9tant donn\u00e9 que les widgets de fiches se marient bien avec les calendriers, nous les avons \u00e9galement examin\u00e9s. REGARDEZ L\u2019ENREGISTREMENT D\u2019OCTOBRE","title":"Calendriers et fiches"},{"location":"newsletters/2023-10/#modeles","text":"Nous avons parcouru notre liste de mod\u00e8les et ajout\u00e9 une pinc\u00e9e de widgets de calendrier pour nous assurer qu\u2019ils sont aussi utiles que possible. Prenez, par exemple, le mod\u00e8le de suivi du temps + facturation , qui a maintenant une vue de calendrier : ALLER AU MOD\u00c8LE","title":"Mod\u00e8les"},{"location":"newsletters/2023-10/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-10/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-11/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Novembre 2023 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Novembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de Neuf # Rejoignez-nous sur Discord ! # Nous avons cr\u00e9\u00e9 un serveur Discord officiel Grist pour ceux qui souhaitent discuter de Grist et de sujets li\u00e9s \u00e0 Grist. Pour marquer le coup, nous allons voir combien des puzzles de l\u2019 Advent of Code de cette ann\u00e9e nous pouvons r\u00e9soudre avec Grist. \ud83d\udcc6\ud83e\udde9 REJOINDRE DISCORD Vues fiche # Ne vous laissez pas tromper par le nom modeste, c\u2019est une grande nouveaut\u00e9 ! Nous savons tous \u00e0 quel point les r\u00e9f\u00e9rences sont utiles. Mais parfois, vous voulez jeter un coup d\u2019\u0153il \u00e0 l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 sans changer votre vue actuelle. Maintenant, vous pouvez ! L\u2019ic\u00f4ne \u201clien\u201d dans les colonnes de r\u00e9f\u00e9rence et de liste de r\u00e9f\u00e9rences est d\u00e9sormais un v\u00e9ritable hyperlien, et il ouvre l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans une fen\u00eatre contextuelle. Mais cela ne concerne pas seulement les r\u00e9f\u00e9rences ! Vous pouvez \u00e9galement voir n\u2019importe quelle ligne dans une table comme une carte en un seul clic, vous permettant de voir son enregistrement de base en entier. Les vues fiche sont des vues par d\u00e9faut pour chaque table. Elles peuvent \u00eatre configur\u00e9es sur la page des Donn\u00e9es Sources . Ajouter une colonne avec type # Notre qu\u00eate pour am\u00e9liorer l\u2019exp\u00e9rience d\u2019ajout de nouvelles colonnes continue. D\u00e9sormais, vous pouvez d\u00e9finir le type de colonne directement dans le menu \u201cAjouter une colonne\u201d. Admirez ! Mise \u00e0 jour de s\u00e9curit\u00e9 pour les auto-h\u00e9bergeurs # Nous avons publi\u00e9 une correction de s\u00e9curit\u00e9 plus t\u00f4t ce mois-ci li\u00e9e \u00e0 la configuration sugg\u00e9r\u00e9e de grist-core avec traefik, ainsi que pour grist-omnibus . Voir cette mise \u00e0 jour de la communaut\u00e9 pour plus de d\u00e9tails. La correction affecte \u00e9galement ceux qui font l\u2019authentification Grist en transf\u00e9rant un en-t\u00eate pour tous les points de terminaison (par exemple, derri\u00e8re HTTP Basic Auth), car elle rend obligatoire un drapeau pr\u00e9c\u00e9demment optionnel. Vous devrez peut-\u00eatre revoir vos param\u00e8tres \u2013 voir ce probl\u00e8me pour plus de d\u00e9tails. Questions-R\u00e9ponses Console Grist # Le CTO Paul a pu partager des informations fascinantes li\u00e9es \u00e0 Grist dans une excellente session de Questions-R\u00e9ponses Console . D\u00e9couvrez les origines du nom \u201cGrist\u201d, comment (et pourquoi) nous construisons Grist, et comment nous pourrions communiquer avec des extraterrestres. \ud83d\udc7d (Ce dernier point n\u2019est peut-\u00eatre pas directement li\u00e9 \u00e0 Grist.) Faits Saillants de la Communaut\u00e9 # Auto-h\u00e9bergeurs : Grist prend d\u00e9sormais en charge nativement l\u2019authentification avec OpenID Connect. Voir la documentation compl\u00e8te ici . Un grand merci \u00e0 @fflorent de l\u2019ANCT pour leur travail sur cette PR ! Vous cherchez un moyen plus simple d\u2019auto-h\u00e9berger Grist ? Florent a \u00e9galement empaquet\u00e9 Grist sur YunoHost , un OS bas\u00e9 sur Debian con\u00e7u pour aider \u00e0 d\u00e9mocratiser l\u2019auto-h\u00e9bergement. Consultez le post de Florent sur notre forum pour plus d\u2019informations. Andreas Kl\u00f6ckner ( @inducer sur GitHub) a partag\u00e9 non pas un, ni deux, mais TROIS projets li\u00e9s \u00e0 Grist sur le forum de la communaut\u00e9 : grist-availability : un outil pour aider \u00e0 la planification multi-personnes en utilisant le nouveau widget calendrier. grist-mailmerge : un exp\u00e9diteur de courriels en lot pilot\u00e9 par une table Grist et un mod\u00e8le Jinja. pygrist-mini : un petit client API Grist pour Python. Les traductions ont commenc\u00e9 pour l\u2019arabe, le tch\u00e8que, le chinois (traditionnel), le n\u00e9erlandais et le tha\u00ef ! Nous en sommes maintenant \u00e0 20 langues soit compl\u00e8tes, soit en cours, gr\u00e2ce \u00e0 la contribution de la communaut\u00e9. Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Vues Multim\u00e9dia # En d\u00e9cembre, nous couvrirons les vues multim\u00e9dia afin que vous puissiez explorer encore plus de fa\u00e7ons d\u2019afficher vos donn\u00e9es. Cartes, blocs-notes et lecteurs vid\u00e9o, oh l\u00e0 l\u00e0 ! Jeudi 14 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE D\u00c9CEMBRE Graphiques et Tableaux de Synth\u00e8se # En novembre, nous avons appris \u00e0 r\u00e9sumer et analyser les donn\u00e9es dans des graphiques et des tableaux de synth\u00e8se, avec des astuces pour tirer le meilleur parti des tableaux de synth\u00e8se. REGARDER L\u2019ENREGISTREMENT DE NOVEMBRE Aidez \u00e0 faire conna\u00eetre Grist # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/11"},{"location":"newsletters/2023-11/#bulletin-de-novembre-2023","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Novembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Novembre 2023"},{"location":"newsletters/2023-11/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-11/#rejoignez-nous-sur-discord","text":"Nous avons cr\u00e9\u00e9 un serveur Discord officiel Grist pour ceux qui souhaitent discuter de Grist et de sujets li\u00e9s \u00e0 Grist. Pour marquer le coup, nous allons voir combien des puzzles de l\u2019 Advent of Code de cette ann\u00e9e nous pouvons r\u00e9soudre avec Grist. \ud83d\udcc6\ud83e\udde9 REJOINDRE DISCORD","title":"Rejoignez-nous sur Discord !"},{"location":"newsletters/2023-11/#vues-fiche","text":"Ne vous laissez pas tromper par le nom modeste, c\u2019est une grande nouveaut\u00e9 ! Nous savons tous \u00e0 quel point les r\u00e9f\u00e9rences sont utiles. Mais parfois, vous voulez jeter un coup d\u2019\u0153il \u00e0 l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 sans changer votre vue actuelle. Maintenant, vous pouvez ! L\u2019ic\u00f4ne \u201clien\u201d dans les colonnes de r\u00e9f\u00e9rence et de liste de r\u00e9f\u00e9rences est d\u00e9sormais un v\u00e9ritable hyperlien, et il ouvre l\u2019enregistrement r\u00e9f\u00e9renc\u00e9 dans une fen\u00eatre contextuelle. Mais cela ne concerne pas seulement les r\u00e9f\u00e9rences ! Vous pouvez \u00e9galement voir n\u2019importe quelle ligne dans une table comme une carte en un seul clic, vous permettant de voir son enregistrement de base en entier. Les vues fiche sont des vues par d\u00e9faut pour chaque table. Elles peuvent \u00eatre configur\u00e9es sur la page des Donn\u00e9es Sources .","title":"Vues fiche"},{"location":"newsletters/2023-11/#ajouter-une-colonne-avec-type","text":"Notre qu\u00eate pour am\u00e9liorer l\u2019exp\u00e9rience d\u2019ajout de nouvelles colonnes continue. D\u00e9sormais, vous pouvez d\u00e9finir le type de colonne directement dans le menu \u201cAjouter une colonne\u201d. Admirez !","title":"Ajouter une colonne avec type"},{"location":"newsletters/2023-11/#mise-a-jour-de-securite-pour-les-auto-hebergeurs","text":"Nous avons publi\u00e9 une correction de s\u00e9curit\u00e9 plus t\u00f4t ce mois-ci li\u00e9e \u00e0 la configuration sugg\u00e9r\u00e9e de grist-core avec traefik, ainsi que pour grist-omnibus . Voir cette mise \u00e0 jour de la communaut\u00e9 pour plus de d\u00e9tails. La correction affecte \u00e9galement ceux qui font l\u2019authentification Grist en transf\u00e9rant un en-t\u00eate pour tous les points de terminaison (par exemple, derri\u00e8re HTTP Basic Auth), car elle rend obligatoire un drapeau pr\u00e9c\u00e9demment optionnel. Vous devrez peut-\u00eatre revoir vos param\u00e8tres \u2013 voir ce probl\u00e8me pour plus de d\u00e9tails.","title":"Mise \u00e0 jour de s\u00e9curit\u00e9 pour les auto-h\u00e9bergeurs"},{"location":"newsletters/2023-11/#questions-reponses-console-grist","text":"Le CTO Paul a pu partager des informations fascinantes li\u00e9es \u00e0 Grist dans une excellente session de Questions-R\u00e9ponses Console . D\u00e9couvrez les origines du nom \u201cGrist\u201d, comment (et pourquoi) nous construisons Grist, et comment nous pourrions communiquer avec des extraterrestres. \ud83d\udc7d (Ce dernier point n\u2019est peut-\u00eatre pas directement li\u00e9 \u00e0 Grist.)","title":"Questions-R\u00e9ponses Console Grist"},{"location":"newsletters/2023-11/#faits-saillants-de-la-communaute","text":"Auto-h\u00e9bergeurs : Grist prend d\u00e9sormais en charge nativement l\u2019authentification avec OpenID Connect. Voir la documentation compl\u00e8te ici . Un grand merci \u00e0 @fflorent de l\u2019ANCT pour leur travail sur cette PR ! Vous cherchez un moyen plus simple d\u2019auto-h\u00e9berger Grist ? Florent a \u00e9galement empaquet\u00e9 Grist sur YunoHost , un OS bas\u00e9 sur Debian con\u00e7u pour aider \u00e0 d\u00e9mocratiser l\u2019auto-h\u00e9bergement. Consultez le post de Florent sur notre forum pour plus d\u2019informations. Andreas Kl\u00f6ckner ( @inducer sur GitHub) a partag\u00e9 non pas un, ni deux, mais TROIS projets li\u00e9s \u00e0 Grist sur le forum de la communaut\u00e9 : grist-availability : un outil pour aider \u00e0 la planification multi-personnes en utilisant le nouveau widget calendrier. grist-mailmerge : un exp\u00e9diteur de courriels en lot pilot\u00e9 par une table Grist et un mod\u00e8le Jinja. pygrist-mini : un petit client API Grist pour Python. Les traductions ont commenc\u00e9 pour l\u2019arabe, le tch\u00e8que, le chinois (traditionnel), le n\u00e9erlandais et le tha\u00ef ! Nous en sommes maintenant \u00e0 20 langues soit compl\u00e8tes, soit en cours, gr\u00e2ce \u00e0 la contribution de la communaut\u00e9. Voir ici pour plus d\u2019informations sur la traduction de Grist. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Faits Saillants de la Communaut\u00e9"},{"location":"newsletters/2023-11/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-11/#webinaire-vues-multimedia","text":"En d\u00e9cembre, nous couvrirons les vues multim\u00e9dia afin que vous puissiez explorer encore plus de fa\u00e7ons d\u2019afficher vos donn\u00e9es. Cartes, blocs-notes et lecteurs vid\u00e9o, oh l\u00e0 l\u00e0 ! Jeudi 14 d\u00e9cembre \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE D\u00c9CEMBRE","title":"Webinaire : Vues Multim\u00e9dia"},{"location":"newsletters/2023-11/#graphiques-et-tableaux-de-synthese","text":"En novembre, nous avons appris \u00e0 r\u00e9sumer et analyser les donn\u00e9es dans des graphiques et des tableaux de synth\u00e8se, avec des astuces pour tirer le meilleur parti des tableaux de synth\u00e8se. REGARDER L\u2019ENREGISTREMENT DE NOVEMBRE","title":"Graphiques et Tableaux de Synth\u00e8se"},{"location":"newsletters/2023-11/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2023-11/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2023-12/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de D\u00e9cembre 2023 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin D\u00e9cembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Nous avons publi\u00e9 un aper\u00e7u de tout ce qui s\u2019est pass\u00e9 pendant une ann\u00e9e 2023 tr\u00e8s charg\u00e9e pour Grist. Consultez notre Ann\u00e9e en Revue pour tout savoir, ainsi qu\u2019une abondance de contributions \u00e9tonnantes de la communaut\u00e9 et un aper\u00e7u de ce qui nous attend en 2024. \ud83e\udde0 LIRE L\u2019ANN\u00c9E EN REVUE Quoi de Neuf # Bient\u00f4t (tr\u00e8s) disponible : Formulaires # Capture d\u2019\u00e9cran du design de l\u2019\u00e9diteur de formulaires. Les formulaires sont presque l\u00e0, et nous ne pourrions pas \u00eatre plus excit\u00e9s. Nous publierons une version de pr\u00e9visualisation pour les tests en janvier, et nous aimerions recevoir des retours pr\u00e9coces des utilisateurs. Pour fournir des retours, rejoignez notre serveur Discord. REJOINDRE DISCORD Test B\u00eata : Grist sur AWS Marketplace # En 2024, nous pr\u00e9voyons de lancer de nouvelles options pour Grist auto-h\u00e9berg\u00e9, afin qu\u2019il devienne plus facile \u00e0 ex\u00e9cuter (et \u00e0 maintenir) sur votre propre infrastructure. Grist auto-h\u00e9berg\u00e9 peut d\u00e9j\u00e0 fonctionner presque partout, surtout lorsque quelqu\u2019un a fait le travail de l\u2019emballer pour votre environnement sp\u00e9cifique. L\u2019un des premiers exemples de cela \u00e9tait le paquet Grist pour Unraid d\u2019Adrian, et l\u2019un des plus r\u00e9cents est le paquet Grist pour YunoHost de Florent, datant du mois dernier. Chez Grist Labs, nous avons commenc\u00e9 \u00e0 travailler sur un paquet Grist pour AWS Marketplace, et nous recherchons des utilisateurs amicaux sur le cloud AWS pour l\u2019essayer et donner leur avis. Int\u00e9ress\u00e9 ? Veuillez rejoindre notre Discord et surveiller une annonce en janvier, merci ! Autres am\u00e9liorations # Graphiques Avanc\u00e9s et le JupyterLite Notebook sont d\u00e9sormais des vues personnalis\u00e9es officielles disponibles dans le menu d\u00e9roulant. Dans les vues de table, vous pouvez maintenant appuyer sur la barre d\u2019espace pour ouvrir la ligne s\u00e9lectionn\u00e9e en tant que vue fiche. Points Forts de la Communaut\u00e9 # Sur le Discord de Grist , @CoverWhale a partag\u00e9 son client Grist Go en phase initiale, avec le nom d\u00e9licieux de Gorist . Toujours sur Discord, @jperon a partag\u00e9 un widget pug_py pour aider \u00e0 d\u00e9velopper des vues personnalis\u00e9es. La traduction a commenc\u00e9 pour le roumain (merci @chiuta) ! Voir ici pour plus d\u2019informations sur la traduction de Grist. Nous sommes tellement impressionn\u00e9s par la diligence de @jperon pour r\u00e9soudre autant de puzzles Advent of Code que possible dans Grist. Statut de h\u00e9ros. Juste\u2026regardez \u00e7a : https://docs.getgrist.com/cU5y9f2ViVQQ/AOC2023/p/17 Pendant ce temps chez Grist\u2026 Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Magie du Widget Markdown \ud83e\uddd9\u200d\u2642\ufe0f # En janvier, nous apprendrons \u00e0 utiliser la vue Markdown pour cr\u00e9er des fichiers PDF imprimables, remplis avec les donn\u00e9es de votre document Grist. Nous reconstruirons notre \ud83d\udcdd Mod\u00e8le de Propositions & Contrats pour vous montrer comment c\u2019est fait ! Jeudi 18 janvier \u00e0 16h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER Vues Multim\u00e9dia # En d\u00e9cembre, nous avons couvert les vues multim\u00e9dia et explor\u00e9 encore plus de fa\u00e7ons d\u2019afficher vos donn\u00e9es. Cartes, blocs-notes et lecteurs vid\u00e9o, oh l\u00e0 l\u00e0 ! REGARDER L\u2019ENREGISTREMENT DE D\u00c9CEMBRE Aidez \u00e0 faire passer le mot # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 grandir, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2023/12"},{"location":"newsletters/2023-12/#bulletin-de-decembre-2023","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist pour le Moulin D\u00e9cembre 2023 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Nous avons publi\u00e9 un aper\u00e7u de tout ce qui s\u2019est pass\u00e9 pendant une ann\u00e9e 2023 tr\u00e8s charg\u00e9e pour Grist. Consultez notre Ann\u00e9e en Revue pour tout savoir, ainsi qu\u2019une abondance de contributions \u00e9tonnantes de la communaut\u00e9 et un aper\u00e7u de ce qui nous attend en 2024. \ud83e\udde0 LIRE L\u2019ANN\u00c9E EN REVUE","title":"Bulletin de D\u00e9cembre 2023"},{"location":"newsletters/2023-12/#quoi-de-neuf","text":"","title":"Quoi de Neuf"},{"location":"newsletters/2023-12/#bientot-tres-disponible-formulaires","text":"Capture d\u2019\u00e9cran du design de l\u2019\u00e9diteur de formulaires. Les formulaires sont presque l\u00e0, et nous ne pourrions pas \u00eatre plus excit\u00e9s. Nous publierons une version de pr\u00e9visualisation pour les tests en janvier, et nous aimerions recevoir des retours pr\u00e9coces des utilisateurs. Pour fournir des retours, rejoignez notre serveur Discord. REJOINDRE DISCORD","title":"Bient\u00f4t (tr\u00e8s) disponible : Formulaires"},{"location":"newsletters/2023-12/#test-beta-grist-sur-aws-marketplace","text":"En 2024, nous pr\u00e9voyons de lancer de nouvelles options pour Grist auto-h\u00e9berg\u00e9, afin qu\u2019il devienne plus facile \u00e0 ex\u00e9cuter (et \u00e0 maintenir) sur votre propre infrastructure. Grist auto-h\u00e9berg\u00e9 peut d\u00e9j\u00e0 fonctionner presque partout, surtout lorsque quelqu\u2019un a fait le travail de l\u2019emballer pour votre environnement sp\u00e9cifique. L\u2019un des premiers exemples de cela \u00e9tait le paquet Grist pour Unraid d\u2019Adrian, et l\u2019un des plus r\u00e9cents est le paquet Grist pour YunoHost de Florent, datant du mois dernier. Chez Grist Labs, nous avons commenc\u00e9 \u00e0 travailler sur un paquet Grist pour AWS Marketplace, et nous recherchons des utilisateurs amicaux sur le cloud AWS pour l\u2019essayer et donner leur avis. Int\u00e9ress\u00e9 ? Veuillez rejoindre notre Discord et surveiller une annonce en janvier, merci !","title":"Test B\u00eata : Grist sur AWS Marketplace"},{"location":"newsletters/2023-12/#autres-ameliorations","text":"Graphiques Avanc\u00e9s et le JupyterLite Notebook sont d\u00e9sormais des vues personnalis\u00e9es officielles disponibles dans le menu d\u00e9roulant. Dans les vues de table, vous pouvez maintenant appuyer sur la barre d\u2019espace pour ouvrir la ligne s\u00e9lectionn\u00e9e en tant que vue fiche.","title":"Autres am\u00e9liorations"},{"location":"newsletters/2023-12/#points-forts-de-la-communaute","text":"Sur le Discord de Grist , @CoverWhale a partag\u00e9 son client Grist Go en phase initiale, avec le nom d\u00e9licieux de Gorist . Toujours sur Discord, @jperon a partag\u00e9 un widget pug_py pour aider \u00e0 d\u00e9velopper des vues personnalis\u00e9es. La traduction a commenc\u00e9 pour le roumain (merci @chiuta) ! Voir ici pour plus d\u2019informations sur la traduction de Grist. Nous sommes tellement impressionn\u00e9s par la diligence de @jperon pour r\u00e9soudre autant de puzzles Advent of Code que possible dans Grist. Statut de h\u00e9ros. Juste\u2026regardez \u00e7a : https://docs.getgrist.com/cU5y9f2ViVQQ/AOC2023/p/17 Pendant ce temps chez Grist\u2026 Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points Forts de la Communaut\u00e9"},{"location":"newsletters/2023-12/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2023-12/#webinaire-magie-du-widget-markdown","text":"En janvier, nous apprendrons \u00e0 utiliser la vue Markdown pour cr\u00e9er des fichiers PDF imprimables, remplis avec les donn\u00e9es de votre document Grist. Nous reconstruirons notre \ud83d\udcdd Mod\u00e8le de Propositions & Contrats pour vous montrer comment c\u2019est fait ! Jeudi 18 janvier \u00e0 16h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JANVIER","title":"Webinaire : Magie du Widget Markdown \ud83e\uddd9\u200d\u2642\ufe0f"},{"location":"newsletters/2023-12/#vues-multimedia","text":"En d\u00e9cembre, nous avons couvert les vues multim\u00e9dia et explor\u00e9 encore plus de fa\u00e7ons d\u2019afficher vos donn\u00e9es. Cartes, blocs-notes et lecteurs vid\u00e9o, oh l\u00e0 l\u00e0 ! REGARDER L\u2019ENREGISTREMENT DE D\u00c9CEMBRE","title":"Vues Multim\u00e9dia"},{"location":"newsletters/2023-12/#aidez-a-faire-passer-le-mot","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 grandir, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire passer le mot"},{"location":"newsletters/2023-12/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019Aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-01/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de janvier 2024 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Janvier 2024 \u2022 getgrist.com Bienvenue dans notre newsletter mensuelle de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Bonne ann\u00e9e ! # Si ce n\u2019est pas d\u00e9j\u00e0 fait, n\u2019oubliez pas de consulter notre Revue de l\u2019ann\u00e9e 2023 . Nous sommes extr\u00eamement enthousiastes pour 2024 et nous commen\u00e7ons l\u2019ann\u00e9e en grande forme. \ud83d\ude09 Quoi de neuf # Formulaires Grist # EN SAVOIR PLUS Les formulaires Grist sont maintenant en ligne ! Cr\u00e9ez des formulaires simples et efficaces directement dans un document Grist et partagez-les en un clic. \u00c9tant donn\u00e9 que les champs de formulaire proviennent directement des colonnes Grist, toutes vos donn\u00e9es sont achemin\u00e9es directement dans la structure correcte, organis\u00e9es et pr\u00eates pour l\u2019analyse. Concevez des formulaires visuellement dans Grist Pr\u00e9visualisez, publiez et partagez en un seul clic Analysez les donn\u00e9es en temps r\u00e9el Mais nous n\u2019en restons pas l\u00e0 \u2013 nous continuons \u00e0 ajouter des fonctionnalit\u00e9s aux formulaires Grist. Nous voulons que le meilleur outil de donn\u00e9es ait le moyen le plus simple de collecter des donn\u00e9es. Nous collectons \u00e9galement des retours \u2013 soit en nous envoyant un e-mail \u00e0 support@getgrist.com, soit en nous laissant un message sur notre serveur Discord officiel . Visitez notre page des formulaires Grist pour plus d\u2019informations, et plongez dans notre Centre d\u2019aide pour une documentation compl\u00e8te. Pour un aper\u00e7u pratique des formulaires, inscrivez-vous au webinaire de ce mois pour tout apprendre \u00e0 leur sujet ! Console API # Grist dispose d\u00e9j\u00e0 d\u2019une documentation API de r\u00e9f\u00e9rence \u00e9tendue, mais nous sommes ravis de lancer une nouvelle page de console API pour permettre aux d\u00e9veloppeurs de tester les appels API dans une interface web pratique. Remarque : Cette page utilise votre session actuelle. Points forts de la communaut\u00e9 # D\u00e9composez-vous/reconstruisez-vous souvent des URL ? Andreas Kloeckner ( @inducer sur GitHub) a partag\u00e9 un petit widget personnalis\u00e9 pour permettre une visualisation correcte (cliquable) des URL calcul\u00e9es. Juste apr\u00e8s gorist , @hooksie1 a partag\u00e9 une version alpha de vrist , un client Grist en V ! Qu\u2019est-ce qui vient ensuite, TypeGrist ? Grust ? Grist peut-il faire du kanban ? Les fans de Grist se rassemblent et planifient, et Grist peut faire du kanban ! Les utilisateurs de notre serveur Discord ont commenc\u00e9 \u00e0 r\u00e9fl\u00e9chir, ce qui a conduit \u00e0 plusieurs prototypes d\u2019une solution kanban Grist : un qui n\u2019utilise aucun widget personnalis\u00e9 (!) par wunter8 et un widget personnalis\u00e9 complet et glissable par @jperon Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Formulaires # F\u00e9vrier est le mois pour c\u00e9l\u00e9brer notre amour \ud83d\udc96\u2026 des formulaires ! Nous apprendrons \u00e0 cr\u00e9er une belle vue de formulaire pour collecter des donn\u00e9es qui rempliront une table de donn\u00e9es Grist lors de la soumission. Jeudi 22 f\u00e9vrier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER Magie du widget Markdown \ud83e\uddd9\u200d\u2642\ufe0f # En janvier, nous avons plong\u00e9 dans notre exemple de propositions et contrats et appris \u00e0 utiliser le widget Markdown pour cr\u00e9er des fichiers PDF imprimables avec les donn\u00e9es de votre document Grist. REGARDER L\u2019ENREGISTREMENT DE JANVIER Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit Sprouts avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/01"},{"location":"newsletters/2024-01/#bulletin-de-janvier-2024","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Janvier 2024 \u2022 getgrist.com Bienvenue dans notre newsletter mensuelle de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de janvier 2024"},{"location":"newsletters/2024-01/#bonne-annee","text":"Si ce n\u2019est pas d\u00e9j\u00e0 fait, n\u2019oubliez pas de consulter notre Revue de l\u2019ann\u00e9e 2023 . Nous sommes extr\u00eamement enthousiastes pour 2024 et nous commen\u00e7ons l\u2019ann\u00e9e en grande forme. \ud83d\ude09","title":"Bonne ann\u00e9e !"},{"location":"newsletters/2024-01/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-01/#formulaires-grist","text":"EN SAVOIR PLUS Les formulaires Grist sont maintenant en ligne ! Cr\u00e9ez des formulaires simples et efficaces directement dans un document Grist et partagez-les en un clic. \u00c9tant donn\u00e9 que les champs de formulaire proviennent directement des colonnes Grist, toutes vos donn\u00e9es sont achemin\u00e9es directement dans la structure correcte, organis\u00e9es et pr\u00eates pour l\u2019analyse. Concevez des formulaires visuellement dans Grist Pr\u00e9visualisez, publiez et partagez en un seul clic Analysez les donn\u00e9es en temps r\u00e9el Mais nous n\u2019en restons pas l\u00e0 \u2013 nous continuons \u00e0 ajouter des fonctionnalit\u00e9s aux formulaires Grist. Nous voulons que le meilleur outil de donn\u00e9es ait le moyen le plus simple de collecter des donn\u00e9es. Nous collectons \u00e9galement des retours \u2013 soit en nous envoyant un e-mail \u00e0 support@getgrist.com, soit en nous laissant un message sur notre serveur Discord officiel . Visitez notre page des formulaires Grist pour plus d\u2019informations, et plongez dans notre Centre d\u2019aide pour une documentation compl\u00e8te. Pour un aper\u00e7u pratique des formulaires, inscrivez-vous au webinaire de ce mois pour tout apprendre \u00e0 leur sujet !","title":"Formulaires Grist"},{"location":"newsletters/2024-01/#console-api","text":"Grist dispose d\u00e9j\u00e0 d\u2019une documentation API de r\u00e9f\u00e9rence \u00e9tendue, mais nous sommes ravis de lancer une nouvelle page de console API pour permettre aux d\u00e9veloppeurs de tester les appels API dans une interface web pratique. Remarque : Cette page utilise votre session actuelle.","title":"Console API"},{"location":"newsletters/2024-01/#points-forts-de-la-communaute","text":"D\u00e9composez-vous/reconstruisez-vous souvent des URL ? Andreas Kloeckner ( @inducer sur GitHub) a partag\u00e9 un petit widget personnalis\u00e9 pour permettre une visualisation correcte (cliquable) des URL calcul\u00e9es. Juste apr\u00e8s gorist , @hooksie1 a partag\u00e9 une version alpha de vrist , un client Grist en V ! Qu\u2019est-ce qui vient ensuite, TypeGrist ? Grust ? Grist peut-il faire du kanban ? Les fans de Grist se rassemblent et planifient, et Grist peut faire du kanban ! Les utilisateurs de notre serveur Discord ont commenc\u00e9 \u00e0 r\u00e9fl\u00e9chir, ce qui a conduit \u00e0 plusieurs prototypes d\u2019une solution kanban Grist : un qui n\u2019utilise aucun widget personnalis\u00e9 (!) par wunter8 et un widget personnalis\u00e9 complet et glissable par @jperon Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-01/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-01/#webinaire-formulaires","text":"F\u00e9vrier est le mois pour c\u00e9l\u00e9brer notre amour \ud83d\udc96\u2026 des formulaires ! Nous apprendrons \u00e0 cr\u00e9er une belle vue de formulaire pour collecter des donn\u00e9es qui rempliront une table de donn\u00e9es Grist lors de la soumission. Jeudi 22 f\u00e9vrier \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE F\u00c9VRIER","title":"Webinaire : Formulaires"},{"location":"newsletters/2024-01/#magie-du-widget-markdown","text":"En janvier, nous avons plong\u00e9 dans notre exemple de propositions et contrats et appris \u00e0 utiliser le widget Markdown pour cr\u00e9er des fichiers PDF imprimables avec les donn\u00e9es de votre document Grist. REGARDER L\u2019ENREGISTREMENT DE JANVIER","title":"Magie du widget Markdown \ud83e\uddd9\u200d\u2642\ufe0f"},{"location":"newsletters/2024-01/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f Stackshare Capterra TrustRadius AlternativeTo","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-01/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit Sprouts avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-02/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de F\u00e9vrier 2024 # /* r\u00e9tablir certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill F\u00e9vrier 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Grist recrute ! # Venez travailler avec nous et aidez \u00e0 am\u00e9liorer Grist. Note : les deux candidatures impliquent des \u00e9nigmes. \ud83e\udee1 R\u00e9dacteur de contenu Ing\u00e9nieur syst\u00e8mes Quoi de neuf # Ce mois-ci, nous avons constat\u00e9 une \u00e9norme augmentation de l\u2019activit\u00e9 communautaire, ce qui est incroyablement excitant. Nous ne pouvons pas assez dire \u00e0 quel point il est motivant de voir des utilisateurs sur Discord ou le Forum Communautaire cr\u00e9er des choses cool et utiles dans Grist. Mais nous ne pouvons pas vous laisser tout le plaisir - nous avons \u00e9t\u00e9 tr\u00e8s occup\u00e9s en coulisses. Voici quelques \u00e9l\u00e9ments qui ont \u00e9t\u00e9 livr\u00e9s le mois dernier, mais gardez les yeux ouverts pour plus dans un avenir proche. \ud83d\udc40 Am\u00e9liorations diverses # \ud83d\uddd3\ufe0f Les \u00e9v\u00e9nements du calendrier s\u2019ouvrent d\u00e9sormais dans les vues fiches en double-cliquant \ud83d\uddbc\ufe0f Le widget de visualisation d\u2019images personnalis\u00e9 peut d\u00e9sormais afficher un carrousel si plusieurs URL sont d\u00e9tect\u00e9es \ud83e\udee8 Le widget Markdown enregistre par d\u00e9faut lorsque vous perdez le focus \ud83e\udd16 L\u2019 Assistant de Formule AI de Grist peut d\u00e9sormais g\u00e9rer des documents plus volumineux \u270b Les widgets personnalis\u00e9s affichent d\u00e9sormais un avertissement plus agr\u00e9able lorsque les colonnes requises ne sont pas mapp\u00e9es Points forts de la communaut\u00e9 # Pr\u00e9sentation \u00e9clair \u00e0 FOSDEM \u26a1\ufe0f # Le contributeur de Grist et membre de l\u2019ANCT Florent a donn\u00e9 une excellente pr\u00e9sentation \u00e9clair \u00e0 la conf\u00e9rence FOSDEM de cette ann\u00e9e. Widget de visualisation d\u2019arbre \ud83c\udf32 # L\u2019inimitable jperon (qui fera une autre apparition) a partag\u00e9 un widget tr\u00e8s astucieux pour visualiser des donn\u00e9es hi\u00e9rarchiques (comme un organigramme, par exemple). Il a m\u00eame un lien de curseur bidirectionnel ! D\u00e9couvrez-le ! Impression de rapports DOCX \ud83d\udcc4 # En utilisant docxtemplater , TomNit a partag\u00e9 un widget mis \u00e0 jour qui permet \u00e0 Grist de traiter des fichiers .docx mod\u00e9lis\u00e9s, vous permettant essentiellement de g\u00e9n\u00e9rer des documents \u00e0 partir des donn\u00e9es de Grist. \ud83e\udd2f D\u00e9couvrez le code source complet sur GitHub . Widget de signature \u270d\ufe0f # Merci encore \u00e0 jperon (et bien s\u00fbr aux autres d\u00e9veloppeurs JS open-source qui rendent ces exp\u00e9riences possibles), nous avons vu une preuve de concept d\u2019un widget de collecte de signatures qui est trop amusant. Listes d\u00e9roulantes de r\u00e9f\u00e9rence dynamiques dans Grist \ud83d\udd0e # Rogerio_Penna a r\u00e9dig\u00e9 un guide d\u00e9taill\u00e9 sur le Forum Communautaire d\u00e9crivant sa solution pour avoir des listes d\u00e9roulantes filtr\u00e9es/dynamiques. Avez-vous d\u00e9j\u00e0 voulu que les options d\u2019une colonne de r\u00e9f\u00e9rence soient filtr\u00e9es par une autre colonne de r\u00e9f\u00e9rence ? Ce n\u2019est pas un cas d\u2019utilisation rare, et Rogerio a trouv\u00e9 un moyen de le faire avec le widget personnalis\u00e9 de bouton d\u2019action (sur lequel la communaut\u00e9 a \u00e9galement travaill\u00e9 ). Navigation simple par menu avec hyperliens \ud83d\ude80 # Peter_P_Breithaupt, partiellement inspir\u00e9 par la puissante fonction SELF_HYPERLINK() de Grist , a cr\u00e9\u00e9 une exploration approfondie des avantages de l\u2019utilisation des hyperliens de navigation sur de grandes tables plates. Plus important encore, comment vous pouvez garder le m\u00eame enregistrement actif lors du passage d\u2019une page \u00e0 l\u2019autre ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ! Apprendre Grist # Webinaire : Contr\u00f4ler le chaos des feuilles de calcul # En mars, nous verrons comment Grist peut contenir la prolif\u00e9ration des feuilles de calcul. Comme lors de notre pr\u00e9c\u00e9dent webinaire Grist/Excel , nous verrons comment Grist est con\u00e7u pour \u00e9viter bon nombre des probl\u00e8mes tr\u00e8s familiers associ\u00e9s aux flux de travail des feuilles de calcul, tels que la fusion et la normalisation. Jeudi 21 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS Formulaires ! # En f\u00e9vrier, nous avons c\u00e9l\u00e9br\u00e9 notre amour des formulaires ! Nous avons appris \u00e0 cr\u00e9er un beau formulaire et \u00e0 collecter des donn\u00e9es qui rempliront une table de donn\u00e9es Grist lors de la soumission. REGARDER L\u2019ENREGISTREMENT DE F\u00c9VRIER Aidez \u00e0 faire conna\u00eetre Grist # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/02"},{"location":"newsletters/2024-02/#bulletin-de-fevrier-2024","text":"/* r\u00e9tablir certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill F\u00e9vrier 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de F\u00e9vrier 2024"},{"location":"newsletters/2024-02/#grist-recrute","text":"Venez travailler avec nous et aidez \u00e0 am\u00e9liorer Grist. Note : les deux candidatures impliquent des \u00e9nigmes. \ud83e\udee1 R\u00e9dacteur de contenu Ing\u00e9nieur syst\u00e8mes","title":"Grist recrute !"},{"location":"newsletters/2024-02/#quoi-de-neuf","text":"Ce mois-ci, nous avons constat\u00e9 une \u00e9norme augmentation de l\u2019activit\u00e9 communautaire, ce qui est incroyablement excitant. Nous ne pouvons pas assez dire \u00e0 quel point il est motivant de voir des utilisateurs sur Discord ou le Forum Communautaire cr\u00e9er des choses cool et utiles dans Grist. Mais nous ne pouvons pas vous laisser tout le plaisir - nous avons \u00e9t\u00e9 tr\u00e8s occup\u00e9s en coulisses. Voici quelques \u00e9l\u00e9ments qui ont \u00e9t\u00e9 livr\u00e9s le mois dernier, mais gardez les yeux ouverts pour plus dans un avenir proche. \ud83d\udc40","title":"Quoi de neuf"},{"location":"newsletters/2024-02/#ameliorations-diverses","text":"\ud83d\uddd3\ufe0f Les \u00e9v\u00e9nements du calendrier s\u2019ouvrent d\u00e9sormais dans les vues fiches en double-cliquant \ud83d\uddbc\ufe0f Le widget de visualisation d\u2019images personnalis\u00e9 peut d\u00e9sormais afficher un carrousel si plusieurs URL sont d\u00e9tect\u00e9es \ud83e\udee8 Le widget Markdown enregistre par d\u00e9faut lorsque vous perdez le focus \ud83e\udd16 L\u2019 Assistant de Formule AI de Grist peut d\u00e9sormais g\u00e9rer des documents plus volumineux \u270b Les widgets personnalis\u00e9s affichent d\u00e9sormais un avertissement plus agr\u00e9able lorsque les colonnes requises ne sont pas mapp\u00e9es","title":"Am\u00e9liorations diverses"},{"location":"newsletters/2024-02/#points-forts-de-la-communaute","text":"","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-02/#presentation-eclair-a-fosdem","text":"Le contributeur de Grist et membre de l\u2019ANCT Florent a donn\u00e9 une excellente pr\u00e9sentation \u00e9clair \u00e0 la conf\u00e9rence FOSDEM de cette ann\u00e9e.","title":"Pr\u00e9sentation \u00e9clair \u00e0 FOSDEM \u26a1\ufe0f"},{"location":"newsletters/2024-02/#widget-de-visualisation-darbre","text":"L\u2019inimitable jperon (qui fera une autre apparition) a partag\u00e9 un widget tr\u00e8s astucieux pour visualiser des donn\u00e9es hi\u00e9rarchiques (comme un organigramme, par exemple). Il a m\u00eame un lien de curseur bidirectionnel ! D\u00e9couvrez-le !","title":"Widget de visualisation d’arbre \ud83c\udf32"},{"location":"newsletters/2024-02/#impression-de-rapports-docx","text":"En utilisant docxtemplater , TomNit a partag\u00e9 un widget mis \u00e0 jour qui permet \u00e0 Grist de traiter des fichiers .docx mod\u00e9lis\u00e9s, vous permettant essentiellement de g\u00e9n\u00e9rer des documents \u00e0 partir des donn\u00e9es de Grist. \ud83e\udd2f D\u00e9couvrez le code source complet sur GitHub .","title":"Impression de rapports DOCX \ud83d\udcc4"},{"location":"newsletters/2024-02/#widget-de-signature","text":"Merci encore \u00e0 jperon (et bien s\u00fbr aux autres d\u00e9veloppeurs JS open-source qui rendent ces exp\u00e9riences possibles), nous avons vu une preuve de concept d\u2019un widget de collecte de signatures qui est trop amusant.","title":"Widget de signature \u270d\ufe0f"},{"location":"newsletters/2024-02/#listes-deroulantes-de-reference-dynamiques-dans-grist","text":"Rogerio_Penna a r\u00e9dig\u00e9 un guide d\u00e9taill\u00e9 sur le Forum Communautaire d\u00e9crivant sa solution pour avoir des listes d\u00e9roulantes filtr\u00e9es/dynamiques. Avez-vous d\u00e9j\u00e0 voulu que les options d\u2019une colonne de r\u00e9f\u00e9rence soient filtr\u00e9es par une autre colonne de r\u00e9f\u00e9rence ? Ce n\u2019est pas un cas d\u2019utilisation rare, et Rogerio a trouv\u00e9 un moyen de le faire avec le widget personnalis\u00e9 de bouton d\u2019action (sur lequel la communaut\u00e9 a \u00e9galement travaill\u00e9 ).","title":"Listes d\u00e9roulantes de r\u00e9f\u00e9rence dynamiques dans Grist \ud83d\udd0e"},{"location":"newsletters/2024-02/#navigation-simple-par-menu-avec-hyperliens","text":"Peter_P_Breithaupt, partiellement inspir\u00e9 par la puissante fonction SELF_HYPERLINK() de Grist , a cr\u00e9\u00e9 une exploration approfondie des avantages de l\u2019utilisation des hyperliens de navigation sur de grandes tables plates. Plus important encore, comment vous pouvez garder le m\u00eame enregistrement actif lors du passage d\u2019une page \u00e0 l\u2019autre ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase !","title":"Navigation simple par menu avec hyperliens \ud83d\ude80"},{"location":"newsletters/2024-02/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-02/#webinaire-controler-le-chaos-des-feuilles-de-calcul","text":"En mars, nous verrons comment Grist peut contenir la prolif\u00e9ration des feuilles de calcul. Comme lors de notre pr\u00e9c\u00e9dent webinaire Grist/Excel , nous verrons comment Grist est con\u00e7u pour \u00e9viter bon nombre des probl\u00e8mes tr\u00e8s familiers associ\u00e9s aux flux de travail des feuilles de calcul, tels que la fusion et la normalisation. Jeudi 21 mars \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MARS","title":"Webinaire : Contr\u00f4ler le chaos des feuilles de calcul"},{"location":"newsletters/2024-02/#formulaires","text":"En f\u00e9vrier, nous avons c\u00e9l\u00e9br\u00e9 notre amour des formulaires ! Nous avons appris \u00e0 cr\u00e9er un beau formulaire et \u00e0 collecter des donn\u00e9es qui rempliront une table de donn\u00e9es Grist lors de la soumission. REGARDER L\u2019ENREGISTREMENT DE F\u00c9VRIER","title":"Formulaires !"},{"location":"newsletters/2024-02/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-02/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-03/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mars 2024 # /* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mars 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Am\u00e9liorations des formulaires Grist # Sections Vous pouvez maintenant ajouter des sections aux formulaires Grist. Pour ajouter une section \u00e0 votre formulaire, cliquez sur le bouton Ajouter Nouveau en bas de chaque section, puis cliquez sur \u00ab Ins\u00e9rer une section au-dessus \u00bb ou \u00ab Ins\u00e9rer une section en dessous \u00bb. Choix et s\u00e9lection de r\u00e9f\u00e9rence Lors de la saisie d\u2019un formulaire, vous pouvez maintenant rechercher des valeurs dans les champs de choix et de s\u00e9lection de r\u00e9f\u00e9rence longs, ce qui facilite la recherche de l\u2019option exacte que vous recherchez. Code d\u2019int\u00e9gration rapide Si vous souhaitez int\u00e9grer un formulaire sur votre site web, cliquez sur l\u2019ic\u00f4ne de partage puis \u00ab Int\u00e9grer ce formulaire \u00bb pour r\u00e9v\u00e9ler un code d\u2019int\u00e9gration. R\u00e9initialiser le formulaire Un nouveau bouton \u00ab R\u00e9initialiser \u00bb est maintenant disponible sur les formulaires publi\u00e9s afin que les preneurs de formulaire puissent r\u00e9initialiser un formulaire \u00e0 son \u00e9tat initial. Importations et exportations - deux nouveaux formats de fichiers ! # Valeurs S\u00e9par\u00e9es par DOO (DSV) Votre tableur peut-il faire DOO ? Le format Valeurs S\u00e9par\u00e9es par DOO (DSV) est une am\u00e9lioration importante des Valeurs S\u00e9par\u00e9es par des Virgules (CSV), et est maintenant pris en charge pour l\u2019importation et l\u2019exportation par Grist. DSV utilise un caract\u00e8re sp\u00e9cial du plan astral Unicode comme s\u00e9parateur, pour mieux prot\u00e9ger l\u2019int\u00e9grit\u00e9 de vos donn\u00e9es. Apprenez comment. Cr\u00e9dits : DSV a \u00e9t\u00e9 initialement propos\u00e9 par Jamie Matthews . Nous avons suivi sa sp\u00e9cification \u00e0 la lettre, mais avons chang\u00e9 l\u2019extension de fichier pour \u00e9viter un conflit avec les Valeurs S\u00e9par\u00e9es par des Tubes (PSV). La valeur de ce caract\u00e8re sp\u00e9cifique du plan astral Unicode pour tester les logiciels a \u00e9t\u00e9 propos\u00e9e pour la premi\u00e8re fois par Mathias Bynens . Valeurs S\u00e9par\u00e9es par des Tabulations (TSV) Vous pouvez maintenant exporter et importer des donn\u00e9es au format Valeurs S\u00e9par\u00e9es par des Tabulations (TSV) depuis le menu Partager. Page de d\u00e9marrage Grist # Une version pr\u00e9coce d\u2019une page de diagnostic pour Grist auto-h\u00e9berg\u00e9 est maintenant disponible. Apprenez comment l\u2019activer. Migration depuis Spreadsheet.com # Nous avons cr\u00e9\u00e9 un outil pour vous aider \u00e0 migrer vos donn\u00e9es Spreadsheet.com vers Grist, y compris les pi\u00e8ces jointes et les relations, sans avoir besoin de t\u00e9l\u00e9charger et de t\u00e9l\u00e9verser manuellement vos fichiers. D\u00e9couvrez-le ici ! Points forts de la communaut\u00e9 # @tomnitschke a cr\u00e9\u00e9 de nouveaux widgets personnalis\u00e9s, y compris Un widget d\u2019action automatique qui vous permet d\u2019ex\u00e9cuter automatiquement des actions utilisateur au chargement de la page Un widget pour visualiser des fichiers PDF et ODT/ODF directement dans le navigateur Un widget pour cr\u00e9er des fichiers DOCX ou PDF \u00e0 partir de HTML ou Markdown Vous pouvez les trouver tous sur Github. @jonathanperret a cr\u00e9\u00e9 un widget personnalis\u00e9 qui int\u00e8gre paysage - un terrain de jeu de codage collaboratif et visuel - dans un document Grist. Euh, c\u2019est incroyable ? Regardez la vid\u00e9o compl\u00e8te ici . Apprendre Grist # Webinaire : Meilleures pratiques de l\u2019assistant de formule AI # L\u2019assistant de formule AI de Grist simplifie la partie la plus difficile des tableurs \u2014 les formules. Lors du webinaire d\u2019avril, nous partagerons des conseils sur la fa\u00e7on de tirer le meilleur parti de l\u2019assistant. Jeudi 25 avril \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019AVRIL Contr\u00f4ler le chaos des tableurs # En mars, nous avons vu comment Grist peut contenir la prolif\u00e9ration des tableurs. Similaire \u00e0 notre pr\u00e9c\u00e9dent webinaire Grist/Excel , nous examinons comment Grist est con\u00e7u pour \u00e9viter bon nombre des probl\u00e8mes tr\u00e8s familiers associ\u00e9s aux flux de travail des tableurs, tels que la fusion et la normalisation. REGARDER L\u2019ENREGISTREMENT DE MARS Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Consultez notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/03"},{"location":"newsletters/2024-03/#bulletin-de-mars-2024","text":"/* restaurer certains param\u00e8tres par d\u00e9faut mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mars 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mars 2024"},{"location":"newsletters/2024-03/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-03/#ameliorations-des-formulaires-grist","text":"Sections Vous pouvez maintenant ajouter des sections aux formulaires Grist. Pour ajouter une section \u00e0 votre formulaire, cliquez sur le bouton Ajouter Nouveau en bas de chaque section, puis cliquez sur \u00ab Ins\u00e9rer une section au-dessus \u00bb ou \u00ab Ins\u00e9rer une section en dessous \u00bb. Choix et s\u00e9lection de r\u00e9f\u00e9rence Lors de la saisie d\u2019un formulaire, vous pouvez maintenant rechercher des valeurs dans les champs de choix et de s\u00e9lection de r\u00e9f\u00e9rence longs, ce qui facilite la recherche de l\u2019option exacte que vous recherchez. Code d\u2019int\u00e9gration rapide Si vous souhaitez int\u00e9grer un formulaire sur votre site web, cliquez sur l\u2019ic\u00f4ne de partage puis \u00ab Int\u00e9grer ce formulaire \u00bb pour r\u00e9v\u00e9ler un code d\u2019int\u00e9gration. R\u00e9initialiser le formulaire Un nouveau bouton \u00ab R\u00e9initialiser \u00bb est maintenant disponible sur les formulaires publi\u00e9s afin que les preneurs de formulaire puissent r\u00e9initialiser un formulaire \u00e0 son \u00e9tat initial.","title":"Am\u00e9liorations des formulaires Grist"},{"location":"newsletters/2024-03/#importations-et-exportations-deux-nouveaux-formats-de-fichiers","text":"Valeurs S\u00e9par\u00e9es par DOO (DSV) Votre tableur peut-il faire DOO ? Le format Valeurs S\u00e9par\u00e9es par DOO (DSV) est une am\u00e9lioration importante des Valeurs S\u00e9par\u00e9es par des Virgules (CSV), et est maintenant pris en charge pour l\u2019importation et l\u2019exportation par Grist. DSV utilise un caract\u00e8re sp\u00e9cial du plan astral Unicode comme s\u00e9parateur, pour mieux prot\u00e9ger l\u2019int\u00e9grit\u00e9 de vos donn\u00e9es. Apprenez comment. Cr\u00e9dits : DSV a \u00e9t\u00e9 initialement propos\u00e9 par Jamie Matthews . Nous avons suivi sa sp\u00e9cification \u00e0 la lettre, mais avons chang\u00e9 l\u2019extension de fichier pour \u00e9viter un conflit avec les Valeurs S\u00e9par\u00e9es par des Tubes (PSV). La valeur de ce caract\u00e8re sp\u00e9cifique du plan astral Unicode pour tester les logiciels a \u00e9t\u00e9 propos\u00e9e pour la premi\u00e8re fois par Mathias Bynens . Valeurs S\u00e9par\u00e9es par des Tabulations (TSV) Vous pouvez maintenant exporter et importer des donn\u00e9es au format Valeurs S\u00e9par\u00e9es par des Tabulations (TSV) depuis le menu Partager.","title":"Importations et exportations - deux nouveaux formats de fichiers !"},{"location":"newsletters/2024-03/#page-de-demarrage-grist","text":"Une version pr\u00e9coce d\u2019une page de diagnostic pour Grist auto-h\u00e9berg\u00e9 est maintenant disponible. Apprenez comment l\u2019activer.","title":"Page de d\u00e9marrage Grist"},{"location":"newsletters/2024-03/#migration-depuis-spreadsheetcom","text":"Nous avons cr\u00e9\u00e9 un outil pour vous aider \u00e0 migrer vos donn\u00e9es Spreadsheet.com vers Grist, y compris les pi\u00e8ces jointes et les relations, sans avoir besoin de t\u00e9l\u00e9charger et de t\u00e9l\u00e9verser manuellement vos fichiers. D\u00e9couvrez-le ici !","title":"Migration depuis Spreadsheet.com"},{"location":"newsletters/2024-03/#points-forts-de-la-communaute","text":"@tomnitschke a cr\u00e9\u00e9 de nouveaux widgets personnalis\u00e9s, y compris Un widget d\u2019action automatique qui vous permet d\u2019ex\u00e9cuter automatiquement des actions utilisateur au chargement de la page Un widget pour visualiser des fichiers PDF et ODT/ODF directement dans le navigateur Un widget pour cr\u00e9er des fichiers DOCX ou PDF \u00e0 partir de HTML ou Markdown Vous pouvez les trouver tous sur Github. @jonathanperret a cr\u00e9\u00e9 un widget personnalis\u00e9 qui int\u00e8gre paysage - un terrain de jeu de codage collaboratif et visuel - dans un document Grist. Euh, c\u2019est incroyable ? Regardez la vid\u00e9o compl\u00e8te ici .","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-03/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-03/#webinaire-meilleures-pratiques-de-lassistant-de-formule-ai","text":"L\u2019assistant de formule AI de Grist simplifie la partie la plus difficile des tableurs \u2014 les formules. Lors du webinaire d\u2019avril, nous partagerons des conseils sur la fa\u00e7on de tirer le meilleur parti de l\u2019assistant. Jeudi 25 avril \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019AVRIL","title":"Webinaire : Meilleures pratiques de l’assistant de formule AI"},{"location":"newsletters/2024-03/#controler-le-chaos-des-tableurs","text":"En mars, nous avons vu comment Grist peut contenir la prolif\u00e9ration des tableurs. Similaire \u00e0 notre pr\u00e9c\u00e9dent webinaire Grist/Excel , nous examinons comment Grist est con\u00e7u pour \u00e9viter bon nombre des probl\u00e8mes tr\u00e8s familiers associ\u00e9s aux flux de travail des tableurs, tels que la fusion et la normalisation. REGARDER L\u2019ENREGISTREMENT DE MARS","title":"Contr\u00f4ler le chaos des tableurs"},{"location":"newsletters/2024-03/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-03/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit avec un expert du programme Sprouts pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Consultez notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-04/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin d\u2019Avril 2024 # /* restaurer quelques d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist. Promouvoir vos solutions construites dans Grist # Certains utilisateurs nous ont demand\u00e9 comment ils pouvaient vendre les solutions qu\u2019ils ont construites dans Grist. Souvent, ils sont experts dans un probl\u00e8me particulier, l\u2019ont r\u00e9solu dans Grist, et veulent aider les autres \u00e0 le r\u00e9soudre aussi. Avant de construire notre propre marketplace Grist, nous voulons exp\u00e9rimenter sur une marketplace existante pour les mod\u00e8les et services de solutions \u2014 Gumroad : https://gumroad.com/ Si vous \u00eates int\u00e9ress\u00e9 par la vente de solutions Grist, nous aimerions collaborer avec vous. Rejoignez notre Discord et partagez vos id\u00e9es dans le canal #sellers. EN SAVOIR PLUS SUR DISCORD Quoi de neuf # Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix # Lors de la saisie de donn\u00e9es dans une colonne de r\u00e9f\u00e9rence ou de choix, vous voyez une liste d\u00e9roulante de toutes les valeurs disponibles \u00e0 choisir. Parfois, la liste peut devenir longue ou confuse. Vous pouvez maintenant filtrer les listes d\u00e9roulantes des colonnes de r\u00e9f\u00e9rence et de choix en d\u00e9finissant une condition. Apprenez comment. Raccourci pour utiliser comme en-t\u00eates de table # Souvent, lors de l\u2019importation de donn\u00e9es d\u2019Excel vers Grist, la premi\u00e8re ligne contient ce qui devrait \u00eatre les en-t\u00eates de colonne. D\u00e9finir manuellement les en-t\u00eates de colonne corrects peut \u00eatre chronophage, mais plus maintenant ! Merci \u00e0 Camille Legeron ( @CamilleLegeron ) de l\u2019\u00e9quipe ANCT qui a ajout\u00e9 un raccourci astucieux pour copier les valeurs d\u2019une ligne vers les \u00e9tiquettes de leurs colonnes respectives. \ud83e\udd29 Cr\u00e9er de nouveaux espaces d\u2019\u00e9quipe dans Grist auto-h\u00e9berg\u00e9 # Merci encore \u00e0 Camille Legeron qui a rendu possible la cr\u00e9ation d\u2019espaces d\u2019\u00e9quipe suppl\u00e9mentaires dans Grist auto-h\u00e9berg\u00e9. Pour cr\u00e9er un nouvel espace, s\u00e9lectionnez \u00ab Cr\u00e9er un nouvel espace d\u2019\u00e9quipe \u00bb dans le menu utilisateur ou site, sp\u00e9cifiez le nom et le domaine du nouvel espace, et cliquez sur \u00ab Cr\u00e9er l\u2019espace \u00bb. Console d\u2019administration pour les auto-h\u00e9bergeurs # La console d\u2019administration pour les auto-h\u00e9bergeurs inclut d\u00e9sormais des informations sur les param\u00e8tres de sandbox et une case \u00e0 cocher pour v\u00e9rifier automatiquement les mises \u00e0 jour des versions de Grist. \ud83c\udf89 Am\u00e9liorations du r\u00e9seau # Le contributeur Jonathan Perret ( @jonathanperret ) a mis en \u0153uvre un m\u00e9canisme de secours pour les r\u00e9seaux o\u00f9 le trafic WebSocket n\u2019est pas autoris\u00e9. Si vous ou un coll\u00e8gue avez eu des difficult\u00e9s \u00e0 utiliser Grist derri\u00e8re un r\u00e9seau d\u2019entreprise dans le pass\u00e9, essayez \u00e0 nouveau ! Points forts de la communaut\u00e9 # @v1adimirn0va a construit un widget personnalis\u00e9 qui affiche les donn\u00e9es sur une chronologie. Si vous \u00eates sur notre serveur Discord, consultez-le ici ! Si vous n\u2019\u00eates pas sur notre Discord, rejoignez notre serveur ! Andreas Kl\u00f6ckner ( @inducer sur Github) a construit un outil pour collecter les r\u00e9ponses de formulaire et les enregistrer dans des enregistrements existants dans un document Grist. Consultez-le ici ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre canal Discord #grist-showcase ! Apprendre Grist # Webinaire : Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix # Le filtrage de la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence ou de choix est tr\u00e8s utile dans une vari\u00e9t\u00e9 de cas. En mai, nous vous montrerons comment \u00e9crire des formules de condition de liste d\u00e9roulante pour les sc\u00e9narios les plus courants. Jeudi 16 mai \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI Meilleures pratiques de l\u2019assistant de formule AI # En avril, nous avons couvert l\u2019assistant de formule AI de Grist qui simplifie la partie la plus difficile des feuilles de calcul \u2014 les formules. Dans ce webinaire, nous partageons des conseils sur la fa\u00e7on de tirer le meilleur parti de l\u2019assistant. C\u2019\u00e9tait aussi la premi\u00e8re fois que Michael animait un webinaire ! Michael a rejoint l\u2019\u00e9quipe Grist en tant qu\u2019ing\u00e9nieur solutions en mars. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL Migrer depuis Spreadsheet.com # Au cas o\u00f9 vous l\u2019auriez manqu\u00e9, en mars nous avons construit un outil pour vous aider \u00e0 migrer vos donn\u00e9es Spreadsheet.com vers Grist, y compris les pi\u00e8ces jointes et les relations, sans avoir besoin de t\u00e9l\u00e9charger et de t\u00e9l\u00e9charger manuellement vos fichiers. Consultez-le ici ! Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit Sprouts avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/04"},{"location":"newsletters/2024-04/#bulletin-davril-2024","text":"/* restaurer quelques d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Avril 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et conseils pour les utilisateurs de Grist.","title":"Bulletin d’Avril 2024"},{"location":"newsletters/2024-04/#promouvoir-vos-solutions-construites-dans-grist","text":"Certains utilisateurs nous ont demand\u00e9 comment ils pouvaient vendre les solutions qu\u2019ils ont construites dans Grist. Souvent, ils sont experts dans un probl\u00e8me particulier, l\u2019ont r\u00e9solu dans Grist, et veulent aider les autres \u00e0 le r\u00e9soudre aussi. Avant de construire notre propre marketplace Grist, nous voulons exp\u00e9rimenter sur une marketplace existante pour les mod\u00e8les et services de solutions \u2014 Gumroad : https://gumroad.com/ Si vous \u00eates int\u00e9ress\u00e9 par la vente de solutions Grist, nous aimerions collaborer avec vous. Rejoignez notre Discord et partagez vos id\u00e9es dans le canal #sellers. EN SAVOIR PLUS SUR DISCORD","title":"Promouvoir vos solutions construites dans Grist"},{"location":"newsletters/2024-04/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-04/#filtrage-des-listes-deroulantes-de-reference-et-de-choix","text":"Lors de la saisie de donn\u00e9es dans une colonne de r\u00e9f\u00e9rence ou de choix, vous voyez une liste d\u00e9roulante de toutes les valeurs disponibles \u00e0 choisir. Parfois, la liste peut devenir longue ou confuse. Vous pouvez maintenant filtrer les listes d\u00e9roulantes des colonnes de r\u00e9f\u00e9rence et de choix en d\u00e9finissant une condition. Apprenez comment.","title":"Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix"},{"location":"newsletters/2024-04/#raccourci-pour-utiliser-comme-en-tetes-de-table","text":"Souvent, lors de l\u2019importation de donn\u00e9es d\u2019Excel vers Grist, la premi\u00e8re ligne contient ce qui devrait \u00eatre les en-t\u00eates de colonne. D\u00e9finir manuellement les en-t\u00eates de colonne corrects peut \u00eatre chronophage, mais plus maintenant ! Merci \u00e0 Camille Legeron ( @CamilleLegeron ) de l\u2019\u00e9quipe ANCT qui a ajout\u00e9 un raccourci astucieux pour copier les valeurs d\u2019une ligne vers les \u00e9tiquettes de leurs colonnes respectives. \ud83e\udd29","title":"Raccourci pour utiliser comme en-t\u00eates de table"},{"location":"newsletters/2024-04/#creer-de-nouveaux-espaces-dequipe-dans-grist-auto-heberge","text":"Merci encore \u00e0 Camille Legeron qui a rendu possible la cr\u00e9ation d\u2019espaces d\u2019\u00e9quipe suppl\u00e9mentaires dans Grist auto-h\u00e9berg\u00e9. Pour cr\u00e9er un nouvel espace, s\u00e9lectionnez \u00ab Cr\u00e9er un nouvel espace d\u2019\u00e9quipe \u00bb dans le menu utilisateur ou site, sp\u00e9cifiez le nom et le domaine du nouvel espace, et cliquez sur \u00ab Cr\u00e9er l\u2019espace \u00bb.","title":"Cr\u00e9er de nouveaux espaces d’\u00e9quipe dans Grist auto-h\u00e9berg\u00e9"},{"location":"newsletters/2024-04/#console-dadministration-pour-les-auto-hebergeurs","text":"La console d\u2019administration pour les auto-h\u00e9bergeurs inclut d\u00e9sormais des informations sur les param\u00e8tres de sandbox et une case \u00e0 cocher pour v\u00e9rifier automatiquement les mises \u00e0 jour des versions de Grist. \ud83c\udf89","title":"Console d’administration pour les auto-h\u00e9bergeurs"},{"location":"newsletters/2024-04/#ameliorations-du-reseau","text":"Le contributeur Jonathan Perret ( @jonathanperret ) a mis en \u0153uvre un m\u00e9canisme de secours pour les r\u00e9seaux o\u00f9 le trafic WebSocket n\u2019est pas autoris\u00e9. Si vous ou un coll\u00e8gue avez eu des difficult\u00e9s \u00e0 utiliser Grist derri\u00e8re un r\u00e9seau d\u2019entreprise dans le pass\u00e9, essayez \u00e0 nouveau !","title":"Am\u00e9liorations du r\u00e9seau"},{"location":"newsletters/2024-04/#points-forts-de-la-communaute","text":"@v1adimirn0va a construit un widget personnalis\u00e9 qui affiche les donn\u00e9es sur une chronologie. Si vous \u00eates sur notre serveur Discord, consultez-le ici ! Si vous n\u2019\u00eates pas sur notre Discord, rejoignez notre serveur ! Andreas Kl\u00f6ckner ( @inducer sur Github) a construit un outil pour collecter les r\u00e9ponses de formulaire et les enregistrer dans des enregistrements existants dans un document Grist. Consultez-le ici ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre canal Discord #grist-showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-04/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-04/#webinaire-filtrage-des-listes-deroulantes-de-reference-et-de-choix","text":"Le filtrage de la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence ou de choix est tr\u00e8s utile dans une vari\u00e9t\u00e9 de cas. En mai, nous vous montrerons comment \u00e9crire des formules de condition de liste d\u00e9roulante pour les sc\u00e9narios les plus courants. Jeudi 16 mai \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE MAI","title":"Webinaire : Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix"},{"location":"newsletters/2024-04/#meilleures-pratiques-de-lassistant-de-formule-ai","text":"En avril, nous avons couvert l\u2019assistant de formule AI de Grist qui simplifie la partie la plus difficile des feuilles de calcul \u2014 les formules. Dans ce webinaire, nous partageons des conseils sur la fa\u00e7on de tirer le meilleur parti de l\u2019assistant. C\u2019\u00e9tait aussi la premi\u00e8re fois que Michael animait un webinaire ! Michael a rejoint l\u2019\u00e9quipe Grist en tant qu\u2019ing\u00e9nieur solutions en mars. REGARDER L\u2019ENREGISTREMENT D\u2019AVRIL","title":"Meilleures pratiques de l’assistant de formule AI"},{"location":"newsletters/2024-04/#migrer-depuis-spreadsheetcom","text":"Au cas o\u00f9 vous l\u2019auriez manqu\u00e9, en mars nous avons construit un outil pour vous aider \u00e0 migrer vos donn\u00e9es Spreadsheet.com vers Grist, y compris les pi\u00e8ces jointes et les relations, sans avoir besoin de t\u00e9l\u00e9charger et de t\u00e9l\u00e9charger manuellement vos fichiers. Consultez-le ici !","title":"Migrer depuis Spreadsheet.com"},{"location":"newsletters/2024-04/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-04/#nous-sommes-la-pour-vous-soutenir","text":"Programme Sprouts. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit Sprouts avec un expert pour voir si Grist peut r\u00e9pondre \u00e0 vos besoins. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-05/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Mai 2024 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Nouveau plan Grist Business # Nous avons travaill\u00e9 dur pour nous assurer que Grist convient aux \u00e9quipes plus importantes avec des donn\u00e9es complexes et sensibles. Pour r\u00e9pondre \u00e0 ce segment, nous avons mis \u00e0 jour notre page de tarification pour inclure un nouveau plan Business \u2014 avec une saveur autog\u00e9r\u00e9e ! Nous esp\u00e9rons que ce nouveau plan augmentera la transparence des prix autour des d\u00e9ploiements de Grist qui pourraient utiliser davantage notre support, plut\u00f4t que d\u2019exiger des organisations qu\u2019elles nous contactent directement pour obtenir des informations sur les prix. Il y a aussi une nouvelle option pour s\u2019abonner annuellement. Les nouveaux abonnements Pro sont d\u00e9sormais \u00e0 10 $ sur le plan mensuel, mais toujours \u00e0 8 $ si vous payez annuellement. Les abonnements Pro existants ne sont pas affect\u00e9s par ce changement. Nous avons \u00e9galement mis \u00e0 jour notre page des services professionnels pour inclure de nouvelles opportunit\u00e9s concernant l\u2019obtention d\u2019une aide experte pour la cr\u00e9ation de documents Grist. Minuteur de formule # Assez, c\u2019est assez \u2013 il est temps de mettre vos formules \u00e0 l\u2019\u00e9preuve. \ud83c\udfc3\u200d\u2640\ufe0f\u23f1\ufe0f Il est courant de voir une feuille de calcul s\u2019effondrer sous son propre poids, comme une \u00e9toile mourante compos\u00e9e de conditionnels. M\u00eame les puissants documents Grist peuvent ralentir lorsque la puissance de Python n\u2019est pas contr\u00f4l\u00e9e. Mais maintenant, il existe un moyen de diagnostiquer vos formules avant que les choses ne deviennent supernova. Pr\u00e9sentation du minuteur de formule , qui vous permet de chronom\u00e9trer les formules pour des changements sp\u00e9cifiques ou pour un rechargement complet du document. Pour plus d\u2019informations, lisez tout sur l\u2019\u00e9conomie de millisecondes avec le minuteur de formule \u2014 \u00e9crit par l\u2019un des nouveaux membres de l\u2019\u00e9quipe Grist Labs, Jordan ! \ud83d\udc4b R\u00e9organisation des styles conditionnels (avec bonus de glissabilit\u00e9) # Vous pouvez d\u00e9sormais r\u00e9organiser facilement les styles conditionnels, \u00e0 la fois sur les lignes et les colonnes ! Ne demandez pas comment cela \u00e9tait accompli auparavant ! Am\u00e9liorations de la console d\u2019administration en auto-h\u00e9bergement # Notre nouvelle console d\u2019administration continue de cro\u00eetre et de se d\u00e9velopper alors que nous travaillons vers nos ambitions de faciliter l\u2019auto-h\u00e9bergement. \ud83d\udd1c La m\u00e9thode d\u2019authentification de l\u2019application est d\u00e9sormais incluse dans la section \u201cParam\u00e8tres de s\u00e9curit\u00e9\u201d. Si elle n\u2019est pas configur\u00e9e, vous serez averti. \u270b\ud83e\udd28 Les v\u00e9rifications du panneau de d\u00e9marrage sont d\u00e9sormais visibles (et \u00e9tendues/am\u00e9lior\u00e9es en fonction de vos retours !). Nous continuons \u00e0 it\u00e9rer sur ce point, alors faites-nous savoir sur Discord si vous avez d\u2019autres retours. Pour rendre le panneau plus robuste, il respecte d\u00e9sormais l\u2019acc\u00e8s d\u2019urgence via un param\u00e8tre GRIST_BOOT_KEY si l\u2019authentification est cass\u00e9e, et devrait m\u00eame \u00eatre utilisable si l\u2019application a des erreurs de configuration courantes. Cela signifie que vous pouvez compter sur le panneau d\u2019administration pour ne pas devenir inaccessible juste au moment o\u00f9 vous en avez le plus besoin ! Points forts de la communaut\u00e9 # marc.fargas a fourni \u00e0 notre communaut\u00e9 un guide d\u00e9taill\u00e9 de son pipeline Grist \u2192 rendu PDF. La solution n\u00e9cessite des services externes (qui peuvent ne pas \u00eatre enti\u00e8rement gratuits), mais c\u2019est un excellent exemple d\u2019extension de Grist. Riccardo_Polignieri a cr\u00e9\u00e9 un wrapper Python pour l\u2019API de Grist appel\u00e9 PyGrister ! Ajoutez plus de Python \u00e0 votre flux de travail ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre canal Discord #grist-showcase ! Apprendre Grist # Webinaire : Colonnes de r\u00e9f\u00e9rence # En juin, nous plongerons dans ce que sont les r\u00e9f\u00e9rences, comment les colonnes de r\u00e9f\u00e9rence fonctionnent dans Grist, et expliquerons comment les utiliser pour cr\u00e9er des tableaux de bord productifs en utilisant le mod\u00e8le de conf\u00e9renciers d\u2019\u00e9v\u00e9nements . Jeudi 20 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUIN Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix # En mai, Anais est revenue pour examiner comment le filtrage de la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence ou de choix est tr\u00e8s utile dans une vari\u00e9t\u00e9 de cas. D\u00e9couvrez comment tirer parti de l\u2019une des fonctionnalit\u00e9s les plus r\u00e9centes et les plus puissantes de Grist. REGARDER L\u2019ENREGISTREMENT DE MAI Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/05"},{"location":"newsletters/2024-05/#bulletin-de-mai-2024","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Mai 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Mai 2024"},{"location":"newsletters/2024-05/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-05/#nouveau-plan-grist-business","text":"Nous avons travaill\u00e9 dur pour nous assurer que Grist convient aux \u00e9quipes plus importantes avec des donn\u00e9es complexes et sensibles. Pour r\u00e9pondre \u00e0 ce segment, nous avons mis \u00e0 jour notre page de tarification pour inclure un nouveau plan Business \u2014 avec une saveur autog\u00e9r\u00e9e ! Nous esp\u00e9rons que ce nouveau plan augmentera la transparence des prix autour des d\u00e9ploiements de Grist qui pourraient utiliser davantage notre support, plut\u00f4t que d\u2019exiger des organisations qu\u2019elles nous contactent directement pour obtenir des informations sur les prix. Il y a aussi une nouvelle option pour s\u2019abonner annuellement. Les nouveaux abonnements Pro sont d\u00e9sormais \u00e0 10 $ sur le plan mensuel, mais toujours \u00e0 8 $ si vous payez annuellement. Les abonnements Pro existants ne sont pas affect\u00e9s par ce changement. Nous avons \u00e9galement mis \u00e0 jour notre page des services professionnels pour inclure de nouvelles opportunit\u00e9s concernant l\u2019obtention d\u2019une aide experte pour la cr\u00e9ation de documents Grist.","title":"Nouveau plan Grist Business"},{"location":"newsletters/2024-05/#minuteur-de-formule","text":"Assez, c\u2019est assez \u2013 il est temps de mettre vos formules \u00e0 l\u2019\u00e9preuve. \ud83c\udfc3\u200d\u2640\ufe0f\u23f1\ufe0f Il est courant de voir une feuille de calcul s\u2019effondrer sous son propre poids, comme une \u00e9toile mourante compos\u00e9e de conditionnels. M\u00eame les puissants documents Grist peuvent ralentir lorsque la puissance de Python n\u2019est pas contr\u00f4l\u00e9e. Mais maintenant, il existe un moyen de diagnostiquer vos formules avant que les choses ne deviennent supernova. Pr\u00e9sentation du minuteur de formule , qui vous permet de chronom\u00e9trer les formules pour des changements sp\u00e9cifiques ou pour un rechargement complet du document. Pour plus d\u2019informations, lisez tout sur l\u2019\u00e9conomie de millisecondes avec le minuteur de formule \u2014 \u00e9crit par l\u2019un des nouveaux membres de l\u2019\u00e9quipe Grist Labs, Jordan ! \ud83d\udc4b","title":"Minuteur de formule"},{"location":"newsletters/2024-05/#reorganisation-des-styles-conditionnels-avec-bonus-de-glissabilite","text":"Vous pouvez d\u00e9sormais r\u00e9organiser facilement les styles conditionnels, \u00e0 la fois sur les lignes et les colonnes ! Ne demandez pas comment cela \u00e9tait accompli auparavant !","title":"R\u00e9organisation des styles conditionnels (avec bonus de glissabilit\u00e9)"},{"location":"newsletters/2024-05/#ameliorations-de-la-console-dadministration-en-auto-hebergement","text":"Notre nouvelle console d\u2019administration continue de cro\u00eetre et de se d\u00e9velopper alors que nous travaillons vers nos ambitions de faciliter l\u2019auto-h\u00e9bergement. \ud83d\udd1c La m\u00e9thode d\u2019authentification de l\u2019application est d\u00e9sormais incluse dans la section \u201cParam\u00e8tres de s\u00e9curit\u00e9\u201d. Si elle n\u2019est pas configur\u00e9e, vous serez averti. \u270b\ud83e\udd28 Les v\u00e9rifications du panneau de d\u00e9marrage sont d\u00e9sormais visibles (et \u00e9tendues/am\u00e9lior\u00e9es en fonction de vos retours !). Nous continuons \u00e0 it\u00e9rer sur ce point, alors faites-nous savoir sur Discord si vous avez d\u2019autres retours. Pour rendre le panneau plus robuste, il respecte d\u00e9sormais l\u2019acc\u00e8s d\u2019urgence via un param\u00e8tre GRIST_BOOT_KEY si l\u2019authentification est cass\u00e9e, et devrait m\u00eame \u00eatre utilisable si l\u2019application a des erreurs de configuration courantes. Cela signifie que vous pouvez compter sur le panneau d\u2019administration pour ne pas devenir inaccessible juste au moment o\u00f9 vous en avez le plus besoin !","title":"Am\u00e9liorations de la console d’administration en auto-h\u00e9bergement"},{"location":"newsletters/2024-05/#points-forts-de-la-communaute","text":"marc.fargas a fourni \u00e0 notre communaut\u00e9 un guide d\u00e9taill\u00e9 de son pipeline Grist \u2192 rendu PDF. La solution n\u00e9cessite des services externes (qui peuvent ne pas \u00eatre enti\u00e8rement gratuits), mais c\u2019est un excellent exemple d\u2019extension de Grist. Riccardo_Polignieri a cr\u00e9\u00e9 un wrapper Python pour l\u2019API de Grist appel\u00e9 PyGrister ! Ajoutez plus de Python \u00e0 votre flux de travail ! Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre canal Discord #grist-showcase !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-05/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-05/#webinaire-colonnes-de-reference","text":"En juin, nous plongerons dans ce que sont les r\u00e9f\u00e9rences, comment les colonnes de r\u00e9f\u00e9rence fonctionnent dans Grist, et expliquerons comment les utiliser pour cr\u00e9er des tableaux de bord productifs en utilisant le mod\u00e8le de conf\u00e9renciers d\u2019\u00e9v\u00e9nements . Jeudi 20 juin \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUIN","title":"Webinaire : Colonnes de r\u00e9f\u00e9rence"},{"location":"newsletters/2024-05/#filtrage-des-listes-deroulantes-de-reference-et-de-choix","text":"En mai, Anais est revenue pour examiner comment le filtrage de la liste d\u00e9roulante d\u2019une colonne de r\u00e9f\u00e9rence ou de choix est tr\u00e8s utile dans une vari\u00e9t\u00e9 de cas. D\u00e9couvrez comment tirer parti de l\u2019une des fonctionnalit\u00e9s les plus r\u00e9centes et les plus puissantes de Grist. REGARDER L\u2019ENREGISTREMENT DE MAI","title":"Filtrage des listes d\u00e9roulantes de r\u00e9f\u00e9rence et de choix"},{"location":"newsletters/2024-05/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-05/#nous-sommes-la-pour-vous-soutenir","text":"Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des retours ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Communaut\u00e9 , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-06/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juin 2024 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Encore un mois o\u00f9 la communaut\u00e9 Grist nous offre une multitude de contributions cool, pour lesquelles nous sommes constamment reconnaissants. Gardez un \u0153il sur certaines choses sensationnelles que nous mijotons pour cet \u00e9t\u00e9. \u2600\ufe0f Nouveaux mod\u00e8les de recherche \ud83d\udc69\u200d\ud83d\udd2c # Nous avons cr\u00e9\u00e9 trois nouveaux mod\u00e8les sp\u00e9cialement pour les laboratoires de recherche . Ce n\u2019est pas une co\u00efncidence, car nous continuons d\u2019entendre des scientifiques et des techniciens qui trouvent que Grist est un ajout bienvenu \u00e0 leur pile logicielle. \ud83e\uddea Gestion des \u00e9chantillons \ud83d\udccb Gestion de projet \ud83d\udce6 Gestion des stocks Auto-h\u00e9bergeurs : vous pouvez maintenant ex\u00e9cuter Grist sans privil\u00e8ges root # Il est maintenant beaucoup plus facile de passer de gVisor \u00e0 la sandbox Pyodide , ce qui vous permet d\u2019ex\u00e9cuter un conteneur Grist en tant qu\u2019utilisateur r\u00e9gulier sans privil\u00e8ges administratifs. Voir cette PR pour tous les d\u00e9tails. Grist Desktop a \u00e9t\u00e9 mis \u00e0 jour (et renomm\u00e9) ! # Grist Desktop (anciennement Grist Electron) a re\u00e7u une mise \u00e0 jour significative ! Il y a une nouvelle version portable pour Windows, ainsi que des corrections de bugs et une mise \u00e0 jour de grist-core . Consultez les notes de version compl\u00e8tes et t\u00e9l\u00e9chargez Grist Desktop sur GitHub . Attendez-vous \u00e0 plus de nouvelles sur Grist Desktop dans les prochains mois\u2026 \ud83d\udc40 Points forts de la communaut\u00e9 # Mise \u00e0 jour de la traduction # Les traductions en finnois, vietnamien, bulgare et slovaque sont bien avanc\u00e9es ! Un grand merci \u00e0 tous nos contributeurs, et voir ici pour plus d\u2019informations sur l\u2019aide \u00e0 la traduction de Grist. OpenAPI \ud83e\udd1d Grist # En haut de la console API de Grist se trouve un lien vers un fichier YML contenant la sp\u00e9cification OpenAPI de Grist (notez, pas OpenAI). Nous sommes ravis de le voir utilis\u00e9 dans certains projets communautaires passionnants : grist-js de ben-pr-p, un nouveau client TypeScript. Int\u00e9gration GraphQL de yala1 utilisant Hasura. Interface de chat Grist avec listes de cartes \ud83d\udcac # Sur Discord , celine de france a partag\u00e9 une impl\u00e9mentation novatrice de listes de cartes fonctionnant comme une fonctionnalit\u00e9 native de chat/commentaires dans Grist, compl\u00e8te avec des accus\u00e9s de lecture manuels et des r\u00e9actions emoji. \u2705\ud83d\udc4d Cr\u00e9ations de widgets personnalis\u00e9s \ud83e\udde9 # Le modeste widget de visualisation HTML rec\u00e8le bien des secrets. nicobako a d\u00e9couvert que vous pouvez ex\u00e9cuter des scripts comme Mermaid.js pour cr\u00e9er des graphiques et des diagrammes sophistiqu\u00e9s. Vous pouvez maintenant faire en sorte que le widget de bloc-notes personnalis\u00e9 exporte du HTML classique vers une autre colonne, gr\u00e2ce \u00e0 la PR r\u00e9cente de guillett. Paul (CTO de Grist Labs) n\u2019est pas exactement un \u201cmembre de la communaut\u00e9\u201d (d\u00e9sol\u00e9 Paul \ud83d\ude22), mais son guide pour faire fonctionner les widgets personnalis\u00e9s hors ligne peut \u00eatre utile pour les apprentis sorciers des widgets. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre #grist-showcase canal Discord ! Apprendre Grist # Webinaire : Cl\u00e9s de lien # En juillet, nous expliquerons comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Apprenez \u00e0 utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles \u2013 m\u00eame une seule ligne \u2013 avec des tiers. Jeudi 25 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUILLET Colonnes de r\u00e9f\u00e9rence # En juin, Natalie a expliqu\u00e9 ce que sont les r\u00e9f\u00e9rences, comment les colonnes de r\u00e9f\u00e9rence fonctionnent dans Grist, et comment les utiliser pour cr\u00e9er des tableaux de bord productifs en utilisant le Mod\u00e8le de conf\u00e9renciers d\u2019\u00e9v\u00e9nements . REGARDER L\u2019ENREGISTREMENT DE JUIN Aidez \u00e0 faire conna\u00eetre Grist # Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Forum Communautaire , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/06"},{"location":"newsletters/2024-06/#bulletin-de-juin-2024","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juin 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juin 2024"},{"location":"newsletters/2024-06/#quoi-de-neuf","text":"Encore un mois o\u00f9 la communaut\u00e9 Grist nous offre une multitude de contributions cool, pour lesquelles nous sommes constamment reconnaissants. Gardez un \u0153il sur certaines choses sensationnelles que nous mijotons pour cet \u00e9t\u00e9. \u2600\ufe0f","title":"Quoi de neuf"},{"location":"newsletters/2024-06/#nouveaux-modeles-de-recherche","text":"Nous avons cr\u00e9\u00e9 trois nouveaux mod\u00e8les sp\u00e9cialement pour les laboratoires de recherche . Ce n\u2019est pas une co\u00efncidence, car nous continuons d\u2019entendre des scientifiques et des techniciens qui trouvent que Grist est un ajout bienvenu \u00e0 leur pile logicielle. \ud83e\uddea Gestion des \u00e9chantillons \ud83d\udccb Gestion de projet \ud83d\udce6 Gestion des stocks","title":"Nouveaux mod\u00e8les de recherche \ud83d\udc69\u200d\ud83d\udd2c"},{"location":"newsletters/2024-06/#auto-hebergeurs-vous-pouvez-maintenant-executer-grist-sans-privileges-root","text":"Il est maintenant beaucoup plus facile de passer de gVisor \u00e0 la sandbox Pyodide , ce qui vous permet d\u2019ex\u00e9cuter un conteneur Grist en tant qu\u2019utilisateur r\u00e9gulier sans privil\u00e8ges administratifs. Voir cette PR pour tous les d\u00e9tails.","title":"Auto-h\u00e9bergeurs : vous pouvez maintenant ex\u00e9cuter Grist sans privil\u00e8ges root"},{"location":"newsletters/2024-06/#grist-desktop-a-ete-mis-a-jour-et-renomme","text":"Grist Desktop (anciennement Grist Electron) a re\u00e7u une mise \u00e0 jour significative ! Il y a une nouvelle version portable pour Windows, ainsi que des corrections de bugs et une mise \u00e0 jour de grist-core . Consultez les notes de version compl\u00e8tes et t\u00e9l\u00e9chargez Grist Desktop sur GitHub . Attendez-vous \u00e0 plus de nouvelles sur Grist Desktop dans les prochains mois\u2026 \ud83d\udc40","title":"Grist Desktop a \u00e9t\u00e9 mis \u00e0 jour (et renomm\u00e9) !"},{"location":"newsletters/2024-06/#points-forts-de-la-communaute","text":"","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-06/#mise-a-jour-de-la-traduction","text":"Les traductions en finnois, vietnamien, bulgare et slovaque sont bien avanc\u00e9es ! Un grand merci \u00e0 tous nos contributeurs, et voir ici pour plus d\u2019informations sur l\u2019aide \u00e0 la traduction de Grist.","title":"Mise \u00e0 jour de la traduction"},{"location":"newsletters/2024-06/#openapi-grist","text":"En haut de la console API de Grist se trouve un lien vers un fichier YML contenant la sp\u00e9cification OpenAPI de Grist (notez, pas OpenAI). Nous sommes ravis de le voir utilis\u00e9 dans certains projets communautaires passionnants : grist-js de ben-pr-p, un nouveau client TypeScript. Int\u00e9gration GraphQL de yala1 utilisant Hasura.","title":"OpenAPI \ud83e\udd1d Grist"},{"location":"newsletters/2024-06/#interface-de-chat-grist-avec-listes-de-cartes","text":"Sur Discord , celine de france a partag\u00e9 une impl\u00e9mentation novatrice de listes de cartes fonctionnant comme une fonctionnalit\u00e9 native de chat/commentaires dans Grist, compl\u00e8te avec des accus\u00e9s de lecture manuels et des r\u00e9actions emoji. \u2705\ud83d\udc4d","title":"Interface de chat Grist avec listes de cartes \ud83d\udcac"},{"location":"newsletters/2024-06/#creations-de-widgets-personnalises","text":"Le modeste widget de visualisation HTML rec\u00e8le bien des secrets. nicobako a d\u00e9couvert que vous pouvez ex\u00e9cuter des scripts comme Mermaid.js pour cr\u00e9er des graphiques et des diagrammes sophistiqu\u00e9s. Vous pouvez maintenant faire en sorte que le widget de bloc-notes personnalis\u00e9 exporte du HTML classique vers une autre colonne, gr\u00e2ce \u00e0 la PR r\u00e9cente de guillett. Paul (CTO de Grist Labs) n\u2019est pas exactement un \u201cmembre de la communaut\u00e9\u201d (d\u00e9sol\u00e9 Paul \ud83d\ude22), mais son guide pour faire fonctionner les widgets personnalis\u00e9s hors ligne peut \u00eatre utile pour les apprentis sorciers des widgets. Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre #grist-showcase canal Discord !","title":"Cr\u00e9ations de widgets personnalis\u00e9s \ud83e\udde9"},{"location":"newsletters/2024-06/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-06/#webinaire-cles-de-lien","text":"En juillet, nous expliquerons comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Apprenez \u00e0 utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles \u2013 m\u00eame une seule ligne \u2013 avec des tiers. Jeudi 25 juillet \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE DE JUILLET","title":"Webinaire : Cl\u00e9s de lien"},{"location":"newsletters/2024-06/#colonnes-de-reference","text":"En juin, Natalie a expliqu\u00e9 ce que sont les r\u00e9f\u00e9rences, comment les colonnes de r\u00e9f\u00e9rence fonctionnent dans Grist, et comment les utiliser pour cr\u00e9er des tableaux de bord productifs en utilisant le Mod\u00e8le de conf\u00e9renciers d\u2019\u00e9v\u00e9nements . REGARDER L\u2019ENREGISTREMENT DE JUIN","title":"Colonnes de r\u00e9f\u00e9rence"},{"location":"newsletters/2024-06/#aidez-a-faire-connaitre-grist","text":"Si vous souhaitez aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019\u00e9valuation de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-06/#nous-sommes-la-pour-vous-soutenir","text":"Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Forum Communautaire , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"newsletters/2024-07/","text":"Warning La traduction propos\u00e9e ici a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e automatiquement par le mod\u00e8le d\u2019intelligence artificielle GPT-4o. Il est probable qu\u2019elle contienne des imperfections. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour am\u00e9liorer le contenu fourni ici \ud83d\udc4b . Bulletin de Juillet 2024 # /* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juillet 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist. Quoi de neuf # Fonctions cumulatives : PREVIOUS() , NEXT() et RANK() # Si vous avez d\u00e9j\u00e0 essay\u00e9 d\u2019obtenir un total cumulatif dans une table Grist, ou d\u2019acc\u00e9der aux valeurs pr\u00e9c\u00e9dentes pour des calculs, nous avons de bonnes nouvelles. Nous avons ajout\u00e9 une s\u00e9rie de nouvelles fonctionnalit\u00e9s li\u00e9es aux fonctions cumulatives qui \u00e9largissent consid\u00e9rablement ce que vous pouvez faire dans la grille : PREVIOUS() trouve l\u2019enregistrement pr\u00e9c\u00e9dent dans une table compl\u00e8te. NEXT() fait la m\u00eame chose, mais dans l\u2019autre sens. RANK() renvoie le rang de l\u2019enregistrement au sein du groupe, en commen\u00e7ant par 1. Consultez notre documentation compl\u00e8te dans notre Centre d\u2019aide . Nouveaux types de recherches : m\u00e9thodes find.* # M\u00eame pour un pro de Python, il peut \u00eatre difficile de rechercher des \u00e9l\u00e9ments en fonction de leur proximit\u00e9 avec un seuil, surtout si la recherche doit \u00eatre efficace. Ces nouvelles m\u00e9thodes find.* rendent cela beaucoup plus facile. Essentiellement, lookupRecords() permet d\u00e9sormais la recherche dans des r\u00e9sultats tri\u00e9s ! Voici un exemple, montrant l\u2019ancienne m\u00e9thode (\ud83d\udc22\ud83d\ude45) et la nouvelle m\u00e9thode (\ud83c\udfc3\u200d\u27a1\ufe0f) : Plus de d\u00e9tails : Les m\u00e9thodes find.* sont le , lt , ge , gt et eq (moins que ou \u00e9gal, moins que, plus que ou \u00e9gal, plus que, \u00e9gal). L\u2019argument order_by prend d\u00e9sormais en charge les tuples, ainsi que le pr\u00e9fixe \u201c-\u201d pour inverser l\u2019ordre, par exemple (\"Category\", \"-Date\") . Voir la documentation compl\u00e8te dans notre Centre d\u2019aide . Progression du tutoriel # Si vous lisez ceci, vous n\u2019avez probablement pas besoin de compl\u00e9ter notre tutoriel de base. Cependant, nous voulions vous montrer cette nouvelle barre de progression cool et sugg\u00e9rer d\u2019autres am\u00e9liorations d\u2019int\u00e9gration pour aider les nouveaux utilisateurs \u00e0 se mettre \u00e0 niveau ! Vous \u00eates \u00e9galement maintenant \u00e0 environ 38% de ce bulletin. Bon travail ! \ud83d\udcc8 Grist Enterprise : maintenant un bouton ! # Pour nos grands utilisateurs d\u2019entreprise, l\u2019installation de Grist est devenue plus facile : vous pouvez d\u00e9sormais utiliser l\u2019image Docker standard ! Nous avons consolid\u00e9 les images afin que l\u2019activation et l\u2019activation d\u2019Enterprise se fassent dans la console d\u2019administration. Cela signifie \u00e9galement que les utilisateurs non-Enterprise peuvent essayer les fonctionnalit\u00e9s Enterprise comme GristConnect et stockage Azure/S3 pendant 30 jours. Le plan Enterprise complet comprend \u00e9galement le support d\u2019installation et les services professionnels fournis par nos experts Grist. Consultez notre page de tarification pour plus de d\u00e9tails. Int\u00e9gration Grist ActivePieces # L\u2019outil d\u2019automatisation open source ActivePieces dispose d\u00e9sormais d\u2019un ensemble d\u2019actions et de d\u00e9clencheurs sp\u00e9cifiques \u00e0 Grist . Merci \u00e0 Kishan Parmar pour la pull request ! Am\u00e9lioration de la synchronisation des renommages de colonnes # Une petite mais puissante correction qui r\u00e9sout plusieurs frustrations d\u2019utilisabilit\u00e9 dans Grist. D\u00e9sormais, lorsque vous renommez une colonne, les permissions avanc\u00e9es et les r\u00e8gles de mise en forme conditionnelle associ\u00e9es se mettent \u00e0 jour automatiquement ! Aper\u00e7us de build Fly.io pour les contributeurs externes # Si vous \u00eates un contributeur grist-core travaillant sur une PR, nous avons d\u00e9sormais des aper\u00e7us automatiques pour votre travail. Tout le monde peut d\u00e9sormais voir des d\u00e9mos en direct, ce qui devrait aider \u00e0 acc\u00e9l\u00e9rer le processus de r\u00e9vision ! Nous utilisons Fly.io pour ex\u00e9cuter une instance auto-h\u00e9berg\u00e9e de Grist incluant votre code. Coup de projecteur sur les utilisateurs \u2013 Callum Spawforth/Savage Game Design # Lorsqu\u2019il ne travaille pas sur Grist, Callum ( @Spoffy sur GitHub) travaille avec l\u2019\u00e9quipe de Savage Game Design pour d\u00e9velopper des jeux vid\u00e9o sur la guerre du Vietnam. L\u2019\u00e9quipe de Savage et leurs conseillers militaires s\u2019efforcent de rendre leur jeu historiquement exact, ce qui signifie suivre une tonne d\u2019\u00e9v\u00e9nements r\u00e9els, de lieux, de personnes, d\u2019unit\u00e9s, etc\u2026 et les relier tous entre eux. L\u2019\u00e9quipe utilise Grist pour construire une base de donn\u00e9es d\u2019\u00e9v\u00e9nements \u00e0 mesure qu\u2019ils cr\u00e9ent leurs sc\u00e9narios, la traitant comme un \u201cpoint de d\u00e9part pour cartographier ce qu\u2019ils veulent faire pendant une certaine p\u00e9riode\u201d. \u00c0 mesure que les sc\u00e9narios \u00e9voluent et deviennent plus complexes, ils connectent leurs documents Grist avec d\u2019autres outils comme Google Docs, maintenant un lien avec leur source unique de v\u00e9rit\u00e9. Au lieu d\u2019avoir seulement un document de conception de jeu, ils ont maintenant aussi une base de donn\u00e9es de conception de jeu. Points forts de la communaut\u00e9 # Une nouvelle traduction basque est presque termin\u00e9e, gr\u00e2ce \u00e0 xabirequejo ! Voir ici pour plus d\u2019informations sur l\u2019aide \u00e0 la traduction de Grist. Si vous avez utilis\u00e9 notre mod\u00e8le de propositions et contrats (ou m\u00eame suivi notre tutoriel sur la fa\u00e7on de le construire !), vous serez int\u00e9ress\u00e9 de voir cette fonction de mod\u00e8le de vue Markdown mise \u00e0 jour par l\u2019utilisateur Discord celine de france . Cette fonction est un moyen plus simple de remplacer des champs dans un mod\u00e8le (m\u00eame imbriqu\u00e9s dans des r\u00e9f\u00e9rences !), automatisant efficacement le processus pour la plupart des cas. Voir leur post original ici , ou consultez une d\u00e9mo en direct . Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre #grist-showcase canal Discord ! Apprendre Grist # Webinar : Grist 101 : Guide du nouvel utilisateur # Rejoignez-nous pour un webinaire d\u2019introduction con\u00e7u pour aider les nouveaux utilisateurs \u00e0 naviguer dans les bases de Grist. Cette session vous fournira les outils et connaissances essentiels pour commencer. Nous couvrirons les fonctionnalit\u00e9s cl\u00e9s et les meilleures pratiques pour maximiser votre productivit\u00e9. Parfait pour les d\u00e9butants, ce webinaire vous mettra sur la voie pour devenir un pro de Grist. Ne manquez pas cette occasion - r\u00e9servez votre place d\u00e8s aujourd\u2019hui ! Jeudi 15 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019AO\u00dbT Partager des donn\u00e9es partielles avec des cl\u00e9s de lien # En juillet, Natalie a expliqu\u00e9 comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Nous avons couvert comment utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles - m\u00eame une seule ligne - avec des tiers. REGARDER L\u2019ENREGISTREMENT DE JUILLET Aidez \u00e0 faire conna\u00eetre Grist # Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius Nous sommes l\u00e0 pour vous soutenir # Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Forum Communautaire , ou contactez-nous \u00e0 support@getgrist.com .","title":"2024/07"},{"location":"newsletters/2024-07/#bulletin-de-juillet-2024","text":"/* restaurer certains d\u00e9fauts mal remplac\u00e9s */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copier les styles de la newsletter, avec un pr\u00e9fixe pour une sp\u00e9cificit\u00e9 suffisante */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill Juillet 2024 \u2022 getgrist.com Bienvenue dans notre bulletin mensuel de mises \u00e0 jour et de conseils pour les utilisateurs de Grist.","title":"Bulletin de Juillet 2024"},{"location":"newsletters/2024-07/#quoi-de-neuf","text":"","title":"Quoi de neuf"},{"location":"newsletters/2024-07/#fonctions-cumulatives-previous-next-et-rank","text":"Si vous avez d\u00e9j\u00e0 essay\u00e9 d\u2019obtenir un total cumulatif dans une table Grist, ou d\u2019acc\u00e9der aux valeurs pr\u00e9c\u00e9dentes pour des calculs, nous avons de bonnes nouvelles. Nous avons ajout\u00e9 une s\u00e9rie de nouvelles fonctionnalit\u00e9s li\u00e9es aux fonctions cumulatives qui \u00e9largissent consid\u00e9rablement ce que vous pouvez faire dans la grille : PREVIOUS() trouve l\u2019enregistrement pr\u00e9c\u00e9dent dans une table compl\u00e8te. NEXT() fait la m\u00eame chose, mais dans l\u2019autre sens. RANK() renvoie le rang de l\u2019enregistrement au sein du groupe, en commen\u00e7ant par 1. Consultez notre documentation compl\u00e8te dans notre Centre d\u2019aide .","title":"Fonctions cumulatives : PREVIOUS(), NEXT() et RANK()"},{"location":"newsletters/2024-07/#nouveaux-types-de-recherches-methodes-find","text":"M\u00eame pour un pro de Python, il peut \u00eatre difficile de rechercher des \u00e9l\u00e9ments en fonction de leur proximit\u00e9 avec un seuil, surtout si la recherche doit \u00eatre efficace. Ces nouvelles m\u00e9thodes find.* rendent cela beaucoup plus facile. Essentiellement, lookupRecords() permet d\u00e9sormais la recherche dans des r\u00e9sultats tri\u00e9s ! Voici un exemple, montrant l\u2019ancienne m\u00e9thode (\ud83d\udc22\ud83d\ude45) et la nouvelle m\u00e9thode (\ud83c\udfc3\u200d\u27a1\ufe0f) : Plus de d\u00e9tails : Les m\u00e9thodes find.* sont le , lt , ge , gt et eq (moins que ou \u00e9gal, moins que, plus que ou \u00e9gal, plus que, \u00e9gal). L\u2019argument order_by prend d\u00e9sormais en charge les tuples, ainsi que le pr\u00e9fixe \u201c-\u201d pour inverser l\u2019ordre, par exemple (\"Category\", \"-Date\") . Voir la documentation compl\u00e8te dans notre Centre d\u2019aide .","title":"Nouveaux types de recherches : m\u00e9thodes find.*"},{"location":"newsletters/2024-07/#progression-du-tutoriel","text":"Si vous lisez ceci, vous n\u2019avez probablement pas besoin de compl\u00e9ter notre tutoriel de base. Cependant, nous voulions vous montrer cette nouvelle barre de progression cool et sugg\u00e9rer d\u2019autres am\u00e9liorations d\u2019int\u00e9gration pour aider les nouveaux utilisateurs \u00e0 se mettre \u00e0 niveau ! Vous \u00eates \u00e9galement maintenant \u00e0 environ 38% de ce bulletin. Bon travail ! \ud83d\udcc8","title":"Progression du tutoriel"},{"location":"newsletters/2024-07/#grist-enterprise-maintenant-un-bouton","text":"Pour nos grands utilisateurs d\u2019entreprise, l\u2019installation de Grist est devenue plus facile : vous pouvez d\u00e9sormais utiliser l\u2019image Docker standard ! Nous avons consolid\u00e9 les images afin que l\u2019activation et l\u2019activation d\u2019Enterprise se fassent dans la console d\u2019administration. Cela signifie \u00e9galement que les utilisateurs non-Enterprise peuvent essayer les fonctionnalit\u00e9s Enterprise comme GristConnect et stockage Azure/S3 pendant 30 jours. Le plan Enterprise complet comprend \u00e9galement le support d\u2019installation et les services professionnels fournis par nos experts Grist. Consultez notre page de tarification pour plus de d\u00e9tails.","title":"Grist Enterprise : maintenant un bouton !"},{"location":"newsletters/2024-07/#integration-grist-activepieces","text":"L\u2019outil d\u2019automatisation open source ActivePieces dispose d\u00e9sormais d\u2019un ensemble d\u2019actions et de d\u00e9clencheurs sp\u00e9cifiques \u00e0 Grist . Merci \u00e0 Kishan Parmar pour la pull request !","title":"Int\u00e9gration Grist ActivePieces"},{"location":"newsletters/2024-07/#amelioration-de-la-synchronisation-des-renommages-de-colonnes","text":"Une petite mais puissante correction qui r\u00e9sout plusieurs frustrations d\u2019utilisabilit\u00e9 dans Grist. D\u00e9sormais, lorsque vous renommez une colonne, les permissions avanc\u00e9es et les r\u00e8gles de mise en forme conditionnelle associ\u00e9es se mettent \u00e0 jour automatiquement !","title":"Am\u00e9lioration de la synchronisation des renommages de colonnes"},{"location":"newsletters/2024-07/#apercus-de-build-flyio-pour-les-contributeurs-externes","text":"Si vous \u00eates un contributeur grist-core travaillant sur une PR, nous avons d\u00e9sormais des aper\u00e7us automatiques pour votre travail. Tout le monde peut d\u00e9sormais voir des d\u00e9mos en direct, ce qui devrait aider \u00e0 acc\u00e9l\u00e9rer le processus de r\u00e9vision ! Nous utilisons Fly.io pour ex\u00e9cuter une instance auto-h\u00e9berg\u00e9e de Grist incluant votre code.","title":"Aper\u00e7us de build Fly.io pour les contributeurs externes"},{"location":"newsletters/2024-07/#coup-de-projecteur-sur-les-utilisateurs-callum-spawforthsavage-game-design","text":"Lorsqu\u2019il ne travaille pas sur Grist, Callum ( @Spoffy sur GitHub) travaille avec l\u2019\u00e9quipe de Savage Game Design pour d\u00e9velopper des jeux vid\u00e9o sur la guerre du Vietnam. L\u2019\u00e9quipe de Savage et leurs conseillers militaires s\u2019efforcent de rendre leur jeu historiquement exact, ce qui signifie suivre une tonne d\u2019\u00e9v\u00e9nements r\u00e9els, de lieux, de personnes, d\u2019unit\u00e9s, etc\u2026 et les relier tous entre eux. L\u2019\u00e9quipe utilise Grist pour construire une base de donn\u00e9es d\u2019\u00e9v\u00e9nements \u00e0 mesure qu\u2019ils cr\u00e9ent leurs sc\u00e9narios, la traitant comme un \u201cpoint de d\u00e9part pour cartographier ce qu\u2019ils veulent faire pendant une certaine p\u00e9riode\u201d. \u00c0 mesure que les sc\u00e9narios \u00e9voluent et deviennent plus complexes, ils connectent leurs documents Grist avec d\u2019autres outils comme Google Docs, maintenant un lien avec leur source unique de v\u00e9rit\u00e9. Au lieu d\u2019avoir seulement un document de conception de jeu, ils ont maintenant aussi une base de donn\u00e9es de conception de jeu.","title":"Coup de projecteur sur les utilisateurs \u2013 Callum Spawforth/Savage Game Design"},{"location":"newsletters/2024-07/#points-forts-de-la-communaute","text":"Une nouvelle traduction basque est presque termin\u00e9e, gr\u00e2ce \u00e0 xabirequejo ! Voir ici pour plus d\u2019informations sur l\u2019aide \u00e0 la traduction de Grist. Si vous avez utilis\u00e9 notre mod\u00e8le de propositions et contrats (ou m\u00eame suivi notre tutoriel sur la fa\u00e7on de le construire !), vous serez int\u00e9ress\u00e9 de voir cette fonction de mod\u00e8le de vue Markdown mise \u00e0 jour par l\u2019utilisateur Discord celine de france . Cette fonction est un moyen plus simple de remplacer des champs dans un mod\u00e8le (m\u00eame imbriqu\u00e9s dans des r\u00e9f\u00e9rences !), automatisant efficacement le processus pour la plupart des cas. Voir leur post original ici , ou consultez une d\u00e9mo en direct . Vous travaillez sur quelque chose de cool avec Grist ? Faites-le nous savoir en postant dans le forum Showcase ou notre #grist-showcase canal Discord !","title":"Points forts de la communaut\u00e9"},{"location":"newsletters/2024-07/#apprendre-grist","text":"","title":"Apprendre Grist"},{"location":"newsletters/2024-07/#webinar-grist-101-guide-du-nouvel-utilisateur","text":"Rejoignez-nous pour un webinaire d\u2019introduction con\u00e7u pour aider les nouveaux utilisateurs \u00e0 naviguer dans les bases de Grist. Cette session vous fournira les outils et connaissances essentiels pour commencer. Nous couvrirons les fonctionnalit\u00e9s cl\u00e9s et les meilleures pratiques pour maximiser votre productivit\u00e9. Parfait pour les d\u00e9butants, ce webinaire vous mettra sur la voie pour devenir un pro de Grist. Ne manquez pas cette occasion - r\u00e9servez votre place d\u00e8s aujourd\u2019hui ! Jeudi 15 ao\u00fbt \u00e0 15h00 heure de l\u2019Est des \u00c9tats-Unis. INSCRIVEZ-VOUS AU WEBINAIRE D\u2019AO\u00dbT","title":"Webinar : Grist 101 : Guide du nouvel utilisateur"},{"location":"newsletters/2024-07/#partager-des-donnees-partielles-avec-des-cles-de-lien","text":"En juillet, Natalie a expliqu\u00e9 comment utiliser l\u2019une des fonctionnalit\u00e9s les plus cool et les moins explor\u00e9es de Grist : les cl\u00e9s de lien. Nous avons couvert comment utiliser les cl\u00e9s de lien de Grist pour partager des donn\u00e9es partielles - m\u00eame une seule ligne - avec des tiers. REGARDER L\u2019ENREGISTREMENT DE JUILLET","title":"Partager des donn\u00e9es partielles avec des cl\u00e9s de lien"},{"location":"newsletters/2024-07/#aidez-a-faire-connaitre-grist","text":"Si vous \u00eates int\u00e9ress\u00e9 \u00e0 aider Grist \u00e0 se d\u00e9velopper, envisagez de laisser un avis sur les sites d\u2019avis de produits. Voici une courte liste o\u00f9 votre avis pourrait avoir un grand impact. Merci ! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Aidez \u00e0 faire conna\u00eetre Grist"},{"location":"newsletters/2024-07/#nous-sommes-la-pour-vous-soutenir","text":"Services professionnels. Grist surprend souvent les gens par ses capacit\u00e9s. Planifiez un appel gratuit pour \u00e9valuer vos besoins et vous aider \u00e0 entrer en contact avec un expert Grist. En savoir plus. Vous avez des questions, des commentaires ou besoin d\u2019aide ? Recherchez dans notre Centre d\u2019aide , regardez des tutoriels vid\u00e9o , partagez des id\u00e9es dans notre Forum Communautaire , ou contactez-nous \u00e0 support@getgrist.com .","title":"Nous sommes l\u00e0 pour vous soutenir"},{"location":"api/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Grist API Reference # REST API for manipulating documents, workspaces, and team sites. API Usage is an introduction to using the API. API Console allows you to make API calls from the browser. Authentication orgs get List the orgs you have access to get Describe an org patch Modify an org del Delete an org get List users with access to org patch Change who has access to org workspaces get List workspaces and documents within an org post Create an empty workspace get Describe a workspace patch Modify a workspace del Delete a workspace get List users with access to workspace patch Change who has access to workspace docs post Create an empty document get Describe a document patch Modify document metadata (but not its contents) del Delete a document patch Move document to another workspace. get List users with access to document patch Change who has access to document get Content of document, as an Sqlite file get Content of document, as an Excel file get Content of table, as a CSV file get The schema of a table post Truncate the document's action history post Reload a document records get Fetch records from a table post Add records to a table patch Modify records of a table put Add or update records of a table tables get List tables in a document post Add tables to a document patch Modify tables of a document columns get List columns in a table post Add columns to a table patch Modify columns of a table put Add or update columns of a table del Delete a column of a table data get Fetch data from a table post Add rows to a table patch Modify rows of a table post Delete rows of a table attachments get List metadata of all attachments in a doc post Upload attachments to a doc get Get the metadata for an attachment get Download the contents of an attachment webhooks get Webhooks associated with a document post Create new webhooks for a document patch Modify a webhook del Remove a webhook del Empty a document's queue of undelivered payloads sql get Run an SQL query against a document post Run an SQL query against a document, with options or parameters users del Delete a user from Grist API docs by Redocly Grist API ( 1.0.1 ) An API for manipulating Grist sites, workspaces, and documents. Authentication ApiKey Access to the Grist API is controlled by an Authorization header, which should contain the word 'Bearer', followed by a space, followed by your API key. Security Scheme Type: HTTP HTTP Authorization Scheme: bearer Bearer format: Authorization: Bearer XXXXXXXXXXX orgs Team sites and personal spaces are called 'orgs' in the API. List the orgs you have access to get /orgs https://{subdomain}.getgrist.com/api /orgs This enumerates all the team sites or personal areas available. Authorizations: ApiKey Responses 200 An array of organizations Response samples 200 Content type application/json Copy Expand all Collapse all [ { \"id\" : 42 , \"name\" : \"Grist Labs\" , \"domain\" : \"gristlabs\" , \"owner\" : { \"id\" : 101 , \"name\" : \"Helga Hufflepuff\" , \"picture\" : null } , \"access\" : \"owners\" , \"createdAt\" : \"2019-09-13T15:42:35.000Z\" , \"updatedAt\" : \"2019-09-13T15:42:35.000Z\" } ] Describe an org get /orgs/{orgId} https://{subdomain}.getgrist.com/api /orgs/{orgId} Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Responses 200 An organization Response samples 200 Content type application/json Copy Expand all Collapse all { \"id\" : 42 , \"name\" : \"Grist Labs\" , \"domain\" : \"gristlabs\" , \"owner\" : { \"id\" : 101 , \"name\" : \"Helga Hufflepuff\" , \"picture\" : null } , \"access\" : \"owners\" , \"createdAt\" : \"2019-09-13T15:42:35.000Z\" , \"updatedAt\" : \"2019-09-13T15:42:35.000Z\" } Modify an org patch /orgs/{orgId} https://{subdomain}.getgrist.com/api /orgs/{orgId} Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Request Body schema: application/json the changes to make name string Responses 200 Success Request samples Payload Content type application/json Copy { \"name\" : \"ACME Unlimited\" } Delete an org delete /orgs/{orgId} https://{subdomain}.getgrist.com/api /orgs/{orgId} Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Responses 200 Success 403 Access denied 404 Not found List users with access to org get /orgs/{orgId}/access https://{subdomain}.getgrist.com/api /orgs/{orgId}/access Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Responses 200 Users with access to org Response samples 200 Content type application/json Copy Expand all Collapse all { \"users\" : [ { \"id\" : 1 , \"name\" : \"Andrea\" , \"email\" : \"andrea@getgrist.com\" , \"access\" : \"owners\" } ] } Change who has access to org patch /orgs/{orgId}/access https://{subdomain}.getgrist.com/api /orgs/{orgId}/access Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Request Body schema: application/json the changes to make delta required object ( OrgAccessWrite ) Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"delta\" : { \"users\" : { \"foo@getgrist.com\" : \"owners\" , \"bar@getgrist.com\" : null } } } workspaces Sites can be organized into groups of documents called workspaces. List workspaces and documents within an org get /orgs/{orgId}/workspaces https://{subdomain}.getgrist.com/api /orgs/{orgId}/workspaces Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Responses 200 An org's workspaces and documents Response samples 200 Content type application/json Copy Expand all Collapse all [ { \"id\" : 97 , \"name\" : \"Secret Plans\" , \"access\" : \"owners\" , \"docs\" : [ { \"id\" : 145 , \"name\" : \"Project Lollipop\" , \"access\" : \"owners\" , \"isPinned\" : true , \"urlId\" : null } ] , \"orgDomain\" : \"gristlabs\" } ] Create an empty workspace post /orgs/{orgId}/workspaces https://{subdomain}.getgrist.com/api /orgs/{orgId}/workspaces Authorizations: ApiKey path Parameters orgId required integer or string This can be an integer id, or a string subdomain (e.g. gristlabs ), or current if the org is implied by the domain in the url Request Body schema: application/json settings for the workspace name string Responses 200 The workspace id Request samples Payload Content type application/json Copy { \"name\" : \"Retreat Docs\" } Response samples 200 Content type application/json Copy 155 Describe a workspace get /workspaces/{workspaceId} https://{subdomain}.getgrist.com/api /workspaces/{workspaceId} Authorizations: ApiKey path Parameters workspaceId required integer An integer id Responses 200 A workspace Response samples 200 Content type application/json Copy Expand all Collapse all { \"id\" : 97 , \"name\" : \"Secret Plans\" , \"access\" : \"owners\" , \"docs\" : [ { \"id\" : 145 , \"name\" : \"Project Lollipop\" , \"access\" : \"owners\" , \"isPinned\" : true , \"urlId\" : null } ] , \"org\" : { \"id\" : 42 , \"name\" : \"Grist Labs\" , \"domain\" : \"gristlabs\" , \"owner\" : { \"id\" : 101 , \"name\" : \"Helga Hufflepuff\" , \"picture\" : null } , \"access\" : \"owners\" , \"createdAt\" : \"2019-09-13T15:42:35.000Z\" , \"updatedAt\" : \"2019-09-13T15:42:35.000Z\" } } Modify a workspace patch /workspaces/{workspaceId} https://{subdomain}.getgrist.com/api /workspaces/{workspaceId} Authorizations: ApiKey path Parameters workspaceId required integer An integer id Request Body schema: application/json the changes to make name string Responses 200 Success Request samples Payload Content type application/json Copy { \"name\" : \"Retreat Docs\" } Delete a workspace delete /workspaces/{workspaceId} https://{subdomain}.getgrist.com/api /workspaces/{workspaceId} Authorizations: ApiKey path Parameters workspaceId required integer An integer id Responses 200 Success List users with access to workspace get /workspaces/{workspaceId}/access https://{subdomain}.getgrist.com/api /workspaces/{workspaceId}/access Authorizations: ApiKey path Parameters workspaceId required integer An integer id Responses 200 Users with access to workspace Response samples 200 Content type application/json Copy Expand all Collapse all { \"maxInheritedRole\" : \"owners\" , \"users\" : [ { \"id\" : 1 , \"name\" : \"Andrea\" , \"email\" : \"andrea@getgrist.com\" , \"access\" : \"owners\" , \"parentAccess\" : \"owners\" } ] } Change who has access to workspace patch /workspaces/{workspaceId}/access https://{subdomain}.getgrist.com/api /workspaces/{workspaceId}/access Authorizations: ApiKey path Parameters workspaceId required integer An integer id Request Body schema: application/json the changes to make delta required object ( WorkspaceAccessWrite ) Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"delta\" : { \"maxInheritedRole\" : \"owners\" , \"users\" : { \"foo@getgrist.com\" : \"owners\" , \"bar@getgrist.com\" : null } } } docs Workspaces contain collections of Grist documents. Create an empty document post /workspaces/{workspaceId}/docs https://{subdomain}.getgrist.com/api /workspaces/{workspaceId}/docs Authorizations: ApiKey path Parameters workspaceId required integer An integer id Request Body schema: application/json settings for the document name string isPinned boolean Responses 200 The document id Request samples Payload Content type application/json Copy { \"name\" : \"Competitive Analysis\" , \"isPinned\" : false } Response samples 200 Content type application/json Copy \"8b97c8db-b4df-4b34-b72c-17459e70140a\" Describe a document get /docs/{docId} https://{subdomain}.getgrist.com/api /docs/{docId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 A document's metadata Response samples 200 Content type application/json Copy Expand all Collapse all { \"id\" : 145 , \"name\" : \"Project Lollipop\" , \"access\" : \"owners\" , \"isPinned\" : true , \"urlId\" : null , \"workspace\" : { \"id\" : 97 , \"name\" : \"Secret Plans\" , \"access\" : \"owners\" , \"org\" : { \"id\" : 42 , \"name\" : \"Grist Labs\" , \"domain\" : \"gristlabs\" , \"owner\" : { \"id\" : 101 , \"name\" : \"Helga Hufflepuff\" , \"picture\" : null } , \"access\" : \"owners\" , \"createdAt\" : \"2019-09-13T15:42:35.000Z\" , \"updatedAt\" : \"2019-09-13T15:42:35.000Z\" } } } Modify document metadata (but not its contents) patch /docs/{docId} https://{subdomain}.getgrist.com/api /docs/{docId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the changes to make name string isPinned boolean Responses 200 Success Request samples Payload Content type application/json Copy { \"name\" : \"Competitive Analysis\" , \"isPinned\" : false } Delete a document delete /docs/{docId} https://{subdomain}.getgrist.com/api /docs/{docId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 Success Move document to another workspace. patch /docs/{docId}/move https://{subdomain}.getgrist.com/api /docs/{docId}/move Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the target workspace workspace required integer Responses 200 Success Request samples Payload Content type application/json Copy { \"workspace\" : 597 } List users with access to document get /docs/{docId}/access https://{subdomain}.getgrist.com/api /docs/{docId}/access Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 Users with access to document Response samples 200 Content type application/json Copy Expand all Collapse all { \"maxInheritedRole\" : \"owners\" , \"users\" : [ { \"id\" : 1 , \"name\" : \"Andrea\" , \"email\" : \"andrea@getgrist.com\" , \"access\" : \"owners\" , \"parentAccess\" : \"owners\" } ] } Change who has access to document patch /docs/{docId}/access https://{subdomain}.getgrist.com/api /docs/{docId}/access Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the changes to make delta required object ( DocAccessWrite ) Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"delta\" : { \"maxInheritedRole\" : \"owners\" , \"users\" : { \"foo@getgrist.com\" : \"owners\" , \"bar@getgrist.com\" : null } } } Content of document, as an Sqlite file get /docs/{docId}/download https://{subdomain}.getgrist.com/api /docs/{docId}/download Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters nohistory boolean Remove document history (can significantly reduce file size) template boolean Remove all data and history but keep the structure to use the document as a template Responses 200 A document's content in Sqlite form Content of document, as an Excel file get /docs/{docId}/download/xlsx https://{subdomain}.getgrist.com/api /docs/{docId}/download/xlsx Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters header string Enum : \"colId\" \"label\" Format for headers. Labels tend to be more human-friendly while colIds are more normalized. Responses 200 A document's content in Excel form Content of table, as a CSV file get /docs/{docId}/download/csv https://{subdomain}.getgrist.com/api /docs/{docId}/download/csv Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters tableId required string Name of a table (normalized). header string Enum : \"colId\" \"label\" Format for headers. Labels tend to be more human-friendly while colIds are more normalized. Responses 200 A table's content in CSV form The schema of a table get /docs/{docId}/download/table-schema https://{subdomain}.getgrist.com/api /docs/{docId}/download/table-schema The schema follows frictionlessdata's table-schema standard . Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters tableId required string Name of a table (normalized). header string Enum : \"colId\" \"label\" Format for headers. Labels tend to be more human-friendly while colIds are more normalized. Responses 200 A table's table-schema in JSON format. Response samples 200 Content type text/json Copy { \"name\" : \"string\" , \"title\" : \"string\" , \"path\" : \" https://getgrist.com/o/docs/api/docs/ID/download/csv?tableId=Table1&.... \" , \"format\" : \"csv\" , \"mediatype\" : \"text/csv\" , \"encoding\" : \"utf-8\" , \"dialect\" : \"{\\n \\\"dialect\\\": {\\n \\\"delimiter\\\": \\\";\\\"\\n }\\n}\\n\" , \"schema\" : \"{\\n \\\"schema\\\": {\\n \\\"fields\\\": [\\n {\\n \\\"name\\\": \\\"first_name\\\",\\n \\\"type\\\": \\\"string\\\"\\n \\\"constraints\\\": {\\n \\\"required\\\": true\\n }\\n },\\n {\\n \\\"name\\\": \\\"age\\\",\\n \\\"type\\\": \\\"integer\\\"\\n },\\n ],\\n \\\"primaryKey\\\": [\\n \\\"name\\\"\\n ]\\n }\\n}\\n\" } Truncate the document's action history post /docs/{docId}/states/remove https://{subdomain}.getgrist.com/api /docs/{docId}/states/remove Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json keep required integer The number of the latest history actions to keep Request samples Payload Content type application/json Copy { \"keep\" : 3 } Reload a document post /docs/{docId}/force-reload https://{subdomain}.getgrist.com/api /docs/{docId}/force-reload Closes and reopens the document, forcing the python engine to restart. Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 Document reloaded successfully records Tables contain collections of records (also called rows). Fetch records from a table get /docs/{docId}/tables/{tableId}/records https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/records Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters filter string Example: filter={\"pet\": [\"cat\", \"dog\"]} This is a JSON object mapping column names to arrays of allowed values. For example, to filter column pet for values cat and dog , the filter would be {\"pet\": [\"cat\", \"dog\"]} . JSON contains characters that are not safe to place in a URL, so it is important to url-encode them. For this example, the url-encoding is %7B%22pet%22%3A%20%5B%22cat%22%2C%20%22dog%22%5D%7D . See https://rosettacode.org/wiki/URL_encoding for how to url-encode a string, or https://www.urlencoder.org/ to try some examples. Multiple columns can be filtered. For example the filter for pet being either cat or dog , AND size being either tiny or outrageously small , would be {\"pet\": [\"cat\", \"dog\"], \"size\": [\"tiny\", \"outrageously small\"]} . sort string Example: sort=pet,-age Order in which to return results. If a single column name is given (e.g. pet ), results are placed in ascending order of values in that column. To get results in an order that was previously prepared manually in Grist, use the special manualSort column name. Multiple columns can be specified, separated by commas (e.g. pet,age ). For descending order, prefix a column name with a - character (e.g. pet,-age ). To include additional sorting options append them after a colon (e.g. pet,-age:naturalSort;emptyFirst,owner ). Available options are: choiceOrder , naturalSort , emptyFirst . Without the sort parameter, the order of results is unspecified. limit number Example: limit=5 Return at most this number of rows. A value of 0 is equivalent to having no limit. hidden boolean Set to true to include the hidden columns (like \"manualSort\") header Parameters X-Sort string Example: pet,-age Same as sort query parameter. X-Limit number Example: 5 Same as limit query parameter. Responses 200 Records from the table Response samples 200 Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"id\" : 1 , \"fields\" : { \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"id\" : 2 , \"fields\" : { \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } Add records to a table post /docs/{docId}/tables/{tableId}/records https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/records Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. Request Body schema: application/json the records to add records required Array of objects Responses 200 IDs of records added Request samples Payload Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"fields\" : { \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"fields\" : { \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } Response samples 200 Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"id\" : 1 } , { \"id\" : 2 } ] } Modify records of a table patch /docs/{docId}/tables/{tableId}/records https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/records Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. Request Body schema: application/json the records to change, with ids records required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"id\" : 1 , \"fields\" : { \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"id\" : 2 , \"fields\" : { \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } Add or update records of a table put /docs/{docId}/tables/{tableId}/records https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/records Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. onmany string Enum : \"first\" \"none\" \"all\" Which records to update if multiple records are found to match require . first - the first matching record (default) none - do not update anything all - update all matches noadd boolean Set to true to prohibit adding records. noupdate boolean Set to true to prohibit updating records. allow_empty_require boolean Set to true to allow require in the body to be empty, which will match and update all records in the table. Request Body schema: application/json The records to add or update. Instead of an id, a require object is provided, with the same structure as fields . If no query parameter options are set, then the operation is as follows. First, we check if a record exists matching the values specified for columns in require . If so, we update it by setting the values specified for columns in fields . If not, we create a new record with a combination of the values in require and fields , with fields taking priority if the same column is specified in both. The query parameters allow for variations on this behavior. records required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"require\" : { \"pet\" : \"cat\" } , \"fields\" : { \"popularity\" : 67 } } , { \"require\" : { \"pet\" : \"dog\" } , \"fields\" : { \"popularity\" : 95 } } ] } tables Documents are structured as a collection of tables. List tables in a document get /docs/{docId}/tables https://{subdomain}.getgrist.com/api /docs/{docId}/tables Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 The tables in a document Response samples 200 Content type application/json Copy Expand all Collapse all { \"tables\" : [ { \"id\" : \"People\" , \"fields\" : { \"tableRef\" : 1 , \"onDemand\" : true } } , { \"id\" : \"Places\" , \"fields\" : { \"tableRef\" : 2 , \"onDemand\" : false } } ] } Add tables to a document post /docs/{docId}/tables https://{subdomain}.getgrist.com/api /docs/{docId}/tables Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the tables to add tables required Array of objects Responses 200 The table created Request samples Payload Content type application/json Copy Expand all Collapse all { \"tables\" : [ { \"id\" : \"People\" , \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" } } ] } ] } Response samples 200 Content type application/json Copy Expand all Collapse all { \"tables\" : [ { \"id\" : \"People\" } , { \"id\" : \"Places\" } ] } Modify tables of a document patch /docs/{docId}/tables https://{subdomain}.getgrist.com/api /docs/{docId}/tables Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json the tables to change, with ids tables required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"tables\" : [ { \"id\" : \"People\" , \"fields\" : { \"tableRef\" : 1 , \"onDemand\" : true } } , { \"id\" : \"Places\" , \"fields\" : { \"tableRef\" : 2 , \"onDemand\" : false } } ] } columns Tables are structured as a collection of columns. List columns in a table get /docs/{docId}/tables/{tableId}/columns https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters hidden boolean Set to true to include the hidden columns (like \"manualSort\") Responses 200 The columns in a table Response samples 200 Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" , \"type\" : \"Int\" } } ] } Add columns to a table post /docs/{docId}/tables/{tableId}/columns https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables Request Body schema: application/json the columns to add columns required Array of objects Responses 200 The columns created Request samples Payload Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" , \"type\" : \"Int\" } } , { \"id\" : \"Order\" , \"fields\" : { \"type\" : \"Ref:Orders\" , \"visibleCol\" : 2 } } , { \"id\" : \"Formula\" , \"fields\" : { \"type\" : \"Int\" , \"formula\" : \"$A + $B\" , \"isFormula\" : true } } , { \"id\" : \"Status\" , \"fields\" : { \"type\" : \"Choice\" , \"widgetOptions\" : \"{\\\"choices\\\":[\\\"New\\\",\\\"Old\\\"],\\\"choiceOptions\\\":{\\\"New\\\":{\\\"fillColor\\\":\\\"#FF0000\\\",\\\"textColor\\\":\\\"#FFFFFF\\\"}}}\" } } ] } Response samples 200 Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" } , { \"id\" : \"popularity\" } ] } Modify columns of a table patch /docs/{docId}/tables/{tableId}/columns https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables Request Body schema: application/json the columns to change, with ids columns required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" , \"type\" : \"Int\" } } ] } Add or update columns of a table put /docs/{docId}/tables/{tableId}/columns https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noadd boolean Set to true to prohibit adding columns. noupdate boolean Set to true to prohibit updating columns. replaceall boolean Set to true to remove existing columns (except the hidden ones) that are not specified in the request body. Request Body schema: application/json The columns to add or update. We check whether the specified column ID exists: if so, the column is updated with the provided data, otherwise a new column is created. Also note that some query parameters alter this behavior. columns required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"columns\" : [ { \"id\" : \"pet\" , \"fields\" : { \"label\" : \"Pet\" } } , { \"id\" : \"popularity\" , \"fields\" : { \"label\" : \"Popularity \u2764\" , \"type\" : \"Int\" } } ] } Delete a column of a table delete /docs/{docId}/tables/{tableId}/columns/{colId} https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/columns/{colId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables colId required string The column id (without the starting $ ) as shown in the column configuration below the label Responses 200 Success data Work with table data, using a (now deprecated) columnar format. We now recommend the records endpoints. Fetch data from a table Deprecated get /docs/{docId}/tables/{tableId}/data https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/data Deprecated in favor of records endpoints. We have no immediate plans to remove these endpoints, but consider records a better starting point for new projects. Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters filter string Example: filter={\"pet\": [\"cat\", \"dog\"]} This is a JSON object mapping column names to arrays of allowed values. For example, to filter column pet for values cat and dog , the filter would be {\"pet\": [\"cat\", \"dog\"]} . JSON contains characters that are not safe to place in a URL, so it is important to url-encode them. For this example, the url-encoding is %7B%22pet%22%3A%20%5B%22cat%22%2C%20%22dog%22%5D%7D . See https://rosettacode.org/wiki/URL_encoding for how to url-encode a string, or https://www.urlencoder.org/ to try some examples. Multiple columns can be filtered. For example the filter for pet being either cat or dog , AND size being either tiny or outrageously small , would be {\"pet\": [\"cat\", \"dog\"], \"size\": [\"tiny\", \"outrageously small\"]} . sort string Example: sort=pet,-age Order in which to return results. If a single column name is given (e.g. pet ), results are placed in ascending order of values in that column. To get results in an order that was previously prepared manually in Grist, use the special manualSort column name. Multiple columns can be specified, separated by commas (e.g. pet,age ). For descending order, prefix a column name with a - character (e.g. pet,-age ). To include additional sorting options append them after a colon (e.g. pet,-age:naturalSort;emptyFirst,owner ). Available options are: choiceOrder , naturalSort , emptyFirst . Without the sort parameter, the order of results is unspecified. limit number Example: limit=5 Return at most this number of rows. A value of 0 is equivalent to having no limit. header Parameters X-Sort string Example: pet,-age Same as sort query parameter. X-Limit number Example: 5 Same as limit query parameter. Responses 200 Cells from the table Response samples 200 Content type application/json Copy Expand all Collapse all { \"id\" : [ 1 , 2 ] , \"pet\" : [ \"cat\" , \"dog\" ] , \"popularity\" : [ 67 , 95 ] } Add rows to a table Deprecated post /docs/{docId}/tables/{tableId}/data https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/data Deprecated in favor of records endpoints. We have no immediate plans to remove these endpoints, but consider records a better starting point for new projects. Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. Request Body schema: application/json the data to add property name* additional property Array of objects Responses 200 IDs of rows added Request samples Payload Content type application/json Copy Expand all Collapse all { \"pet\" : [ \"cat\" , \"dog\" ] , \"popularity\" : [ 67 , 95 ] } Response samples 200 Content type application/json Copy [ 101 , 102 , 103 ] Modify rows of a table Deprecated patch /docs/{docId}/tables/{tableId}/data https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/data Deprecated in favor of records endpoints. We have no immediate plans to remove these endpoints, but consider records a better starting point for new projects. Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables query Parameters noparse boolean Set to true to prohibit parsing strings according to the column type. Request Body schema: application/json the data to change, with ids id required Array of integers property name* additional property Array of objects Responses 200 IDs of rows modified Request samples Payload Content type application/json Copy Expand all Collapse all { \"id\" : [ 1 , 2 ] , \"pet\" : [ \"cat\" , \"dog\" ] , \"popularity\" : [ 67 , 95 ] } Response samples 200 Content type application/json Copy [ 101 , 102 , 103 ] Delete rows of a table post /docs/{docId}/tables/{tableId}/data/delete https://{subdomain}.getgrist.com/api /docs/{docId}/tables/{tableId}/data/delete Authorizations: ApiKey path Parameters docId required string A string id (UUID) tableId required string normalized table name (see TABLE ID in Raw Data) or numeric row ID in _grist_Tables Request Body schema: application/json the IDs of rows to remove Array integer Responses 200 Nothing returned Request samples Payload Content type application/json Copy [ 101 , 102 , 103 ] attachments Documents may include attached files. Data records can refer to these using a column of type Attachments . List metadata of all attachments in a doc get /docs/{docId}/attachments https://{subdomain}.getgrist.com/api /docs/{docId}/attachments Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters filter string Example: filter={\"pet\": [\"cat\", \"dog\"]} This is a JSON object mapping column names to arrays of allowed values. For example, to filter column pet for values cat and dog , the filter would be {\"pet\": [\"cat\", \"dog\"]} . JSON contains characters that are not safe to place in a URL, so it is important to url-encode them. For this example, the url-encoding is %7B%22pet%22%3A%20%5B%22cat%22%2C%20%22dog%22%5D%7D . See https://rosettacode.org/wiki/URL_encoding for how to url-encode a string, or https://www.urlencoder.org/ to try some examples. Multiple columns can be filtered. For example the filter for pet being either cat or dog , AND size being either tiny or outrageously small , would be {\"pet\": [\"cat\", \"dog\"], \"size\": [\"tiny\", \"outrageously small\"]} . sort string Example: sort=pet,-age Order in which to return results. If a single column name is given (e.g. pet ), results are placed in ascending order of values in that column. To get results in an order that was previously prepared manually in Grist, use the special manualSort column name. Multiple columns can be specified, separated by commas (e.g. pet,age ). For descending order, prefix a column name with a - character (e.g. pet,-age ). To include additional sorting options append them after a colon (e.g. pet,-age:naturalSort;emptyFirst,owner ). Available options are: choiceOrder , naturalSort , emptyFirst . Without the sort parameter, the order of results is unspecified. limit number Example: limit=5 Return at most this number of rows. A value of 0 is equivalent to having no limit. header Parameters X-Sort string Example: pet,-age Same as sort query parameter. X-Limit number Example: 5 Same as limit query parameter. Responses 200 List of attachment metadata records. Note that the list may temporarily include records for attachments that are stored in the document but not referenced by any Attachments type cell. Response samples 200 Content type application/json Copy Expand all Collapse all { \"records\" : [ { \"id\" : 1 , \"fields\" : { \"fileName\" : \"logo.png\" , \"fileSize\" : 12345 , \"timeUploaded\" : \"2020-02-13T12:17:19.000Z\" } } ] } Upload attachments to a doc post /docs/{docId}/attachments https://{subdomain}.getgrist.com/api /docs/{docId}/attachments Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: multipart/form-data the files to add to the doc upload Array of strings < binary > Responses 200 IDs of attachments added, one per file. Response samples 200 Content type application/json Copy [ 101 , 102 , 103 ] Get the metadata for an attachment get /docs/{docId}/attachments/{attachmentId} https://{subdomain}.getgrist.com/api /docs/{docId}/attachments/{attachmentId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) attachmentId required number ( AttachmentId ) An integer ID Responses 200 Attachment metadata Response samples 200 Content type application/json Copy { \"fileName\" : \"logo.png\" , \"fileSize\" : 12345 , \"timeUploaded\" : \"2020-02-13T12:17:19.000Z\" } Download the contents of an attachment get /docs/{docId}/attachments/{attachmentId}/download https://{subdomain}.getgrist.com/api /docs/{docId}/attachments/{attachmentId}/download Authorizations: ApiKey path Parameters docId required string A string id (UUID) attachmentId required number ( AttachmentId ) An integer ID Responses 200 Attachment contents, with suitable Content-Type. webhooks Document changes can trigger requests to URLs called webhooks. Webhooks associated with a document get /docs/{docId}/webhooks https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 A list of webhooks. Response samples 200 Content type application/json Copy Expand all Collapse all { \"webhooks\" : [ { \"id\" : \"xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx\" , \"fields\" : { \"name\" : \"new-project-email\" , \"memo\" : \"Send an email when a project is added\" , \"url\" : \" https://example.com/webhook/123 \" , \"enabled\" : true , \"eventTypes\" : [ \"add\" , \"update\" ] , \"isReadyColumn\" : null , \"tableId\" : \"Projects\" , \"unsubscribeKey\" : \"string\" } , \"usage\" : { \"numWaiting\" : 0 , \"status\" : \"idle\" , \"updatedTime\" : 1685637500424 , \"lastSuccessTime\" : 1685637500424 , \"lastFailureTime\" : 1685637500424 , \"lastErrorMessage\" : null , \"lastHttpStatus\" : 200 , \"lastEventBatch\" : { \"size\" : 1 , \"attempts\" : 1 , \"errorMessage\" : null , \"httpStatus\" : 200 , \"status\" : \"success\" } } } ] } Create new webhooks for a document post /docs/{docId}/webhooks https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json an array of webhook settings webhooks required Array of objects Responses 200 Success Request samples Payload Content type application/json Copy Expand all Collapse all { \"webhooks\" : [ { \"fields\" : { \"name\" : \"new-project-email\" , \"memo\" : \"Send an email when a project is added\" , \"url\" : \" https://example.com/webhook/123 \" , \"enabled\" : true , \"eventTypes\" : [ \"add\" , \"update\" ] , \"isReadyColumn\" : null , \"tableId\" : \"Projects\" } } ] } Response samples 200 Content type application/json Copy Expand all Collapse all { \"webhooks\" : [ { \"id\" : \"xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx\" } ] } Modify a webhook patch /docs/{docId}/webhooks/{webhookId} https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks/{webhookId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) webhookId required string Request Body schema: application/json the changes to make name string or null memo string or null url string < uri > enabled boolean eventTypes Array of strings isReadyColumn string or null tableId string Responses 200 Success. Request samples Payload Content type application/json Copy Expand all Collapse all { \"name\" : \"new-project-email\" , \"memo\" : \"Send an email when a project is added\" , \"url\" : \" https://example.com/webhook/123 \" , \"enabled\" : true , \"eventTypes\" : [ \"add\" , \"update\" ] , \"isReadyColumn\" : null , \"tableId\" : \"Projects\" } Remove a webhook delete /docs/{docId}/webhooks/{webhookId} https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks/{webhookId} Authorizations: ApiKey path Parameters docId required string A string id (UUID) webhookId required string Responses 200 Success. Response samples 200 Content type application/json Copy { \"success\" : true } Empty a document's queue of undelivered payloads delete /docs/{docId}/webhooks/queue https://{subdomain}.getgrist.com/api /docs/{docId}/webhooks/queue Authorizations: ApiKey path Parameters docId required string A string id (UUID) Responses 200 Success. sql Sql endpoint to query data from documents. Run an SQL query against a document get /docs/{docId}/sql https://{subdomain}.getgrist.com/api /docs/{docId}/sql Authorizations: ApiKey path Parameters docId required string A string id (UUID) query Parameters q string The SQL query to run. This GET endpoint is a simplified version of the corresponding POST endpoint, without support for parameters or options. See the POST endpoint for details of what's allowed in the SQL query string. Responses 200 The result set for the query. Response samples 200 Content type application/json Copy Expand all Collapse all { \"statement\" : \"select * from Pets ...\" , \"records\" : [ { \"fields\" : { \"id\" : 1 , \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"fields\" : { \"id\" : 2 , \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } Run an SQL query against a document, with options or parameters post /docs/{docId}/sql https://{subdomain}.getgrist.com/api /docs/{docId}/sql Authorizations: ApiKey path Parameters docId required string A string id (UUID) Request Body schema: application/json Query options sql required string The SQL query to run. Must be a single SELECT statement, with no trailing semicolon. WITH clauses are permitted. All Grist documents are currently SQLite databases, and the SQL query is interpreted and run by SQLite, with various defensive measures. Statements that would modify the database are not supported. args Array of numbers or strings Parameters for the query. timeout number Timeout after which operations on the document will be interrupted. Specified in milliseconds. Defaults to 1000 (1 second). This default is controlled by an optional environment variable read by the Grist app, GRIST_SQL_TIMEOUT_MSEC. The default cannot be exceeded, only reduced. Responses 200 The result set for the query. Request samples Payload Content type application/json Copy Expand all Collapse all { \"sql\" : \"select * from Pets where popularity >= ?\" , \"args\" : [ 50 ] , \"timeout\" : 500 } Response samples 200 Content type application/json Copy Expand all Collapse all { \"statement\" : \"select * from Pets ...\" , \"records\" : [ { \"fields\" : { \"id\" : 1 , \"pet\" : \"cat\" , \"popularity\" : 67 } } , { \"fields\" : { \"id\" : 2 , \"pet\" : \"dog\" , \"popularity\" : 95 } } ] } users Grist users. Delete a user from Grist delete /users/{userId} https://{subdomain}.getgrist.com/api /users/{userId} This action also deletes the user's personal organisation and all the workspaces and documents it contains. Currently, only the users themselves are allowed to delete their own accounts. \u26a0\ufe0f This action cannot be undone, please be cautious when using this endpoint \u26a0\ufe0f Authorizations: ApiKey path Parameters userId required integer A user id Request Body schema: application/json name required string The user's name to delete (for confirmation, to avoid deleting the wrong account). Responses 200 The account has been deleted successfully 400 The passed user name does not match the one retrieved from the database given the passed user id 403 The caller is not allowed to delete this account 404 The user is not found Request samples Payload Content type application/json Copy { \"name\" : \"John Doe\" } const __redoc_state = {\"menu\":{\"activeItemIdx\":-1},\"spec\":{\"data\":{\"info\":{\"description\":\"An API for manipulating Grist sites, workspaces, and documents.\\n\\n# Authentication\\n\\n\",\"version\":\"1.0.1\",\"title\":\"Grist API\"},\"openapi\":\"3.0.0\",\"security\":[{\"ApiKey\":[]}],\"servers\":[{\"url\":\"https://{subdomain}.getgrist.com/api\",\"variables\":{\"subdomain\":{\"description\":\"The team name, or `docs` for personal areas\",\"default\":\"docs\"}}}],\"paths\":{\"/orgs\":{\"get\":{\"operationId\":\"listOrgs\",\"tags\":[\"orgs\"],\"summary\":\"List the orgs you have access to\",\"description\":\"This enumerates all the team sites or personal areas available.\",\"responses\":{\"200\":{\"description\":\"An array of organizations\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Orgs\"}}}}}}},\"/orgs/{orgId}\":{\"get\":{\"operationId\":\"describeOrg\",\"tags\":[\"orgs\"],\"summary\":\"Describe an org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"An organization\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Org\"}}}}}},\"patch\":{\"operationId\":\"modifyOrg\",\"tags\":[\"orgs\"],\"summary\":\"Modify an org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/OrgParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"delete\":{\"operationId\":\"deleteOrg\",\"tags\":[\"orgs\"],\"summary\":\"Delete an org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success\"},\"403\":{\"description\":\"Access denied\"},\"404\":{\"description\":\"Not found\"}}}},\"/orgs/{orgId}/access\":{\"get\":{\"operationId\":\"listOrgAccess\",\"tags\":[\"orgs\"],\"summary\":\"List users with access to org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Users with access to org\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/OrgAccessRead\"}}}}}},\"patch\":{\"operationId\":\"modifyOrgAccess\",\"tags\":[\"orgs\"],\"summary\":\"Change who has access to org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"delta\"],\"properties\":{\"delta\":{\"$ref\":\"#/components/schemas/OrgAccessWrite\"}}}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/orgs/{orgId}/workspaces\":{\"get\":{\"operationId\":\"listWorkspaces\",\"tags\":[\"workspaces\"],\"summary\":\"List workspaces and documents within an org\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"An org's workspaces and documents\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WorkspaceWithDocsAndDomain\"}}}}}}},\"post\":{\"operationId\":\"createWorkspace\",\"tags\":[\"workspaces\"],\"summary\":\"Create an empty workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/orgIdPathParam\"}],\"requestBody\":{\"description\":\"settings for the workspace\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WorkspaceParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"The workspace id\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"integer\",\"description\":\"an identifier for the workspace\",\"example\":155}}}}}}},\"/workspaces/{workspaceId}\":{\"get\":{\"operationId\":\"describeWorkspace\",\"tags\":[\"workspaces\"],\"summary\":\"Describe a workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"A workspace\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WorkspaceWithDocsAndOrg\"}}}}}},\"patch\":{\"operationId\":\"modifyWorkspace\",\"tags\":[\"workspaces\"],\"summary\":\"Modify a workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WorkspaceParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"delete\":{\"operationId\":\"deleteWorkspace\",\"tags\":[\"workspaces\"],\"summary\":\"Delete a workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/workspaces/{workspaceId}/docs\":{\"post\":{\"operationId\":\"createDoc\",\"tags\":[\"docs\"],\"summary\":\"Create an empty document\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"requestBody\":{\"description\":\"settings for the document\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"The document id\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"string\",\"description\":\"a unique identifier for the document\",\"example\":\"8b97c8db-b4df-4b34-b72c-17459e70140a\"}}}}}}},\"/workspaces/{workspaceId}/access\":{\"get\":{\"operationId\":\"listWorkspaceAccess\",\"tags\":[\"workspaces\"],\"summary\":\"List users with access to workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Users with access to workspace\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WorkspaceAccessRead\"}}}}}},\"patch\":{\"operationId\":\"modifyWorkspaceAccess\",\"tags\":[\"workspaces\"],\"summary\":\"Change who has access to workspace\",\"parameters\":[{\"$ref\":\"#/components/parameters/workspaceIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"delta\"],\"properties\":{\"delta\":{\"$ref\":\"#/components/schemas/WorkspaceAccessWrite\"}}}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}\":{\"get\":{\"operationId\":\"describeDoc\",\"tags\":[\"docs\"],\"summary\":\"Describe a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"A document's metadata\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocWithWorkspace\"}}}}}},\"patch\":{\"operationId\":\"modifyDoc\",\"tags\":[\"docs\"],\"summary\":\"Modify document metadata (but not its contents)\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocParameters\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"delete\":{\"operationId\":\"deleteDoc\",\"tags\":[\"docs\"],\"summary\":\"Delete a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/move\":{\"patch\":{\"operationId\":\"moveDoc\",\"tags\":[\"docs\"],\"summary\":\"Move document to another workspace.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the target workspace\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"workspace\"],\"properties\":{\"workspace\":{\"type\":\"integer\",\"example\":597}}}}}},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/access\":{\"get\":{\"operationId\":\"listDocAccess\",\"tags\":[\"docs\"],\"summary\":\"List users with access to document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Users with access to document\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocAccessRead\"}}}}}},\"patch\":{\"operationId\":\"modifyDocAccess\",\"tags\":[\"docs\"],\"summary\":\"Change who has access to document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"delta\"],\"properties\":{\"delta\":{\"$ref\":\"#/components/schemas/DocAccessWrite\"}}}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/download\":{\"get\":{\"operationId\":\"downloadDoc\",\"tags\":[\"docs\"],\"summary\":\"Content of document, as an Sqlite file\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"query\",\"name\":\"nohistory\",\"schema\":{\"type\":\"boolean\",\"description\":\"Remove document history (can significantly reduce file size)\"},\"required\":false},{\"in\":\"query\",\"name\":\"template\",\"schema\":{\"type\":\"boolean\",\"description\":\"Remove all data and history but keep the structure to use the document as a template\"},\"required\":false}],\"responses\":{\"200\":{\"description\":\"A document's content in Sqlite form\",\"content\":{\"application/x-sqlite3\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"}}}}}}},\"/docs/{docId}/download/xlsx\":{\"get\":{\"operationId\":\"downloadDocXlsx\",\"tags\":[\"docs\"],\"summary\":\"Content of document, as an Excel file\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/headerQueryParam\"}],\"responses\":{\"200\":{\"description\":\"A document's content in Excel form\",\"content\":{\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"}}}}}}},\"/docs/{docId}/download/csv\":{\"get\":{\"operationId\":\"downloadDocCsv\",\"tags\":[\"docs\"],\"summary\":\"Content of table, as a CSV file\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"query\",\"name\":\"tableId\",\"schema\":{\"type\":\"string\",\"description\":\"Name of a table (normalized).\"},\"required\":true},{\"$ref\":\"#/components/parameters/headerQueryParam\"}],\"responses\":{\"200\":{\"description\":\"A table's content in CSV form\",\"content\":{\"text/csv\":{\"schema\":{\"type\":\"string\"}}}}}}},\"/docs/{docId}/download/table-schema\":{\"get\":{\"operationId\":\"downloadTableSchema\",\"tags\":[\"docs\"],\"summary\":\"The schema of a table\",\"description\":\"The schema follows [frictionlessdata's table-schema standard](https://specs.frictionlessdata.io/table-schema/).\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"query\",\"name\":\"tableId\",\"schema\":{\"type\":\"string\",\"description\":\"Name of a table (normalized).\"},\"required\":true},{\"$ref\":\"#/components/parameters/headerQueryParam\"}],\"responses\":{\"200\":{\"description\":\"A table's table-schema in JSON format.\",\"content\":{\"text/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TableSchemaResult\"}}}}}}},\"/docs/{docId}/states/remove\":{\"post\":{\"operationId\":\"deleteActions\",\"tags\":[\"docs\"],\"summary\":\"Truncate the document's action history\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"keep\"],\"properties\":{\"keep\":{\"type\":\"integer\",\"description\":\"The number of the latest history actions to keep\"}},\"example\":{\"keep\":3}}}}}}},\"/docs/{docId}/force-reload\":{\"post\":{\"operationId\":\"forceReload\",\"tags\":[\"docs\"],\"summary\":\"Reload a document\",\"description\":\"Closes and reopens the document, forcing the python engine to restart.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Document reloaded successfully\"}}}},\"/docs/{docId}/tables/{tableId}/data\":{\"get\":{\"operationId\":\"getTableData\",\"tags\":[\"data\"],\"summary\":\"Fetch data from a table\",\"deprecated\":true,\"description\":\"Deprecated in favor of `records` endpoints. We have no immediate plans to remove these endpoints, but consider `records` a better starting point for new projects.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/filterQueryParam\"},{\"$ref\":\"#/components/parameters/sortQueryParam\"},{\"$ref\":\"#/components/parameters/limitQueryParam\"},{\"$ref\":\"#/components/parameters/sortHeaderParam\"},{\"$ref\":\"#/components/parameters/limitHeaderParam\"}],\"responses\":{\"200\":{\"description\":\"Cells from the table\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Data\"}}}}}},\"post\":{\"operationId\":\"addRows\",\"tags\":[\"data\"],\"summary\":\"Add rows to a table\",\"deprecated\":true,\"description\":\"Deprecated in favor of `records` endpoints. We have no immediate plans to remove these endpoints, but consider `records` a better starting point for new projects.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"}],\"requestBody\":{\"description\":\"the data to add\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DataWithoutId\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"IDs of rows added\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RowIds\"}}}}}},\"patch\":{\"operationId\":\"modifyRows\",\"tags\":[\"data\"],\"summary\":\"Modify rows of a table\",\"deprecated\":true,\"description\":\"Deprecated in favor of `records` endpoints. We have no immediate plans to remove these endpoints, but consider `records` a better starting point for new projects.\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"}],\"requestBody\":{\"description\":\"the data to change, with ids\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Data\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"IDs of rows modified\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RowIds\"}}}}}}},\"/docs/{docId}/tables/{tableId}/data/delete\":{\"post\":{\"operationId\":\"deleteRows\",\"tags\":[\"data\"],\"summary\":\"Delete rows of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"}],\"requestBody\":{\"description\":\"the IDs of rows to remove\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RowIds\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Nothing returned\"}}}},\"/docs/{docId}/attachments\":{\"get\":{\"operationId\":\"listAttachments\",\"tags\":[\"attachments\"],\"summary\":\"List metadata of all attachments in a doc\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/filterQueryParam\"},{\"$ref\":\"#/components/parameters/sortQueryParam\"},{\"$ref\":\"#/components/parameters/limitQueryParam\"},{\"$ref\":\"#/components/parameters/sortHeaderParam\"},{\"$ref\":\"#/components/parameters/limitHeaderParam\"}],\"responses\":{\"200\":{\"description\":\"List of attachment metadata records. Note that the list may temporarily include records for attachments that are stored in the document but not referenced by any Attachments type cell.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AttachmentMetadataList\"}}}}}},\"post\":{\"operationId\":\"uploadAttachments\",\"tags\":[\"attachments\"],\"summary\":\"Upload attachments to a doc\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the files to add to the doc\",\"content\":{\"multipart/form-data\":{\"schema\":{\"$ref\":\"#/components/schemas/AttachmentUpload\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"IDs of attachments added, one per file.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RowIds\"}}}}}}},\"/docs/{docId}/attachments/{attachmentId}\":{\"get\":{\"operationId\":\"getAttachmentMetadata\",\"tags\":[\"attachments\"],\"summary\":\"Get the metadata for an attachment\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"path\",\"name\":\"attachmentId\",\"schema\":{\"$ref\":\"#/components/schemas/AttachmentId\"},\"required\":true}],\"responses\":{\"200\":{\"description\":\"Attachment metadata\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AttachmentMetadata\"}}}}}}},\"/docs/{docId}/attachments/{attachmentId}/download\":{\"get\":{\"operationId\":\"downloadAttachment\",\"tags\":[\"attachments\"],\"summary\":\"Download the contents of an attachment\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"path\",\"name\":\"attachmentId\",\"schema\":{\"$ref\":\"#/components/schemas/AttachmentId\"},\"required\":true}],\"responses\":{\"200\":{\"description\":\"Attachment contents, with suitable Content-Type.\"}}}},\"/docs/{docId}/tables/{tableId}/records\":{\"get\":{\"operationId\":\"listRecords\",\"tags\":[\"records\"],\"summary\":\"Fetch records from a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/filterQueryParam\"},{\"$ref\":\"#/components/parameters/sortQueryParam\"},{\"$ref\":\"#/components/parameters/limitQueryParam\"},{\"$ref\":\"#/components/parameters/sortHeaderParam\"},{\"$ref\":\"#/components/parameters/limitHeaderParam\"},{\"$ref\":\"#/components/parameters/hiddenQueryParam\"}],\"responses\":{\"200\":{\"description\":\"Records from the table\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsList\"}}}}}},\"post\":{\"operationId\":\"addRecords\",\"tags\":[\"records\"],\"summary\":\"Add records to a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"}],\"requestBody\":{\"description\":\"the records to add\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsWithoutId\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"IDs of records added\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsWithoutFields\"}}}}}},\"patch\":{\"operationId\":\"modifyRecords\",\"tags\":[\"records\"],\"summary\":\"Modify records of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"}],\"requestBody\":{\"description\":\"the records to change, with ids\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsList\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"put\":{\"operationId\":\"replaceRecords\",\"tags\":[\"records\"],\"summary\":\"Add or update records of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/noparseQueryParam\"},{\"in\":\"query\",\"name\":\"onmany\",\"schema\":{\"type\":\"string\",\"enum\":[\"first\",\"none\",\"all\"],\"description\":\"Which records to update if multiple records are found to match `require`.\\n * `first` - the first matching record (default)\\n * `none` - do not update anything\\n * `all` - update all matches\\n\"}},{\"in\":\"query\",\"name\":\"noadd\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to prohibit adding records.\"}},{\"in\":\"query\",\"name\":\"noupdate\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to prohibit updating records.\"}},{\"in\":\"query\",\"name\":\"allow_empty_require\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to allow `require` in the body to be empty, which will match and update all records in the table.\"}}],\"requestBody\":{\"description\":\"The records to add or update. Instead of an id, a `require` object is provided, with the same structure as `fields`. If no query parameter options are set, then the operation is as follows. First, we check if a record exists matching the values specified for columns in `require`. If so, we update it by setting the values specified for columns in `fields`. If not, we create a new record with a combination of the values in `require` and `fields`, with `fields` taking priority if the same column is specified in both. The query parameters allow for variations on this behavior.\\n\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RecordsWithRequire\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/tables\":{\"get\":{\"operationId\":\"listTables\",\"tags\":[\"tables\"],\"summary\":\"List tables in a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"The tables in a document\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TablesList\"}}}}}},\"post\":{\"operationId\":\"addTables\",\"tags\":[\"tables\"],\"summary\":\"Add tables to a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the tables to add\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateTables\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"The table created\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TablesWithoutFields\"}}}}}},\"patch\":{\"operationId\":\"modifyTables\",\"tags\":[\"tables\"],\"summary\":\"Modify tables of a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"the tables to change, with ids\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TablesList\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/tables/{tableId}/columns\":{\"get\":{\"operationId\":\"listColumns\",\"tags\":[\"columns\"],\"summary\":\"List columns in a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/hiddenQueryParam\"}],\"responses\":{\"200\":{\"description\":\"The columns in a table\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ColumnsList\"}}}}}},\"post\":{\"operationId\":\"addColumns\",\"tags\":[\"columns\"],\"summary\":\"Add columns to a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"}],\"requestBody\":{\"description\":\"the columns to add\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateColumns\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"The columns created\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ColumnsWithoutFields\"}}}}}},\"patch\":{\"operationId\":\"modifyColumns\",\"tags\":[\"columns\"],\"summary\":\"Modify columns of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"}],\"requestBody\":{\"description\":\"the columns to change, with ids\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/UpdateColumns\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}},\"put\":{\"operationId\":\"replaceColumns\",\"tags\":[\"columns\"],\"summary\":\"Add or update columns of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"in\":\"query\",\"name\":\"noadd\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to prohibit adding columns.\"}},{\"in\":\"query\",\"name\":\"noupdate\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to prohibit updating columns.\"}},{\"in\":\"query\",\"name\":\"replaceall\",\"schema\":{\"type\":\"boolean\",\"description\":\"Set to true to remove existing columns (except the hidden ones) that are not specified in the request body.\"}}],\"requestBody\":{\"description\":\"The columns to add or update. We check whether the specified column ID exists: if so, the column is updated with the provided data, otherwise a new column is created.\\nAlso note that some query parameters alter this behavior.\\n\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/UpdateColumns\"}}},\"required\":true},\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/tables/{tableId}/columns/{colId}\":{\"delete\":{\"operationId\":\"deleteColumn\",\"tags\":[\"columns\"],\"summary\":\"Delete a column of a table\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"$ref\":\"#/components/parameters/tableIdPathParam\"},{\"$ref\":\"#/components/parameters/colIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success\"}}}},\"/docs/{docId}/webhooks\":{\"get\":{\"tags\":[\"webhooks\"],\"summary\":\"Webhooks associated with a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"A list of webhooks.\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"webhooks\"],\"properties\":{\"webhooks\":{\"type\":\"object\",\"$ref\":\"#/components/schemas/Webhooks\"}}}}}}}},\"post\":{\"tags\":[\"webhooks\"],\"summary\":\"Create new webhooks for a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"an array of webhook settings\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"webhooks\"],\"properties\":{\"webhooks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"fields\"],\"properties\":{\"fields\":{\"$ref\":\"#/components/schemas/WebhookPartialFields\"}}}}}}}}},\"responses\":{\"200\":{\"description\":\"Success\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"webhooks\"],\"properties\":{\"webhooks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"$ref\":\"#/components/schemas/WebhookId\"}}}}}}}}}},\"/docs/{docId}/webhooks/{webhookId}\":{\"patch\":{\"tags\":[\"webhooks\"],\"summary\":\"Modify a webhook\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"path\",\"name\":\"webhookId\",\"schema\":{\"type\":\"string\"},\"required\":true}],\"requestBody\":{\"description\":\"the changes to make\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookPartialFields\"}}}},\"responses\":{\"200\":{\"description\":\"Success.\"}}},\"delete\":{\"tags\":[\"webhooks\"],\"summary\":\"Remove a webhook\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"path\",\"name\":\"webhookId\",\"schema\":{\"type\":\"string\"},\"required\":true}],\"responses\":{\"200\":{\"description\":\"Success.\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"success\"],\"properties\":{\"success\":{\"type\":\"boolean\",\"example\":true}}}}}}}}},\"/docs/{docId}/webhooks/queue\":{\"delete\":{\"tags\":[\"webhooks\"],\"summary\":\"Empty a document's queue of undelivered payloads\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"responses\":{\"200\":{\"description\":\"Success.\"}}}},\"/docs/{docId}/sql\":{\"get\":{\"tags\":[\"sql\"],\"summary\":\"Run an SQL query against a document\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"},{\"in\":\"query\",\"name\":\"q\",\"schema\":{\"type\":\"string\",\"description\":\"The SQL query to run. This GET endpoint is a simplified version of the corresponding POST endpoint, without support for parameters or options. See the POST endpoint for details of what's allowed in the SQL query string.\"}}],\"responses\":{\"200\":{\"description\":\"The result set for the query.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SqlResultSet\"}}}}}},\"post\":{\"tags\":[\"sql\"],\"summary\":\"Run an SQL query against a document, with options or parameters\",\"parameters\":[{\"$ref\":\"#/components/parameters/docIdPathParam\"}],\"requestBody\":{\"description\":\"Query options\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"sql\"],\"properties\":{\"sql\":{\"type\":\"string\",\"description\":\"The SQL query to run. Must be a single SELECT statement, with no trailing semicolon. WITH clauses are permitted. All Grist documents are currently SQLite databases, and the SQL query is interpreted and run by SQLite, with various defensive measures. Statements that would modify the database are not supported.\",\"example\":\"select * from Pets where popularity >= ?\"},\"args\":{\"type\":\"array\",\"items\":{\"oneOf\":[{\"type\":\"number\"},{\"type\":\"string\"}]},\"description\":\"Parameters for the query.\",\"example\":[50]},\"timeout\":{\"type\":\"number\",\"description\":\"Timeout after which operations on the document will be interrupted. Specified in milliseconds. Defaults to 1000 (1 second). This default is controlled by an optional environment variable read by the Grist app, GRIST_SQL_TIMEOUT_MSEC. The default cannot be exceeded, only reduced.\",\"example\":500}}}}}},\"responses\":{\"200\":{\"description\":\"The result set for the query.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SqlResultSet\"}}}}}}},\"/users/{userId}\":{\"delete\":{\"tags\":[\"users\"],\"summary\":\"Delete a user from Grist\",\"description\":\"This action also deletes the user's personal organisation and all the workspaces and documents it contains.\\nCurrently, only the users themselves are allowed to delete their own accounts.\\n\\n\u26a0\ufe0f **This action cannot be undone, please be cautious when using this endpoint** \u26a0\ufe0f\\n\",\"parameters\":[{\"$ref\":\"#/components/parameters/userIdPathParam\"}],\"requestBody\":{\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"name\"],\"properties\":{\"name\":{\"type\":\"string\",\"description\":\"The user's name to delete (for confirmation, to avoid deleting the wrong account).\",\"example\":\"John Doe\"}}}}}},\"responses\":{\"200\":{\"description\":\"The account has been deleted successfully\"},\"400\":{\"description\":\"The passed user name does not match the one retrieved from the database given the passed user id\"},\"403\":{\"description\":\"The caller is not allowed to delete this account\"},\"404\":{\"description\":\"The user is not found\"}}}}},\"tags\":[{\"name\":\"orgs\",\"description\":\"Team sites and personal spaces are called 'orgs' in the API.\"},{\"name\":\"workspaces\",\"description\":\"Sites can be organized into groups of documents called workspaces.\"},{\"name\":\"docs\",\"description\":\"Workspaces contain collections of Grist documents.\"},{\"name\":\"records\",\"description\":\"Tables contain collections of records (also called rows).\"},{\"name\":\"tables\",\"description\":\"Documents are structured as a collection of tables.\"},{\"name\":\"columns\",\"description\":\"Tables are structured as a collection of columns.\"},{\"name\":\"data\",\"description\":\"Work with table data, using a (now deprecated) columnar format. We now recommend the `records` endpoints.\"},{\"name\":\"attachments\",\"description\":\"Documents may include attached files. Data records can refer to these using a column of type `Attachments`.\"},{\"name\":\"webhooks\",\"description\":\"Document changes can trigger requests to URLs called webhooks.\"},{\"name\":\"sql\",\"description\":\"Sql endpoint to query data from documents.\"},{\"name\":\"users\",\"description\":\"Grist users.\"}],\"components\":{\"securitySchemes\":{\"ApiKey\":{\"type\":\"http\",\"scheme\":\"bearer\",\"bearerFormat\":\"Authorization: Bearer XXXXXXXXXXX\",\"description\":\"Access to the Grist API is controlled by an Authorization header, which should contain the word 'Bearer', followed by a space, followed by your API key.\"}},\"schemas\":{\"Org\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"domain\",\"owner\",\"createdAt\",\"updatedAt\",\"access\"],\"properties\":{\"id\":{\"type\":\"integer\",\"format\":\"int64\",\"example\":42},\"name\":{\"type\":\"string\",\"example\":\"Grist Labs\"},\"domain\":{\"type\":\"string\",\"nullable\":true,\"example\":\"gristlabs\"},\"owner\":{\"type\":\"object\",\"$ref\":\"#/components/schemas/User\",\"nullable\":true},\"access\":{\"type\":\"string\",\"$ref\":\"#/components/schemas/Access\"},\"createdAt\":{\"type\":\"string\",\"example\":\"2019-09-13T15:42:35.000Z\"},\"updatedAt\":{\"type\":\"string\",\"example\":\"2019-09-13T15:42:35.000Z\"}}},\"Orgs\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Org\"}},\"Webhooks\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Webhook\"}},\"Webhook\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"format\":\"uuid\",\"example\":\"xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx\"},\"fields\":{\"$ref\":\"#/components/schemas/WebhookFields\"},\"usage\":{\"$ref\":\"#/components/schemas/WebhookUsage\"}}},\"WebhookFields\":{\"allOf\":[{\"$ref\":\"#/components/schemas/WebhookPartialFields\"},{\"$ref\":\"#/components/schemas/WebhookRequiredFields\"}]},\"WebhookRequiredFields\":{\"type\":\"object\",\"required\":[\"name\",\"memo\",\"url\",\"enabled\",\"unsubscribeKey\",\"eventTypes\",\"isReadyColumn\",\"tableId\"],\"properties\":{\"unsubscribeKey\":{\"type\":\"string\"}}},\"WebhookPartialFields\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"new-project-email\",\"nullable\":true},\"memo\":{\"type\":\"string\",\"example\":\"Send an email when a project is added\",\"nullable\":true},\"url\":{\"type\":\"string\",\"format\":\"uri\",\"example\":\"https://example.com/webhook/123\"},\"enabled\":{\"type\":\"boolean\"},\"eventTypes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"example\":[\"add\",\"update\"]},\"isReadyColumn\":{\"type\":\"string\",\"nullable\":true,\"example\":null},\"tableId\":{\"type\":\"string\",\"example\":\"Projects\"}}},\"WebhookUsage\":{\"type\":\"object\",\"nullable\":true,\"required\":[\"numWaiting\",\"status\"],\"properties\":{\"numWaiting\":{\"type\":\"integer\"},\"status\":{\"type\":\"string\",\"example\":\"idle\"},\"updatedTime\":{\"type\":\"number\",\"nullable\":true,\"format\":\"UNIX epoch in milliseconds\",\"example\":1685637500424},\"lastSuccessTime\":{\"type\":\"number\",\"nullable\":true,\"format\":\"UNIX epoch in milliseconds\",\"example\":1685637500424},\"lastFailureTime\":{\"type\":\"number\",\"nullable\":true,\"format\":\"UNIX epoch in milliseconds\",\"example\":1685637500424},\"lastErrorMessage\":{\"type\":\"string\",\"nullable\":true,\"example\":null},\"lastHttpStatus\":{\"type\":\"number\",\"nullable\":true,\"example\":200},\"lastEventBatch\":{\"$ref\":\"#/components/schemas/WebhookBatchStatus\"}}},\"WebhookBatchStatus\":{\"type\":\"object\",\"nullable\":true,\"required\":[\"size\",\"attempts\",\"status\"],\"properties\":{\"size\":{\"type\":\"number\",\"example\":1},\"attempts\":{\"type\":\"number\",\"example\":1},\"errorMessage\":{\"type\":\"string\",\"nullable\":true,\"example\":null},\"httpStatus\":{\"type\":\"number\",\"example\":200},\"status\":{\"type\":\"string\",\"example\":\"success\"}}},\"WebhookId\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Webhook identifier\",\"example\":\"xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx\"}}},\"WebhookRequiredProperties\":{\"type\":\"object\",\"required\":[\"size\"],\"properties\":{\"size\":{\"type\":\"number\",\"example\":1}}},\"WebhookProperties\":{\"size\":{\"type\":\"number\",\"example\":1},\"attempts\":{\"type\":\"number\",\"example\":1},\"errorMessage\":{\"type\":\"string\",\"nullable\":true,\"example\":null},\"httpStatus\":{\"type\":\"number\",\"example\":200},\"status\":{\"type\":\"string\",\"example\":\"success\"}},\"Workspace\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"access\"],\"properties\":{\"id\":{\"type\":\"integer\",\"format\":\"int64\",\"example\":97},\"name\":{\"type\":\"string\",\"example\":\"Secret Plans\"},\"access\":{\"type\":\"string\",\"$ref\":\"#/components/schemas/Access\"}}},\"Doc\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"isPinned\",\"urlId\",\"access\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":145},\"name\":{\"type\":\"string\",\"example\":\"Project Lollipop\"},\"access\":{\"type\":\"string\",\"$ref\":\"#/components/schemas/Access\"},\"isPinned\":{\"type\":\"boolean\",\"example\":true},\"urlId\":{\"type\":\"string\",\"nullable\":true,\"example\":null}}},\"WorkspaceWithDocs\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Workspace\"},{\"type\":\"object\",\"required\":[\"docs\"],\"properties\":{\"docs\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Doc\"}}}}]},\"WorkspaceWithDocsAndDomain\":{\"allOf\":[{\"$ref\":\"#/components/schemas/WorkspaceWithDocs\"},{\"type\":\"object\",\"properties\":{\"orgDomain\":{\"type\":\"string\",\"example\":\"gristlabs\"}}}]},\"WorkspaceWithOrg\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Workspace\"},{\"type\":\"object\",\"required\":[\"org\"],\"properties\":{\"org\":{\"$ref\":\"#/components/schemas/Org\"}}}]},\"WorkspaceWithDocsAndOrg\":{\"allOf\":[{\"$ref\":\"#/components/schemas/WorkspaceWithDocs\"},{\"$ref\":\"#/components/schemas/WorkspaceWithOrg\"}]},\"DocWithWorkspace\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Doc\"},{\"type\":\"object\",\"required\":[\"workspace\"],\"properties\":{\"workspace\":{\"$ref\":\"#/components/schemas/WorkspaceWithOrg\"}}}]},\"User\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"picture\"],\"properties\":{\"id\":{\"type\":\"integer\",\"format\":\"int64\",\"example\":101},\"name\":{\"type\":\"string\",\"example\":\"Helga Hufflepuff\"},\"picture\":{\"type\":\"string\",\"nullable\":true,\"example\":null}}},\"Access\":{\"type\":\"string\",\"enum\":[\"owners\",\"editors\",\"viewers\"]},\"Data\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"array\",\"items\":{\"type\":\"integer\"}}},\"additionalProperties\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"example\":{\"id\":[1,2],\"pet\":[\"cat\",\"dog\"],\"popularity\":[67,95]}},\"DataWithoutId\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"example\":{\"pet\":[\"cat\",\"dog\"],\"popularity\":[67,95]}},\"RecordsList\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"fields\"],\"properties\":{\"id\":{\"type\":\"number\",\"example\":1},\"fields\":{\"type\":\"object\",\"description\":\"A JSON object mapping column names to [cell values](https://support.getgrist.com/code/interfaces/grist_plugin_api.rowrecord/#cellvalues).\"}}}}},\"example\":{\"records\":[{\"id\":1,\"fields\":{\"pet\":\"cat\",\"popularity\":67}},{\"id\":2,\"fields\":{\"pet\":\"dog\",\"popularity\":95}}]}},\"RecordsWithoutId\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"fields\"],\"properties\":{\"fields\":{\"type\":\"object\",\"description\":\"A JSON object mapping column names to [cell values](https://support.getgrist.com/code/interfaces/grist_plugin_api.rowrecord/#cellvalues).\"}}}}},\"example\":{\"records\":[{\"fields\":{\"pet\":\"cat\",\"popularity\":67}},{\"fields\":{\"pet\":\"dog\",\"popularity\":95}}]}},\"RecordsWithoutFields\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"number\",\"example\":1}}}}},\"example\":{\"records\":[{\"id\":1},{\"id\":2}]}},\"RecordsWithRequire\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"require\"],\"properties\":{\"require\":{\"type\":\"object\",\"description\":\"keys are column identifiers, and values are [cell values](https://support.getgrist.com/code/interfaces/grist_plugin_api.rowrecord/#cellvalues) we want to have in those columns (either by matching with an existing record, or creating a new record)\\n\"},\"fields\":{\"type\":\"object\",\"description\":\"keys are column identifiers, and values are [cell values](https://support.getgrist.com/code/interfaces/grist_plugin_api.rowrecord/#cellvalues) to place in those columns (either overwriting values in an existing record, or in a new record)\\n\"}}}}},\"example\":{\"records\":[{\"require\":{\"pet\":\"cat\"},\"fields\":{\"popularity\":67}},{\"require\":{\"pet\":\"dog\"},\"fields\":{\"popularity\":95}}]}},\"TablesList\":{\"type\":\"object\",\"required\":[\"tables\"],\"properties\":{\"tables\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"fields\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"Table1\"},\"fields\":{\"type\":\"object\"}}}}},\"example\":{\"tables\":[{\"id\":\"People\",\"fields\":{\"tableRef\":1,\"onDemand\":true}},{\"id\":\"Places\",\"fields\":{\"tableRef\":2,\"onDemand\":false}}]}},\"TablesWithoutFields\":{\"type\":\"object\",\"required\":[\"tables\"],\"properties\":{\"tables\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"Table1\"}}}}},\"example\":{\"tables\":[{\"id\":\"People\"},{\"id\":\"Places\"}]}},\"CreateTables\":{\"type\":\"object\",\"required\":[\"tables\"],\"properties\":{\"tables\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"columns\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"Table1\"},\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"ColumnName\"},\"fields\":{\"type\":\"object\"}}}}}}}},\"example\":{\"tables\":[{\"id\":\"People\",\"columns\":[{\"id\":\"pet\",\"fields\":{\"label\":\"Pet\"}},{\"id\":\"popularity\",\"fields\":{\"label\":\"Popularity \u2764\"}}]}]}},\"ColumnsList\":{\"type\":\"object\",\"properties\":{\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"ColumnName\"},\"fields\":{\"$ref\":\"#/components/schemas/GetFields\"}}}}},\"example\":{\"columns\":[{\"id\":\"pet\",\"fields\":{\"label\":\"Pet\"}},{\"id\":\"popularity\",\"fields\":{\"label\":\"Popularity \u2764\",\"type\":\"Int\"}}]}},\"CreateColumns\":{\"type\":\"object\",\"required\":[\"columns\"],\"properties\":{\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Column identifier\"},\"fields\":{\"$ref\":\"#/components/schemas/CreateFields\"}}}}},\"example\":{\"columns\":[{\"id\":\"pet\",\"fields\":{\"label\":\"Pet\"}},{\"id\":\"popularity\",\"fields\":{\"label\":\"Popularity \u2764\",\"type\":\"Int\"}},{\"id\":\"Order\",\"fields\":{\"type\":\"Ref:Orders\",\"visibleCol\":2}},{\"id\":\"Formula\",\"fields\":{\"type\":\"Int\",\"formula\":\"$A + $B\",\"isFormula\":true}},{\"id\":\"Status\",\"fields\":{\"type\":\"Choice\",\"widgetOptions\":\"{\\\"choices\\\":[\\\"New\\\",\\\"Old\\\"],\\\"choiceOptions\\\":{\\\"New\\\":{\\\"fillColor\\\":\\\"#FF0000\\\",\\\"textColor\\\":\\\"#FFFFFF\\\"}}}\"}}]}},\"UpdateColumns\":{\"type\":\"object\",\"required\":[\"columns\"],\"properties\":{\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"fields\"],\"properties\":{\"id\":{\"type\":\"string\",\"description\":\"Column identifier\"},\"fields\":{\"allOf\":[{\"$ref\":\"#/components/schemas/CreateFields\"},{\"type\":\"object\",\"properties\":{\"colId\":{\"type\":\"string\",\"description\":\"Set it to the new column ID when you want to change it.\"}}}]}}}}},\"example\":{\"columns\":[{\"id\":\"pet\",\"fields\":{\"label\":\"Pet\"}},{\"id\":\"popularity\",\"fields\":{\"label\":\"Popularity \u2764\",\"type\":\"Int\"}}]}},\"ColumnsWithoutFields\":{\"type\":\"object\",\"required\":[\"columns\"],\"properties\":{\"columns\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\",\"example\":\"ColumnName\"}}}}},\"example\":{\"columns\":[{\"id\":\"pet\"},{\"id\":\"popularity\"}]}},\"Fields\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"description\":\"Column type, by default Any. Ref, RefList and DateTime types requires a postfix, e.g. DateTime:America/New_York, Ref:Users\",\"enum\":[\"Any\",\"Text\",\"Numeric\",\"Int\",\"Bool\",\"Date\",\"DateTime:\",\"Choice\",\"ChoiceList\",\"Ref:\",\"RefList:\",\"Attachments\"]},\"label\":{\"type\":\"string\",\"description\":\"Column label.\"},\"formula\":{\"type\":\"string\",\"description\":\"A python formula, e.g.: $A + Table1.lookupOne(B=$B)\"},\"isFormula\":{\"type\":\"boolean\",\"description\":\"Use \\\"true\\\" to indicate that the column is a formula column. Use \\\"false\\\" for trigger formula column.\"},\"widgetOptions\":{\"type\":\"string\",\"description\":\"A JSON object with widget options, e.g.: {\\\"choices\\\": [\\\"cat\\\", \\\"dog\\\"], \\\"alignment\\\": \\\"right\\\"}\"},\"untieColIdFromLabel\":{\"type\":\"boolean\",\"description\":\"Use \\\"true\\\" to indicate that the column label should not be used as the column identifier. Use \\\"false\\\" to use the label as the identifier.\"},\"recalcWhen\":{\"type\":\"integer\",\"description\":\"A number indicating when the column should be recalculated.

    1. On new records or when any field in recalcDeps changes, it's a 'data-cleaning'.
    2. Never.
    3. Calculate on new records and on manual updates to any data field.
    \"},\"visibleCol\":{\"type\":\"integer\",\"description\":\"For Ref and RefList columns, the colRef of a column to display\"}}},\"CreateFields\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Fields\"},{\"type\":\"object\",\"properties\":{\"recalcDeps\":{\"type\":\"string\",\"description\":\"An encoded array of column identifiers (colRefs) that this column depends on. If any of these columns change, the column will be recalculated. E.g.: [2, 3]\"}}}]},\"GetFields\":{\"allOf\":[{\"$ref\":\"#/components/schemas/Fields\"},{\"type\":\"object\",\"properties\":{\"recalcDeps\":{\"type\":\"array\",\"items\":{\"type\":\"integer\"},\"description\":\"An array of column identifiers (colRefs) that this column depends on, prefixed with \\\"L\\\" constant. If any of these columns change, the column will be recalculated. E.g.: [\\\"L\\\", 2, 3]\"},\"colRef\":{\"type\":\"integer\",\"description\":\"Column reference, e.g.: 2\"}}}]},\"RowIds\":{\"type\":\"array\",\"example\":[101,102,103],\"items\":{\"type\":\"integer\"}},\"DocParameters\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"Competitive Analysis\"},\"isPinned\":{\"type\":\"boolean\",\"example\":false}}},\"WorkspaceParameters\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"Retreat Docs\"}}},\"OrgParameters\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"example\":\"ACME Unlimited\"}}},\"OrgAccessRead\":{\"type\":\"object\",\"required\":[\"users\"],\"properties\":{\"users\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"type\":\"integer\",\"example\":1},\"name\":{\"type\":\"string\",\"example\":\"Andrea\"},\"email\":{\"type\":\"string\",\"example\":\"andrea@getgrist.com\"},\"access\":{\"$ref\":\"#/components/schemas/Access\"}}}}}},\"OrgAccessWrite\":{\"type\":\"object\",\"required\":[\"users\"],\"properties\":{\"users\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\",\"enum\":[\"owners\",\"editors\",\"viewers\",\"members\",null]},\"example\":{\"foo@getgrist.com\":\"owners\",\"bar@getgrist.com\":null}}}},\"WorkspaceAccessRead\":{\"type\":\"object\",\"required\":[\"maxInheritedRole\",\"users\"],\"properties\":{\"maxInheritedRole\":{\"$ref\":\"#/components/schemas/Access\"},\"users\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"name\"],\"properties\":{\"id\":{\"type\":\"integer\",\"example\":1},\"name\":{\"type\":\"string\",\"example\":\"Andrea\"},\"email\":{\"type\":\"string\",\"example\":\"andrea@getgrist.com\"},\"access\":{\"$ref\":\"#/components/schemas/Access\"},\"parentAccess\":{\"$ref\":\"#/components/schemas/Access\"}}}}}},\"WorkspaceAccessWrite\":{\"type\":\"object\",\"properties\":{\"maxInheritedRole\":{\"$ref\":\"#/components/schemas/Access\"},\"users\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\",\"enum\":[\"owners\",\"editors\",\"viewers\",\"members\",null]},\"example\":{\"foo@getgrist.com\":\"owners\",\"bar@getgrist.com\":null}}}},\"DocAccessWrite\":{\"$ref\":\"#/components/schemas/WorkspaceAccessWrite\"},\"DocAccessRead\":{\"$ref\":\"#/components/schemas/WorkspaceAccessRead\"},\"AttachmentUpload\":{\"type\":\"object\",\"properties\":{\"upload\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"format\":\"binary\"}}}},\"AttachmentId\":{\"type\":\"number\",\"description\":\"An integer ID\"},\"AttachmentMetadata\":{\"type\":\"object\",\"properties\":{\"fileName\":{\"type\":\"string\",\"example\":\"logo.png\"},\"fileSize\":{\"type\":\"number\",\"example\":12345},\"timeUploaded\":{\"type\":\"string\",\"example\":\"2020-02-13T12:17:19.000Z\"}}},\"AttachmentMetadataList\":{\"type\":\"object\",\"required\":[\"records\"],\"properties\":{\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"fields\"],\"properties\":{\"id\":{\"type\":\"number\",\"example\":1},\"fields\":{\"$ref\":\"#/components/schemas/AttachmentMetadata\"}}}}}},\"SqlResultSet\":{\"type\":\"object\",\"required\":[\"statement\",\"records\"],\"properties\":{\"statement\":{\"type\":\"string\",\"description\":\"A copy of the SQL statement.\",\"example\":\"select * from Pets ...\"},\"records\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"fields\"],\"properties\":{\"fields\":{\"type\":\"object\"}}},\"example\":[{\"fields\":{\"id\":1,\"pet\":\"cat\",\"popularity\":67}},{\"fields\":{\"id\":2,\"pet\":\"dog\",\"popularity\":95}}]}}},\"TableSchemaResult\":{\"type\":\"object\",\"required\":[\"name\",\"title\",\"schema\"],\"properties\":{\"name\":{\"type\":\"string\",\"description\":\"The ID (technical name) of the table\"},\"title\":{\"type\":\"string\",\"description\":\"The human readable name of the table\"},\"path\":{\"type\":\"string\",\"description\":\"The URL to download the CSV\",\"example\":\"https://getgrist.com/o/docs/api/docs/ID/download/csv?tableId=Table1&....\"},\"format\":{\"type\":\"string\",\"enum\":[\"csv\"]},\"mediatype\":{\"type\":\"string\",\"enum\":[\"text/csv\"]},\"encoding\":{\"type\":\"string\",\"enum\":[\"utf-8\"]},\"dialect\":{\"$ref\":\"#/components/schemas/csv-dialect\"},\"schema\":{\"$ref\":\"#/components/schemas/table-schema\"}}},\"csv-dialect\":{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"CSV Dialect\",\"description\":\"The CSV dialect descriptor.\",\"type\":[\"string\",\"object\"],\"required\":[\"delimiter\",\"doubleQuote\"],\"properties\":{\"csvddfVersion\":{\"title\":\"CSV Dialect schema version\",\"description\":\"A number to indicate the schema version of CSV Dialect. Version 1.0 was named CSV Dialect Description Format and used different field names.\",\"type\":\"number\",\"default\":1.2,\"examples:\":[\"{\\n \\\"csvddfVersion\\\": \\\"1.2\\\"\\n}\\n\"]},\"delimiter\":{\"title\":\"Delimiter\",\"description\":\"A character sequence to use as the field separator.\",\"type\":\"string\",\"default\":\",\",\"examples\":[\"{\\n \\\"delimiter\\\": \\\",\\\"\\n}\\n\",\"{\\n \\\"delimiter\\\": \\\";\\\"\\n}\\n\"]},\"doubleQuote\":{\"title\":\"Double Quote\",\"description\":\"Specifies the handling of quotes inside fields.\",\"context\":\"If Double Quote is set to true, two consecutive quotes must be interpreted as one.\",\"type\":\"boolean\",\"default\":true,\"examples\":[\"{\\n \\\"doubleQuote\\\": true\\n}\\n\"]},\"lineTerminator\":{\"title\":\"Line Terminator\",\"description\":\"Specifies the character sequence that must be used to terminate rows.\",\"type\":\"string\",\"default\":\"\\r\\n\",\"examples\":[\"{\\n \\\"lineTerminator\\\": \\\"\\\\r\\\\n\\\"\\n}\\n\",\"{\\n \\\"lineTerminator\\\": \\\"\\\\n\\\"\\n}\\n\"]},\"nullSequence\":{\"title\":\"Null Sequence\",\"description\":\"Specifies the null sequence, for example, `\\\\N`.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"nullSequence\\\": \\\"\\\\N\\\"\\n}\\n\"]},\"quoteChar\":{\"title\":\"Quote Character\",\"description\":\"Specifies a one-character string to use as the quoting character.\",\"type\":\"string\",\"default\":\"\\\"\",\"examples\":[\"{\\n \\\"quoteChar\\\": \\\"'\\\"\\n}\\n\"]},\"escapeChar\":{\"title\":\"Escape Character\",\"description\":\"Specifies a one-character string to use as the escape character.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"escapeChar\\\": \\\"\\\\\\\\\\\"\\n}\\n\"]},\"skipInitialSpace\":{\"title\":\"Skip Initial Space\",\"description\":\"Specifies the interpretation of whitespace immediately following a delimiter. If false, whitespace immediately after a delimiter should be treated as part of the subsequent field.\",\"type\":\"boolean\",\"default\":false,\"examples\":[\"{\\n \\\"skipInitialSpace\\\": true\\n}\\n\"]},\"header\":{\"title\":\"Header\",\"description\":\"Specifies if the file includes a header row, always as the first row in the file.\",\"type\":\"boolean\",\"default\":true,\"examples\":[\"{\\n \\\"header\\\": true\\n}\\n\"]},\"commentChar\":{\"title\":\"Comment Character\",\"description\":\"Specifies that any row beginning with this one-character string, without preceeding whitespace, causes the entire line to be ignored.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"commentChar\\\": \\\"#\\\"\\n}\\n\"]},\"caseSensitiveHeader\":{\"title\":\"Case Sensitive Header\",\"description\":\"Specifies if the case of headers is meaningful.\",\"context\":\"Use of case in source CSV files is not always an intentional decision. For example, should \\\"CAT\\\" and \\\"Cat\\\" be considered to have the same meaning.\",\"type\":\"boolean\",\"default\":false,\"examples\":[\"{\\n \\\"caseSensitiveHeader\\\": true\\n}\\n\"]}},\"examples\":[\"{\\n \\\"dialect\\\": {\\n \\\"delimiter\\\": \\\";\\\"\\n }\\n}\\n\",\"{\\n \\\"dialect\\\": {\\n \\\"delimiter\\\": \\\"\\\\t\\\",\\n \\\"quoteChar\\\": \\\"'\\\",\\n \\\"commentChar\\\": \\\"#\\\"\\n }\\n}\\n\"]},\"table-schema\":{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"title\":\"Table Schema\",\"description\":\"A Table Schema for this resource, compliant with the [Table Schema](/tableschema/) specification.\",\"type\":[\"string\",\"object\"],\"required\":[\"fields\"],\"properties\":{\"fields\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"title\":\"Table Schema Field\",\"type\":\"object\",\"oneOf\":[{\"type\":\"object\",\"title\":\"String Field\",\"description\":\"The field contains strings, that is, sequences of characters.\",\"required\":[\"name\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `string`.\",\"enum\":[\"string\"]},\"format\":{\"description\":\"The format keyword options for `string` are `default`, `email`, `uri`, `binary`, and `uuid`.\",\"context\":\"The following `format` options are supported:\\n * **default**: any valid string.\\n * **email**: A valid email address.\\n * **uri**: A valid URI.\\n * **binary**: A base64 encoded string representing binary data.\\n * **uuid**: A string that is a uuid.\",\"enum\":[\"default\",\"email\",\"uri\",\"binary\",\"uuid\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `string` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"pattern\":{\"type\":\"string\",\"description\":\"A regular expression pattern to test each value of the property against, where a truthy response indicates validity.\",\"context\":\"Regular expressions `SHOULD` conform to the [XML Schema regular expression syntax](http://www.w3.org/TR/xmlschema-2/#regexs).\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the minimum length of a value.\"},\"maxLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the maximum length of a value.\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"name\\\",\\n \\\"type\\\": \\\"string\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"name\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"email\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"name\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"constraints\\\": {\\n \\\"minLength\\\": 3,\\n \\\"maxLength\\\": 35\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Number Field\",\"description\":\"The field contains numbers of any kind including decimals.\",\"context\":\"The lexical formatting follows that of decimal in [XMLSchema](https://www.w3.org/TR/xmlschema-2/#decimal): a non-empty finite-length sequence of decimal digits separated by a period as a decimal indicator. An optional leading sign is allowed. If the sign is omitted, '+' is assumed. Leading and trailing zeroes are optional. If the fractional part is zero, the period and following zero(es) can be omitted. For example: '-1.23', '12678967.543233', '+100000.00', '210'.\\n\\nThe following special string values are permitted (case does not need to be respected):\\n - NaN: not a number\\n - INF: positive infinity\\n - -INF: negative infinity\\n\\nA number `MAY` also have a trailing:\\n - exponent: this `MUST` consist of an E followed by an optional + or - sign followed by one or more decimal digits (0-9)\\n - percentage: the percentage sign: `%`. In conversion percentages should be divided by 100.\\n\\nIf both exponent and percentages are present the percentage `MUST` follow the exponent e.g. '53E10%' (equals 5.3).\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `number`.\",\"enum\":[\"number\"]},\"format\":{\"description\":\"There are no format keyword options for `number`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"bareNumber\":{\"type\":\"boolean\",\"title\":\"bareNumber\",\"description\":\"a boolean field with a default of `true`. If `true` the physical contents of this field must follow the formatting constraints already set out. If `false` the contents of this field may contain leading and/or trailing non-numeric characters (which implementors MUST therefore strip). The purpose of `bareNumber` is to allow publishers to publish numeric data that contains trailing characters such as percentages e.g. `95%` or leading characters such as currencies e.g. `\u20ac95` or `EUR 95`. Note that it is entirely up to implementors what, if anything, they do with stripped text.\",\"default\":true},\"decimalChar\":{\"type\":\"string\",\"description\":\"A string whose value is used to represent a decimal point within the number. The default value is `.`.\"},\"groupChar\":{\"type\":\"string\",\"description\":\"A string whose value is used to group digits within the number. The default value is `null`. A common value is `,` e.g. '100,000'.\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `number` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"number\"}}]},\"minimum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"number\"}]},\"maximum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"number\"}]}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"field-name\\\",\\n \\\"type\\\": \\\"number\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"field-name\\\",\\n \\\"type\\\": \\\"number\\\",\\n \\\"constraints\\\": {\\n \\\"enum\\\": [ \\\"1.00\\\", \\\"1.50\\\", \\\"2.00\\\" ]\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Integer Field\",\"description\":\"The field contains integers - that is whole numbers.\",\"context\":\"Integer values are indicated in the standard way for any valid integer.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `integer`.\",\"enum\":[\"integer\"]},\"format\":{\"description\":\"There are no format keyword options for `integer`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"bareNumber\":{\"type\":\"boolean\",\"title\":\"bareNumber\",\"description\":\"a boolean field with a default of `true`. If `true` the physical contents of this field must follow the formatting constraints already set out. If `false` the contents of this field may contain leading and/or trailing non-numeric characters (which implementors MUST therefore strip). The purpose of `bareNumber` is to allow publishers to publish numeric data that contains trailing characters such as percentages e.g. `95%` or leading characters such as currencies e.g. `\u20ac95` or `EUR 95`. Note that it is entirely up to implementors what, if anything, they do with stripped text.\",\"default\":true},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `integer` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"integer\"}}]},\"minimum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"integer\"}]},\"maximum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"integer\"}]}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"age\\\",\\n \\\"type\\\": \\\"integer\\\",\\n \\\"constraints\\\": {\\n \\\"unique\\\": true,\\n \\\"minimum\\\": 100,\\n \\\"maximum\\\": 9999\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Date Field\",\"description\":\"The field contains temporal date values.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `date`.\",\"enum\":[\"date\"]},\"format\":{\"description\":\"The format keyword options for `date` are `default`, `any`, and `{PATTERN}`.\",\"context\":\"The following `format` options are supported:\\n * **default**: An ISO8601 format string of YYYY-MM-DD.\\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).\",\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `date` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"date_of_birth\\\",\\n \\\"type\\\": \\\"date\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"date_of_birth\\\",\\n \\\"type\\\": \\\"date\\\",\\n \\\"constraints\\\": {\\n \\\"minimum\\\": \\\"01-01-1900\\\"\\n }\\n}\\n\",\"{\\n \\\"name\\\": \\\"date_of_birth\\\",\\n \\\"type\\\": \\\"date\\\",\\n \\\"format\\\": \\\"MM-DD-YYYY\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Time Field\",\"description\":\"The field contains temporal time values.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `time`.\",\"enum\":[\"time\"]},\"format\":{\"description\":\"The format keyword options for `time` are `default`, `any`, and `{PATTERN}`.\",\"context\":\"The following `format` options are supported:\\n * **default**: An ISO8601 format string for time.\\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).\",\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `time` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"appointment_start\\\",\\n \\\"type\\\": \\\"time\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"appointment_start\\\",\\n \\\"type\\\": \\\"time\\\",\\n \\\"format\\\": \\\"any\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Date Time Field\",\"description\":\"The field contains temporal datetime values.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `datetime`.\",\"enum\":[\"datetime\"]},\"format\":{\"description\":\"The format keyword options for `datetime` are `default`, `any`, and `{PATTERN}`.\",\"context\":\"The following `format` options are supported:\\n * **default**: An ISO8601 format string for datetime.\\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).\",\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `datetime` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"timestamp\\\",\\n \\\"type\\\": \\\"datetime\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"timestamp\\\",\\n \\\"type\\\": \\\"datetime\\\",\\n \\\"format\\\": \\\"default\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Year Field\",\"description\":\"A calendar year, being an integer with 4 digits. Equivalent to [gYear in XML Schema](https://www.w3.org/TR/xmlschema-2/#gYear)\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `year`.\",\"enum\":[\"year\"]},\"format\":{\"description\":\"There are no format keyword options for `year`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `year` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"integer\"}}]},\"minimum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"integer\"}]},\"maximum\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"integer\"}]}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"year\\\",\\n \\\"type\\\": \\\"year\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"year\\\",\\n \\\"type\\\": \\\"year\\\",\\n \\\"constraints\\\": {\\n \\\"minimum\\\": 1970,\\n \\\"maximum\\\": 2003\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Year Month Field\",\"description\":\"A calendar year month, being an integer with 1 or 2 digits. Equivalent to [gYearMonth in XML Schema](https://www.w3.org/TR/xmlschema-2/#gYearMonth)\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `yearmonth`.\",\"enum\":[\"yearmonth\"]},\"format\":{\"description\":\"There are no format keyword options for `yearmonth`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `yearmonth` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"month\\\",\\n \\\"type\\\": \\\"yearmonth\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"month\\\",\\n \\\"type\\\": \\\"yearmonth\\\",\\n \\\"constraints\\\": {\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 6\\n }\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Boolean Field\",\"description\":\"The field contains boolean (true/false) data.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `boolean`.\",\"enum\":[\"boolean\"]},\"format\":{\"description\":\"There are no format keyword options for `boolean`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"trueValues\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"type\":\"string\"},\"default\":[\"true\",\"True\",\"TRUE\",\"1\"]},\"falseValues\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"type\":\"string\"},\"default\":[\"false\",\"False\",\"FALSE\",\"0\"]},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `boolean` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"boolean\"}}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"registered\\\",\\n \\\"type\\\": \\\"boolean\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Object Field\",\"description\":\"The field contains data which can be parsed as a valid JSON object.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `object`.\",\"enum\":[\"object\"]},\"format\":{\"description\":\"There are no format keyword options for `object`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints apply for `object` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"object\"}}]},\"minLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the minimum length of a value.\"},\"maxLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the maximum length of a value.\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"extra\\\"\\n \\\"type\\\": \\\"object\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"GeoPoint Field\",\"description\":\"The field contains data describing a geographic point.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `geopoint`.\",\"enum\":[\"geopoint\"]},\"format\":{\"description\":\"The format keyword options for `geopoint` are `default`,`array`, and `object`.\",\"context\":\"The following `format` options are supported:\\n * **default**: A string of the pattern 'lon, lat', where `lon` is the longitude and `lat` is the latitude.\\n * **array**: An array of exactly two items, where each item is either a number, or a string parsable as a number, and the first item is `lon` and the second item is `lat`.\\n * **object**: A JSON object with exactly two keys, `lat` and `lon`\",\"notes\":[\"Implementations `MUST` strip all white space in the default format of `lon, lat`.\"],\"enum\":[\"default\",\"array\",\"object\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `geopoint` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"array\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"object\"}}]}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"post_office\\\",\\n \\\"type\\\": \\\"geopoint\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"post_office\\\",\\n \\\"type\\\": \\\"geopoint\\\",\\n \\\"format\\\": \\\"array\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"GeoJSON Field\",\"description\":\"The field contains a JSON object according to GeoJSON or TopoJSON\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `geojson`.\",\"enum\":[\"geojson\"]},\"format\":{\"description\":\"The format keyword options for `geojson` are `default` and `topojson`.\",\"context\":\"The following `format` options are supported:\\n * **default**: A geojson object as per the [GeoJSON spec](http://geojson.org/).\\n * **topojson**: A topojson object as per the [TopoJSON spec](https://github.com/topojson/topojson-specification/blob/master/README.md)\",\"enum\":[\"default\",\"topojson\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `geojson` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"object\"}}]},\"minLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the minimum length of a value.\"},\"maxLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the maximum length of a value.\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"city_limits\\\",\\n \\\"type\\\": \\\"geojson\\\"\\n}\\n\",\"{\\n \\\"name\\\": \\\"city_limits\\\",\\n \\\"type\\\": \\\"geojson\\\",\\n \\\"format\\\": \\\"topojson\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Array Field\",\"description\":\"The field contains data which can be parsed as a valid JSON array.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `array`.\",\"enum\":[\"array\"]},\"format\":{\"description\":\"There are no format keyword options for `array`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints apply for `array` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"array\"}}]},\"minLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the minimum length of a value.\"},\"maxLength\":{\"type\":\"integer\",\"description\":\"An integer that specifies the maximum length of a value.\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"options\\\"\\n \\\"type\\\": \\\"array\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Duration Field\",\"description\":\"The field contains a duration of time.\",\"context\":\"The lexical representation for duration is the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations) extended format `PnYnMnDTnHnMnS`, where `nY` represents the number of years, `nM` the number of months, `nD` the number of days, 'T' is the date/time separator, `nH` the number of hours, `nM` the number of minutes and `nS` the number of seconds. The number of seconds can include decimal digits to arbitrary precision. Date and time elements including their designator may be omitted if their value is zero, and lower order elements may also be omitted for reduced precision. Here we follow the definition of [XML Schema duration datatype](http://www.w3.org/TR/xmlschema-2/#duration) directly and that definition is implicitly inlined here.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `duration`.\",\"enum\":[\"duration\"]},\"format\":{\"description\":\"There are no format keyword options for `duration`: only `default` is allowed.\",\"enum\":[\"default\"],\"default\":\"default\"},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints are supported for `duration` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},\"minimum\":{\"type\":\"string\"},\"maximum\":{\"type\":\"string\"}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"period\\\"\\n \\\"type\\\": \\\"duration\\\"\\n}\\n\"]},{\"type\":\"object\",\"title\":\"Any Field\",\"description\":\"Any value is accepted, including values that are not captured by the type/format/constraint requirements of the specification.\",\"required\":[\"name\",\"type\"],\"properties\":{\"name\":{\"title\":\"Name\",\"description\":\"A name for this field.\",\"type\":\"string\"},\"title\":{\"title\":\"Title\",\"description\":\"A human-readable title.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"title\\\": \\\"My Package Title\\\"\\n}\\n\"]},\"description\":{\"title\":\"Description\",\"description\":\"A text description. Markdown is encouraged.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"description\\\": \\\"# My Package description\\\\nAll about my package.\\\"\\n}\\n\"]},\"example\":{\"title\":\"Example\",\"description\":\"An example value for the field.\",\"type\":\"string\",\"examples\":[\"{\\n \\\"example\\\": \\\"Put here an example value for your field\\\"\\n}\\n\"]},\"type\":{\"description\":\"The type keyword, which `MUST` be a value of `any`.\",\"enum\":[\"any\"]},\"constraints\":{\"title\":\"Constraints\",\"description\":\"The following constraints apply to `any` fields.\",\"type\":\"object\",\"properties\":{\"required\":{\"type\":\"boolean\",\"description\":\"Indicates whether a property must have a value for each instance.\",\"context\":\"An empty string is considered to be a missing value.\"},\"unique\":{\"type\":\"boolean\",\"description\":\"When `true`, each value for the property `MUST` be unique.\"},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true}}},\"rdfType\":{\"type\":\"string\",\"description\":\"The RDF type for this field.\"}},\"examples\":[\"{\\n \\\"name\\\": \\\"notes\\\",\\n \\\"type\\\": \\\"any\\\"\\n\"]}]},\"description\":\"An `array` of Table Schema Field objects.\",\"examples\":[\"{\\n \\\"fields\\\": [\\n {\\n \\\"name\\\": \\\"my-field-name\\\"\\n }\\n ]\\n}\\n\",\"{\\n \\\"fields\\\": [\\n {\\n \\\"name\\\": \\\"my-field-name\\\",\\n \\\"type\\\": \\\"number\\\"\\n },\\n {\\n \\\"name\\\": \\\"my-field-name-2\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"email\\\"\\n }\\n ]\\n}\\n\"]},\"primaryKey\":{\"oneOf\":[{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true,\"items\":{\"type\":\"string\"}},{\"type\":\"string\"}],\"description\":\"A primary key is a field name or an array of field names, whose values `MUST` uniquely identify each row in the table.\",\"context\":\"Field name in the `primaryKey` `MUST` be unique, and `MUST` match a field name in the associated table. It is acceptable to have an array with a single value, indicating that the value of a single field is the primary key.\",\"examples\":[\"{\\n \\\"primaryKey\\\": [\\n \\\"name\\\"\\n ]\\n}\\n\",\"{\\n \\\"primaryKey\\\": [\\n \\\"first_name\\\",\\n \\\"last_name\\\"\\n ]\\n}\\n\"]},\"foreignKeys\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"title\":\"Table Schema Foreign Key\",\"description\":\"Table Schema Foreign Key\",\"type\":\"object\",\"required\":[\"fields\",\"reference\"],\"oneOf\":[{\"properties\":{\"fields\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minItems\":1,\"uniqueItems\":true,\"description\":\"Fields that make up the primary key.\"}},\"reference\":{\"type\":\"object\",\"required\":[\"resource\",\"fields\"],\"properties\":{\"resource\":{\"type\":\"string\",\"default\":\"\"},\"fields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1,\"uniqueItems\":true}}}}},{\"properties\":{\"fields\":{\"type\":\"string\",\"description\":\"Fields that make up the primary key.\"},\"reference\":{\"type\":\"object\",\"required\":[\"resource\",\"fields\"],\"properties\":{\"resource\":{\"type\":\"string\",\"default\":\"\"},\"fields\":{\"type\":\"string\"}}}}}]},\"examples\":[\"{\\n \\\"foreignKeys\\\": [\\n {\\n \\\"fields\\\": \\\"state\\\",\\n \\\"reference\\\": {\\n \\\"resource\\\": \\\"the-resource\\\",\\n \\\"fields\\\": \\\"state_id\\\"\\n }\\n }\\n ]\\n}\\n\",\"{\\n \\\"foreignKeys\\\": [\\n {\\n \\\"fields\\\": \\\"state\\\",\\n \\\"reference\\\": {\\n \\\"resource\\\": \\\"\\\",\\n \\\"fields\\\": \\\"id\\\"\\n }\\n }\\n ]\\n}\\n\"]},\"missingValues\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"default\":[\"\"],\"description\":\"Values that when encountered in the source, should be considered as `null`, 'not present', or 'blank' values.\",\"context\":\"Many datasets arrive with missing data values, either because a value was not collected or it never existed.\\nMissing values may be indicated simply by the value being empty in other cases a special value may have been used e.g. `-`, `NaN`, `0`, `-9999` etc.\\nThe `missingValues` property provides a way to indicate that these values should be interpreted as equivalent to null.\\n\\n`missingValues` are strings rather than being the data type of the particular field. This allows for comparison prior to casting and for fields to have missing value which are not of their type, for example a `number` field to have missing values indicated by `-`.\\n\\nThe default value of `missingValue` for a non-string type field is the empty string `''`. For string type fields there is no default for `missingValue` (for string fields the empty string `''` is a valid value and need not indicate null).\",\"examples\":[\"{\\n \\\"missingValues\\\": [\\n \\\"-\\\",\\n \\\"NaN\\\",\\n \\\"\\\"\\n ]\\n}\\n\",\"{\\n \\\"missingValues\\\": []\\n}\\n\"]}},\"examples\":[\"{\\n \\\"schema\\\": {\\n \\\"fields\\\": [\\n {\\n \\\"name\\\": \\\"first_name\\\",\\n \\\"type\\\": \\\"string\\\"\\n \\\"constraints\\\": {\\n \\\"required\\\": true\\n }\\n },\\n {\\n \\\"name\\\": \\\"age\\\",\\n \\\"type\\\": \\\"integer\\\"\\n },\\n ],\\n \\\"primaryKey\\\": [\\n \\\"name\\\"\\n ]\\n }\\n}\\n\"]}},\"parameters\":{\"filterQueryParam\":{\"in\":\"query\",\"name\":\"filter\",\"schema\":{\"type\":\"string\"},\"description\":\"This is a JSON object mapping column names to arrays of allowed values. For example, to filter column `pet` for values `cat` and `dog`, the filter would be `{\\\"pet\\\": [\\\"cat\\\", \\\"dog\\\"]}`. JSON contains characters that are not safe to place in a URL, so it is important to url-encode them. For this example, the url-encoding is `%7B%22pet%22%3A%20%5B%22cat%22%2C%20%22dog%22%5D%7D`. See https://rosettacode.org/wiki/URL_encoding for how to url-encode a string, or https://www.urlencoder.org/ to try some examples. Multiple columns can be filtered. For example the filter for `pet` being either `cat` or `dog`, AND `size` being either `tiny` or `outrageously small`, would be `{\\\"pet\\\": [\\\"cat\\\", \\\"dog\\\"], \\\"size\\\": [\\\"tiny\\\", \\\"outrageously small\\\"]}`.\",\"example\":\"{\\\"pet\\\": [\\\"cat\\\", \\\"dog\\\"]}\",\"required\":false},\"sortQueryParam\":{\"in\":\"query\",\"name\":\"sort\",\"schema\":{\"type\":\"string\"},\"description\":\"Order in which to return results. If a single column name is given (e.g. `pet`), results are placed in ascending order of values in that column. To get results in an order that was previously prepared manually in Grist, use the special `manualSort` column name. Multiple columns can be specified, separated by commas (e.g. `pet,age`). For descending order, prefix a column name with a `-` character (e.g. `pet,-age`). To include additional sorting options append them after a colon (e.g. `pet,-age:naturalSort;emptyFirst,owner`). Available options are: `choiceOrder`, `naturalSort`, `emptyFirst`. Without the `sort` parameter, the order of results is unspecified.\",\"example\":\"pet,-age\",\"required\":false},\"limitQueryParam\":{\"in\":\"query\",\"name\":\"limit\",\"schema\":{\"type\":\"number\"},\"description\":\"Return at most this number of rows. A value of 0 is equivalent to having no limit.\",\"example\":\"5\",\"required\":false},\"sortHeaderParam\":{\"in\":\"header\",\"name\":\"X-Sort\",\"schema\":{\"type\":\"string\"},\"description\":\"Same as `sort` query parameter.\",\"example\":\"pet,-age\",\"required\":false},\"limitHeaderParam\":{\"in\":\"header\",\"name\":\"X-Limit\",\"schema\":{\"type\":\"number\"},\"description\":\"Same as `limit` query parameter.\",\"example\":\"5\",\"required\":false},\"colIdPathParam\":{\"in\":\"path\",\"name\":\"colId\",\"schema\":{\"type\":\"string\"},\"description\":\"The column id (without the starting `$`) as shown in the column configuration below the label\",\"required\":true},\"tableIdPathParam\":{\"in\":\"path\",\"name\":\"tableId\",\"schema\":{\"type\":\"string\"},\"description\":\"normalized table name (see `TABLE ID` in Raw Data) or numeric row ID in `_grist_Tables`\",\"required\":true},\"docIdPathParam\":{\"in\":\"path\",\"name\":\"docId\",\"schema\":{\"type\":\"string\"},\"description\":\"A string id (UUID)\",\"required\":true},\"orgIdPathParam\":{\"in\":\"path\",\"name\":\"orgId\",\"schema\":{\"oneOf\":[{\"type\":\"integer\"},{\"type\":\"string\"}]},\"description\":\"This can be an integer id, or a string subdomain (e.g. `gristlabs`), or `current` if the org is implied by the domain in the url\",\"required\":true},\"workspaceIdPathParam\":{\"in\":\"path\",\"name\":\"workspaceId\",\"description\":\"An integer id\",\"schema\":{\"type\":\"integer\"},\"required\":true},\"userIdPathParam\":{\"in\":\"path\",\"name\":\"userId\",\"schema\":{\"type\":\"integer\"},\"description\":\"A user id\",\"required\":true},\"noparseQueryParam\":{\"in\":\"query\",\"name\":\"noparse\",\"schema\":{\"type\":\"boolean\"},\"description\":\"Set to true to prohibit parsing strings according to the column type.\"},\"hiddenQueryParam\":{\"in\":\"query\",\"name\":\"hidden\",\"schema\":{\"type\":\"boolean\"},\"description\":\"Set to true to include the hidden columns (like \\\"manualSort\\\")\"},\"headerQueryParam\":{\"in\":\"query\",\"name\":\"header\",\"schema\":{\"type\":\"string\",\"enum\":[\"colId\",\"label\"]},\"description\":\"Format for headers. Labels tend to be more human-friendly while colIds are more normalized.\",\"required\":false}}}}},\"searchIndex\":{\"store\":[\"section/Authentication\",\"tag/orgs\",\"tag/orgs/operation/listOrgs\",\"tag/orgs/operation/describeOrg\",\"tag/orgs/operation/modifyOrg\",\"tag/orgs/operation/deleteOrg\",\"tag/orgs/operation/listOrgAccess\",\"tag/orgs/operation/modifyOrgAccess\",\"tag/workspaces\",\"tag/workspaces/operation/listWorkspaces\",\"tag/workspaces/operation/createWorkspace\",\"tag/workspaces/operation/describeWorkspace\",\"tag/workspaces/operation/modifyWorkspace\",\"tag/workspaces/operation/deleteWorkspace\",\"tag/workspaces/operation/listWorkspaceAccess\",\"tag/workspaces/operation/modifyWorkspaceAccess\",\"tag/docs\",\"tag/docs/operation/createDoc\",\"tag/docs/operation/describeDoc\",\"tag/docs/operation/modifyDoc\",\"tag/docs/operation/deleteDoc\",\"tag/docs/operation/moveDoc\",\"tag/docs/operation/listDocAccess\",\"tag/docs/operation/modifyDocAccess\",\"tag/docs/operation/downloadDoc\",\"tag/docs/operation/downloadDocXlsx\",\"tag/docs/operation/downloadDocCsv\",\"tag/docs/operation/downloadTableSchema\",\"tag/docs/operation/deleteActions\",\"tag/docs/operation/forceReload\",\"tag/records\",\"tag/records/operation/listRecords\",\"tag/records/operation/addRecords\",\"tag/records/operation/modifyRecords\",\"tag/records/operation/replaceRecords\",\"tag/tables\",\"tag/tables/operation/listTables\",\"tag/tables/operation/addTables\",\"tag/tables/operation/modifyTables\",\"tag/columns\",\"tag/columns/operation/listColumns\",\"tag/columns/operation/addColumns\",\"tag/columns/operation/modifyColumns\",\"tag/columns/operation/replaceColumns\",\"tag/columns/operation/deleteColumn\",\"tag/data\",\"tag/data/operation/getTableData\",\"tag/data/operation/addRows\",\"tag/data/operation/modifyRows\",\"tag/data/operation/deleteRows\",\"tag/attachments\",\"tag/attachments/operation/listAttachments\",\"tag/attachments/operation/uploadAttachments\",\"tag/attachments/operation/getAttachmentMetadata\",\"tag/attachments/operation/downloadAttachment\",\"tag/webhooks\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks/get\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks/post\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks~1{webhookId}/patch\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks~1{webhookId}/delete\",\"tag/webhooks/paths/~1docs~1{docId}~1webhooks~1queue/delete\",\"tag/sql\",\"tag/sql/paths/~1docs~1{docId}~1sql/get\",\"tag/sql/paths/~1docs~1{docId}~1sql/post\",\"tag/users\",\"tag/users/paths/~1users~1{userId}/delete\"],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"title\",\"description\"],\"fieldVectors\":[[\"title/0\",[0,5.15]],[\"description/0\",[1,4.48,2,3.878]],[\"title/1\",[3,2.512]],[\"description/1\",[3,1.243,4,2.206,5,1.98,6,1.98,7,2.548,8,1.811,9,2.548]],[\"title/2\",[3,1.797,10,2.002,11,2.124]],[\"description/2\",[3,1.243,4,2.206,5,1.98,6,1.98,12,2.548,13,2.548,14,2.548]],[\"title/3\",[3,2.096,15,3.338]],[\"description/3\",[16,4.103]],[\"title/4\",[3,2.096,17,2.335]],[\"description/4\",[16,4.103]],[\"title/5\",[3,2.096,18,2.476]],[\"description/5\",[16,4.103]],[\"title/6\",[3,1.573,10,1.753,11,1.859,19,1.859]],[\"description/6\",[20,4.571]],[\"title/7\",[3,1.797,11,2.124,21,2.619]],[\"description/7\",[20,4.571]],[\"title/8\",[22,2.276]],[\"description/8\",[5,2.167,8,1.982,22,1.232,23,2.789,24,2.789,25,0.681]],[\"title/9\",[3,1.399,10,1.559,22,1.268,25,0.7,26,2.868]],[\"description/9\",[27,4.571]],[\"title/10\",[22,1.628,28,2.863,29,2.863]],[\"description/10\",[27,4.571]],[\"title/11\",[15,3.338,22,1.898]],[\"description/11\",[30,4.103]],[\"title/12\",[17,2.335,22,1.898]],[\"description/12\",[30,4.103]],[\"title/13\",[18,2.476,22,1.898]],[\"description/13\",[30,4.103]],[\"title/14\",[10,1.753,11,1.859,19,1.859,22,1.425]],[\"description/14\",[31,4.571]],[\"title/15\",[11,2.124,21,2.619,22,1.628]],[\"description/15\",[31,4.571]],[\"title/16\",[32,4.002]],[\"description/16\",[22,1.361,25,0.752,33,2.393,34,2.189,35,2.393]],[\"title/17\",[25,0.9,28,2.863,29,2.863]],[\"description/17\",[36,5.281]],[\"title/18\",[15,3.338,25,1.049]],[\"description/18\",[37,4.103]],[\"title/19\",[17,1.753,25,0.787,38,2.506,39,2.122]],[\"description/19\",[37,4.103]],[\"title/20\",[18,2.476,25,1.049]],[\"description/20\",[37,4.103]],[\"title/21\",[22,1.425,25,0.787,40,3.226,41,3.226]],[\"description/21\",[42,5.281]],[\"title/22\",[10,1.753,11,1.859,19,1.859,25,0.787]],[\"description/22\",[43,4.571]],[\"title/23\",[11,2.124,21,2.619,25,0.9]],[\"description/23\",[43,4.571]],[\"title/24\",[25,0.787,39,2.122,44,3.226,45,2.293]],[\"description/24\",[46,5.281]],[\"title/25\",[25,0.787,39,2.122,45,2.293,47,3.226]],[\"description/25\",[48,5.281]],[\"title/26\",[39,2.122,45,2.293,49,0.889,50,3.226]],[\"description/26\",[51,5.281]],[\"title/27\",[49,1.185,52,3.718]],[\"description/27\",[52,2.414,53,2.789,54,2.789,55,2.789,56,2.789,57,2.789]],[\"title/28\",[58,3.226,59,2.792,60,2.792,61,3.226]],[\"description/28\",[62,5.281]],[\"title/29\",[25,1.049,63,4.296]],[\"description/29\",[25,0.573,64,2.346,65,2.346,66,2.346,67,2.346,68,2.346,69,2.346,70,2.346]],[\"title/30\",[71,2.389]],[\"description/30\",[8,1.982,33,2.167,34,1.982,49,0.769,71,1.294,72,1.982]],[\"title/31\",[49,1.016,71,1.709,73,3.189]],[\"description/31\",[74,3.754]],[\"title/32\",[49,1.016,71,1.709,75,2.262]],[\"description/32\",[74,3.754]],[\"title/33\",[17,2.002,49,1.016,71,1.709]],[\"description/33\",[74,3.754]],[\"title/34\",[49,0.889,71,1.496,75,1.981,76,2.792]],[\"description/34\",[74,3.754]],[\"title/35\",[49,1.42]],[\"description/35\",[25,0.839,34,2.444,49,0.948,77,2.975]],[\"title/36\",[10,2.002,25,0.9,49,1.016]],[\"description/36\",[78,4.103]],[\"title/37\",[25,0.9,49,1.016,75,2.262]],[\"description/37\",[78,4.103]],[\"title/38\",[17,2.002,25,0.9,49,1.016]],[\"description/38\",[78,4.103]],[\"title/39\",[79,2.799]],[\"description/39\",[34,2.444,49,0.948,77,2.975,79,1.868]],[\"title/40\",[10,2.002,49,1.016,79,2.002]],[\"description/40\",[80,3.754]],[\"title/41\",[49,1.016,75,2.262,79,2.002]],[\"description/41\",[80,3.754]],[\"title/42\",[17,2.002,49,1.016,79,2.002]],[\"description/42\",[80,3.754]],[\"title/43\",[49,0.889,75,1.981,76,2.792,79,1.753]],[\"description/43\",[80,3.754]],[\"title/44\",[18,2.124,49,1.016,79,2.002]],[\"description/44\",[81,5.281]],[\"title/45\",[82,3.389]],[\"description/45\",[49,0.491,71,0.826,82,1.172,83,1.781,84,1.383,85,2.936,86,1.266,87,1.781,88,1.781,89,1.781,90,1.093]],[\"title/46\",[49,1.016,73,3.189,82,2.424]],[\"description/46\",[71,1.136,86,1.02,90,1.504,91,1.115,92,1.115,93,1.115,94,1.02,95,1.115,96,1.115,97,1.115,98,1.115,99,1.02,100,1.115,101,1.115]],[\"title/47\",[49,1.016,72,2.619,75,2.262]],[\"description/47\",[71,1.136,86,1.02,90,1.504,91,1.115,92,1.115,93,1.115,94,1.02,95,1.115,96,1.115,97,1.115,98,1.115,99,1.02,100,1.115,101,1.115]],[\"title/48\",[17,2.002,49,1.016,72,2.619]],[\"description/48\",[71,1.136,86,1.02,90,1.504,91,1.115,92,1.115,93,1.115,94,1.02,95,1.115,96,1.115,97,1.115,98,1.115,99,1.02,100,1.115,101,1.115]],[\"title/49\",[18,2.124,49,1.016,72,2.619]],[\"description/49\",[102,5.281]],[\"title/50\",[103,3.163]],[\"description/50\",[25,0.463,45,1.347,71,0.879,79,1.03,82,1.247,84,1.472,103,1.897,104,1.895,105,1.895,106,1.895]],[\"title/51\",[10,1.753,32,2.506,38,2.506,103,1.981]],[\"description/51\",[107,4.571]],[\"title/52\",[32,2.863,103,2.262,108,3.685]],[\"description/52\",[107,4.571]],[\"title/53\",[38,3.338,103,2.638]],[\"description/53\",[109,5.281]],[\"title/54\",[39,2.424,103,2.262,110,3.685]],[\"description/54\",[111,5.281]],[\"title/55\",[112,3.163]],[\"description/55\",[8,1.811,21,1.811,25,0.622,112,1.565,113,2.548,114,2.548,115,2.548]],[\"title/56\",[25,0.9,112,2.262,116,3.685]],[\"description/56\",[117,4.571]],[\"title/57\",[25,0.787,28,2.506,99,2.293,112,1.981]],[\"description/57\",[117,4.571]],[\"title/58\",[17,2.335,112,2.638]],[\"description/58\",[118,4.571]],[\"title/59\",[94,3.054,112,2.638]],[\"description/59\",[118,4.571]],[\"title/60\",[29,2.229,59,2.483,119,2.868,120,2.868,121,2.868]],[\"description/60\",[122,5.281]],[\"title/61\",[123,3.661]],[\"description/61\",[25,0.752,82,2.026,90,1.891,123,2.189,124,2.393]],[\"title/62\",[25,0.7,123,2.039,124,2.229,125,2.483,126,2.483]],[\"description/62\",[127,4.571]],[\"title/63\",[25,0.573,123,1.669,124,1.824,125,2.032,126,2.032,128,2.348,129,2.348]],[\"description/63\",[127,4.571]],[\"title/64\",[19,2.969]],[\"description/64\",[19,2.582,35,3.481]],[\"title/65\",[18,2.124,19,2.124,35,2.863]],[\"description/65\",[2,1.643,6,0.832,18,1.094,19,0.617,22,0.473,25,0.261,33,0.832,60,1.643,84,0.832,90,0.658,130,1.071,131,1.071,132,1.071,133,1.071,134,1.071,135,1.071,136,1.071,137,1.071,138,1.071,139,1.071]]],\"invertedIndex\":[[\"\",{\"_index\":2,\"title\":{},\"description\":{\"0\":{},\"65\":{}}}],[\"access\",{\"_index\":11,\"title\":{\"2\":{},\"6\":{},\"7\":{},\"14\":{},\"15\":{},\"22\":{},\"23\":{}},\"description\":{}}],[\"account\",{\"_index\":135,\"title\":{},\"description\":{\"65\":{}}}],[\"action\",{\"_index\":60,\"title\":{\"28\":{}},\"description\":{\"65\":{}}}],[\"add\",{\"_index\":75,\"title\":{\"32\":{},\"34\":{},\"37\":{},\"41\":{},\"43\":{},\"47\":{}},\"description\":{}}],[\"against\",{\"_index\":126,\"title\":{\"62\":{},\"63\":{}},\"description\":{}}],[\"allow\",{\"_index\":134,\"title\":{},\"description\":{\"65\":{}}}],[\"anoth\",{\"_index\":41,\"title\":{\"21\":{}},\"description\":{}}],[\"api\",{\"_index\":9,\"title\":{},\"description\":{\"1\":{}}}],[\"area\",{\"_index\":13,\"title\":{},\"description\":{\"2\":{}}}],[\"associ\",{\"_index\":116,\"title\":{\"56\":{}},\"description\":{}}],[\"attach\",{\"_index\":103,\"title\":{\"50\":{},\"51\":{},\"52\":{},\"53\":{},\"54\":{}},\"description\":{\"50\":{}}}],[\"authent\",{\"_index\":0,\"title\":{\"0\":{}},\"description\":{}}],[\"avail\",{\"_index\":14,\"title\":{},\"description\":{\"2\":{}}}],[\"better\",{\"_index\":96,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"call\",{\"_index\":8,\"title\":{},\"description\":{\"1\":{},\"8\":{},\"30\":{},\"55\":{}}}],[\"cautiou\",{\"_index\":138,\"title\":{},\"description\":{\"65\":{}}}],[\"chang\",{\"_index\":21,\"title\":{\"7\":{},\"15\":{},\"23\":{}},\"description\":{\"55\":{}}}],[\"close\",{\"_index\":64,\"title\":{},\"description\":{\"29\":{}}}],[\"collect\",{\"_index\":34,\"title\":{},\"description\":{\"16\":{},\"30\":{},\"35\":{},\"39\":{}}}],[\"column\",{\"_index\":79,\"title\":{\"39\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{}},\"description\":{\"39\":{},\"50\":{}}}],[\"columnar\",{\"_index\":87,\"title\":{},\"description\":{\"45\":{}}}],[\"consid\",{\"_index\":95,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"contain\",{\"_index\":33,\"title\":{},\"description\":{\"16\":{},\"30\":{},\"65\":{}}}],[\"content\",{\"_index\":39,\"title\":{\"19\":{},\"24\":{},\"25\":{},\"26\":{},\"54\":{}},\"description\":{}}],[\"creat\",{\"_index\":28,\"title\":{\"10\":{},\"17\":{},\"57\":{}},\"description\":{}}],[\"csv\",{\"_index\":50,\"title\":{\"26\":{}},\"description\":{}}],[\"current\",{\"_index\":132,\"title\":{},\"description\":{\"65\":{}}}],[\"data\",{\"_index\":82,\"title\":{\"45\":{},\"46\":{}},\"description\":{\"45\":{},\"50\":{},\"61\":{}}}],[\"delet\",{\"_index\":18,\"title\":{\"5\":{},\"13\":{},\"20\":{},\"44\":{},\"49\":{},\"65\":{}},\"description\":{\"65\":{}}}],[\"deprec\",{\"_index\":86,\"title\":{},\"description\":{\"45\":{},\"46\":{},\"47\":{},\"48\":{}}}],[\"describ\",{\"_index\":15,\"title\":{\"3\":{},\"11\":{},\"18\":{}},\"description\":{}}],[\"doc\",{\"_index\":32,\"title\":{\"16\":{},\"51\":{},\"52\":{}},\"description\":{}}],[\"docs/{docid\",{\"_index\":37,\"title\":{},\"description\":{\"18\":{},\"19\":{},\"20\":{}}}],[\"docs/{docid}/access\",{\"_index\":43,\"title\":{},\"description\":{\"22\":{},\"23\":{}}}],[\"docs/{docid}/attach\",{\"_index\":107,\"title\":{},\"description\":{\"51\":{},\"52\":{}}}],[\"docs/{docid}/attachments/{attachmentid\",{\"_index\":109,\"title\":{},\"description\":{\"53\":{}}}],[\"docs/{docid}/attachments/{attachmentid}/download\",{\"_index\":111,\"title\":{},\"description\":{\"54\":{}}}],[\"docs/{docid}/download\",{\"_index\":46,\"title\":{},\"description\":{\"24\":{}}}],[\"docs/{docid}/download/csv\",{\"_index\":51,\"title\":{},\"description\":{\"26\":{}}}],[\"docs/{docid}/download/table-schema\",{\"_index\":57,\"title\":{},\"description\":{\"27\":{}}}],[\"docs/{docid}/download/xlsx\",{\"_index\":48,\"title\":{},\"description\":{\"25\":{}}}],[\"docs/{docid}/force-reload\",{\"_index\":70,\"title\":{},\"description\":{\"29\":{}}}],[\"docs/{docid}/mov\",{\"_index\":42,\"title\":{},\"description\":{\"21\":{}}}],[\"docs/{docid}/sql\",{\"_index\":127,\"title\":{},\"description\":{\"62\":{},\"63\":{}}}],[\"docs/{docid}/states/remov\",{\"_index\":62,\"title\":{},\"description\":{\"28\":{}}}],[\"docs/{docid}/t\",{\"_index\":78,\"title\":{},\"description\":{\"36\":{},\"37\":{},\"38\":{}}}],[\"docs/{docid}/tables/{tableid}/column\",{\"_index\":80,\"title\":{},\"description\":{\"40\":{},\"41\":{},\"42\":{},\"43\":{}}}],[\"docs/{docid}/tables/{tableid}/columns/{colid\",{\"_index\":81,\"title\":{},\"description\":{\"44\":{}}}],[\"docs/{docid}/tables/{tableid}/data\",{\"_index\":101,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"docs/{docid}/tables/{tableid}/data/delet\",{\"_index\":102,\"title\":{},\"description\":{\"49\":{}}}],[\"docs/{docid}/tables/{tableid}/record\",{\"_index\":74,\"title\":{},\"description\":{\"31\":{},\"32\":{},\"33\":{},\"34\":{}}}],[\"docs/{docid}/webhook\",{\"_index\":117,\"title\":{},\"description\":{\"56\":{},\"57\":{}}}],[\"docs/{docid}/webhooks/queu\",{\"_index\":122,\"title\":{},\"description\":{\"60\":{}}}],[\"docs/{docid}/webhooks/{webhookid\",{\"_index\":118,\"title\":{},\"description\":{\"58\":{},\"59\":{}}}],[\"document\",{\"_index\":25,\"title\":{\"9\":{},\"17\":{},\"18\":{},\"19\":{},\"20\":{},\"21\":{},\"22\":{},\"23\":{},\"24\":{},\"25\":{},\"29\":{},\"36\":{},\"37\":{},\"38\":{},\"56\":{},\"57\":{},\"62\":{},\"63\":{}},\"description\":{\"8\":{},\"16\":{},\"29\":{},\"35\":{},\"50\":{},\"55\":{},\"61\":{},\"65\":{}}}],[\"document'\",{\"_index\":59,\"title\":{\"28\":{},\"60\":{}},\"description\":{}}],[\"download\",{\"_index\":110,\"title\":{\"54\":{}},\"description\":{}}],[\"empti\",{\"_index\":29,\"title\":{\"10\":{},\"17\":{},\"60\":{}},\"description\":{}}],[\"endpoint\",{\"_index\":90,\"title\":{},\"description\":{\"45\":{},\"46\":{},\"47\":{},\"48\":{},\"61\":{},\"65\":{}}}],[\"engin\",{\"_index\":68,\"title\":{},\"description\":{\"29\":{}}}],[\"enumer\",{\"_index\":12,\"title\":{},\"description\":{\"2\":{}}}],[\"excel\",{\"_index\":47,\"title\":{\"25\":{}},\"description\":{}}],[\"favor\",{\"_index\":91,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"fetch\",{\"_index\":73,\"title\":{\"31\":{},\"46\":{}},\"description\":{}}],[\"file\",{\"_index\":45,\"title\":{\"24\":{},\"25\":{},\"26\":{}},\"description\":{\"50\":{}}}],[\"follow\",{\"_index\":53,\"title\":{},\"description\":{\"27\":{}}}],[\"forc\",{\"_index\":66,\"title\":{},\"description\":{\"29\":{}}}],[\"format\",{\"_index\":88,\"title\":{},\"description\":{\"45\":{}}}],[\"frictionlessdata'\",{\"_index\":54,\"title\":{},\"description\":{\"27\":{}}}],[\"grist\",{\"_index\":35,\"title\":{\"65\":{}},\"description\":{\"16\":{},\"64\":{}}}],[\"group\",{\"_index\":24,\"title\":{},\"description\":{\"8\":{}}}],[\"histori\",{\"_index\":61,\"title\":{\"28\":{}},\"description\":{}}],[\"immedi\",{\"_index\":92,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"includ\",{\"_index\":104,\"title\":{},\"description\":{\"50\":{}}}],[\"list\",{\"_index\":10,\"title\":{\"2\":{},\"6\":{},\"9\":{},\"14\":{},\"22\":{},\"36\":{},\"40\":{},\"51\":{}},\"description\":{}}],[\"metadata\",{\"_index\":38,\"title\":{\"19\":{},\"51\":{},\"53\":{}},\"description\":{}}],[\"modifi\",{\"_index\":17,\"title\":{\"4\":{},\"12\":{},\"19\":{},\"33\":{},\"38\":{},\"42\":{},\"48\":{},\"58\":{}},\"description\":{}}],[\"move\",{\"_index\":40,\"title\":{\"21\":{}},\"description\":{}}],[\"new\",{\"_index\":99,\"title\":{\"57\":{}},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"now\",{\"_index\":85,\"title\":{},\"description\":{\"45\":{}}}],[\"option\",{\"_index\":128,\"title\":{\"63\":{}},\"description\":{}}],[\"org\",{\"_index\":3,\"title\":{\"1\":{},\"2\":{},\"3\":{},\"4\":{},\"5\":{},\"6\":{},\"7\":{},\"9\":{}},\"description\":{\"1\":{},\"2\":{}}}],[\"organ\",{\"_index\":23,\"title\":{},\"description\":{\"8\":{}}}],[\"organis\",{\"_index\":131,\"title\":{},\"description\":{\"65\":{}}}],[\"orgs/{orgid\",{\"_index\":16,\"title\":{},\"description\":{\"3\":{},\"4\":{},\"5\":{}}}],[\"orgs/{orgid}/access\",{\"_index\":20,\"title\":{},\"description\":{\"6\":{},\"7\":{}}}],[\"orgs/{orgid}/workspac\",{\"_index\":27,\"title\":{},\"description\":{\"9\":{},\"10\":{}}}],[\"paramet\",{\"_index\":129,\"title\":{\"63\":{}},\"description\":{}}],[\"payload\",{\"_index\":121,\"title\":{\"60\":{}},\"description\":{}}],[\"person\",{\"_index\":6,\"title\":{},\"description\":{\"1\":{},\"2\":{},\"65\":{}}}],[\"plan\",{\"_index\":93,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"pleas\",{\"_index\":137,\"title\":{},\"description\":{\"65\":{}}}],[\"point\",{\"_index\":98,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"project\",{\"_index\":100,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"python\",{\"_index\":67,\"title\":{},\"description\":{\"29\":{}}}],[\"queri\",{\"_index\":124,\"title\":{\"62\":{},\"63\":{}},\"description\":{\"61\":{}}}],[\"queue\",{\"_index\":119,\"title\":{\"60\":{}},\"description\":{}}],[\"recommend\",{\"_index\":89,\"title\":{},\"description\":{\"45\":{}}}],[\"record\",{\"_index\":71,\"title\":{\"30\":{},\"31\":{},\"32\":{},\"33\":{},\"34\":{}},\"description\":{\"30\":{},\"45\":{},\"46\":{},\"47\":{},\"48\":{},\"50\":{}}}],[\"refer\",{\"_index\":105,\"title\":{},\"description\":{\"50\":{}}}],[\"reload\",{\"_index\":63,\"title\":{\"29\":{}},\"description\":{}}],[\"remov\",{\"_index\":94,\"title\":{\"59\":{}},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"reopen\",{\"_index\":65,\"title\":{},\"description\":{\"29\":{}}}],[\"request\",{\"_index\":114,\"title\":{},\"description\":{\"55\":{}}}],[\"restart\",{\"_index\":69,\"title\":{},\"description\":{\"29\":{}}}],[\"row\",{\"_index\":72,\"title\":{\"47\":{},\"48\":{},\"49\":{}},\"description\":{\"30\":{}}}],[\"run\",{\"_index\":125,\"title\":{\"62\":{},\"63\":{}},\"description\":{}}],[\"schema\",{\"_index\":52,\"title\":{\"27\":{}},\"description\":{\"27\":{}}}],[\"securitydefinit\",{\"_index\":1,\"title\":{},\"description\":{\"0\":{}}}],[\"site\",{\"_index\":5,\"title\":{},\"description\":{\"1\":{},\"2\":{},\"8\":{}}}],[\"space\",{\"_index\":7,\"title\":{},\"description\":{\"1\":{}}}],[\"sql\",{\"_index\":123,\"title\":{\"61\":{},\"62\":{},\"63\":{}},\"description\":{\"61\":{}}}],[\"sqlite\",{\"_index\":44,\"title\":{\"24\":{}},\"description\":{}}],[\"standard](https://specs.frictionlessdata.io/table-schema\",{\"_index\":56,\"title\":{},\"description\":{\"27\":{}}}],[\"start\",{\"_index\":97,\"title\":{},\"description\":{\"46\":{},\"47\":{},\"48\":{}}}],[\"structur\",{\"_index\":77,\"title\":{},\"description\":{\"35\":{},\"39\":{}}}],[\"tabl\",{\"_index\":49,\"title\":{\"26\":{},\"27\":{},\"31\":{},\"32\":{},\"33\":{},\"34\":{},\"35\":{},\"36\":{},\"37\":{},\"38\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{},\"46\":{},\"47\":{},\"48\":{},\"49\":{}},\"description\":{\"30\":{},\"35\":{},\"39\":{},\"45\":{}}}],[\"table-schema\",{\"_index\":55,\"title\":{},\"description\":{\"27\":{}}}],[\"team\",{\"_index\":4,\"title\":{},\"description\":{\"1\":{},\"2\":{}}}],[\"themselv\",{\"_index\":133,\"title\":{},\"description\":{\"65\":{}}}],[\"trigger\",{\"_index\":113,\"title\":{},\"description\":{\"55\":{}}}],[\"truncat\",{\"_index\":58,\"title\":{\"28\":{}},\"description\":{}}],[\"type\",{\"_index\":106,\"title\":{},\"description\":{\"50\":{}}}],[\"undeliv\",{\"_index\":120,\"title\":{\"60\":{}},\"description\":{}}],[\"undon\",{\"_index\":136,\"title\":{},\"description\":{\"65\":{}}}],[\"updat\",{\"_index\":76,\"title\":{\"34\":{},\"43\":{}},\"description\":{}}],[\"upload\",{\"_index\":108,\"title\":{\"52\":{}},\"description\":{}}],[\"url\",{\"_index\":115,\"title\":{},\"description\":{\"55\":{}}}],[\"us\",{\"_index\":84,\"title\":{},\"description\":{\"45\":{},\"50\":{},\"65\":{}}}],[\"user\",{\"_index\":19,\"title\":{\"6\":{},\"14\":{},\"22\":{},\"64\":{},\"65\":{}},\"description\":{\"64\":{},\"65\":{}}}],[\"user'\",{\"_index\":130,\"title\":{},\"description\":{\"65\":{}}}],[\"users/{userid\",{\"_index\":139,\"title\":{},\"description\":{\"65\":{}}}],[\"webhook\",{\"_index\":112,\"title\":{\"55\":{},\"56\":{},\"57\":{},\"58\":{},\"59\":{}},\"description\":{\"55\":{}}}],[\"within\",{\"_index\":26,\"title\":{\"9\":{}},\"description\":{}}],[\"work\",{\"_index\":83,\"title\":{},\"description\":{\"45\":{}}}],[\"workspac\",{\"_index\":22,\"title\":{\"8\":{},\"9\":{},\"10\":{},\"11\":{},\"12\":{},\"13\":{},\"14\":{},\"15\":{},\"21\":{}},\"description\":{\"8\":{},\"16\":{},\"65\":{}}}],[\"workspaces/{workspaceid\",{\"_index\":30,\"title\":{},\"description\":{\"11\":{},\"12\":{},\"13\":{}}}],[\"workspaces/{workspaceid}/access\",{\"_index\":31,\"title\":{},\"description\":{\"14\":{},\"15\":{}}}],[\"workspaces/{workspaceid}/doc\",{\"_index\":36,\"title\":{},\"description\":{\"17\":{}}}]],\"pipeline\":[]}},\"options\":{\"theme\":{\"spacing\":{\"sectionVertical\":2},\"breakpoints\":{\"medium\":\"50rem\",\"large\":\"50rem\"},\"sidebar\":{\"width\":\"0px\"}},\"hideDownloadButton\":true,\"pathInMiddlePanel\":true,\"scrollYOffset\":48,\"jsonSampleExpandLevel\":\"all\"}}; var container = document.getElementById('redoc'); Redoc.hydrate(__redoc_state, container);","title":"REST API reference"},{"location":"api/#grist-api-reference","text":"REST API for manipulating documents, workspaces, and team sites. API Usage is an introduction to using the API. API Console allows you to make API calls from the browser. Authentication orgs get List the orgs you have access to get Describe an org patch Modify an org del Delete an org get List users with access to org patch Change who has access to org workspaces get List workspaces and documents within an org post Create an empty workspace get Describe a workspace patch Modify a workspace del Delete a workspace get List users with access to workspace patch Change who has access to workspace docs post Create an empty document get Describe a document patch Modify document metadata (but not its contents) del Delete a document patch Move document to another workspace. get List users with access to document patch Change who has access to document get Content of document, as an Sqlite file get Content of document, as an Excel file get Content of table, as a CSV file get The schema of a table post Truncate the document's action history post Reload a document records get Fetch records from a table post Add records to a table patch Modify records of a table put Add or update records of a table tables get List tables in a document post Add tables to a document patch Modify tables of a document columns get List columns in a table post Add columns to a table patch Modify columns of a table put Add or update columns of a table del Delete a column of a table data get Fetch data from a table post Add rows to a table patch Modify rows of a table post Delete rows of a table attachments get List metadata of all attachments in a doc post Upload attachments to a doc get Get the metadata for an attachment get Download the contents of an attachment webhooks get Webhooks associated with a document post Create new webhooks for a document patch Modify a webhook del Remove a webhook del Empty a document's queue of undelivered payloads sql get Run an SQL query against a document post Run an SQL query against a document, with options or parameters users del Delete a user from Grist API docs by Redocly","title":"Grist API Reference"},{"location":"code/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Plugin API # The plugin API is used in custom widgets to interact with the document within which the widget is embedded. If you haven\u2019t already, be sure to read our summary of Custom Widgets and look at the grist-widget repository for examples of widget implementations. Here you can find a reference for functions and interfaces available to custom widgets, starting with the grist object.","title":"Intro to Plugin API"},{"location":"code/#plugin-api","text":"The plugin API is used in custom widgets to interact with the document within which the widget is embedded. If you haven\u2019t already, be sure to read our summary of Custom Widgets and look at the grist-widget repository for examples of widget implementations. Here you can find a reference for functions and interfaces available to custom widgets, starting with the grist object.","title":"Plugin API"},{"location":"code/modules/grist_plugin_api/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Module: grist-plugin-api # Table of contents # Interfaces # AccessTokenOptions AccessTokenResult ColumnToMap CursorPos CustomSectionAPI FetchSelectedOptions GristColumn GristDocAPI GristTable GristView InteractionOptions InteractionOptionsRequest ParseOptionSchema ParseOptions ReadyPayload RenderOptions WidgetAPI WidgetColumnMap Type Aliases # ColumnsToMap UIRowId Variables # checkers docApi sectionApi selectedTable viewApi widgetApi Functions # allowSelectBy clearOptions fetchSelectedRecord fetchSelectedTable getAccessToken getOption getOptions getTable mapColumnNames mapColumnNamesBack on onNewRecord onOptions onRecord onRecords ready setCursorPos setOption setOptions setSelectedRows Type Aliases # ColumnsToMap # \u01ac ColumnsToMap : ( string | ColumnToMap )[] Tells Grist what columns a Custom Widget expects and allows users to map between existing column names and those requested by the Custom Widget. UIRowId # \u01ac UIRowId : number | \"new\" Represents the id of a row in a table. The value of the id column. Might be a number or \u2018new\u2019 value for a new row. Variables # checkers # \u2022 Const checkers : Pick < ICheckerSuite , \"CustomSectionAPI\" | \"ParseOptions\" | \"ParseFileResult\" | \"FileSource\" | \"ParseOptionSchema\" | \"GristTables\" | \"EditOptionsAPI\" | \"ParseFileAPI\" | \"RenderTarget\" | \"RenderOptions\" | \"ComponentKind\" | \"GristAPI\" | \"GristDocAPI\" | \"GristView\" | \"GristColumn\" | \"GristTable\" | \"ImportSourceAPI\" | \"ImportProcessorAPI\" | \"ImportSource\" | \"FileContent\" | \"FileListItem\" | \"URL\" | \"InternalImportSourceAPI\" | \"Storage\" | \"WidgetAPI\" > We also create and export a global checker object that includes all of the types above. docApi # \u2022 Const docApi : GristDocAPI & GristView A collection of methods for fetching document data. The fetchSelectedTable and fetchSelectedRecord methods are overridden to decode data by default. sectionApi # \u2022 Const sectionApi : CustomSectionAPI Interface for the mapping of a custom widget. selectedTable # \u2022 Const selectedTable : TableOperations Get the current selected table (for custom widgets). viewApi # \u2022 Const viewApi : GristView Interface for the records backing a custom widget. widgetApi # \u2022 Const widgetApi : WidgetAPI Interface for the state of a custom widget. Functions # allowSelectBy # \u25b8 allowSelectBy (): Promise < void > Deprecated now. It was used for filtering selected table by setSelectedRows method. Now the preferred way it to use ready message. Returns # Promise < void > clearOptions # \u25b8 clearOptions (): Promise < void > Clears all the options. Returns # Promise < void > fetchSelectedRecord # \u25b8 fetchSelectedRecord ( rowId , options? ): Promise < any > Same as GristView.fetchSelectedRecord , but the option keepEncoded is false by default. Parameters # Name Type rowId number options FetchSelectedOptions Returns # Promise < any > fetchSelectedTable # \u25b8 fetchSelectedTable ( options? ): Promise < any > Same as GristView.fetchSelectedTable , but the option keepEncoded is false by default. Parameters # Name Type options FetchSelectedOptions Returns # Promise < any > getAccessToken # \u25b8 getAccessToken ( options? ): Promise < AccessTokenResult > Get an access token, for making API calls outside of the custom widget API. There is no caching of tokens. The returned token can be used to authorize regular REST API calls that access the content of the document. For example, in a custom widget for a table with a Photos column containing attachments, the following code will update the src of an image with id the_image to show the attachment: grist.onRecord(async (record) => { const tokenInfo = await grist.docApi.getAccessToken({readOnly: true}); const img = document.getElementById('the_image'); const id = record.Photos[0]; // get an id of an attachment - there could be several // in a cell, for this example we just take the first. const src = `${tokenInfo.baseUrl}/attachments/${id}/download?auth=${tokenInfo.token}`; img.setAttribute('src', src); }); Parameters # Name Type options? AccessTokenOptions Returns # Promise < AccessTokenResult > getOption # \u25b8 getOption ( key ): Promise < any > Get single value from Widget options object. Parameters # Name Type key string Returns # Promise < any > getOptions # \u25b8 getOptions (): Promise < null | object > Gets all options stored by the widget. Options are stored as plain JSON object. Returns # Promise < null | object > getTable # \u25b8 getTable ( tableId? ): TableOperations Get access to a table in the document. If no tableId specified, this will use the current selected table (for custom widgets). If a table does not exist, there will be no error until an operation on the table is attempted. Parameters # Name Type tableId? string Returns # TableOperations mapColumnNames # \u25b8 mapColumnNames ( data , options? ): any Renames columns in the result using columns mapping configuration passed in ready method. Returns null if not all required columns were mapped or not widget doesn\u2019t support custom column mapping. Parameters # Name Type data any options? Object options.columns? ColumnsToMap options.mappings? null | WidgetColumnMap options.reverse? boolean Returns # any mapColumnNamesBack # \u25b8 mapColumnNamesBack ( data , options? ): any Offer a convenient way to map data with renamed columns back into the form used in the original table. This is useful for making edits to the original table in a widget with column mappings. As for mapColumnNames(), we don\u2019t attempt to do these transformations automatically. Parameters # Name Type data any options? Object options.columns? ColumnsToMap options.mappings? null | WidgetColumnMap Returns # any on # \u25b8 on ( eventName , listener ): Rpc Adds the listener function to the end of the listeners array for the event named eventName . No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times. server.on('connection', (stream) => { console.log('someone connected!'); }); Returns a reference to the EventEmitter , so that calls can be chained. By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the event listener to the beginning of the listeners array. const myEE = new EventEmitter(); myEE.on('foo', () => console.log('a')); myEE.prependListener('foo', () => console.log('b')); myEE.emit('foo'); // Prints: // b // a Since v0.1.101 Parameters # Name Type Description eventName string | symbol The name of the event. listener (\u2026 args : any []) => void The callback function Returns # Rpc onNewRecord # \u25b8 onNewRecord ( callback ): void For custom widgets, add a handler that will be called whenever the new (blank) row is selected. Parameters # Name Type callback ( mappings : null | WidgetColumnMap ) => unknown Returns # void onOptions # \u25b8 onOptions ( callback ): void For custom widgets, add a handler that will be called whenever the widget options change (and on initial ready message). Handler will be called with an object containing saved json options, or null if no options were saved. The second parameter has information about the widgets relationship with the document that contains it. Parameters # Name Type callback ( options : any , settings : InteractionOptions ) => unknown Returns # void onRecord # \u25b8 onRecord ( callback , options? ): void For custom widgets, add a handler that will be called whenever the row with the cursor changes - either by switching to a different row, or by some value within the row potentially changing. Handler may in the future be called with null if the cursor moves away from any row. By default, options.keepEncoded is false . Parameters # Name Type callback ( data : null | RowRecord , mappings : null | WidgetColumnMap ) => unknown options FetchSelectedOptions Returns # void onRecords # \u25b8 onRecords ( callback , options? ): void For custom widgets, add a handler that will be called whenever the selected records change. By default, options.format is 'rows' and options.keepEncoded is false . Parameters # Name Type callback ( data : RowRecord [], mappings : null | WidgetColumnMap ) => unknown options FetchSelectedOptions Returns # void ready # \u25b8 ready ( settings? ): void Declare that a component is prepared to receive messages from the outside world. Grist will not attempt to communicate with it until this method is called. Parameters # Name Type settings? ReadyPayload Returns # void setCursorPos # \u25b8 setCursorPos ( pos ): Promise < void > Sets the cursor position to a specific row and field. sectionId is ignored. Used for widget linking. Parameters # Name Type pos CursorPos Returns # Promise < void > setOption # \u25b8 setOption ( key , value ): Promise < void > Store single value in the Widget options object (and create it if necessary). Parameters # Name Type key string value any Returns # Promise < void > setOptions # \u25b8 setOptions ( options ): Promise < void > Replaces all options stored by the widget. Parameters # Name Type options Object Returns # Promise < void > setSelectedRows # \u25b8 setSelectedRows ( rowIds ): Promise < void > Set the list of selected rows to be used against any linked widget. Parameters # Name Type rowIds null | number [] Returns # Promise < void >","title":"grist-plugin-api"},{"location":"code/modules/grist_plugin_api/#module-grist-plugin-api","text":"","title":"Module: grist-plugin-api"},{"location":"code/modules/grist_plugin_api/#table-of-contents","text":"","title":"Table of contents"},{"location":"code/modules/grist_plugin_api/#interfaces","text":"AccessTokenOptions AccessTokenResult ColumnToMap CursorPos CustomSectionAPI FetchSelectedOptions GristColumn GristDocAPI GristTable GristView InteractionOptions InteractionOptionsRequest ParseOptionSchema ParseOptions ReadyPayload RenderOptions WidgetAPI WidgetColumnMap","title":"Interfaces"},{"location":"code/modules/grist_plugin_api/#type-aliases","text":"ColumnsToMap UIRowId","title":"Type Aliases"},{"location":"code/modules/grist_plugin_api/#variables","text":"checkers docApi sectionApi selectedTable viewApi widgetApi","title":"Variables"},{"location":"code/modules/grist_plugin_api/#functions","text":"allowSelectBy clearOptions fetchSelectedRecord fetchSelectedTable getAccessToken getOption getOptions getTable mapColumnNames mapColumnNamesBack on onNewRecord onOptions onRecord onRecords ready setCursorPos setOption setOptions setSelectedRows","title":"Functions"},{"location":"code/modules/grist_plugin_api/#type-aliases_1","text":"","title":"Type Aliases"},{"location":"code/modules/grist_plugin_api/#columnstomap","text":"\u01ac ColumnsToMap : ( string | ColumnToMap )[] Tells Grist what columns a Custom Widget expects and allows users to map between existing column names and those requested by the Custom Widget.","title":"ColumnsToMap"},{"location":"code/modules/grist_plugin_api/#uirowid","text":"\u01ac UIRowId : number | \"new\" Represents the id of a row in a table. The value of the id column. Might be a number or \u2018new\u2019 value for a new row.","title":"UIRowId"},{"location":"code/modules/grist_plugin_api/#variables_1","text":"","title":"Variables"},{"location":"code/modules/grist_plugin_api/#checkers","text":"\u2022 Const checkers : Pick < ICheckerSuite , \"CustomSectionAPI\" | \"ParseOptions\" | \"ParseFileResult\" | \"FileSource\" | \"ParseOptionSchema\" | \"GristTables\" | \"EditOptionsAPI\" | \"ParseFileAPI\" | \"RenderTarget\" | \"RenderOptions\" | \"ComponentKind\" | \"GristAPI\" | \"GristDocAPI\" | \"GristView\" | \"GristColumn\" | \"GristTable\" | \"ImportSourceAPI\" | \"ImportProcessorAPI\" | \"ImportSource\" | \"FileContent\" | \"FileListItem\" | \"URL\" | \"InternalImportSourceAPI\" | \"Storage\" | \"WidgetAPI\" > We also create and export a global checker object that includes all of the types above.","title":"checkers"},{"location":"code/modules/grist_plugin_api/#docapi","text":"\u2022 Const docApi : GristDocAPI & GristView A collection of methods for fetching document data. The fetchSelectedTable and fetchSelectedRecord methods are overridden to decode data by default.","title":"docApi"},{"location":"code/modules/grist_plugin_api/#sectionapi","text":"\u2022 Const sectionApi : CustomSectionAPI Interface for the mapping of a custom widget.","title":"sectionApi"},{"location":"code/modules/grist_plugin_api/#selectedtable","text":"\u2022 Const selectedTable : TableOperations Get the current selected table (for custom widgets).","title":"selectedTable"},{"location":"code/modules/grist_plugin_api/#viewapi","text":"\u2022 Const viewApi : GristView Interface for the records backing a custom widget.","title":"viewApi"},{"location":"code/modules/grist_plugin_api/#widgetapi","text":"\u2022 Const widgetApi : WidgetAPI Interface for the state of a custom widget.","title":"widgetApi"},{"location":"code/modules/grist_plugin_api/#functions_1","text":"","title":"Functions"},{"location":"code/modules/grist_plugin_api/#allowselectby","text":"\u25b8 allowSelectBy (): Promise < void > Deprecated now. It was used for filtering selected table by setSelectedRows method. Now the preferred way it to use ready message.","title":"allowSelectBy"},{"location":"code/modules/grist_plugin_api/#returns","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#clearoptions","text":"\u25b8 clearOptions (): Promise < void > Clears all the options.","title":"clearOptions"},{"location":"code/modules/grist_plugin_api/#returns_1","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#fetchselectedrecord","text":"\u25b8 fetchSelectedRecord ( rowId , options? ): Promise < any > Same as GristView.fetchSelectedRecord , but the option keepEncoded is false by default.","title":"fetchSelectedRecord"},{"location":"code/modules/grist_plugin_api/#parameters","text":"Name Type rowId number options FetchSelectedOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_2","text":"Promise < any >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#fetchselectedtable","text":"\u25b8 fetchSelectedTable ( options? ): Promise < any > Same as GristView.fetchSelectedTable , but the option keepEncoded is false by default.","title":"fetchSelectedTable"},{"location":"code/modules/grist_plugin_api/#parameters_1","text":"Name Type options FetchSelectedOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_3","text":"Promise < any >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#getaccesstoken","text":"\u25b8 getAccessToken ( options? ): Promise < AccessTokenResult > Get an access token, for making API calls outside of the custom widget API. There is no caching of tokens. The returned token can be used to authorize regular REST API calls that access the content of the document. For example, in a custom widget for a table with a Photos column containing attachments, the following code will update the src of an image with id the_image to show the attachment: grist.onRecord(async (record) => { const tokenInfo = await grist.docApi.getAccessToken({readOnly: true}); const img = document.getElementById('the_image'); const id = record.Photos[0]; // get an id of an attachment - there could be several // in a cell, for this example we just take the first. const src = `${tokenInfo.baseUrl}/attachments/${id}/download?auth=${tokenInfo.token}`; img.setAttribute('src', src); });","title":"getAccessToken"},{"location":"code/modules/grist_plugin_api/#parameters_2","text":"Name Type options? AccessTokenOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_4","text":"Promise < AccessTokenResult >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#getoption","text":"\u25b8 getOption ( key ): Promise < any > Get single value from Widget options object.","title":"getOption"},{"location":"code/modules/grist_plugin_api/#parameters_3","text":"Name Type key string","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_5","text":"Promise < any >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#getoptions","text":"\u25b8 getOptions (): Promise < null | object > Gets all options stored by the widget. Options are stored as plain JSON object.","title":"getOptions"},{"location":"code/modules/grist_plugin_api/#returns_6","text":"Promise < null | object >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#gettable","text":"\u25b8 getTable ( tableId? ): TableOperations Get access to a table in the document. If no tableId specified, this will use the current selected table (for custom widgets). If a table does not exist, there will be no error until an operation on the table is attempted.","title":"getTable"},{"location":"code/modules/grist_plugin_api/#parameters_4","text":"Name Type tableId? string","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_7","text":"TableOperations","title":"Returns"},{"location":"code/modules/grist_plugin_api/#mapcolumnnames","text":"\u25b8 mapColumnNames ( data , options? ): any Renames columns in the result using columns mapping configuration passed in ready method. Returns null if not all required columns were mapped or not widget doesn\u2019t support custom column mapping.","title":"mapColumnNames"},{"location":"code/modules/grist_plugin_api/#parameters_5","text":"Name Type data any options? Object options.columns? ColumnsToMap options.mappings? null | WidgetColumnMap options.reverse? boolean","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_8","text":"any","title":"Returns"},{"location":"code/modules/grist_plugin_api/#mapcolumnnamesback","text":"\u25b8 mapColumnNamesBack ( data , options? ): any Offer a convenient way to map data with renamed columns back into the form used in the original table. This is useful for making edits to the original table in a widget with column mappings. As for mapColumnNames(), we don\u2019t attempt to do these transformations automatically.","title":"mapColumnNamesBack"},{"location":"code/modules/grist_plugin_api/#parameters_6","text":"Name Type data any options? Object options.columns? ColumnsToMap options.mappings? null | WidgetColumnMap","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_9","text":"any","title":"Returns"},{"location":"code/modules/grist_plugin_api/#on","text":"\u25b8 on ( eventName , listener ): Rpc Adds the listener function to the end of the listeners array for the event named eventName . No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times. server.on('connection', (stream) => { console.log('someone connected!'); }); Returns a reference to the EventEmitter , so that calls can be chained. By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the event listener to the beginning of the listeners array. const myEE = new EventEmitter(); myEE.on('foo', () => console.log('a')); myEE.prependListener('foo', () => console.log('b')); myEE.emit('foo'); // Prints: // b // a Since v0.1.101","title":"on"},{"location":"code/modules/grist_plugin_api/#parameters_7","text":"Name Type Description eventName string | symbol The name of the event. listener (\u2026 args : any []) => void The callback function","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_10","text":"Rpc","title":"Returns"},{"location":"code/modules/grist_plugin_api/#onnewrecord","text":"\u25b8 onNewRecord ( callback ): void For custom widgets, add a handler that will be called whenever the new (blank) row is selected.","title":"onNewRecord"},{"location":"code/modules/grist_plugin_api/#parameters_8","text":"Name Type callback ( mappings : null | WidgetColumnMap ) => unknown","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_11","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#onoptions","text":"\u25b8 onOptions ( callback ): void For custom widgets, add a handler that will be called whenever the widget options change (and on initial ready message). Handler will be called with an object containing saved json options, or null if no options were saved. The second parameter has information about the widgets relationship with the document that contains it.","title":"onOptions"},{"location":"code/modules/grist_plugin_api/#parameters_9","text":"Name Type callback ( options : any , settings : InteractionOptions ) => unknown","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_12","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#onrecord","text":"\u25b8 onRecord ( callback , options? ): void For custom widgets, add a handler that will be called whenever the row with the cursor changes - either by switching to a different row, or by some value within the row potentially changing. Handler may in the future be called with null if the cursor moves away from any row. By default, options.keepEncoded is false .","title":"onRecord"},{"location":"code/modules/grist_plugin_api/#parameters_10","text":"Name Type callback ( data : null | RowRecord , mappings : null | WidgetColumnMap ) => unknown options FetchSelectedOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_13","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#onrecords","text":"\u25b8 onRecords ( callback , options? ): void For custom widgets, add a handler that will be called whenever the selected records change. By default, options.format is 'rows' and options.keepEncoded is false .","title":"onRecords"},{"location":"code/modules/grist_plugin_api/#parameters_11","text":"Name Type callback ( data : RowRecord [], mappings : null | WidgetColumnMap ) => unknown options FetchSelectedOptions","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_14","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#ready","text":"\u25b8 ready ( settings? ): void Declare that a component is prepared to receive messages from the outside world. Grist will not attempt to communicate with it until this method is called.","title":"ready"},{"location":"code/modules/grist_plugin_api/#parameters_12","text":"Name Type settings? ReadyPayload","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_15","text":"void","title":"Returns"},{"location":"code/modules/grist_plugin_api/#setcursorpos","text":"\u25b8 setCursorPos ( pos ): Promise < void > Sets the cursor position to a specific row and field. sectionId is ignored. Used for widget linking.","title":"setCursorPos"},{"location":"code/modules/grist_plugin_api/#parameters_13","text":"Name Type pos CursorPos","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_16","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#setoption","text":"\u25b8 setOption ( key , value ): Promise < void > Store single value in the Widget options object (and create it if necessary).","title":"setOption"},{"location":"code/modules/grist_plugin_api/#parameters_14","text":"Name Type key string value any","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_17","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#setoptions","text":"\u25b8 setOptions ( options ): Promise < void > Replaces all options stored by the widget.","title":"setOptions"},{"location":"code/modules/grist_plugin_api/#parameters_15","text":"Name Type options Object","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_18","text":"Promise < void >","title":"Returns"},{"location":"code/modules/grist_plugin_api/#setselectedrows","text":"\u25b8 setSelectedRows ( rowIds ): Promise < void > Set the list of selected rows to be used against any linked widget.","title":"setSelectedRows"},{"location":"code/modules/grist_plugin_api/#parameters_16","text":"Name Type rowIds null | number []","title":"Parameters"},{"location":"code/modules/grist_plugin_api/#returns_19","text":"Promise < void >","title":"Returns"},{"location":"install/audit-log-overview/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Audit log overview # Grist supports real-time monitoring of activity in your installation by streaming logs of audit events to an external security information and event management (SIEM) system like Splunk. What are audit logs? # Audit logs are a record of events triggered by actions performed within your installation that help you answer questions like \u201cwhen was a workspace removed?\u201d or \u201cwho invited a collaborator to a document?\u201d Audit logs can can help maintain compliance and identify misuse of organization resources. About audit log events # Audit log events include the action that occurred, who performed the action, when and where the action occurred, and any additional details about the action in question. For example, the document.create action occurs when a document is created in your installation, and includes details like the ID and name of the created document and its workspace. { \"id\": \"806ed0d9-7d25-4df2-9a6c-f7d2f6b8dba6\", \"action\": \"document.create\", \"actor\": { \"type\": \"user\", \"user\": { \"id\": 146, \"email\": \"flapjack@example.com\", \"name\": \"Flapjack Toasty\" } }, \"context\": { \"ip_address\": \"39.139.42.243\", \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\", \"session_id\": \"ixVo6maPbcgd1vvoj93teT\", \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"timestamp\": \"2024-11-13T06:00:51.518Z\", \"details\": { \"document\": { \"id\": \"4cq1mNTkQmEF5KsUVGiy6H\", \"name\": \"Untitled document\" } } } For a full list of events that may appear, see \u201cAudit log events for your self-managed instance\u201d . Streaming audit log events # Installation admins can configure streaming of audit log events to external SIEM systems from the Admin Panel. For more information, see \u201cAudit log streaming.\u201d","title":"Audit log overview"},{"location":"install/audit-log-overview/#audit-log-overview","text":"Grist supports real-time monitoring of activity in your installation by streaming logs of audit events to an external security information and event management (SIEM) system like Splunk.","title":"Audit log overview"},{"location":"install/audit-log-overview/#what-are-audit-logs","text":"Audit logs are a record of events triggered by actions performed within your installation that help you answer questions like \u201cwhen was a workspace removed?\u201d or \u201cwho invited a collaborator to a document?\u201d Audit logs can can help maintain compliance and identify misuse of organization resources.","title":"What are audit logs?"},{"location":"install/audit-log-overview/#about-audit-log-events","text":"Audit log events include the action that occurred, who performed the action, when and where the action occurred, and any additional details about the action in question. For example, the document.create action occurs when a document is created in your installation, and includes details like the ID and name of the created document and its workspace. { \"id\": \"806ed0d9-7d25-4df2-9a6c-f7d2f6b8dba6\", \"action\": \"document.create\", \"actor\": { \"type\": \"user\", \"user\": { \"id\": 146, \"email\": \"flapjack@example.com\", \"name\": \"Flapjack Toasty\" } }, \"context\": { \"ip_address\": \"39.139.42.243\", \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\", \"session_id\": \"ixVo6maPbcgd1vvoj93teT\", \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"timestamp\": \"2024-11-13T06:00:51.518Z\", \"details\": { \"document\": { \"id\": \"4cq1mNTkQmEF5KsUVGiy6H\", \"name\": \"Untitled document\" } } } For a full list of events that may appear, see \u201cAudit log events for your self-managed instance\u201d .","title":"About audit log events"},{"location":"install/audit-log-overview/#streaming-audit-log-events","text":"Installation admins can configure streaming of audit log events to external SIEM systems from the Admin Panel. For more information, see \u201cAudit log streaming.\u201d","title":"Streaming audit log events"},{"location":"install/audit-log-streaming/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Audit log streaming # Grist can stream audit log events from your installation to an external destination, such as a security information and event management (SIEM) system. You can add, update, or delete a streaming destination at any time, and stream to multiple destinations. Events from all team sites within your installation will be included in the stream. Events are streamed in real-time. Only events that occurred after a streaming destination was added will be sent to that destination. Note: You must be an installation administrator to view or modify streaming destinations. Adding streaming destinations # Grist currently supports streaming to destinations with HTTP Event Collector (HEC) endpoints, such as Splunk, or destinations that can accept structured JSON over HTTP. Follow the instructions for your destination: Splunk (HEC) Other (HTTP) Streaming to Splunk (HEC) # To stream to destinations with HEC endpoints, a format used by Splunk and Splunk-compatible services, you need to set up an HEC endpoint that is reachable from your Grist installation. You can also use a tool like Vector which supports receiving HEC events. See Splunk\u2019s documentation for more information. Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click Start streaming or Add destination . Under \u201cDestination\u201d, click Splunk . Under \u201cURL\u201d, enter the HEC endpoint to send events to. Under \u201cToken\u201d, enter \u201cSplunk \u201d followed by the HEC token (e.g. Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0 ). Click Add destination . Streaming to other destinations (HTTP) # To stream to other HTTP destinations, you need to set up an endpoint that is reachable from your Grist installation and accepts structured JSON with the following format: { \"id\": \"806ed0d9-7d25-4df2-9a6c-f7d2f6b8dba6\", \"action\": \"document.create\", \"actor\": { \"type\": \"user\", \"user\": { \"id\": 146, \"email\": \"flapjack@example.com\", \"name\": \"Flapjack Toasty\" } }, \"context\": { \"ip_address\": \"39.139.42.243\", \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\", \"session_id\": \"ixVo6maPbcgd1vvoj93teT\", \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"timestamp\": \"2024-11-13T06:00:51.518Z\", \"details\": { \"document\": { \"id\": \"4cq1mNTkQmEF5KsUVGiy6H\", \"name\": \"Untitled document\" } } } Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click Start streaming or Add destination . Under \u201cDestination\u201d, click Other . Under \u201cURL\u201d, enter the HTTP endpoint to send events to. Under \u201cToken\u201d, enter the value to include in the Authorization header, if applicable. Click Add destination . Updating streaming destinations # Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click \u2026 for the destination you want to update. Modify the destination, URL, and/or token. Click Save . Deleting streaming destinations # Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click \u2026 for the destination you want to delete. Click Delete . Click Delete again in the confirmation modal that appears.","title":"Audit log streaming"},{"location":"install/audit-log-streaming/#audit-log-streaming","text":"Grist can stream audit log events from your installation to an external destination, such as a security information and event management (SIEM) system. You can add, update, or delete a streaming destination at any time, and stream to multiple destinations. Events from all team sites within your installation will be included in the stream. Events are streamed in real-time. Only events that occurred after a streaming destination was added will be sent to that destination. Note: You must be an installation administrator to view or modify streaming destinations.","title":"Audit log streaming"},{"location":"install/audit-log-streaming/#adding-streaming-destinations","text":"Grist currently supports streaming to destinations with HTTP Event Collector (HEC) endpoints, such as Splunk, or destinations that can accept structured JSON over HTTP. Follow the instructions for your destination: Splunk (HEC) Other (HTTP)","title":"Adding streaming destinations"},{"location":"install/audit-log-streaming/#streaming-to-splunk-hec","text":"To stream to destinations with HEC endpoints, a format used by Splunk and Splunk-compatible services, you need to set up an HEC endpoint that is reachable from your Grist installation. You can also use a tool like Vector which supports receiving HEC events. See Splunk\u2019s documentation for more information. Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click Start streaming or Add destination . Under \u201cDestination\u201d, click Splunk . Under \u201cURL\u201d, enter the HEC endpoint to send events to. Under \u201cToken\u201d, enter \u201cSplunk \u201d followed by the HEC token (e.g. Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0 ). Click Add destination .","title":"Streaming to Splunk (HEC)"},{"location":"install/audit-log-streaming/#streaming-to-other-destinations-http","text":"To stream to other HTTP destinations, you need to set up an endpoint that is reachable from your Grist installation and accepts structured JSON with the following format: { \"id\": \"806ed0d9-7d25-4df2-9a6c-f7d2f6b8dba6\", \"action\": \"document.create\", \"actor\": { \"type\": \"user\", \"user\": { \"id\": 146, \"email\": \"flapjack@example.com\", \"name\": \"Flapjack Toasty\" } }, \"context\": { \"ip_address\": \"39.139.42.243\", \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\", \"session_id\": \"ixVo6maPbcgd1vvoj93teT\", \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"timestamp\": \"2024-11-13T06:00:51.518Z\", \"details\": { \"document\": { \"id\": \"4cq1mNTkQmEF5KsUVGiy6H\", \"name\": \"Untitled document\" } } } Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click Start streaming or Add destination . Under \u201cDestination\u201d, click Other . Under \u201cURL\u201d, enter the HTTP endpoint to send events to. Under \u201cToken\u201d, enter the value to include in the Authorization header, if applicable. Click Add destination .","title":"Streaming to other destinations (HTTP)"},{"location":"install/audit-log-streaming/#updating-streaming-destinations","text":"Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click \u2026 for the destination you want to update. Modify the destination, URL, and/or token. Click Save .","title":"Updating streaming destinations"},{"location":"install/audit-log-streaming/#deleting-streaming-destinations","text":"Click the profile icon in the top-right corner of Grist. Click Admin Panel . Under \u201cAudit Logs\u201d, click Log Streaming . Under \u201cDestinations\u201d, click \u2026 for the destination you want to delete. Click Delete . Click Delete again in the confirmation modal that appears.","title":"Deleting streaming destinations"},{"location":"install/audit-log-events/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . Audit log events for your self-managed instance # config # config.create # A configuration item was created. Details # Property Type Description config object The created configuration item. config.id number The configuration item ID. config.key string The configuration item key. config.value any The configuration item value. config.site (optional) object The site this configuration item belongs to. config.site.id number The site ID. config.site.name string The site name. config.site.domain string The site domain. Sample # { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } } config.delete # A configuration item was deleted. Details # Property Type Description config object The deleted configuration item. config.id number The configuration item ID. config.key string The configuration item key. config.value any The configuration item value. config.site (optional) object The site this configuration item belonged to. config.site.id number The site ID. config.site.name string The site name. config.site.domain string The site domain. Sample # { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } } config.update # A configuration item was updated. Details # Property Type Description previous object The previous versions of affected resources. previous.config object The previous configuration item. previous.config.id number The configuration item ID. previous.config.key string The configuration item key. previous.config.value any The configuration item value. previous.config.site (optional) object The site this configuration item belongs to. previous.config.site.id number The site ID. previous.config.site.name string The site name. previous.config.site.domain string The site domain. current object The current versions of affected resources. current.config object The current configuration item. current.config.id number The configuration item ID. current.config.key string The configuration item key. current.config.value any The configuration item value. current.config.site (optional) object The site this configuration item belongs to. current.config.site.id number The site ID. current.config.site.name string The site name. current.config.site.domain string The site domain. Sample # { \"previous\": { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } }, \"current\": { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" }, { \"id\": \"8f421760-14e9-4d11-b10a-f51d82041e0f\", \"name\": \"other\", \"url\": \"https://other.example.com/events\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } } } document # document.change_access # A document\u2019s access was changed. Details # Property Type Description document object The document. document.id string The document ID. document.name string The document name. access_changes object The access changes. access_changes.public_access (optional) string or null The new public access level. access_changes.max_inherited_access (optional) string or null The new maximum access level that can be inherited from the document\u2019s workspace or site. access_changes.users (optional) Array The new access levels of individual users. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" }, \"access_changes\": { \"public_access\": \"viewers\", \"max_inherited_access\": null, \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"owners\" } ] } } document.clear_all_webhook_queues # A document\u2019s webhook queues were cleared. Details # Property Type Description document object The created document. document.id string The document ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } } document.clear_webhook_queue # A document\u2019s webhook queue was cleared. Details # Property Type Description document object The document. document.id string The document ID. webhook object The webhook. webhook.id string The webhook ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"webhook\": { \"id\": \"17f8328e-0523-41fe-89aa-ae180bebb26e\" } } document.create # A document was created. Details # Property Type Description document object The created document. document.id string The document ID. document.name string The document name. document.workspace object The document\u2019s workspace. document.workspace.id number The workspace ID. document.workspace.name string The workspace name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } } document.delete # A document was permanently deleted. Details # Property Type Description document object The deleted document. document.id string The document ID. document.name string The document name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } } document.deliver_webhook_events # A document\u2019s webhook successfully delivered events. Details # Property Type Description document object The document. document.id string The document ID. webhook object The webhook. webhook.id string The webhook ID. webhook.events object The delivered webhook events. webhook.events.delivered_to string Where the webhook events were delivered to. webhook.events.quantity number The number of webhook events that were delivered. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"webhook\": { \"id\": \"17f8328e-0523-41fe-89aa-ae180bebb26e\", \"events\": { \"delivered_to\": \"example.com\", \"quantity\": 3 } } } document.duplicate # A document was duplicated. Details # Property Type Description original object The resources that were duplicated. original.document object The document that was duplicated. original.document.id string The document ID. original.document.name string The document name. duplicate object The newly-duplicated resources. duplicate.document object The newly-duplicated document. duplicate.document.id string The document ID. duplicate.document.name string The document name. duplicate.document.workspace object The document\u2019s workspace. duplicate.document.workspace.id number The workspace ID options object The options used to duplicate the document. options.as_template boolean Include the structure without any data. Sample # { \"original\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }, \"duplicate\": { \"document\": { \"id\": \"fFKKA6qjXJd9sNLhpw6iPn\", \"name\": \"Project Lollipop V2\", \"workspace\": { \"id\": 92 } } }, \"options\": { \"as_template\": false } } document.fork # A document was forked. Details # Property Type Description document object The document that was forked. document.id string The document ID. document.name string The document name. fork object The newly-forked document. fork.id string The fork ID. fork.document_id string The document ID. fork.url_id string The URL ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" }, \"fork\": { \"id\": \"fGGyPYea1ueFiVW382uuAY\", \"document_id\": \"mRM8ydxxLkc6Ewo56jsDGx~fGGyPYea1ueFiVW382uuAY~9\", \"url_id\": \"mRM8ydxxLkc6~fGGyPYea1ueFiVW382uuAY~9\" } } document.move # A document was moved to a different workspace. Details # Property Type Description previous object The previous versions of affected resources. previous.document object The previous document. previous.document.id string The document ID. previous.document.name string The document name. previous.document.workspace object The document\u2019s workspace. previous.document.workspace.id number The workspace ID. previous.document.workspace.name string The workspace name. current object The current versions of affected resources. current.document object The current document. current.document.id string The document ID. current.document.name string The document name. current.document.workspace object The document\u2019s workspace. current.document.workspace.id number The workspace ID. current.document.workspace.name string The workspace name. Sample # { \"previous\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } }, \"current\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 98, \"name\": \"Not So Secret Plans\" } } } } document.move_to_trash # A document was moved to the trash. Details # Property Type Description document object The removed document. document.id string The document ID. document.name string The document name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } } document.open # A document was opened. Details # Property Type Description document object The opened document. document.id string The document ID. document.name string The document name. document.url_id string The URL ID. document.fork_id (optional) string The fork ID. document.snapshot_id (optional) string The snapshot ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"url_id\": \"mRM8ydxxLkc6~fGGyPYea1ueFiVW382uuAY~9\", \"fork_id\": \"fGGyPYea1ueFiVW382uuAY\" } } document.pin # A document was pinned. Details # Property Type Description document object The pinned document. document.id string The document ID. document.name string The document name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } } document.reload # A document was reloaded. Details # Property Type Description document object The reloaded document. document.id string The document ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } } document.rename # A document was renamed. Details # Property Type Description previous object The previous versions of affected resources. previous.document object The previous document. previous.document.id number The document ID. previous.document.name string The document name. current object The current versions of affected resources. current.document object The current document. current.document.id number The document ID. current.document.name string The document name. Sample # { \"previous\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }, \"current\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Competitive Analysis\" } } } document.replace # A document was replaced. Details # Property Type Description document object The document that was replaced. document.id string The document ID. fork (optional) object The fork that the document was replaced with. fork.document_id string The document ID. snapshot (optional) object The snapshot that the document was replaced with. snapshot.id string The snapshot ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"fork\": { \"document_id\": \"mRM8ydxxLkc6Ewo56jsDGx~fGGyPYea1ueFiVW382uuAY~9\" } } document.restore_from_trash # A document was restored from the trash. Details # Property Type Description document object The restored document. document.id string The document ID. document.name string The document name. document.workspace object The document\u2019s workspace. document.workspace.id number The workspace ID. document.workspace.name string The workspace name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } } document.run_sql_query # A SQL query was run against a document. Details # Property Type Description document object The queried document. document.id string The document ID. sql_query object The SQL query. sql_query.statement string The SQL statement. sql_query.arguments (optional) Array The arguments passed to parameters in the SQL statement. options object The options used to query the document. options.timeout_ms (optional) number Timeout in milliseconds after which operations on the document will be interrupted. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"sql_query\": { \"statement\": \"SELECT * FROM Pets WHERE popularity >= ?\", \"arguments\": [ 50 ] }, \"options\": { \"timeout_ms\": 500 } } document.send_to_google_drive # A document was sent to Google Drive. Details # Property Type Description document object The sent document. document.id string The document ID. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } } document.truncate_history # A document\u2019s history was truncated. Details # Property Type Description document object The document. document.id string The document ID. options object The options used to truncate the document\u2019s history. options.keep_n_most_recent number The number of recent history actions to keep. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"options\": { \"keep_n_most_recent\": 3 } } document.unpin # A document was unpinned. Details # Property Type Description document object The unpinned document. document.id string The document ID. document.name string The document name. Sample # { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } } site # site.change_access # A site\u2019s access was changed. Details # Property Type Description site object The site. site.id number The site ID. site.name string The site name. site.domain string The site domain. access_changes object The access changes. access_changes.users Array The new access levels of individual users. Sample # { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" }, \"access_changes\": { \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"owners\" } ] } } site.create # A site was created. Details # Property Type Description site object The created site. site.id number The site ID. site.name string The site name. site.domain string The site domain. Sample # { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } site.delete # A site was permanently deleted. Details # Property Type Description site object The deleted site. site.id number The site ID. site.name string The site name. site.domain string The site domain. Sample # { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } site.rename # A site was renamed. Details # Property Type Description previous object The previous versions of affected resources. previous.site object The previous site. previous.site.id number The site ID. previous.site.name string The site name. previous.site.domain string The site domain. current object The current versions of affected resources. current.site object The current site. current.site.id number The site ID. current.site.name string The site name. current.site.domain string The site domain. Sample # { \"previous\": { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"current\": { \"site\": { \"id\": 42, \"name\": \"ACME Unlimited\", \"domain\": \"acme\" } } } user # user.change_name # A user\u2019s name was changed. Details # Property Type Description previous object The previous versions of affected resources. previous.user object The previous user. previous.user.id number The user ID. previous.user.name string The user\u2019s name. previous.user.email (optional) string The user\u2019s email. current object The current versions of affected resources. current.user object The current user. current.user.id number The user ID. current.user.name string The user\u2019s name. current.user.email (optional) string The user\u2019s email. Sample # { \"previous\": { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }, \"current\": { \"user\": { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\" } } } user.create_api_key # A user API key was created. Details # Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email. Sample # { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } } user.delete # A user was permanently deleted. Details # Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email. Sample # { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } } user.delete_api_key # A user API key was deleted. Details # Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email. Sample # { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } } workspace # workspace.change_access # A workspace\u2019s access was changed. Details # Property Type Description workspace object The workspace. workspace.id number The workspace ID. workspace.name string The workspace name. access_changes object The access changes. access_changes.max_inherited_access (optional) string or null The new maximum access level that can be inherited from the workspace\u2019s site. access_changes.users (optional) Array The new access levels of individual users. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" }, \"access_changes\": { \"max_inherited_access\": \"editors\", \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"editors\" } ] } } workspace.create # A workspace was created. Details # Property Type Description workspace object The created workspace. workspace.id number The workspace ID. workspace.name string The workspace name. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } workspace.delete # A workspace was permanently deleted. Details # Property Type Description workspace object The deleted workspace. workspace.id number The workspace ID. workspace.name string The workspace name. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } workspace.move_to_trash # A workspace was moved to the trash. Details # Property Type Description workspace object The removed workspace. workspace.id number The workspace ID. workspace.name string The workspace name. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } workspace.rename # A workspace was renamed. Details # Property Type Description previous object The previous versions of affected resources. previous.workspace object The previous workspace. previous.workspace.id number The workspace ID. previous.workspace.name string The workspace name. current object The current versions of affected resources. current.workspace object The current workspace. current.workspace.id number The workspace ID. current.workspace.name string The workspace name. Sample # { \"previous\": { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }, \"current\": { \"workspace\": { \"id\": 97, \"name\": \"Retreat Docs\" } } } workspace.restore_from_trash # A workspace was restored from the trash. Details # Property Type Description workspace object The restored workspace. workspace.id number The workspace ID. workspace.name string The workspace name. Sample # { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Audit log events"},{"location":"install/audit-log-events/#audit-log-events-for-your-self-managed-instance","text":"","title":"Audit log events for your self-managed instance"},{"location":"install/audit-log-events/#config","text":"","title":"config"},{"location":"install/audit-log-events/#configcreate","text":"A configuration item was created.","title":"config.create"},{"location":"install/audit-log-events/#details","text":"Property Type Description config object The created configuration item. config.id number The configuration item ID. config.key string The configuration item key. config.value any The configuration item value. config.site (optional) object The site this configuration item belongs to. config.site.id number The site ID. config.site.name string The site name. config.site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample","text":"{ \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } }","title":"Sample"},{"location":"install/audit-log-events/#configdelete","text":"A configuration item was deleted.","title":"config.delete"},{"location":"install/audit-log-events/#details_1","text":"Property Type Description config object The deleted configuration item. config.id number The configuration item ID. config.key string The configuration item key. config.value any The configuration item value. config.site (optional) object The site this configuration item belonged to. config.site.id number The site ID. config.site.name string The site name. config.site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_1","text":"{ \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } }","title":"Sample"},{"location":"install/audit-log-events/#configupdate","text":"A configuration item was updated.","title":"config.update"},{"location":"install/audit-log-events/#details_2","text":"Property Type Description previous object The previous versions of affected resources. previous.config object The previous configuration item. previous.config.id number The configuration item ID. previous.config.key string The configuration item key. previous.config.value any The configuration item value. previous.config.site (optional) object The site this configuration item belongs to. previous.config.site.id number The site ID. previous.config.site.name string The site name. previous.config.site.domain string The site domain. current object The current versions of affected resources. current.config object The current configuration item. current.config.id number The configuration item ID. current.config.key string The configuration item key. current.config.value any The configuration item value. current.config.site (optional) object The site this configuration item belongs to. current.config.site.id number The site ID. current.config.site.name string The site name. current.config.site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_2","text":"{ \"previous\": { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } }, \"current\": { \"config\": { \"id\": 18, \"key\": \"audit_log_streaming_destinations\", \"value\": [ { \"id\": \"ee6971af-80f5-4654-9bd2-5c6ab33e7ccf\", \"name\": \"splunk\", \"url\": \"https://hec.example.com:8088/services/collector/event\", \"token\": \"Splunk B5A79AAD-D822-46CC-80D1-819F80D7BFB0\" }, { \"id\": \"8f421760-14e9-4d11-b10a-f51d82041e0f\", \"name\": \"other\", \"url\": \"https://other.example.com/events\" } ], \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } } } }","title":"Sample"},{"location":"install/audit-log-events/#document","text":"","title":"document"},{"location":"install/audit-log-events/#documentchange_access","text":"A document\u2019s access was changed.","title":"document.change_access"},{"location":"install/audit-log-events/#details_3","text":"Property Type Description document object The document. document.id string The document ID. document.name string The document name. access_changes object The access changes. access_changes.public_access (optional) string or null The new public access level. access_changes.max_inherited_access (optional) string or null The new maximum access level that can be inherited from the document\u2019s workspace or site. access_changes.users (optional) Array The new access levels of individual users.","title":"Details"},{"location":"install/audit-log-events/#sample_3","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" }, \"access_changes\": { \"public_access\": \"viewers\", \"max_inherited_access\": null, \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"owners\" } ] } }","title":"Sample"},{"location":"install/audit-log-events/#documentclear_all_webhook_queues","text":"A document\u2019s webhook queues were cleared.","title":"document.clear_all_webhook_queues"},{"location":"install/audit-log-events/#details_4","text":"Property Type Description document object The created document. document.id string The document ID.","title":"Details"},{"location":"install/audit-log-events/#sample_4","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentclear_webhook_queue","text":"A document\u2019s webhook queue was cleared.","title":"document.clear_webhook_queue"},{"location":"install/audit-log-events/#details_5","text":"Property Type Description document object The document. document.id string The document ID. webhook object The webhook. webhook.id string The webhook ID.","title":"Details"},{"location":"install/audit-log-events/#sample_5","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"webhook\": { \"id\": \"17f8328e-0523-41fe-89aa-ae180bebb26e\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentcreate","text":"A document was created.","title":"document.create"},{"location":"install/audit-log-events/#details_6","text":"Property Type Description document object The created document. document.id string The document ID. document.name string The document name. document.workspace object The document\u2019s workspace. document.workspace.id number The workspace ID. document.workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_6","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } }","title":"Sample"},{"location":"install/audit-log-events/#documentdelete","text":"A document was permanently deleted.","title":"document.delete"},{"location":"install/audit-log-events/#details_7","text":"Property Type Description document object The deleted document. document.id string The document ID. document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_7","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentdeliver_webhook_events","text":"A document\u2019s webhook successfully delivered events.","title":"document.deliver_webhook_events"},{"location":"install/audit-log-events/#details_8","text":"Property Type Description document object The document. document.id string The document ID. webhook object The webhook. webhook.id string The webhook ID. webhook.events object The delivered webhook events. webhook.events.delivered_to string Where the webhook events were delivered to. webhook.events.quantity number The number of webhook events that were delivered.","title":"Details"},{"location":"install/audit-log-events/#sample_8","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"webhook\": { \"id\": \"17f8328e-0523-41fe-89aa-ae180bebb26e\", \"events\": { \"delivered_to\": \"example.com\", \"quantity\": 3 } } }","title":"Sample"},{"location":"install/audit-log-events/#documentduplicate","text":"A document was duplicated.","title":"document.duplicate"},{"location":"install/audit-log-events/#details_9","text":"Property Type Description original object The resources that were duplicated. original.document object The document that was duplicated. original.document.id string The document ID. original.document.name string The document name. duplicate object The newly-duplicated resources. duplicate.document object The newly-duplicated document. duplicate.document.id string The document ID. duplicate.document.name string The document name. duplicate.document.workspace object The document\u2019s workspace. duplicate.document.workspace.id number The workspace ID options object The options used to duplicate the document. options.as_template boolean Include the structure without any data.","title":"Details"},{"location":"install/audit-log-events/#sample_9","text":"{ \"original\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }, \"duplicate\": { \"document\": { \"id\": \"fFKKA6qjXJd9sNLhpw6iPn\", \"name\": \"Project Lollipop V2\", \"workspace\": { \"id\": 92 } } }, \"options\": { \"as_template\": false } }","title":"Sample"},{"location":"install/audit-log-events/#documentfork","text":"A document was forked.","title":"document.fork"},{"location":"install/audit-log-events/#details_10","text":"Property Type Description document object The document that was forked. document.id string The document ID. document.name string The document name. fork object The newly-forked document. fork.id string The fork ID. fork.document_id string The document ID. fork.url_id string The URL ID.","title":"Details"},{"location":"install/audit-log-events/#sample_10","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" }, \"fork\": { \"id\": \"fGGyPYea1ueFiVW382uuAY\", \"document_id\": \"mRM8ydxxLkc6Ewo56jsDGx~fGGyPYea1ueFiVW382uuAY~9\", \"url_id\": \"mRM8ydxxLkc6~fGGyPYea1ueFiVW382uuAY~9\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentmove","text":"A document was moved to a different workspace.","title":"document.move"},{"location":"install/audit-log-events/#details_11","text":"Property Type Description previous object The previous versions of affected resources. previous.document object The previous document. previous.document.id string The document ID. previous.document.name string The document name. previous.document.workspace object The document\u2019s workspace. previous.document.workspace.id number The workspace ID. previous.document.workspace.name string The workspace name. current object The current versions of affected resources. current.document object The current document. current.document.id string The document ID. current.document.name string The document name. current.document.workspace object The document\u2019s workspace. current.document.workspace.id number The workspace ID. current.document.workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_11","text":"{ \"previous\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } }, \"current\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 98, \"name\": \"Not So Secret Plans\" } } } }","title":"Sample"},{"location":"install/audit-log-events/#documentmove_to_trash","text":"A document was moved to the trash.","title":"document.move_to_trash"},{"location":"install/audit-log-events/#details_12","text":"Property Type Description document object The removed document. document.id string The document ID. document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_12","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentopen","text":"A document was opened.","title":"document.open"},{"location":"install/audit-log-events/#details_13","text":"Property Type Description document object The opened document. document.id string The document ID. document.name string The document name. document.url_id string The URL ID. document.fork_id (optional) string The fork ID. document.snapshot_id (optional) string The snapshot ID.","title":"Details"},{"location":"install/audit-log-events/#sample_13","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"url_id\": \"mRM8ydxxLkc6~fGGyPYea1ueFiVW382uuAY~9\", \"fork_id\": \"fGGyPYea1ueFiVW382uuAY\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentpin","text":"A document was pinned.","title":"document.pin"},{"location":"install/audit-log-events/#details_14","text":"Property Type Description document object The pinned document. document.id string The document ID. document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_14","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentreload","text":"A document was reloaded.","title":"document.reload"},{"location":"install/audit-log-events/#details_15","text":"Property Type Description document object The reloaded document. document.id string The document ID.","title":"Details"},{"location":"install/audit-log-events/#sample_15","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentrename","text":"A document was renamed.","title":"document.rename"},{"location":"install/audit-log-events/#details_16","text":"Property Type Description previous object The previous versions of affected resources. previous.document object The previous document. previous.document.id number The document ID. previous.document.name string The document name. current object The current versions of affected resources. current.document object The current document. current.document.id number The document ID. current.document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_16","text":"{ \"previous\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }, \"current\": { \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Competitive Analysis\" } } }","title":"Sample"},{"location":"install/audit-log-events/#documentreplace","text":"A document was replaced.","title":"document.replace"},{"location":"install/audit-log-events/#details_17","text":"Property Type Description document object The document that was replaced. document.id string The document ID. fork (optional) object The fork that the document was replaced with. fork.document_id string The document ID. snapshot (optional) object The snapshot that the document was replaced with. snapshot.id string The snapshot ID.","title":"Details"},{"location":"install/audit-log-events/#sample_17","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"fork\": { \"document_id\": \"mRM8ydxxLkc6Ewo56jsDGx~fGGyPYea1ueFiVW382uuAY~9\" } }","title":"Sample"},{"location":"install/audit-log-events/#documentrestore_from_trash","text":"A document was restored from the trash.","title":"document.restore_from_trash"},{"location":"install/audit-log-events/#details_18","text":"Property Type Description document object The restored document. document.id string The document ID. document.name string The document name. document.workspace object The document\u2019s workspace. document.workspace.id number The workspace ID. document.workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_18","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\", \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } } }","title":"Sample"},{"location":"install/audit-log-events/#documentrun_sql_query","text":"A SQL query was run against a document.","title":"document.run_sql_query"},{"location":"install/audit-log-events/#details_19","text":"Property Type Description document object The queried document. document.id string The document ID. sql_query object The SQL query. sql_query.statement string The SQL statement. sql_query.arguments (optional) Array The arguments passed to parameters in the SQL statement. options object The options used to query the document. options.timeout_ms (optional) number Timeout in milliseconds after which operations on the document will be interrupted.","title":"Details"},{"location":"install/audit-log-events/#sample_19","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"sql_query\": { \"statement\": \"SELECT * FROM Pets WHERE popularity >= ?\", \"arguments\": [ 50 ] }, \"options\": { \"timeout_ms\": 500 } }","title":"Sample"},{"location":"install/audit-log-events/#documentsend_to_google_drive","text":"A document was sent to Google Drive.","title":"document.send_to_google_drive"},{"location":"install/audit-log-events/#details_20","text":"Property Type Description document object The sent document. document.id string The document ID.","title":"Details"},{"location":"install/audit-log-events/#sample_20","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" } }","title":"Sample"},{"location":"install/audit-log-events/#documenttruncate_history","text":"A document\u2019s history was truncated.","title":"document.truncate_history"},{"location":"install/audit-log-events/#details_21","text":"Property Type Description document object The document. document.id string The document ID. options object The options used to truncate the document\u2019s history. options.keep_n_most_recent number The number of recent history actions to keep.","title":"Details"},{"location":"install/audit-log-events/#sample_21","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\" }, \"options\": { \"keep_n_most_recent\": 3 } }","title":"Sample"},{"location":"install/audit-log-events/#documentunpin","text":"A document was unpinned.","title":"document.unpin"},{"location":"install/audit-log-events/#details_22","text":"Property Type Description document object The unpinned document. document.id string The document ID. document.name string The document name.","title":"Details"},{"location":"install/audit-log-events/#sample_22","text":"{ \"document\": { \"id\": \"mRM8ydxxLkc6Ewo56jsDGx\", \"name\": \"Project Lollipop\" } }","title":"Sample"},{"location":"install/audit-log-events/#site","text":"","title":"site"},{"location":"install/audit-log-events/#sitechange_access","text":"A site\u2019s access was changed.","title":"site.change_access"},{"location":"install/audit-log-events/#details_23","text":"Property Type Description site object The site. site.id number The site ID. site.name string The site name. site.domain string The site domain. access_changes object The access changes. access_changes.users Array The new access levels of individual users.","title":"Details"},{"location":"install/audit-log-events/#sample_23","text":"{ \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" }, \"access_changes\": { \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"owners\" } ] } }","title":"Sample"},{"location":"install/audit-log-events/#sitecreate","text":"A site was created.","title":"site.create"},{"location":"install/audit-log-events/#details_24","text":"Property Type Description site object The created site. site.id number The site ID. site.name string The site name. site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_24","text":"{ \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }","title":"Sample"},{"location":"install/audit-log-events/#sitedelete","text":"A site was permanently deleted.","title":"site.delete"},{"location":"install/audit-log-events/#details_25","text":"Property Type Description site object The deleted site. site.id number The site ID. site.name string The site name. site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_25","text":"{ \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }","title":"Sample"},{"location":"install/audit-log-events/#siterename","text":"A site was renamed.","title":"site.rename"},{"location":"install/audit-log-events/#details_26","text":"Property Type Description previous object The previous versions of affected resources. previous.site object The previous site. previous.site.id number The site ID. previous.site.name string The site name. previous.site.domain string The site domain. current object The current versions of affected resources. current.site object The current site. current.site.id number The site ID. current.site.name string The site name. current.site.domain string The site domain.","title":"Details"},{"location":"install/audit-log-events/#sample_26","text":"{ \"previous\": { \"site\": { \"id\": 42, \"name\": \"Grist Labs\", \"domain\": \"gristlabs\" } }, \"current\": { \"site\": { \"id\": 42, \"name\": \"ACME Unlimited\", \"domain\": \"acme\" } } }","title":"Sample"},{"location":"install/audit-log-events/#user","text":"","title":"user"},{"location":"install/audit-log-events/#userchange_name","text":"A user\u2019s name was changed.","title":"user.change_name"},{"location":"install/audit-log-events/#details_27","text":"Property Type Description previous object The previous versions of affected resources. previous.user object The previous user. previous.user.id number The user ID. previous.user.name string The user\u2019s name. previous.user.email (optional) string The user\u2019s email. current object The current versions of affected resources. current.user object The current user. current.user.id number The user ID. current.user.name string The user\u2019s name. current.user.email (optional) string The user\u2019s email.","title":"Details"},{"location":"install/audit-log-events/#sample_27","text":"{ \"previous\": { \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }, \"current\": { \"user\": { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\" } } }","title":"Sample"},{"location":"install/audit-log-events/#usercreate_api_key","text":"A user API key was created.","title":"user.create_api_key"},{"location":"install/audit-log-events/#details_28","text":"Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email.","title":"Details"},{"location":"install/audit-log-events/#sample_28","text":"{ \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }","title":"Sample"},{"location":"install/audit-log-events/#userdelete","text":"A user was permanently deleted.","title":"user.delete"},{"location":"install/audit-log-events/#details_29","text":"Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email.","title":"Details"},{"location":"install/audit-log-events/#sample_29","text":"{ \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }","title":"Sample"},{"location":"install/audit-log-events/#userdelete_api_key","text":"A user API key was deleted.","title":"user.delete_api_key"},{"location":"install/audit-log-events/#details_30","text":"Property Type Description user object The user. user.id number The user ID. user.name string The user\u2019s name. user.email (optional) string The user\u2019s email.","title":"Details"},{"location":"install/audit-log-events/#sample_30","text":"{ \"user\": { \"id\": 146, \"name\": \"Flapjack Waffleflap\", \"email\": \"flapjack@example.com\" } }","title":"Sample"},{"location":"install/audit-log-events/#workspace","text":"","title":"workspace"},{"location":"install/audit-log-events/#workspacechange_access","text":"A workspace\u2019s access was changed.","title":"workspace.change_access"},{"location":"install/audit-log-events/#details_31","text":"Property Type Description workspace object The workspace. workspace.id number The workspace ID. workspace.name string The workspace name. access_changes object The access changes. access_changes.max_inherited_access (optional) string or null The new maximum access level that can be inherited from the workspace\u2019s site. access_changes.users (optional) Array The new access levels of individual users.","title":"Details"},{"location":"install/audit-log-events/#sample_31","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" }, \"access_changes\": { \"max_inherited_access\": \"editors\", \"users\": [ { \"id\": 146, \"name\": \"Flapjack Toasty\", \"email\": \"flapjack@example.com\", \"access\": \"editors\" } ] } }","title":"Sample"},{"location":"install/audit-log-events/#workspacecreate","text":"A workspace was created.","title":"workspace.create"},{"location":"install/audit-log-events/#details_32","text":"Property Type Description workspace object The created workspace. workspace.id number The workspace ID. workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_32","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Sample"},{"location":"install/audit-log-events/#workspacedelete","text":"A workspace was permanently deleted.","title":"workspace.delete"},{"location":"install/audit-log-events/#details_33","text":"Property Type Description workspace object The deleted workspace. workspace.id number The workspace ID. workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_33","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Sample"},{"location":"install/audit-log-events/#workspacemove_to_trash","text":"A workspace was moved to the trash.","title":"workspace.move_to_trash"},{"location":"install/audit-log-events/#details_34","text":"Property Type Description workspace object The removed workspace. workspace.id number The workspace ID. workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_34","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Sample"},{"location":"install/audit-log-events/#workspacerename","text":"A workspace was renamed.","title":"workspace.rename"},{"location":"install/audit-log-events/#details_35","text":"Property Type Description previous object The previous versions of affected resources. previous.workspace object The previous workspace. previous.workspace.id number The workspace ID. previous.workspace.name string The workspace name. current object The current versions of affected resources. current.workspace object The current workspace. current.workspace.id number The workspace ID. current.workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_35","text":"{ \"previous\": { \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }, \"current\": { \"workspace\": { \"id\": 97, \"name\": \"Retreat Docs\" } } }","title":"Sample"},{"location":"install/audit-log-events/#workspacerestore_from_trash","text":"A workspace was restored from the trash.","title":"workspace.restore_from_trash"},{"location":"install/audit-log-events/#details_36","text":"Property Type Description workspace object The restored workspace. workspace.id number The workspace ID. workspace.name string The workspace name.","title":"Details"},{"location":"install/audit-log-events/#sample_36","text":"{ \"workspace\": { \"id\": 97, \"name\": \"Secret Plans\" } }","title":"Sample"},{"location":"newsletters/2024-11/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . November 2024 Newsletter # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill November 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users. Call for testers # Have you used Grist? Have you not used Grist? Do you just like clicking around on the computer? We need you. \ud83e\udef5 We\u2019re looking for volunteers to test upcoming features/changes for 30-45 minute sessions. Fill out this Grist form to sign up! Grist Paris Summit full schedule posted # The first ever Grist Summit is next week! And just in time, we have the full schedule over at La Suite\u2019s site . Unable to join us in France? The main stage events will be recorded and shared after the fact, so keep an eye out for those. Otherwise, we can\u2019t wait to see you in Paris! What\u2019s new # New on the blog: Translating Grist into 20+ languages # We\u2019re constantly impressed with the contributions of Grist\u2019s community translators. To mark an arbitrary milestone of 20 languages in less than two years, we\u2019ve written up a timeline of the localization process . See how volunteer contributors, ANCT and open source tools combine to let billions use Grist in their native language. Grist Labs Labs: Displaying 1M+ rows with better-sqlite3 # Dmitry shared a peek at the (very) experimental side of spreadsheet development, with a nifty prototype using better-sqlite3 that has Grist zipping around a document with >1M rows. It works just as you\u2019d expect, assuming you don\u2019t expect the following features to function: importing and exporting, formulas, access rules, filtering, summary tables, search, snapshots/history\u2026 We hope to show you more experiments as we\u2019re able! \ud83d\udc69\u200d\ud83d\udd2c Run Grist on the AWS cloud # Grist is now available on the AWS Marketplace , giving you a simple way of self-hosting Grist (with authentication) in your own cloud. If you need to run Grist on servers in Europe, this is the easiest way to do it. We\u2019re also looking at placing Grist on other cloud marketplaces \u2013 if you have a favorite, let us know! Thanks to users of the beta product for their feedback. Users can migrate from the beta (now legacy) version by following these steps . Grist Business - Audit Logs # Self-hosting Grist Business plan users can now enable audit logging. Audit logs can help maintain compliance and identify misuse by helping answer questions like \u201cwhen was a workspace removed?\u201d or \u201cwho invited a collaborator to a document?\u201d. Currently, audit log streaming supports HEC endpoints (like Splunk or Vector ), or other destinations via HTTP. Full documentation can be found in our Help Center . Editing document types # Did you know there are distinct Grist document types? Well, now you can specifically set them in Document Settings! If you need to create templates or tutorials to be shared with other users, these types align the open behavior to those formats. Community highlights # Leonard_Gallion (of Basic HTML Reporting Template fame) shared their setup for external backups of Grist files in Node Red , letting you automatically backup to a local drive. enthus1ast shared their very cool gristImageMap custom widget early last year with the example use case of sysadmin organization. Kirk_Williams, meanwhile, just shared their equally satisfying image mapping solution . We simply love to see this! \ud83d\ude0d Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel ! Learning Grist # Webinar - Custom Widget Builder # Couldn\u2019t make it to the Grist Summit in Paris? No worries! Join Grist Labs\u2019 very own CTO Paul and developer Jarek as they present their talk on Grist\u2019s custom widget builder. Learn from the devs themselves how to create your own custom widget, step-by-step! Thursday December 19 at 3:00pm US Eastern Time. SIGN UP FOR DECEMBER\u2019S WEBINAR Grist 101 # In November, Natalie hosted an introductory webinar designed to help new users navigate the basics of Grist. This session provided users with the essential tools and knowledge to get started. We covered key features and best practices to maximize your productivity. Perfect for beginners! WATCH NOVEMBER\u2019S RECORDING Help spread the word # If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius We are here to support you # Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"2024/11"},{"location":"newsletters/2024-11/#november-2024-newsletter","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill November 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users.","title":"November 2024 Newsletter"},{"location":"newsletters/2024-11/#call-for-testers","text":"Have you used Grist? Have you not used Grist? Do you just like clicking around on the computer? We need you. \ud83e\udef5 We\u2019re looking for volunteers to test upcoming features/changes for 30-45 minute sessions. Fill out this Grist form to sign up!","title":"Call for testers"},{"location":"newsletters/2024-11/#grist-paris-summit-full-schedule-posted","text":"The first ever Grist Summit is next week! And just in time, we have the full schedule over at La Suite\u2019s site . Unable to join us in France? The main stage events will be recorded and shared after the fact, so keep an eye out for those. Otherwise, we can\u2019t wait to see you in Paris!","title":"Grist Paris Summit full schedule posted"},{"location":"newsletters/2024-11/#whats-new","text":"","title":"What’s new"},{"location":"newsletters/2024-11/#new-on-the-blog-translating-grist-into-20-languages","text":"We\u2019re constantly impressed with the contributions of Grist\u2019s community translators. To mark an arbitrary milestone of 20 languages in less than two years, we\u2019ve written up a timeline of the localization process . See how volunteer contributors, ANCT and open source tools combine to let billions use Grist in their native language.","title":"New on the blog: Translating Grist into 20+ languages"},{"location":"newsletters/2024-11/#grist-labs-labs-displaying-1m-rows-with-better-sqlite3","text":"Dmitry shared a peek at the (very) experimental side of spreadsheet development, with a nifty prototype using better-sqlite3 that has Grist zipping around a document with >1M rows. It works just as you\u2019d expect, assuming you don\u2019t expect the following features to function: importing and exporting, formulas, access rules, filtering, summary tables, search, snapshots/history\u2026 We hope to show you more experiments as we\u2019re able! \ud83d\udc69\u200d\ud83d\udd2c","title":"Grist Labs Labs: Displaying 1M+ rows with better-sqlite3"},{"location":"newsletters/2024-11/#run-grist-on-the-aws-cloud","text":"Grist is now available on the AWS Marketplace , giving you a simple way of self-hosting Grist (with authentication) in your own cloud. If you need to run Grist on servers in Europe, this is the easiest way to do it. We\u2019re also looking at placing Grist on other cloud marketplaces \u2013 if you have a favorite, let us know! Thanks to users of the beta product for their feedback. Users can migrate from the beta (now legacy) version by following these steps .","title":"Run Grist on the AWS cloud"},{"location":"newsletters/2024-11/#grist-business-audit-logs","text":"Self-hosting Grist Business plan users can now enable audit logging. Audit logs can help maintain compliance and identify misuse by helping answer questions like \u201cwhen was a workspace removed?\u201d or \u201cwho invited a collaborator to a document?\u201d. Currently, audit log streaming supports HEC endpoints (like Splunk or Vector ), or other destinations via HTTP. Full documentation can be found in our Help Center .","title":"Grist Business - Audit Logs"},{"location":"newsletters/2024-11/#editing-document-types","text":"Did you know there are distinct Grist document types? Well, now you can specifically set them in Document Settings! If you need to create templates or tutorials to be shared with other users, these types align the open behavior to those formats.","title":"Editing document types"},{"location":"newsletters/2024-11/#community-highlights","text":"Leonard_Gallion (of Basic HTML Reporting Template fame) shared their setup for external backups of Grist files in Node Red , letting you automatically backup to a local drive. enthus1ast shared their very cool gristImageMap custom widget early last year with the example use case of sysadmin organization. Kirk_Williams, meanwhile, just shared their equally satisfying image mapping solution . We simply love to see this! \ud83d\ude0d Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel !","title":"Community highlights"},{"location":"newsletters/2024-11/#learning-grist","text":"","title":"Learning Grist"},{"location":"newsletters/2024-11/#webinar-custom-widget-builder","text":"Couldn\u2019t make it to the Grist Summit in Paris? No worries! Join Grist Labs\u2019 very own CTO Paul and developer Jarek as they present their talk on Grist\u2019s custom widget builder. Learn from the devs themselves how to create your own custom widget, step-by-step! Thursday December 19 at 3:00pm US Eastern Time. SIGN UP FOR DECEMBER\u2019S WEBINAR","title":"Webinar - Custom Widget Builder"},{"location":"newsletters/2024-11/#grist-101","text":"In November, Natalie hosted an introductory webinar designed to help new users navigate the basics of Grist. This session provided users with the essential tools and knowledge to get started. We covered key features and best practices to maximize your productivity. Perfect for beginners! WATCH NOVEMBER\u2019S RECORDING","title":"Grist 101"},{"location":"newsletters/2024-11/#help-spread-the-word","text":"If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Help spread the word"},{"location":"newsletters/2024-11/#we-are-here-to-support-you","text":"Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"We are here to support you"},{"location":"newsletters/2024-10/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . October 2024 Newsletter # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill October 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users. Register for the Grist Paris Summit # As you may have heard, the first official Grist Summit will be held in Paris, France on December 3rd, 2024. If you\u2019re in the area and not yet convinced, seriously take a look at the venue . \ud83e\udd29 See advanced real-world Grist examples, chat with us and other power users, and find out what La Suite Num\u00e9rique \u2013 France\u2019s open source data suite \u2014 is all about. Halloween \ud83c\udf83 # In the spirit of the season, Grist Labs sat down to think of the scariest spreadsheet-related happening. And here it is, a trigger formula that returns #REF! if you don\u2019t use a polite \u201cPlease\u201d. Children may want to avert their eyes: What\u2019s new # Custom widget builder widget # Say that ten times fast! Custom widgets greatly expand what you can do within Grist, but building them doesn\u2019t have to be super complicated. We\u2019ve released a widget that lets you build and test widgets on the fly, inside Grist itself . Now available as a community custom widget. More info in our Community forum . Relational data explainer # One thing we know is that users familiar with relational data tend to get the most out of Grist. If you\u2019re coming from tools where data relationships are somewhat limited, or just need a refresher, check out our 2-minute walkthrough: Team site images # If you\u2019re the Plan Manager of a team site (free or paid), you can now upload a site-specific image by opening the user menu and clicking on \u2018Billing Account\u2019. Other Grist updates # Self-hosters: are your documents getting too big on disk? Now you can choose to store less history to reduce file sizes ( GitHub PR ). Returning lists of records from a formula now does the right thing in more situations ( GitHub issue with example ). New grist-core release v1.2.1 on GitHub . Community highlights # A small but very welcome addition to general spreadsheeting is the new \u201cCopy with headers\u201d option in the context menu. Thanks to rtwfroody for this new feature ! nicobako\u2019s Mermaid charts integration is now a handy custom widget ! And check out Dmitry\u2019s example of how you can use Mermaid to visualize a Grist document\u2019s own schema. \ud83d\udc40 Peter_P_Breithaupt shared a comprehensive guide to dealing with duplicates and special unicode characters (including accents & diacritics). Do you ever want to lock down structure edits from everyone to avoid accidental formula overwrites? David_Hawley shared a way to do it using Special Rules . aude shared some n8n-Grist tutorials to get you started with basic workflows. Check out our profile of Savage Game Design and see how they use Grist at the intersection of relational data and game development, but perhaps not in the way you\u2019d expect. Finally, listen to Grist Labs co-CEO Anais and CTO Paul chat about the business of open source on Emily Omier\u2019s podcast called \u2013 you guessed it \u2013 The Business of Open Source . A topic that we don\u2019t talk about a lot, but one we must think about frequently! Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel ! Learning Grist # Webinar - Grist 101: A New User\u2019s Guide # Join us for an introductory webinar designed to help new users navigate the basics of Grist. This session will provide you with the essential tools and knowledge to get started. We\u2019ll cover key features and best practices to maximize your productivity. Perfect for beginners, this webinar will set you on the path to becoming a Grist pro. Don\u2019t miss out \u2013 reserve your spot today! Thursday November 14 at 3:00pm US Eastern Time. SIGN UP FOR NOVEMBER\u2019S WEBINAR Two-way references # In October, Natalie showed off our newest feature in Grist, two-way references! Link data in both directions, opening up new and powerful ways to leverage relational data. WATCH OCTOBER\u2019S RECORDING Help spread the word # If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius We are here to support you # Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"2024/10"},{"location":"newsletters/2024-10/#october-2024-newsletter","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill October 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users.","title":"October 2024 Newsletter"},{"location":"newsletters/2024-10/#register-for-the-grist-paris-summit","text":"As you may have heard, the first official Grist Summit will be held in Paris, France on December 3rd, 2024. If you\u2019re in the area and not yet convinced, seriously take a look at the venue . \ud83e\udd29 See advanced real-world Grist examples, chat with us and other power users, and find out what La Suite Num\u00e9rique \u2013 France\u2019s open source data suite \u2014 is all about.","title":"Register for the Grist Paris Summit"},{"location":"newsletters/2024-10/#halloween","text":"In the spirit of the season, Grist Labs sat down to think of the scariest spreadsheet-related happening. And here it is, a trigger formula that returns #REF! if you don\u2019t use a polite \u201cPlease\u201d. Children may want to avert their eyes:","title":"Halloween \ud83c\udf83"},{"location":"newsletters/2024-10/#whats-new","text":"","title":"What’s new"},{"location":"newsletters/2024-10/#custom-widget-builder-widget","text":"Say that ten times fast! Custom widgets greatly expand what you can do within Grist, but building them doesn\u2019t have to be super complicated. We\u2019ve released a widget that lets you build and test widgets on the fly, inside Grist itself . Now available as a community custom widget. More info in our Community forum .","title":"Custom widget builder widget"},{"location":"newsletters/2024-10/#relational-data-explainer","text":"One thing we know is that users familiar with relational data tend to get the most out of Grist. If you\u2019re coming from tools where data relationships are somewhat limited, or just need a refresher, check out our 2-minute walkthrough:","title":"Relational data explainer"},{"location":"newsletters/2024-10/#team-site-images","text":"If you\u2019re the Plan Manager of a team site (free or paid), you can now upload a site-specific image by opening the user menu and clicking on \u2018Billing Account\u2019.","title":"Team site images"},{"location":"newsletters/2024-10/#other-grist-updates","text":"Self-hosters: are your documents getting too big on disk? Now you can choose to store less history to reduce file sizes ( GitHub PR ). Returning lists of records from a formula now does the right thing in more situations ( GitHub issue with example ). New grist-core release v1.2.1 on GitHub .","title":"Other Grist updates"},{"location":"newsletters/2024-10/#community-highlights","text":"A small but very welcome addition to general spreadsheeting is the new \u201cCopy with headers\u201d option in the context menu. Thanks to rtwfroody for this new feature ! nicobako\u2019s Mermaid charts integration is now a handy custom widget ! And check out Dmitry\u2019s example of how you can use Mermaid to visualize a Grist document\u2019s own schema. \ud83d\udc40 Peter_P_Breithaupt shared a comprehensive guide to dealing with duplicates and special unicode characters (including accents & diacritics). Do you ever want to lock down structure edits from everyone to avoid accidental formula overwrites? David_Hawley shared a way to do it using Special Rules . aude shared some n8n-Grist tutorials to get you started with basic workflows. Check out our profile of Savage Game Design and see how they use Grist at the intersection of relational data and game development, but perhaps not in the way you\u2019d expect. Finally, listen to Grist Labs co-CEO Anais and CTO Paul chat about the business of open source on Emily Omier\u2019s podcast called \u2013 you guessed it \u2013 The Business of Open Source . A topic that we don\u2019t talk about a lot, but one we must think about frequently! Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel !","title":"Community highlights"},{"location":"newsletters/2024-10/#learning-grist","text":"","title":"Learning Grist"},{"location":"newsletters/2024-10/#webinar-grist-101-a-new-users-guide","text":"Join us for an introductory webinar designed to help new users navigate the basics of Grist. This session will provide you with the essential tools and knowledge to get started. We\u2019ll cover key features and best practices to maximize your productivity. Perfect for beginners, this webinar will set you on the path to becoming a Grist pro. Don\u2019t miss out \u2013 reserve your spot today! Thursday November 14 at 3:00pm US Eastern Time. SIGN UP FOR NOVEMBER\u2019S WEBINAR","title":"Webinar - Grist 101: A New User\u2019s Guide"},{"location":"newsletters/2024-10/#two-way-references","text":"In October, Natalie showed off our newest feature in Grist, two-way references! Link data in both directions, opening up new and powerful ways to leverage relational data. WATCH OCTOBER\u2019S RECORDING","title":"Two-way references"},{"location":"newsletters/2024-10/#help-spread-the-word","text":"If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Help spread the word"},{"location":"newsletters/2024-10/#we-are-here-to-support-you","text":"Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"We are here to support you"},{"location":"newsletters/2024-09/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . September 2024 Newsletter # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill September 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users. What\u2019s new # Two-way references # References now support twice the ways! Two-way references are a powerful tool that we\u2019ve found ourselves using for projects even while in development. As the overly-complex GIF above demonstrates, with the click of a button you can now add a two-way reference to a reference column. And what exactly happens when you add a two-way reference? Get ready for the word \u201creference\u201d a lot\u2026 A new reference column is created in the target table. Essentially, a \u201creverse reference column\u201d. This column is automatically populated with references from the table where the two-way reference was created. Any reference changes between the two columns are automatically synchronized. Once you get a hang of their particularities, two-way references open up a new field of data relations. Learn more about two-way references in the Help Center . Need a primer on what, exactly, references are, and where you might find relationships in your data? Take a look at our new blog post to learn about the Big Four: one-to-one, one-to-many, many-to-one, and last but not least: many-to-many. Grist Desktop 0.3.0 # The summer is over, but the hard work of our summer intern Leslie continues to bear fruit. This release makes Grist Desktop behave more like a desktop app than ever before, as part of our \u201cmake Grist Desktop feel more normal\u201d initiative. How normal you ask? You can open and save files anywhere on the filesystem, for example. That\u2019s extremely normal, and things just get more normal from there\u2026 Check out the latest release on GitHub . Formula Assistant model updates # We\u2019ve updated the model used by the AI Formula Assistant from gpt-3.5-turbo to gpt-4o . Based on our internal testing, we\u2019re seeing a modest increase in assistant accuracy. For self-hosters, the Formula Assistant now functions against any OpenAI chat completion endpoints ending in /v1/chat/completions . We\u2019ve also tested using the Formula Assistant via local models through LM Studio . Community highlights # \ud83d\udd28 Grist hackathon # Longtime Grist partners ANCT and DINUM joined forces with more members of Grist\u2019s French-speaking community to form the French Grist Federation. The new group hosted a hackathon last weekend in Paris as a branch of Code For France , which aims to develop a transparent and participatory digital commons. Read a summary of the hackathon at Open Source Politics , auto-translated from French. Hosting a hackathon of your own? Please let us know! \u267b\ufe0f Grist reusable code repository # Users on Grist\u2019s Community Forum have started collaborating on a shared user code repository , which already hosts cool utilities such as TomNit\u2019s self-sanitizing reference fields . It\u2019s also a great example of how Grist can be extended via Python classes, essentially storing function \u201clibraries\u201d in formula columns. \ud83e\uddb8\u200d\u2640\ufe0f Super dashboards # Do you use lots of charts? We support you and celebrate you. Still, Grist can get a bit cramped with several charts. To work around this, Rogerio has created \u201csuper dashboards\u201d which use the HTML widget and scrollable iframes to go from this: To this: For more heroic uses of the HTML widget, also check out Rogerio\u2019s thread on creating a dynamic risk matrix . \u2705 Change tracking with trigger formulas # We saw above how trigger formulas can help sanitize references, and here\u2019s another handy use case. Rogerio is back with a solution for simply tracking changes made to columns, including timestamps. Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel ! Learning Grist # Webinar: \ud83d\udd04 Two-Way References # They\u2019re heeereee \ud83d\udc7b\u2026 Spooky season comes a bit early with a feature that\u2019s haunted us for a while now: two-way references. Link data in both directions, opening up new and powerful ways to leverage relational data. Now it\u2019s time to be haunted by possibilities. Join us in October to explore how! Thursday October 10 at 3:00pm US Eastern Time. SIGN UP FOR OCTOBER\u2019S WEBINAR \u2728 New Feature Showcase # In September, Natalie caught us up on the latest Grist features that you may have missed, including markdown in cells, cumulative functions, the formula timer, and record cards. Learn how these tools can enhance your existing Grist docs, or give you new ideas for future workflows. WATCH SEPTEMBER\u2019S RECORDING Help spread the word # If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius We are here to support you # Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"2024/09"},{"location":"newsletters/2024-09/#september-2024-newsletter","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill September 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users.","title":"September 2024 Newsletter"},{"location":"newsletters/2024-09/#whats-new","text":"","title":"What’s new"},{"location":"newsletters/2024-09/#two-way-references","text":"References now support twice the ways! Two-way references are a powerful tool that we\u2019ve found ourselves using for projects even while in development. As the overly-complex GIF above demonstrates, with the click of a button you can now add a two-way reference to a reference column. And what exactly happens when you add a two-way reference? Get ready for the word \u201creference\u201d a lot\u2026 A new reference column is created in the target table. Essentially, a \u201creverse reference column\u201d. This column is automatically populated with references from the table where the two-way reference was created. Any reference changes between the two columns are automatically synchronized. Once you get a hang of their particularities, two-way references open up a new field of data relations. Learn more about two-way references in the Help Center . Need a primer on what, exactly, references are, and where you might find relationships in your data? Take a look at our new blog post to learn about the Big Four: one-to-one, one-to-many, many-to-one, and last but not least: many-to-many.","title":"Two-way references"},{"location":"newsletters/2024-09/#grist-desktop-030","text":"The summer is over, but the hard work of our summer intern Leslie continues to bear fruit. This release makes Grist Desktop behave more like a desktop app than ever before, as part of our \u201cmake Grist Desktop feel more normal\u201d initiative. How normal you ask? You can open and save files anywhere on the filesystem, for example. That\u2019s extremely normal, and things just get more normal from there\u2026 Check out the latest release on GitHub .","title":"Grist Desktop 0.3.0"},{"location":"newsletters/2024-09/#formula-assistant-model-updates","text":"We\u2019ve updated the model used by the AI Formula Assistant from gpt-3.5-turbo to gpt-4o . Based on our internal testing, we\u2019re seeing a modest increase in assistant accuracy. For self-hosters, the Formula Assistant now functions against any OpenAI chat completion endpoints ending in /v1/chat/completions . We\u2019ve also tested using the Formula Assistant via local models through LM Studio .","title":"Formula Assistant model updates"},{"location":"newsletters/2024-09/#community-highlights","text":"","title":"Community highlights"},{"location":"newsletters/2024-09/#grist-hackathon","text":"Longtime Grist partners ANCT and DINUM joined forces with more members of Grist\u2019s French-speaking community to form the French Grist Federation. The new group hosted a hackathon last weekend in Paris as a branch of Code For France , which aims to develop a transparent and participatory digital commons. Read a summary of the hackathon at Open Source Politics , auto-translated from French. Hosting a hackathon of your own? Please let us know!","title":"\ud83d\udd28 Grist hackathon"},{"location":"newsletters/2024-09/#grist-reusable-code-repository","text":"Users on Grist\u2019s Community Forum have started collaborating on a shared user code repository , which already hosts cool utilities such as TomNit\u2019s self-sanitizing reference fields . It\u2019s also a great example of how Grist can be extended via Python classes, essentially storing function \u201clibraries\u201d in formula columns.","title":"\u267b\ufe0f Grist reusable code repository"},{"location":"newsletters/2024-09/#super-dashboards","text":"Do you use lots of charts? We support you and celebrate you. Still, Grist can get a bit cramped with several charts. To work around this, Rogerio has created \u201csuper dashboards\u201d which use the HTML widget and scrollable iframes to go from this: To this: For more heroic uses of the HTML widget, also check out Rogerio\u2019s thread on creating a dynamic risk matrix .","title":"\ud83e\uddb8\u200d\u2640\ufe0f Super dashboards"},{"location":"newsletters/2024-09/#change-tracking-with-trigger-formulas","text":"We saw above how trigger formulas can help sanitize references, and here\u2019s another handy use case. Rogerio is back with a solution for simply tracking changes made to columns, including timestamps. Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel !","title":"\u2705 Change tracking with trigger formulas"},{"location":"newsletters/2024-09/#learning-grist","text":"","title":"Learning Grist"},{"location":"newsletters/2024-09/#webinar-two-way-references","text":"They\u2019re heeereee \ud83d\udc7b\u2026 Spooky season comes a bit early with a feature that\u2019s haunted us for a while now: two-way references. Link data in both directions, opening up new and powerful ways to leverage relational data. Now it\u2019s time to be haunted by possibilities. Join us in October to explore how! Thursday October 10 at 3:00pm US Eastern Time. SIGN UP FOR OCTOBER\u2019S WEBINAR","title":"Webinar: \ud83d\udd04 Two-Way References"},{"location":"newsletters/2024-09/#new-feature-showcase","text":"In September, Natalie caught us up on the latest Grist features that you may have missed, including markdown in cells, cumulative functions, the formula timer, and record cards. Learn how these tools can enhance your existing Grist docs, or give you new ideas for future workflows. WATCH SEPTEMBER\u2019S RECORDING","title":"\u2728 New Feature Showcase"},{"location":"newsletters/2024-09/#help-spread-the-word","text":"If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Help spread the word"},{"location":"newsletters/2024-09/#we-are-here-to-support-you","text":"Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"We are here to support you"},{"location":"newsletters/2024-08/","text":"Warning Nous commen\u00e7ons tout juste \u00e0 traduire la documentation pour cette langue, d\u00e9sol\u00e9 ! Nous affichons des pages traduites partiellement afin de suivre l\u2019avancement. Cette page n\u2019est pas encore traduite. Mais la bonne nouvelle est que vous pouvez rejoindre la communaut\u00e9 de traduction pour nous aider \ud83d\udc4b . August 2024 Newsletter # /* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill August 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users. What\u2019s new # Markdown cell formatting # It\u2019s finally here! Text columns now support Markdown. This means that you can use nearly all Markdown syntax (apart from images and horizontal rules) in any cell \u2013 and even in card widgets! To enable Markdown in any Text column, simply select the option in the \u201cCell Format\u201d dropdown in the Creator Panel: New Custom Widget flow \ud83c\udccf # Adding custom widgets now has a new look! We\u2019ve dropped the dropdown, and embraced a more spacious card-based UX. Retaining the same functionality as before, this new flow also highlights community-developed widgets, making it easier for us to include third-party widgets in the future. For self-hosters, you can also add to this list (or make your own) following these instructions . Webhooks documentation # Webhooks are powerful. So powerful, in fact, that creating proper documentation for them took us over a year. \ud83e\udee0 But your patience is rewarded with thorough documentation by Jordi (our Systems Developer), who used his database of homebrew NES games to get to the bottom of webhooks and their particularities. GitHub contribution templates # To help make contributing to grist-core easier and more consistent, Florent (inspired by PeerTube ) created several templates for bug reporting, upgrade issues and feature requests. Self-hosters: OIDC enhancements # We\u2019ve added some extra security options for OIDC authentication, enabling compatibility with new providers that have specific requirements. GitLocalize translations for Grist documentation # Our friends and contributors at ANCT have enabled GitLocalize for the Grist Help Center . You can see a machine-translated demo of the full docs en Fran\u00e7ais . To contribute, check out Vincent\u2019s how-to post in the Community Forum . For translating Grist\u2019s UI, we still use Weblate \u2013 and are always looking for more help! A hearty thanks to all our contributors who have helped make Grist readable around the world. \ud83c\udf0f Community highlights # PyGrister , the Python client from Riccardo Polignieri mentioned last May, has been updated. It\u2019s now on PyPi , and has thorough documentation to boot. \ud83d\udcdd A new Catalan translation has just kicked off on Weblate, thanks to xmontero! See here for more information on helping translate Grist. Antol Peshkov has created a simple custom dropdown widget that does exactly what it sounds like. Note: if you\u2019re self-hosting, a fix related to this widget is on it\u2019s way to grist-core soon! Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel ! Learning Grist # Webinar: \u2728 New Feature Showcase # In September, catch up on the latest Grist features that you may have missed, including Markdown in cells, cumulative functions, the formula timer, and record cards. Learn how these new tools can enhance your existing Grist docs, or give you new ideas for future workflows. Thursday September 19 at 3:00pm US Eastern Time. SIGN UP FOR SEPTEMBER\u2019S WEBINAR Grist 101 # In August, Natalie hosted an introductory webinar designed to help new users navigate the basics of Grist. This session provided users with the essential tools and knowledge to get started. We covered key features and best practices to maximize your productivity. Perfect for beginners! WATCH AUGUST\u2019S RECORDING Help spread the word # If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius We are here to support you # Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"2024/08"},{"location":"newsletters/2024-08/#august-2024-newsletter","text":"/* restore some poorly overridden defaults */ .newsletter-header .table { background-color: initial; border: initial; } .newsletter-header .table > tbody > tr > td { padding: initial; border: initial; vertical-align: initial; } .newsletter-header img.header-img { padding: initial; max-width: initial; display: initial; padding: initial; line-height: initial; background-color: initial; border: initial; border-radius: initial; margin: initial; } /* copy newsletter styles, with a prefix for sufficient specificity */ .newsletter-header .header { border: none; padding: 0; margin: 0; } .newsletter-header table > tbody > tr > td.header-image { width: 80px; padding-right: 16px; } .newsletter-header table > tbody > tr > td.header-text { background-color: #42494B; padding: 16px 20px; } .newsletter-header table.header-top { border: none; padding: 0; margin: 0; width: 100%; } .header-title { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 28px; color: #FFFFFF; } .header-month { color: #FFFFFF; } .header-welcome { margin-top: 12px; color: #FFFFFF; } .newsletter-summary { background-color: #e3fff5; margin: 0; padding: 10px; } .newsletter-summary-header { text-align: center; padding-bottom: 10px; border-bottom: 1px solid lightgrey; } .newsletter-summary ul { padding-left: 20px; } .newsletter-summary li { margin-bottom: 10px; } .newsletter-summary li p { margin: 0px } Grist for the Mill August 2024 \u2022 getgrist.com Welcome to our monthly newsletter of updates and tips for Grist users.","title":"August 2024 Newsletter"},{"location":"newsletters/2024-08/#whats-new","text":"","title":"What’s new"},{"location":"newsletters/2024-08/#markdown-cell-formatting","text":"It\u2019s finally here! Text columns now support Markdown. This means that you can use nearly all Markdown syntax (apart from images and horizontal rules) in any cell \u2013 and even in card widgets! To enable Markdown in any Text column, simply select the option in the \u201cCell Format\u201d dropdown in the Creator Panel:","title":"Markdown cell formatting"},{"location":"newsletters/2024-08/#new-custom-widget-flow","text":"Adding custom widgets now has a new look! We\u2019ve dropped the dropdown, and embraced a more spacious card-based UX. Retaining the same functionality as before, this new flow also highlights community-developed widgets, making it easier for us to include third-party widgets in the future. For self-hosters, you can also add to this list (or make your own) following these instructions .","title":"New Custom Widget flow \ud83c\udccf"},{"location":"newsletters/2024-08/#webhooks-documentation","text":"Webhooks are powerful. So powerful, in fact, that creating proper documentation for them took us over a year. \ud83e\udee0 But your patience is rewarded with thorough documentation by Jordi (our Systems Developer), who used his database of homebrew NES games to get to the bottom of webhooks and their particularities.","title":"Webhooks documentation"},{"location":"newsletters/2024-08/#github-contribution-templates","text":"To help make contributing to grist-core easier and more consistent, Florent (inspired by PeerTube ) created several templates for bug reporting, upgrade issues and feature requests.","title":"GitHub contribution templates"},{"location":"newsletters/2024-08/#self-hosters-oidc-enhancements","text":"We\u2019ve added some extra security options for OIDC authentication, enabling compatibility with new providers that have specific requirements.","title":"Self-hosters: OIDC enhancements"},{"location":"newsletters/2024-08/#gitlocalize-translations-for-grist-documentation","text":"Our friends and contributors at ANCT have enabled GitLocalize for the Grist Help Center . You can see a machine-translated demo of the full docs en Fran\u00e7ais . To contribute, check out Vincent\u2019s how-to post in the Community Forum . For translating Grist\u2019s UI, we still use Weblate \u2013 and are always looking for more help! A hearty thanks to all our contributors who have helped make Grist readable around the world. \ud83c\udf0f","title":"GitLocalize translations for Grist documentation"},{"location":"newsletters/2024-08/#community-highlights","text":"PyGrister , the Python client from Riccardo Polignieri mentioned last May, has been updated. It\u2019s now on PyPi , and has thorough documentation to boot. \ud83d\udcdd A new Catalan translation has just kicked off on Weblate, thanks to xmontero! See here for more information on helping translate Grist. Antol Peshkov has created a simple custom dropdown widget that does exactly what it sounds like. Note: if you\u2019re self-hosting, a fix related to this widget is on it\u2019s way to grist-core soon! Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel !","title":"Community highlights"},{"location":"newsletters/2024-08/#learning-grist","text":"","title":"Learning Grist"},{"location":"newsletters/2024-08/#webinar-new-feature-showcase","text":"In September, catch up on the latest Grist features that you may have missed, including Markdown in cells, cumulative functions, the formula timer, and record cards. Learn how these new tools can enhance your existing Grist docs, or give you new ideas for future workflows. Thursday September 19 at 3:00pm US Eastern Time. SIGN UP FOR SEPTEMBER\u2019S WEBINAR","title":"Webinar: \u2728 New Feature Showcase"},{"location":"newsletters/2024-08/#grist-101","text":"In August, Natalie hosted an introductory webinar designed to help new users navigate the basics of Grist. This session provided users with the essential tools and knowledge to get started. We covered key features and best practices to maximize your productivity. Perfect for beginners! WATCH AUGUST\u2019S RECORDING","title":"Grist 101"},{"location":"newsletters/2024-08/#help-spread-the-word","text":"If you\u2019re interested in helping Grist grow, consider leaving a review on product review sites. Here\u2019s a short list where your review could make a big impact. Thank you! \ud83d\ude4f AlternativeTo Capterra G2 TrustRadius","title":"Help spread the word"},{"location":"newsletters/2024-08/#we-are-here-to-support-you","text":"Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more. Have questions, feedback, or need help? Search our Help Center , watch video tutorials , share ideas in our Community Forum , or contact us at support@getgrist.com .","title":"We are here to support you"}]} \ No newline at end of file diff --git a/fr/self-managed/index.html b/fr/self-managed/index.html index c74a3afe3..518d3dc2e 100644 --- a/fr/self-managed/index.html +++ b/fr/self-managed/index.html @@ -574,6 +574,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/sharing/index.html b/fr/sharing/index.html index 20641420e..a1241e1e3 100644 --- a/fr/sharing/index.html +++ b/fr/sharing/index.html @@ -571,6 +571,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/sitemap.xml b/fr/sitemap.xml index 0c88c255d..d31f368f7 100644 --- a/fr/sitemap.xml +++ b/fr/sitemap.xml @@ -2,722 +2,727 @@ https://support.getgrist.com/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/FAQ/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/access-rules/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/afterschool-program/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/ai-assistant/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/authorship/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/automatic-backups/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/browser-support/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/col-refs/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/col-transform/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/col-types/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/conditional-formatting/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/copying-docs/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/creating-doc/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/custom-layouts/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/data-security/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/dates/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/document-history/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/embedding/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/enter-data/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/exports/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/formula-cheat-sheet/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/formula-timer/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/formulas/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/functions/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/glossary/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/imports/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/integrators/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/investment-research/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/keyboard-shortcuts/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/lightweight-crm/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/limits/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/linking-widgets/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/on-demand-tables/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/page-widgets/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/python/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/raw-data/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/record-cards/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/references-lookups/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/register-as-consultant/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/rest-api/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/search-sort-filter/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/self-managed/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/sharing/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/summary-tables/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/team-sharing/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/teams/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/telemetry-full/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/telemetry-limited/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/telemetry/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/timestamps/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/webhooks/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/widget-calendar/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/widget-card/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/widget-chart/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/widget-custom/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/widget-form/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/widget-table/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/workspaces/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2020-06-book-club/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2020-06-credit-card/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2020-07-email-compose/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2020-08-invoices/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2020-09-payroll/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2020-10-print-labels/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2020-11-treasure-hunt/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2020-12-map/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2021-01-tasks/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2021-03-leads/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2021-04-link-keys/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2021-05-reference-columns/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2021-06-timesheets/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2021-07-auto-stamps/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2023-01-acl-memo/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/examples/2023-07-proposals-contracts/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/aws-marketplace/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/cloud-storage/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/example-docker-nginx/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/forwarded-headers/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/grist-connect/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/oidc/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/saml/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2020-05/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2020-06/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2020-07/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2020-08/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2020-09/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2020-10/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2020-11/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2020-12/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-01/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-02/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-03/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-04/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-05/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-06/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-07/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-08/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-09/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-10/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-11/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2021-12/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-01/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-02/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-03/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-04/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-05/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-06/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-07/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-08/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-09/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-10/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-11/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2022-12/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-01/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-02/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-03/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-04/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-05/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-06/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-07/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-08/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-09/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-10/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-11/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2023-12/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-01/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-02/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-03/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-04/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-05/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-06/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-07/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/api/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/code/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/code/modules/grist_plugin_api/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/audit-log-overview/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/audit-log-streaming/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/install/audit-log-events/ - 2024-11-27 + 2024-11-29 + daily + + + https://support.getgrist.com/newsletters/2024-11/ + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-10/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-09/ - 2024-11-27 + 2024-11-29 daily https://support.getgrist.com/newsletters/2024-08/ - 2024-11-27 + 2024-11-29 daily \ No newline at end of file diff --git a/fr/sitemap.xml.gz b/fr/sitemap.xml.gz index d0d7da334..534c5b951 100644 Binary files a/fr/sitemap.xml.gz and b/fr/sitemap.xml.gz differ diff --git a/fr/summary-tables/index.html b/fr/summary-tables/index.html index 17e5fb745..19b9e9c81 100644 --- a/fr/summary-tables/index.html +++ b/fr/summary-tables/index.html @@ -583,6 +583,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/team-sharing/index.html b/fr/team-sharing/index.html index 4e41993ee..30040bc0c 100644 --- a/fr/team-sharing/index.html +++ b/fr/team-sharing/index.html @@ -568,6 +568,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/teams/index.html b/fr/teams/index.html index 1cb7d99f4..2e6451ce0 100644 --- a/fr/teams/index.html +++ b/fr/teams/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/telemetry-full/index.html b/fr/telemetry-full/index.html index b56c9e286..b3436c313 100644 --- a/fr/telemetry-full/index.html +++ b/fr/telemetry-full/index.html @@ -633,6 +633,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/telemetry-limited/index.html b/fr/telemetry-limited/index.html index 380e679b1..73a7e46ba 100644 --- a/fr/telemetry-limited/index.html +++ b/fr/telemetry-limited/index.html @@ -590,6 +590,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/telemetry/index.html b/fr/telemetry/index.html index 64f1e4c9d..33bf5a898 100644 --- a/fr/telemetry/index.html +++ b/fr/telemetry/index.html @@ -553,6 +553,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/timestamps/index.html b/fr/timestamps/index.html index 0657faa99..d4df98108 100644 --- a/fr/timestamps/index.html +++ b/fr/timestamps/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/webhooks/index.html b/fr/webhooks/index.html index c21c1b8ea..e32554b20 100644 --- a/fr/webhooks/index.html +++ b/fr/webhooks/index.html @@ -579,6 +579,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/widget-calendar/index.html b/fr/widget-calendar/index.html index 393fe634f..1f953d6f0 100644 --- a/fr/widget-calendar/index.html +++ b/fr/widget-calendar/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/widget-card/index.html b/fr/widget-card/index.html index 280d447c1..90ebf6ef8 100644 --- a/fr/widget-card/index.html +++ b/fr/widget-card/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/widget-chart/index.html b/fr/widget-chart/index.html index f2fdfb8eb..23a619572 100644 --- a/fr/widget-chart/index.html +++ b/fr/widget-chart/index.html @@ -563,6 +563,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/widget-custom/index.html b/fr/widget-custom/index.html index c3f81eafe..dbe8f7316 100644 --- a/fr/widget-custom/index.html +++ b/fr/widget-custom/index.html @@ -598,6 +598,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/widget-form/index.html b/fr/widget-form/index.html index eef5d5a78..dd76d1009 100644 --- a/fr/widget-form/index.html +++ b/fr/widget-form/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/widget-table/index.html b/fr/widget-table/index.html index d5c70ed7c..56812b03c 100644 --- a/fr/widget-table/index.html +++ b/fr/widget-table/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/fr/workspaces/index.html b/fr/workspaces/index.html index 0ccb36c2b..cc3caac77 100644 --- a/fr/workspaces/index.html +++ b/fr/workspaces/index.html @@ -559,6 +559,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/functions/index.html b/functions/index.html index 50a6e314e..3cec94cf6 100644 --- a/functions/index.html +++ b/functions/index.html @@ -739,6 +739,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/glossary/index.html b/glossary/index.html index dfce6caf2..ce86001da 100644 --- a/glossary/index.html +++ b/glossary/index.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/images/newsletters/2024-11/agenda.png b/images/newsletters/2024-11/agenda.png new file mode 100644 index 000000000..4b3a3a70f Binary files /dev/null and b/images/newsletters/2024-11/agenda.png differ diff --git a/images/newsletters/2024-11/audit-logs.png b/images/newsletters/2024-11/audit-logs.png new file mode 100644 index 000000000..283232a37 Binary files /dev/null and b/images/newsletters/2024-11/audit-logs.png differ diff --git a/images/newsletters/2024-11/aws.png b/images/newsletters/2024-11/aws.png new file mode 100644 index 000000000..3b42b725e Binary files /dev/null and b/images/newsletters/2024-11/aws.png differ diff --git a/images/newsletters/2024-11/blog-translate.png b/images/newsletters/2024-11/blog-translate.png new file mode 100644 index 000000000..59b82112e Binary files /dev/null and b/images/newsletters/2024-11/blog-translate.png differ diff --git a/images/newsletters/2024-11/document-type.png b/images/newsletters/2024-11/document-type.png new file mode 100644 index 000000000..aa884f84e Binary files /dev/null and b/images/newsletters/2024-11/document-type.png differ diff --git a/images/newsletters/2024-11/gristimagemap.png b/images/newsletters/2024-11/gristimagemap.png new file mode 100644 index 000000000..f86ada45f Binary files /dev/null and b/images/newsletters/2024-11/gristimagemap.png differ diff --git a/images/newsletters/2024-11/labsv2.png b/images/newsletters/2024-11/labsv2.png new file mode 100644 index 000000000..f3ad61419 Binary files /dev/null and b/images/newsletters/2024-11/labsv2.png differ diff --git a/images/newsletters/2024-11/node-red.png b/images/newsletters/2024-11/node-red.png new file mode 100644 index 000000000..bf2d83c92 Binary files /dev/null and b/images/newsletters/2024-11/node-red.png differ diff --git a/images/newsletters/2024-11/webinar.png b/images/newsletters/2024-11/webinar.png new file mode 100644 index 000000000..f256fcdc7 Binary files /dev/null and b/images/newsletters/2024-11/webinar.png differ diff --git a/imports/index.html b/imports/index.html index b70eee0e3..8492c6b4d 100644 --- a/imports/index.html +++ b/imports/index.html @@ -718,6 +718,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/index.html b/index.html index 1ec6fcb12..065a9028a 100644 --- a/index.html +++ b/index.html @@ -709,6 +709,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 @@ -1243,5 +1247,5 @@

    Contact usNewsletters +

  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/audit-log-overview/index.html b/install/audit-log-overview/index.html index f0b822eee..901fc2454 100644 --- a/install/audit-log-overview/index.html +++ b/install/audit-log-overview/index.html @@ -708,6 +708,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/audit-log-streaming/index.html b/install/audit-log-streaming/index.html index 8e2a71333..346da0d45 100644 --- a/install/audit-log-streaming/index.html +++ b/install/audit-log-streaming/index.html @@ -706,6 +706,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/aws-marketplace-legacy/index.html b/install/aws-marketplace-legacy/index.html index 4f4566f79..99b38ccd0 100644 --- a/install/aws-marketplace-legacy/index.html +++ b/install/aws-marketplace-legacy/index.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/aws-marketplace-transition/index.html b/install/aws-marketplace-transition/index.html index 12bbc5026..58923753e 100644 --- a/install/aws-marketplace-transition/index.html +++ b/install/aws-marketplace-transition/index.html @@ -678,6 +678,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/aws-marketplace/index.html b/install/aws-marketplace/index.html index 265a54b64..bbec1fb5b 100644 --- a/install/aws-marketplace/index.html +++ b/install/aws-marketplace/index.html @@ -704,6 +704,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/cloud-storage/index.html b/install/cloud-storage/index.html index e8d16f591..cb4ffc606 100644 --- a/install/cloud-storage/index.html +++ b/install/cloud-storage/index.html @@ -711,6 +711,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/example-docker-nginx/index.html b/install/example-docker-nginx/index.html index 1a601366c..dae7959e3 100644 --- a/install/example-docker-nginx/index.html +++ b/install/example-docker-nginx/index.html @@ -676,6 +676,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/forwarded-headers/index.html b/install/forwarded-headers/index.html index 1ddec629b..475b7a466 100644 --- a/install/forwarded-headers/index.html +++ b/install/forwarded-headers/index.html @@ -703,6 +703,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/grist-connect/index.html b/install/grist-connect/index.html index 131694be4..d17306ff3 100644 --- a/install/grist-connect/index.html +++ b/install/grist-connect/index.html @@ -709,6 +709,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/oidc/index.html b/install/oidc/index.html index 566232181..c6c4aa4a4 100644 --- a/install/oidc/index.html +++ b/install/oidc/index.html @@ -706,6 +706,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/install/saml/index.html b/install/saml/index.html index ea99afde7..ebd71e9ee 100644 --- a/install/saml/index.html +++ b/install/saml/index.html @@ -711,6 +711,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/integrators/index.html b/integrators/index.html index f3f36df30..aab5128fa 100644 --- a/integrators/index.html +++ b/integrators/index.html @@ -711,6 +711,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/investment-research/index.html b/investment-research/index.html index ecec2632e..b4f40aa04 100644 --- a/investment-research/index.html +++ b/investment-research/index.html @@ -729,6 +729,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/404.html b/it/404.html index 9663b3dbb..67a32e4b0 100644 --- a/it/404.html +++ b/it/404.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/FAQ/index.html b/it/FAQ/index.html index 6bc305469..716030a14 100644 --- a/it/FAQ/index.html +++ b/it/FAQ/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/access-rules/index.html b/it/access-rules/index.html index 4098e48b8..1f734dffa 100644 --- a/it/access-rules/index.html +++ b/it/access-rules/index.html @@ -635,6 +635,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/afterschool-program/index.html b/it/afterschool-program/index.html index c0384d472..95efb570e 100644 --- a/it/afterschool-program/index.html +++ b/it/afterschool-program/index.html @@ -610,6 +610,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/ai-assistant/index.html b/it/ai-assistant/index.html index 4d74e2b70..d2ada2745 100644 --- a/it/ai-assistant/index.html +++ b/it/ai-assistant/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/api/index.html b/it/api/index.html index 0b7bca65e..7f529f367 100644 --- a/it/api/index.html +++ b/it/api/index.html @@ -2844,6 +2844,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/authorship/index.html b/it/authorship/index.html index 7d3b62454..779f695b0 100644 --- a/it/authorship/index.html +++ b/it/authorship/index.html @@ -571,6 +571,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/automatic-backups/index.html b/it/automatic-backups/index.html index d38ee5976..e54b7c9b2 100644 --- a/it/automatic-backups/index.html +++ b/it/automatic-backups/index.html @@ -570,6 +570,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/browser-support/index.html b/it/browser-support/index.html index 344c36553..de46aa46f 100644 --- a/it/browser-support/index.html +++ b/it/browser-support/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/code/index.html b/it/code/index.html index 8393fdd52..b947c2aa6 100644 --- a/it/code/index.html +++ b/it/code/index.html @@ -555,6 +555,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/code/modules/grist_plugin_api/index.html b/it/code/modules/grist_plugin_api/index.html index a914d4e49..e509c6e2f 100644 --- a/it/code/modules/grist_plugin_api/index.html +++ b/it/code/modules/grist_plugin_api/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/col-refs/index.html b/it/col-refs/index.html index 96b2ace0a..551c035ac 100644 --- a/it/col-refs/index.html +++ b/it/col-refs/index.html @@ -603,6 +603,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/col-transform/index.html b/it/col-transform/index.html index 9447e5d89..68cccc89e 100644 --- a/it/col-transform/index.html +++ b/it/col-transform/index.html @@ -565,6 +565,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/col-types/index.html b/it/col-types/index.html index 93815d4eb..43279ed49 100644 --- a/it/col-types/index.html +++ b/it/col-types/index.html @@ -638,6 +638,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/conditional-formatting/index.html b/it/conditional-formatting/index.html index 8dbf21b33..826cee846 100644 --- a/it/conditional-formatting/index.html +++ b/it/conditional-formatting/index.html @@ -558,6 +558,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/copying-docs/index.html b/it/copying-docs/index.html index 84ec47bc5..08a487f8c 100644 --- a/it/copying-docs/index.html +++ b/it/copying-docs/index.html @@ -570,6 +570,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/creating-doc/index.html b/it/creating-doc/index.html index 47a028af8..d229e1b80 100644 --- a/it/creating-doc/index.html +++ b/it/creating-doc/index.html @@ -571,6 +571,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/custom-layouts/index.html b/it/custom-layouts/index.html index 420e2d04a..3221070b0 100644 --- a/it/custom-layouts/index.html +++ b/it/custom-layouts/index.html @@ -582,6 +582,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/data-security/index.html b/it/data-security/index.html index c82ab561f..632df5f25 100644 --- a/it/data-security/index.html +++ b/it/data-security/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/dates/index.html b/it/dates/index.html index bccf9ee67..11e3cf8e7 100644 --- a/it/dates/index.html +++ b/it/dates/index.html @@ -595,6 +595,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/document-history/index.html b/it/document-history/index.html index 58dcaa6cf..ccf28d5ba 100644 --- a/it/document-history/index.html +++ b/it/document-history/index.html @@ -565,6 +565,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/embedding/index.html b/it/embedding/index.html index 27b5a69e6..36e8542ad 100644 --- a/it/embedding/index.html +++ b/it/embedding/index.html @@ -569,6 +569,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/enter-data/index.html b/it/enter-data/index.html index 81129b0d3..9a58ca85b 100644 --- a/it/enter-data/index.html +++ b/it/enter-data/index.html @@ -575,6 +575,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2020-06-book-club/index.html b/it/examples/2020-06-book-club/index.html index a385bc15e..1a1e1dbfb 100644 --- a/it/examples/2020-06-book-club/index.html +++ b/it/examples/2020-06-book-club/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2020-06-credit-card/index.html b/it/examples/2020-06-credit-card/index.html index dd7cec004..c47ef56d0 100644 --- a/it/examples/2020-06-credit-card/index.html +++ b/it/examples/2020-06-credit-card/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2020-07-email-compose/index.html b/it/examples/2020-07-email-compose/index.html index 1a5201ff3..995071aed 100644 --- a/it/examples/2020-07-email-compose/index.html +++ b/it/examples/2020-07-email-compose/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2020-08-invoices/index.html b/it/examples/2020-08-invoices/index.html index eafdb4ecf..51cae677d 100644 --- a/it/examples/2020-08-invoices/index.html +++ b/it/examples/2020-08-invoices/index.html @@ -544,6 +544,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2020-09-payroll/index.html b/it/examples/2020-09-payroll/index.html index 17b292abd..4aa0b17c5 100644 --- a/it/examples/2020-09-payroll/index.html +++ b/it/examples/2020-09-payroll/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2020-10-print-labels/index.html b/it/examples/2020-10-print-labels/index.html index 32bf01f9d..3b2a2fec5 100644 --- a/it/examples/2020-10-print-labels/index.html +++ b/it/examples/2020-10-print-labels/index.html @@ -544,6 +544,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2020-11-treasure-hunt/index.html b/it/examples/2020-11-treasure-hunt/index.html index e19a8e6a5..180844fb7 100644 --- a/it/examples/2020-11-treasure-hunt/index.html +++ b/it/examples/2020-11-treasure-hunt/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2020-12-map/index.html b/it/examples/2020-12-map/index.html index 570e1930d..630dcc8e8 100644 --- a/it/examples/2020-12-map/index.html +++ b/it/examples/2020-12-map/index.html @@ -544,6 +544,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2021-01-tasks/index.html b/it/examples/2021-01-tasks/index.html index 9b374998f..46e7f328f 100644 --- a/it/examples/2021-01-tasks/index.html +++ b/it/examples/2021-01-tasks/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2021-03-leads/index.html b/it/examples/2021-03-leads/index.html index 570379591..acc89673a 100644 --- a/it/examples/2021-03-leads/index.html +++ b/it/examples/2021-03-leads/index.html @@ -544,6 +544,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2021-04-link-keys/index.html b/it/examples/2021-04-link-keys/index.html index c3f13af7b..4bdcfddba 100644 --- a/it/examples/2021-04-link-keys/index.html +++ b/it/examples/2021-04-link-keys/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2021-05-reference-columns/index.html b/it/examples/2021-05-reference-columns/index.html index f3c424698..3d3e7e171 100644 --- a/it/examples/2021-05-reference-columns/index.html +++ b/it/examples/2021-05-reference-columns/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2021-06-timesheets/index.html b/it/examples/2021-06-timesheets/index.html index 9215052a0..a1aca418a 100644 --- a/it/examples/2021-06-timesheets/index.html +++ b/it/examples/2021-06-timesheets/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2021-07-auto-stamps/index.html b/it/examples/2021-07-auto-stamps/index.html index 46cc32efd..1aa0ce62a 100644 --- a/it/examples/2021-07-auto-stamps/index.html +++ b/it/examples/2021-07-auto-stamps/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2023-01-acl-memo/index.html b/it/examples/2023-01-acl-memo/index.html index 6f971665f..f39ce4a7e 100644 --- a/it/examples/2023-01-acl-memo/index.html +++ b/it/examples/2023-01-acl-memo/index.html @@ -546,6 +546,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/2023-07-proposals-contracts/index.html b/it/examples/2023-07-proposals-contracts/index.html index 8f118deb1..b2b726e64 100644 --- a/it/examples/2023-07-proposals-contracts/index.html +++ b/it/examples/2023-07-proposals-contracts/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/examples/index.html b/it/examples/index.html index 273bcf4e7..0a6ab97ff 100644 --- a/it/examples/index.html +++ b/it/examples/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/exports/index.html b/it/exports/index.html index 5455b7509..ca7a346df 100644 --- a/it/exports/index.html +++ b/it/exports/index.html @@ -578,6 +578,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/formula-cheat-sheet/index.html b/it/formula-cheat-sheet/index.html index f019ced03..55c69e360 100644 --- a/it/formula-cheat-sheet/index.html +++ b/it/formula-cheat-sheet/index.html @@ -570,6 +570,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/formula-timer/index.html b/it/formula-timer/index.html index 05306d1d7..b08469033 100644 --- a/it/formula-timer/index.html +++ b/it/formula-timer/index.html @@ -558,6 +558,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/formulas/index.html b/it/formulas/index.html index d15791ab7..377fccbad 100644 --- a/it/formulas/index.html +++ b/it/formulas/index.html @@ -609,6 +609,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/functions/index.html b/it/functions/index.html index c417e14da..494b97420 100644 --- a/it/functions/index.html +++ b/it/functions/index.html @@ -603,6 +603,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/glossary/index.html b/it/glossary/index.html index ed5b8431b..3e55b1f1b 100644 --- a/it/glossary/index.html +++ b/it/glossary/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/images/newsletters/2024-11/agenda.png b/it/images/newsletters/2024-11/agenda.png new file mode 100644 index 000000000..4b3a3a70f Binary files /dev/null and b/it/images/newsletters/2024-11/agenda.png differ diff --git a/it/images/newsletters/2024-11/audit-logs.png b/it/images/newsletters/2024-11/audit-logs.png new file mode 100644 index 000000000..283232a37 Binary files /dev/null and b/it/images/newsletters/2024-11/audit-logs.png differ diff --git a/it/images/newsletters/2024-11/aws.png b/it/images/newsletters/2024-11/aws.png new file mode 100644 index 000000000..3b42b725e Binary files /dev/null and b/it/images/newsletters/2024-11/aws.png differ diff --git a/it/images/newsletters/2024-11/blog-translate.png b/it/images/newsletters/2024-11/blog-translate.png new file mode 100644 index 000000000..59b82112e Binary files /dev/null and b/it/images/newsletters/2024-11/blog-translate.png differ diff --git a/it/images/newsletters/2024-11/document-type.png b/it/images/newsletters/2024-11/document-type.png new file mode 100644 index 000000000..aa884f84e Binary files /dev/null and b/it/images/newsletters/2024-11/document-type.png differ diff --git a/it/images/newsletters/2024-11/gristimagemap.png b/it/images/newsletters/2024-11/gristimagemap.png new file mode 100644 index 000000000..f86ada45f Binary files /dev/null and b/it/images/newsletters/2024-11/gristimagemap.png differ diff --git a/it/images/newsletters/2024-11/labsv2.png b/it/images/newsletters/2024-11/labsv2.png new file mode 100644 index 000000000..f3ad61419 Binary files /dev/null and b/it/images/newsletters/2024-11/labsv2.png differ diff --git a/it/images/newsletters/2024-11/node-red.png b/it/images/newsletters/2024-11/node-red.png new file mode 100644 index 000000000..bf2d83c92 Binary files /dev/null and b/it/images/newsletters/2024-11/node-red.png differ diff --git a/it/images/newsletters/2024-11/webinar.png b/it/images/newsletters/2024-11/webinar.png new file mode 100644 index 000000000..f256fcdc7 Binary files /dev/null and b/it/images/newsletters/2024-11/webinar.png differ diff --git a/it/imports/index.html b/it/imports/index.html index 12fffa607..37ae7db69 100644 --- a/it/imports/index.html +++ b/it/imports/index.html @@ -582,6 +582,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/index.html b/it/index.html index 0ee066858..a5aeb1c36 100644 --- a/it/index.html +++ b/it/index.html @@ -579,6 +579,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 @@ -1121,5 +1125,5 @@

    Contact usNewsletters +

  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/install/audit-log-overview/index.html b/it/install/audit-log-overview/index.html index 625bc1330..a1106812a 100644 --- a/it/install/audit-log-overview/index.html +++ b/it/install/audit-log-overview/index.html @@ -572,6 +572,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/install/audit-log-streaming/index.html b/it/install/audit-log-streaming/index.html index 5e4d85520..90f4a716a 100644 --- a/it/install/audit-log-streaming/index.html +++ b/it/install/audit-log-streaming/index.html @@ -570,6 +570,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/install/aws-marketplace/index.html b/it/install/aws-marketplace/index.html index d1783bb6a..0b2a4e3af 100644 --- a/it/install/aws-marketplace/index.html +++ b/it/install/aws-marketplace/index.html @@ -568,6 +568,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/install/cloud-storage/index.html b/it/install/cloud-storage/index.html index 40e157235..fdd5bbdbd 100644 --- a/it/install/cloud-storage/index.html +++ b/it/install/cloud-storage/index.html @@ -575,6 +575,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/install/forwarded-headers/index.html b/it/install/forwarded-headers/index.html index 73d15fd67..2edb3a9a7 100644 --- a/it/install/forwarded-headers/index.html +++ b/it/install/forwarded-headers/index.html @@ -567,6 +567,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/install/grist-connect/index.html b/it/install/grist-connect/index.html index d8f3a8fbd..4ea2eca7c 100644 --- a/it/install/grist-connect/index.html +++ b/it/install/grist-connect/index.html @@ -573,6 +573,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/install/oidc/index.html b/it/install/oidc/index.html index 7c09a85f2..06037b44e 100644 --- a/it/install/oidc/index.html +++ b/it/install/oidc/index.html @@ -570,6 +570,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/install/saml/index.html b/it/install/saml/index.html index 0a070162c..aa376d631 100644 --- a/it/install/saml/index.html +++ b/it/install/saml/index.html @@ -575,6 +575,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/integrators/index.html b/it/integrators/index.html index ffdffb24a..fdd40d4c6 100644 --- a/it/integrators/index.html +++ b/it/integrators/index.html @@ -575,6 +575,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/investment-research/index.html b/it/investment-research/index.html index fcea1fafd..803cf29cc 100644 --- a/it/investment-research/index.html +++ b/it/investment-research/index.html @@ -593,6 +593,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/keyboard-shortcuts/index.html b/it/keyboard-shortcuts/index.html index 5f8e55ca5..e6659408e 100644 --- a/it/keyboard-shortcuts/index.html +++ b/it/keyboard-shortcuts/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/lightweight-crm/index.html b/it/lightweight-crm/index.html index 4ce08676e..9cd636f96 100644 --- a/it/lightweight-crm/index.html +++ b/it/lightweight-crm/index.html @@ -610,6 +610,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/limits/index.html b/it/limits/index.html index 0637d1fdf..cd613834d 100644 --- a/it/limits/index.html +++ b/it/limits/index.html @@ -542,6 +542,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/linking-widgets/index.html b/it/linking-widgets/index.html index e59a05b75..e492c825b 100644 --- a/it/linking-widgets/index.html +++ b/it/linking-widgets/index.html @@ -595,6 +595,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2020-05/index.html b/it/newsletters/2020-05/index.html index 5d68d8430..d9ac3d303 100644 --- a/it/newsletters/2020-05/index.html +++ b/it/newsletters/2020-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2020-06/index.html b/it/newsletters/2020-06/index.html index 9a830dd7f..a11ac16ad 100644 --- a/it/newsletters/2020-06/index.html +++ b/it/newsletters/2020-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2020-07/index.html b/it/newsletters/2020-07/index.html index 9afa9cbf2..52a3d9aa1 100644 --- a/it/newsletters/2020-07/index.html +++ b/it/newsletters/2020-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2020-08/index.html b/it/newsletters/2020-08/index.html index 445f98fdf..7ea72fe44 100644 --- a/it/newsletters/2020-08/index.html +++ b/it/newsletters/2020-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2020-09/index.html b/it/newsletters/2020-09/index.html index 9f6ccdd8b..b5d5792df 100644 --- a/it/newsletters/2020-09/index.html +++ b/it/newsletters/2020-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2020-10/index.html b/it/newsletters/2020-10/index.html index 7f422263c..79cac2763 100644 --- a/it/newsletters/2020-10/index.html +++ b/it/newsletters/2020-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2020-11/index.html b/it/newsletters/2020-11/index.html index 0deb543c8..8673e16a4 100644 --- a/it/newsletters/2020-11/index.html +++ b/it/newsletters/2020-11/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2020-12/index.html b/it/newsletters/2020-12/index.html index d4b169b2b..97daace15 100644 --- a/it/newsletters/2020-12/index.html +++ b/it/newsletters/2020-12/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-01/index.html b/it/newsletters/2021-01/index.html index bd11bd502..6c762e110 100644 --- a/it/newsletters/2021-01/index.html +++ b/it/newsletters/2021-01/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-02/index.html b/it/newsletters/2021-02/index.html index faf5e32ed..1c55df54c 100644 --- a/it/newsletters/2021-02/index.html +++ b/it/newsletters/2021-02/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-03/index.html b/it/newsletters/2021-03/index.html index 4c324074b..ce65aef63 100644 --- a/it/newsletters/2021-03/index.html +++ b/it/newsletters/2021-03/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-04/index.html b/it/newsletters/2021-04/index.html index e71fe4049..4e1393f8d 100644 --- a/it/newsletters/2021-04/index.html +++ b/it/newsletters/2021-04/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-05/index.html b/it/newsletters/2021-05/index.html index 8d35aacd2..9dc2f1af3 100644 --- a/it/newsletters/2021-05/index.html +++ b/it/newsletters/2021-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-06/index.html b/it/newsletters/2021-06/index.html index 34ab7f388..201227789 100644 --- a/it/newsletters/2021-06/index.html +++ b/it/newsletters/2021-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-07/index.html b/it/newsletters/2021-07/index.html index 06bb420cd..7a7a65645 100644 --- a/it/newsletters/2021-07/index.html +++ b/it/newsletters/2021-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-08/index.html b/it/newsletters/2021-08/index.html index 14f86378a..fc5aa6f65 100644 --- a/it/newsletters/2021-08/index.html +++ b/it/newsletters/2021-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-09/index.html b/it/newsletters/2021-09/index.html index 12f5f0144..389f4d963 100644 --- a/it/newsletters/2021-09/index.html +++ b/it/newsletters/2021-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-10/index.html b/it/newsletters/2021-10/index.html index 914c07528..24b588470 100644 --- a/it/newsletters/2021-10/index.html +++ b/it/newsletters/2021-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-11/index.html b/it/newsletters/2021-11/index.html index 95c4c4647..0f59d3a60 100644 --- a/it/newsletters/2021-11/index.html +++ b/it/newsletters/2021-11/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2021-12/index.html b/it/newsletters/2021-12/index.html index 2b84e4bc3..bcba7acb6 100644 --- a/it/newsletters/2021-12/index.html +++ b/it/newsletters/2021-12/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-01/index.html b/it/newsletters/2022-01/index.html index 63d6e3c40..4801115e9 100644 --- a/it/newsletters/2022-01/index.html +++ b/it/newsletters/2022-01/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-02/index.html b/it/newsletters/2022-02/index.html index 04f941c04..fd98ccb8d 100644 --- a/it/newsletters/2022-02/index.html +++ b/it/newsletters/2022-02/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-03/index.html b/it/newsletters/2022-03/index.html index e07e79a75..f0bf09daf 100644 --- a/it/newsletters/2022-03/index.html +++ b/it/newsletters/2022-03/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-04/index.html b/it/newsletters/2022-04/index.html index 6468e556e..0531902d4 100644 --- a/it/newsletters/2022-04/index.html +++ b/it/newsletters/2022-04/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-05/index.html b/it/newsletters/2022-05/index.html index 40237fec6..6998adffc 100644 --- a/it/newsletters/2022-05/index.html +++ b/it/newsletters/2022-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-06/index.html b/it/newsletters/2022-06/index.html index 1c1f97f22..fad900d55 100644 --- a/it/newsletters/2022-06/index.html +++ b/it/newsletters/2022-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-07/index.html b/it/newsletters/2022-07/index.html index eb808eb6b..6981ef209 100644 --- a/it/newsletters/2022-07/index.html +++ b/it/newsletters/2022-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-08/index.html b/it/newsletters/2022-08/index.html index eaddaef8e..139ce9af8 100644 --- a/it/newsletters/2022-08/index.html +++ b/it/newsletters/2022-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-09/index.html b/it/newsletters/2022-09/index.html index adcbc491e..aa1e5769d 100644 --- a/it/newsletters/2022-09/index.html +++ b/it/newsletters/2022-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-10/index.html b/it/newsletters/2022-10/index.html index dd8643930..1be3c766b 100644 --- a/it/newsletters/2022-10/index.html +++ b/it/newsletters/2022-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-11/index.html b/it/newsletters/2022-11/index.html index 16d680659..8e87f531c 100644 --- a/it/newsletters/2022-11/index.html +++ b/it/newsletters/2022-11/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2022-12/index.html b/it/newsletters/2022-12/index.html index e6d481811..4b771990d 100644 --- a/it/newsletters/2022-12/index.html +++ b/it/newsletters/2022-12/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-01/index.html b/it/newsletters/2023-01/index.html index e815c50eb..a7ce288fe 100644 --- a/it/newsletters/2023-01/index.html +++ b/it/newsletters/2023-01/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-02/index.html b/it/newsletters/2023-02/index.html index 0aa7779aa..5aebed9ba 100644 --- a/it/newsletters/2023-02/index.html +++ b/it/newsletters/2023-02/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-03/index.html b/it/newsletters/2023-03/index.html index 9db0e7633..bdbf30d13 100644 --- a/it/newsletters/2023-03/index.html +++ b/it/newsletters/2023-03/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-04/index.html b/it/newsletters/2023-04/index.html index bebbd579e..0cb93adbe 100644 --- a/it/newsletters/2023-04/index.html +++ b/it/newsletters/2023-04/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-05/index.html b/it/newsletters/2023-05/index.html index 0b3e41d91..221d5b57a 100644 --- a/it/newsletters/2023-05/index.html +++ b/it/newsletters/2023-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-06/index.html b/it/newsletters/2023-06/index.html index 46ee7ad44..584c38fb1 100644 --- a/it/newsletters/2023-06/index.html +++ b/it/newsletters/2023-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-07/index.html b/it/newsletters/2023-07/index.html index 8a3bd5473..690de0efb 100644 --- a/it/newsletters/2023-07/index.html +++ b/it/newsletters/2023-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-08/index.html b/it/newsletters/2023-08/index.html index 50b5ea7e5..3b06b99fb 100644 --- a/it/newsletters/2023-08/index.html +++ b/it/newsletters/2023-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-09/index.html b/it/newsletters/2023-09/index.html index 2895d9a45..28fe616cf 100644 --- a/it/newsletters/2023-09/index.html +++ b/it/newsletters/2023-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-10/index.html b/it/newsletters/2023-10/index.html index dc723507d..095fa0d2b 100644 --- a/it/newsletters/2023-10/index.html +++ b/it/newsletters/2023-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-11/index.html b/it/newsletters/2023-11/index.html index 3a38cabbb..754d5a613 100644 --- a/it/newsletters/2023-11/index.html +++ b/it/newsletters/2023-11/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2023-12/index.html b/it/newsletters/2023-12/index.html index 3cbd8a7e0..19eabcc8e 100644 --- a/it/newsletters/2023-12/index.html +++ b/it/newsletters/2023-12/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-01/index.html b/it/newsletters/2024-01/index.html index 2f24ae8ef..5de0e9a23 100644 --- a/it/newsletters/2024-01/index.html +++ b/it/newsletters/2024-01/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-02/index.html b/it/newsletters/2024-02/index.html index 2b18eed3a..0cd6fa0f3 100644 --- a/it/newsletters/2024-02/index.html +++ b/it/newsletters/2024-02/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-03/index.html b/it/newsletters/2024-03/index.html index 0db8dbfe7..14434dc22 100644 --- a/it/newsletters/2024-03/index.html +++ b/it/newsletters/2024-03/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-04/index.html b/it/newsletters/2024-04/index.html index 91c259c2e..3a5b6982d 100644 --- a/it/newsletters/2024-04/index.html +++ b/it/newsletters/2024-04/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-05/index.html b/it/newsletters/2024-05/index.html index 225f174c6..0e855f1af 100644 --- a/it/newsletters/2024-05/index.html +++ b/it/newsletters/2024-05/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-06/index.html b/it/newsletters/2024-06/index.html index d8f652bfd..8a0007827 100644 --- a/it/newsletters/2024-06/index.html +++ b/it/newsletters/2024-06/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-07/index.html b/it/newsletters/2024-07/index.html index ae53780c2..6ff092d5d 100644 --- a/it/newsletters/2024-07/index.html +++ b/it/newsletters/2024-07/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-08/index.html b/it/newsletters/2024-08/index.html index e4b85414a..2acb3255d 100644 --- a/it/newsletters/2024-08/index.html +++ b/it/newsletters/2024-08/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-09/index.html b/it/newsletters/2024-09/index.html index 781b1926d..b2abf1df7 100644 --- a/it/newsletters/2024-09/index.html +++ b/it/newsletters/2024-09/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 diff --git a/it/newsletters/2024-10/index.html b/it/newsletters/2024-10/index.html index 5f5c5334d..90bb4a5c3 100644 --- a/it/newsletters/2024-10/index.html +++ b/it/newsletters/2024-10/index.html @@ -540,6 +540,10 @@
  • Newsletters +
  • +
  • 2024/11 + +
  • 2024/10 @@ -974,10 +978,10 @@
    - + - Previous - Newsletters + Previous + 2024/11
    diff --git a/it/newsletters/2024-11/index.html b/it/newsletters/2024-11/index.html new file mode 100644 index 000000000..4c592e99a --- /dev/null +++ b/it/newsletters/2024-11/index.html @@ -0,0 +1,1240 @@ + + + + + + + + + + + + + + + + + + + + 2024/11 - Grist Help Center + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    + +
    + + + + + + + + + + + + +
    +

    Warning

    +

    We’re just getting started translating this language, sorry!

    +

    We show partially translated languages to track progress.

    +

    This page isn’t translated yet. But the good news is that you can join the translation community to help us 👋.

    +
    +

    November 2024 Newsletter#

    + + + +

    Call for testers#

    +

    Have you used Grist? Have you not used Grist? Do you just like clicking around on the computer? We need you. 🫵

    +

    We’re looking for volunteers to test upcoming features/changes for 30-45 minute sessions. Fill out this Grist form to sign up!

    +

    Grist Paris Summit full schedule posted#

    +

    Grist summit schedule

    +

    The first ever Grist Summit is next week! And just in time, we have the full schedule over at La Suite’s site.

    +

    Unable to join us in France? The main stage events will be recorded and shared after the fact, so keep an eye out for those. Otherwise, we can’t wait to see you in Paris!

    +

    What’s new#

    +

    New on the blog: Translating Grist into 20+ languages#

    +

    Grist translation overview

    +

    We’re constantly impressed with the contributions of Grist’s community translators. To mark an arbitrary milestone of 20 languages in less than two years, we’ve written up a timeline of the localization process. See how volunteer contributors, ANCT and open source tools combine to let billions use Grist in their native language.

    +

    Grist Labs Labs: Displaying 1M+ rows with better-sqlite3#

    +

    Grist + better-sqlite3

    +

    Dmitry shared a peek at the (very) experimental side of spreadsheet development, with a nifty prototype using better-sqlite3 that has Grist zipping around a document with >1M rows. It works just as you’d expect, assuming you don’t expect the following features to function: importing and exporting, formulas, access rules, filtering, summary tables, search, snapshots/history…

    +

    We hope to show you more experiments as we’re able! 👩‍🔬

    +

    Run Grist on the AWS cloud#

    +

    Grist on AWS Marketplace

    +

    Grist is now available on the AWS Marketplace, giving you a simple way of self-hosting Grist (with authentication) in your own cloud. If you need to run Grist on servers in Europe, this is the easiest way to do it. We’re also looking at placing Grist on other cloud marketplaces – if you have a favorite, let us know!

    +

    Thanks to users of the beta product for their feedback. Users can migrate from the beta (now legacy) version by following these steps.

    +

    Grist Business - Audit Logs#

    +

    Audit logs

    +

    Self-hosting Grist Business plan users can now enable audit logging. Audit logs can help maintain compliance and identify misuse by helping answer questions like “when was a workspace removed?” or “who invited a collaborator to a document?”.

    +

    Currently, audit log streaming supports HEC endpoints (like Splunk or Vector), or other destinations via HTTP. Full documentation can be found in our Help Center.

    +

    Editing document types#

    +

    Document types

    +

    Did you know there are distinct Grist document types? Well, now you can specifically set them in Document Settings! If you need to create templates or tutorials to be shared with other users, these types align the open behavior to those formats.

    +

    Community highlights#

    + +

    Working on something cool with Grist? Let us know by posting in the Showcase forum or our #grist-showcase Discord channel!

    +

    Learning Grist#

    +

    Webinar - Custom Widget Builder#

    +

    Couldn’t make it to the Grist Summit in Paris? No worries! Join Grist Labs’ very own CTO Paul and developer Jarek as they present their talk on Grist’s custom widget builder. Learn from the devs themselves how to create your own custom widget, step-by-step!

    +

    Thursday December 19 at 3:00pm US Eastern Time.

    +

    Custom Widget Builder webinar

    +

    SIGN UP FOR DECEMBER’S WEBINAR

    +

    Grist 101#

    +

    In November, Natalie hosted an introductory webinar designed to help new users navigate the basics of Grist. This session provided users with the essential tools and knowledge to get started. We covered key features and best practices to maximize your productivity. Perfect for beginners!

    +

    WATCH NOVEMBER’S RECORDING

    +

    Help spread the word#

    +

    If you’re interested in helping Grist grow, consider leaving a review on product review sites. Here’s a short list where your review could make a big impact. Thank you! 🙏

    + +

    We are here to support you#

    +

    Professional services. Grist often surprises people with its capabilities. Schedule a free call to assess your needs and help connect you with a Grist expert. Learn more.

    +

    Have questions, feedback, or need help? Search our Help Center, watch video +tutorials, share ideas in our +Community Forum, or contact us at support@getgrist.com.

    + +
    +
    + + + + + +
    +
    +
    + + + + + \ No newline at end of file diff --git a/it/newsletters/index.html b/it/newsletters/index.html index 1894cadc2..4b561a59b 100644 --- a/it/newsletters/index.html +++ b/it/newsletters/index.html @@ -555,6 +555,10 @@
  • + +
  • 2024/11 + +
  • 2024/10 @@ -931,12 +935,12 @@