XL 2019 Power Query - Test sur une date null

Flx1er

XLDnaute Occasionnel
Bonjour,
Je bloque sur un test lorsque une date est "null".
Je désire savoir si un prélèvement est effectué entre une période (Date début; Date de fin), si c'est le cas alors j'inscris "In", sinon "Out".
Mais, lorsque la date de fin est inconnue, la colonne Fin possède null et la formule retourne "error".
En règle générale, la colonne possède 2 états : renseigné (présence d'une date) ou vide
Voici la formule de "Calcul Prlev Dans IEP" du fichier joint:
Code:
if [Date prélèvement]>=[Deb] and ([Date prélèvement]<=[Fin] or [Date prélèvement] = null) then "In" else "Out"

Pouvez-vous éclairer ma lanterne
En vous remerciant
 

Pièces jointes

  • Période.xlsx
    23.6 KB · Affichages: 4

Amilo

XLDnaute Accro
Bonjour,

J'ai lu rapidement mais est-ce que l'ajout de "try .....otherwise null" dans votre code répond à votre demande ?
Voir code ci-dessous :

=try if [Date prélèvement]>=[Deb] and ([Date prélèvement]<=[Fin] or [Date prélèvement] = null) then "In" else "Out" otherwise null

Cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Il n'y a pas beaucoup de solution autres que d'éviter ce genre d'erreur en amont Ou de conserver les erreurs pour les remplacer dans une autre étape par la valeur attendue.

Pour éviter l'erreur en amont
Sélectionnez la colonne qui contient des null et dans Transformer cliquer sur Remplacer les Valeurs.
Si vous le faites avant le typage des données (#"Type modifié") vous pourrez remplacer les valeurs de date null par des 0 et le type de la colonne deviendra any au lieu de datetime

Si vous le faites après l'interface ne vous permettra que de remplacer par une autre date (seule la colonne Fin a des null dans votre exemple )
= Table.ReplaceValue(#"Calcul Prlev Dans IEP",null,#datetime(1900, 1, 1, 0, 0, 0),Replacer.ReplaceValue,{"Fin"})
Mais vous pourrez dans la barre de formule changer le datetime par 0
= Table.ReplaceValue(#"Type modifié",null,0,Replacer.ReplaceValue,{"Fin"})

Sinon faites vos tests de dates sans chercher à éliminer les erreurs
= Table.AddColumn(#"Personnalisée ajoutée1", "Prelev Dans IEP", each if [Date prélèvement]>=[Deb] and ([Date prélèvement]<=[Fin]) then "In" else "Out")

Ensuite vous sélectionnez votre colonne et Transformer/Remplacer les valeurs/ Remplacer les erreurs
mettez "In" dans la zone de texte et validez.

Il y a la solution try ..... otherwise dans la formule qui remplacera toutes les erreurs par "In"
= Table.AddColumn(#"Personnalisée ajoutée1", "Prelev Dans IEP", each try if [Date prélèvement]>=[Deb] and ([Date prélèvement]<=[Fin]) then "In" else "Out" otherwise "In")

Dans tous les cas il est bon d'anticiper en amont ce genre d'erreur, la solution de remplacement des erreurs peut masquer des erreurs dont l'origine n'a rien à voir avec votre date testée, mais une des 2 autres ou une donnée mal typée ou toute autre erreur possible.

Là j'ai fait les tests sur la colonne Fin car c'est la seule de votre fichier à avoir des null.

Et enfin une solution pour conserver d'éventuelles erreurs autres qu'attendues :
= Table.AddColumn(#"Personnalisée ajoutée1", "Prelev Dans IEP", each if [Date prélèvement] <> null and [Deb] <> null and [Fin] <>null then
if [Date prélèvement]>=[Deb] and ([Date prélèvement]<=[Fin]) then "In" else "Out"
else "In")


Cordialement

[Edition] n'avais pas vu la réponse d' @Amilo que je salue[/Edition]
 
Dernière édition:

Flx1er

XLDnaute Occasionnel
Bonjour Amilo et Hasco
Je vous remercie pour vos réponses et le temps que vous m'avez accordé.
Comme je débute avec Power Query, je prends bonne note de vos exemples qui me serviront à l'avenir.
J'ai contourné mon problème en remplaçant "null" par "31/12/2099" au format date. De ce fait, je peux savoir si la date de prélèvement est incluse ou non dans une période.
Je vous souhaite une bonne journée
Bien à vous
 

Discussions similaires

Réponses
1
Affichages
816
Compte Supprimé 979
C

Statistiques des forums

Discussions
311 716
Messages
2 081 848
Membres
101 826
dernier inscrit
dododu89