IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POWER Discussion :

Excel Power Query - Filtrer un colonne par la date du jour - 70 jours


Sujet :

POWER

  1. #1
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut Excel Power Query - Filtrer un colonne par la date du jour - 70 jours
    Bonjour,

    Bonnes vacances et tous mes vœux pour cette nouvelle année

    Comment créer un filtre dynamique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.SelectRows(#"Lignes filtrées - Technicien", each [Livraison] > #date(2023, 10, 1))
    Remplacer : each [Livraison] > #date(2023, 10, 1)) Par la date du jour moins 70 jours

    Je vous remercie
    Meilleures salutations
    Philippe

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour Philippe,
    Il faut d'abord calculer la date du jour -70 jours, ce que fait cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateAujourdHuiMoins70 = Date.AddDays(DateTime.Date(DateTime.LocalNow()), -70)
    Ensuite, il y a lieu d'appliquer un filtre sur la colonne qui contient la date (Exemple "Date") pour ne conserver que les dates qui sont supérieure ou égale à cette date calculée
    comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FiltrerDate = Table.SelectRows(#"Autres colonnes supprimées", each [Date] >= DateAujourdHuiMoins70)
    Ne pas oublier de terminer chaque ligne du code de la requête par une virgule sauf la ele Indernière avant le In
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonjour,
    Je n'ai pas accès se suite à mon pc
    J'écris où l'instruction pour calculer la nouvelle date ?

    Merci

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonsoir Philippe,
    J'écris où l'instruction pour calculer la nouvelle date ?
    C'est l'une des étapes de la requête donc juste au moment de devoir filtrer.
    Voici un petit exemple très simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let
        Source = Excel.Workbook(File.Contents("C:\Users\phili\TimeSheet.xlsx"), null, true),
        t_Training_Table = Source{[Item="t_Training",Kind="Table"]}[Data],
        #"Autres colonnes supprimées" = Table.SelectColumns(t_Training_Table,{"Date", "Client 1", "Lieu", "Client 2", "Formation"}),
        DateAujourdHuiMoins70 = Date.AddDays(DateTime.Date(DateTime.LocalNow()), -70),
        FiltrerDate = Table.SelectRows(#"Autres colonnes supprimées", each [Date] >= DateAujourdHuiMoins70)
    in
        FiltrerDate
    [EDIT]
    On peut aussi prévoir de calculer cette date en début de requête. Il fait considérer cela comme une variable

    Autre petit exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let
        Source = Excel.Workbook(File.Contents("C:\Users\phili\TimeSheet.xlsx"), null, true),
        DateAujourdHuiMoins70 = Date.AddDays(DateTime.Date(DateTime.LocalNow()), -70),
        t_Training_Table = Source{[Item="t_Training",Kind="Table"]}[Data],
        #"Autres colonnes supprimées" = Table.SelectColumns(t_Training_Table,{"Date", "Client 1", "Lieu", "Client 2", "Formation"}),
        FiltrerDate = Table.SelectRows(#"Autres colonnes supprimées", each [Date] >= DateAujourdHuiMoins70)
    in
        FiltrerDate
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Oula
    Pas tout compris
    Je vais aller skier et tester prochainement
    Merci pour les conseils

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'instruction ci-dessous, renvoie la date et l'heure du PC soit au moment où j'écris 2023-12-27T05:34:54.3209636
    Pour extraire cette Date + heure en date, on utilise DateTime.Date ou Date.From
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Date.From( DateTime.LocalNow() )
    Pour ajouter des jours à une date, on utilise Date.AddDays
    L'exemple ci-dessous renverra 31/12/2023
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Date.AddDays(Date.From(DateTime.LocalNow()),4)
    Et donc pour obtenir la date d'il y a 70 jours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Date.AddDays(Date.From(DateTime.LocalNow()),-70)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Magnifique ça fonctionne mille mercis

    Par contre, j'ai une table avec la date et l'heure dans la colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.SelectRows(#"Lignes triées", each [Rdv de] > #datetime(2023, 10, 2, 0, 0, 0))
    Si je modifie ainsi la table est vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.SelectRows(#"Lignes triées", each [Rdv de] > Date.AddDays(Date.From(DateTime.LocalNow()),-365,0,0,0))
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.SelectRows(#"Lignes triées", each [Rdv de] > Date.AddDays(DateTime.LocalNow(),-365,0,0,0))
    Pas facile ...

  8. #8
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    J'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.SelectRows(dbo_Pour_Data_RDV_LOOK, each [Rdv de] > Date.AddDays(DateTime.LocalNow(),-105))
    Encore merci à Philippe et meilleurs vœux à tous pour 2024

  9. #9
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    Filtrer avec la valeur de la cellule Cell_Cmde_Requete_PQ

    Dans la requête Power Query ci-dessous, je veux remplacer le numéro de la commande 1748040, par la valeur de la cellule "Cell_Cmde_Requete_PQ" située sur la feuille "Data_Etapes"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.SelectRows(#"dbo_N° chantier Selon commande", each ([Cmde] = 1748040))
    Avec ce code ça bloque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.SelectRows(#"dbo_N° chantier Selon commande", each ([Cmde]  = Excel.CurrentWorkbook(){[Sheet.Name="Data_Etapes"]}[Cells]{[Name="Cell_Cmde_Requete_PQ"]}))
    Avec ce code, il y a 0 ligne chargée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.SelectRows(#"dbo_N° chantier Selon commande", each ([Cmde] = Excel.CurrentWorkbook(){[Name="Cell_Cmde_Requete_PQ"]}))
    Merci pour votre aide

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.CurrentWorkbook(){[Name="Cell_Cmde_Requete_PQ"]}[Content]
    correspond à un tableau d'1 colonne et 1 ligne dans lequel se trouve la valeur de la cellule.

    La bonne syntaxe pour récupérer directement le contenu de la cellule (hors question du parefeu) est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.CurrentWorkbook(){[Name="Cell_Cmde_Requete_PQ"]}[Content]{0}[Column1]

  11. #11
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Super et merci,

    Les deux syntaxes sont bonnes ou .... ?

    Si je comprends bien le deuxième code, le 0 correspond à la première ligne et Column1 à la première colonne de la cellule renommée qui pourrait être un nom de plage ou .... ?

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 419
    Points
    1 419
    Par défaut
    Les deux syntaxes sont correctes mais c'est la deuxième qui correspond à ta demande.
    La première renvoie un tableau; la 2ème correspond à un drill-down sur ce tableau pour récupérer directement le contenu de la cellule.

    Effectivement, comme tu l'as compris, {0} permet d'aller sur le 1er enregistrement et [Column1] de sélectionner le champ nommé Column1 de cet enregistrement.
    => Pour les plages nommées Excel (pointant sur une cellule), Power Query nomme la seule et unique colonne [Column1].


    Tu peux constater facilement la différence en créant une requête vide et en y injectant l'une ou l'autre des syntaxes.

  13. #13
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Merci infiniment pour toutes ces explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/08/2020, 18h33
  2. [XL-2016] Power Query - Remplacer des null par une extrapolation linéaire
    Par junior76 dans le forum Excel
    Réponses: 0
    Dernier message: 15/03/2019, 15h49
  3. Salesforce Excel Power query Filtrer avant chargement
    Par JLV8159 dans le forum Salesforce.com
    Réponses: 0
    Dernier message: 05/09/2018, 12h38
  4. [XL-2007] filtrer une colonne par date en VBA
    Par pierreTarek dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/07/2012, 13h08
  5. Réponses: 3
    Dernier message: 01/03/2010, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo