Bonjour, j’ai essayer de créer la formule suivante :
import datetime
def fonction(Date_DP, Date_de_paiement, B1):
if Date_DP == « »:
return « »
elif Date_DP != « » and Date_de_paiement != « » and datetime.datetime.strptime(Date_DP, ‹ %d/%m/%Y ›) <= datetime.datetime.strptime(Date_de_paiement, ‹ %d/%m/%Y ›):
return « Payée »
elif Date_DP != « » and Date_de_paiement == « » and datetime.datetime.now() - datetime.datetime.strptime(Date_DP, ‹ %d/%m/%Y ›) > datetime.timedelta(days=int(B1)):
return « A relancer »
elif Date_DP != « » and Date_de_paiement == « » and datetime.datetime.now() - datetime.datetime.strptime(Date_DP, ‹ %d/%m/%Y ›) <= datetime.timedelta(days=int(B1)):
return « En attente de paiement »
elif datetime.datetime.strptime(Date_de_paiement, ‹ %d/%m/%Y ›) < datetime.datetime.strptime(Date_DP, ‹ %d/%m/%Y ›):
return « Erreur dates »
else:
return « Erreur »
print(fonction(« 24/02/2025 », « 07/04/2025 », 30))
pour faire apparaître dans la cellule les mots Payée, en attente de paiement et à relancer ; mais cela ne fonctionne pas. et en parallèle, je voudrais également faire un style conditionnel avec couleur dans la cellule par exemple A payer cellule verte, à relancer cellule rouge et en attente de paiement en orange. Pouvez-vous m’aider ?
Bonjour Valérie @Vm-35
Il faut utiliser l’insertion de code (</>) dans le forum pour faciliter la lecture (dont l’indentation).
Ce code semble sortir d’une IA sans mise en contexte GRIST…
Difficile de vous aider ainsi.
Pouvez-vous nous remonter une maquette GRIST par un lien public ?
En 1re lecture,
- Les valeurs à traiter sont sans doute stockées dans $Date_DP, $Date_Paiement et $B1 du projet Grist. Il va bien falloir les appeler par la fonction !?
- Il semble que vous partiez sur des champs dates de type texte pour les convertir (strptime) avant de les comparer. Mais GRIST permet de typer en amont (date ou datetime) !?
- On doit pouvoir faire plus simple…
Pour la mise en forme conditionnelle, c’est natif dans GRIST (voir propriétés de la colonne d’affichage)
Eric
Bonjour Eric, merci pour la mise en forme conditionnelle cela fonctionne.
Je voudrai faire une formule pour savoir si les factures sont payées, en attente de paiement ou à relancer. Les valeurs sont : (version Excel) =@SI.CONDITIONS(AP5=« »;« »;ET(AP5<>« »;AT5<>« »;AP5<=AT5);« Payée »;ET(AP5<>« »;AT5=« »;NB.JOURS.OUVRES(AP5;AUJOURDHUI())>$B$271);« A relancer »;ET(AP5<>« »;AT5=« »;NB.JOURS.OUVRES(AP5;AUJOURDHUI())<=$B$271);« En attente de paiement »;AT5<AP5;« Erreur dates »)
AP5 = Date de DT
AT5 = Date de paiement
$B$271 = date du jour
Valérie
Bonjour @Vm-35
En supposant que vos données sont stockées dans une table via $Date_DP, $Date_Paiement et $B1 (Étiquettes des colonnes) avec les types respectifs date, date et entier.
Il faudra la date du jour (fonction TODAY()) et le nb de jours ouvrés (NETWORKDAYS())
Je rajouterais un champ de calcul intermédiaire du nb de jours ouvrés ($Ouvres de type entier) selon :
if $Date_DP:
return NETWORKDAYS($Date_DP,TODAY()) # sans tenir compte des jours fériés !
else:
return none
Je déterminerais ensuite le statut du paiement ($Statut de type texte) par :
if $Date_DP:
if $Date_Paiement:
if $Date_Paiement>= $Date_DP:
return "Payé"
else:
return "Erreur de date !"
elif $Ouvres > $B1:
return "A relancer"
else:
return "En attente"
La colonne « Ouvres » serait finalement à masquer !
Bonjour Eric, merci pour toutes ses informations, cela fonctionne.
Par contre, j’ai encore une petite difficulté car je voudrai faire apparaitre dans la colonne :
Date de relance = Date de SF + Délai de paiement (30 jours)
DATE DE SF DELAI DE PAIEMENT DATE DE RELANCE
24/02/2025 30 26/03/2025
Valérie
Bonjour Valérie @Vm-35
Avec le service fait collecté par $SF (type date), je rajoute la variable calculée $Date_Relance (type date) selon :
if $SF:
return DATEADD($SF,days=$DP)
grâce à la fonction DATEADD()
Cette formule pourrait être avantageusement positionnée en « formule d’initialisation » pour n’être recalculée que si $SF est modifié (et pas à chaque ouverture du document ce qui consomme de la ressource et du temps sur de grosses bases de données) :
puis





