Quelle méthode choisir ? (Power Bi, VBA)

Bonjour,

Tout d'abord, un exemple de la table de données avec laquelle je travaille :

image

Il s'agit de dates, d'une référence et d'une durée.

Je cherche à déterminer les temps d'arrêts de ces références, mais je ne sais pas comment procéder. Faut-il réaliser un traitement des données grâce à des macros VBA pour permettre ensuite d'avoir toutes les dates pour chaque référence ?

Exemple :

bdd

Ça me paraît très lourd, mais peut-être que c'est l'unique solution. J'ai plus de 10000 références et donc mon fichier d'heures fait + de 300000 lignes.

Ou bien à travers de Power Bi et des fonctions (que je ne maîtrise pas) et filtres, arriver au même résultat.

Je suis persuadé qu'il y a une manière à travers de Power BI de filtrer par Référence, puis ensuite à partir de la Date minimum calculer les temps d'arrêts jusqu'à la date maximum.

J'espère avoir été le plus clair possible et merci d'avance pour votre aide,

Hello,

Il faudrait un exemple de tes données complètes pour l'OP 31635, c'est des journées de combien d'heures ? 8 ?

Un jeu de données avec 2 références et le résultat attendu pour ces deux références seraient appréciables =D

@+

Bonjour,

Désolé pour la réponse tardive, le lundi était férié ici en Espagne. :)

J'ai mis un exemple de données et je vais essayer de m'expliquer ici.

Les journées sont bien de 8 heures.

Le jeu de données est un plus complet. C'est juste que je ne sais pas trop avec quelle méthode gérer ce problème. Peut-être que seulement des fonctions sont nécessaires.

Mon objectif est d'être capable de sortir le temps d'arrêt par OP. Après j'ai d'autres idées de fonctionnalité que j'aimerais mettre en place mais déjà commencer par le commencement.

Merci pour ta réponse rapide.

20example-data.xlsx (23.40 Ko)

Hello,

Voici un premier traitement automatisé.(Tu as juste à faire clic droit puis actualiser sur le tableau vert)

Dis moi comment tu veux exactement ta donnée car tu l'avais dans tous les formats sur ton fichier.

@+

21example-data.xlsx (20.97 Ko)

Bonjour à tous !

Une autre approche, qui intègre les week-ends (?) et retourne les données dans un TCD :

@Baroute78, j'ai bien accès à ta requête Power Querry. En effet, ça serait une manière de traiter les données. Cependant elle ne prend pas en compte les jours où il n'y a pas de données.
Cependant dans mon exemple, je prends en compte tous les jours ouvrés.

@JFL, Oui ça fonctionne bien. Je n'ai pas accès à la requête Power Querry cependant c'est dommage car c'est ce qui m'intéresse.

Merci pour votre aide, je vais voir de mon côté si ces méthodes fonctionnent avec une base de données beaucoup plus importante.

Bonjour à tous,

Je suis parti sur une 3e voie (de garage ? )
Dans Power BI ou Power Query, un regroupement par OP et 3 agrégations (Date Min, Date Max et Total Time)

image

Les "heures théoriques", c'est l'écart entre DerDate et PremDate * 8 h
Quant aux "heures travaillées", c'est "heures théoriques" - "HeuresArrêt"

image

@U. Milité

L'OP 33445 n'a que 62,25 heures travaillées, dans ton fichier c'est l'inverse.

Mais la méthode semble correcte :)

Bonjour à tous de nouveau !

@JFL, Oui ça fonctionne bien. Je n'ai pas accès à la requête Power Querry cependant c'est dommage car c'est ce qui m'intéresse.

Décidément.....Excel 2016 semble bien facétieux.....

Vous travaillez dans un environnement MAC ?

Non, je suis sur Windows.
Peut-être partager le contenu de la requête Power Query, type :

let

.....

image

Bonjour à tous de nouveau !

Code de la requête :

let
    Source = Excel.CurrentWorkbook(){[Name="t_BDD"]}[Content],
    TypeDate = Table.TransformColumnTypes(Source,{{"Date", type date}}),

    // Liste unique des OP
    List_OP = List.Distinct(TypeDate[OP]),    

    // Elaboration table complète : Dates et OP
    TblDates = Table.ExpandListColumn(
        Table.AddColumn(
            Table.FromList(
                            let
                                DateMin = List.Min(TypeDate[Date]),
                                DateMax = List.Max(TypeDate[Date]),
                                LD= List.Dates(DateMin, Duration.Days(DateMax-DateMin)+1, Duration.From(1))
                                in 
                                LD,
                            Splitter.SplitByNothing(),
                            {"Dates"},
                            null,
                            ExtraValues.Error
                           ),
            "OP",
            each List_OP
            ),
        "OP"
        ),

    // Sommation quotidienne des temps
    GroupBy = Table.Group(TypeDate, {"Date", "OP"}, {{"TimeIn", each List.Sum([Time]), type number}}),

    // Fusion avec la table complète
    Fusion = Table.NestedJoin(TblDates, {"Dates", "OP"}, GroupBy, {"Date", "OP"}, "Lignes groupées", JoinKind.LeftOuter),
    Expand = Table.ExpandTableColumn(Fusion, "Lignes groupées", {"TimeIn"}, {"TimeIn"}),

    // Calcul du temps OUT
    Ajt_TimeOut = Table.AddColumn(Expand, "TimeOut", each 8- ([TimeIn] ?? 0)),

    // Unpivot pour le rapport de TCD
    Unpivot = Table.UnpivotOtherColumns(Ajt_TimeOut, {"Dates", "OP"}, "TypeTime", "Time"),

    TypeDates = Table.TransformColumnTypes(Unpivot,{{"Dates", type date}})
in
    TypeDates

Super merci.

En changeant le nom du tableau et en enlevant les "??" de // Calcul du temps OUT, ça fonctionne à merveille.

Maintenant je vais essayer de comprendre comment faire ça tout seul.

Bonjour à tous de nouveau !

En changeant le nom du tableau et en enlevant les "??" de // Calcul du temps OUT, ça fonctionne à merveille.

L'opérateur de coalescence serait indisponible dans Excel 2016 ?

Il vous faudra retraiter le cas où la valeur TimeIn est null :

Ajt_TimeOut = Table.AddColumn(Expand, "TimeOut", each 8- (if [TimeIn] =null then 0 else [TimeIn]))

Justement, j'étais entrain de chercher comment résoudre les cas où TimeIn est nul.
Mais tu as répondu avant que je pose la question aha merci

Hello,

Du coup les modifications demandées avec exclusion des week end.

@+

14example-data.xlsx (22.42 Ko)

Merci pour votre aide.

Les deux fichiers me semblent fonctionner plus ou moins de la même manière.

Juste pour savoir comment faire pour regarder de mon côté et pas que vous me faisiez tout le travail vous-même.

J'ai une autre table me disant si la OP est arrêtée ou en cours. Comment est-ce que je pourrais prendre en compte cette information pour par exemple que ne soit pas calculé TimeOut après la date d'arrêt de l'OP ?

Il faut passer par Power Pivot et un modèle de données ou c'est solucionable avec Power Query ?

Bonjour à tous de nouveau !

Je crains de ne pas appréhender votre besoin......

Pouvez-vous l'expliciter en joignant un classeur test représentatif avec quelques données réalistes ?

J'inclus le même fichier qu'avant avec quelques modifications.

En rouge, la nuance. L'OP 33445 est terminé au 29/06/2022, à partir de cette date là on ne prend plus en compte les temps d'arrêts, surligné en rouge.

20example-data.xlsx (24.29 Ko)

Bonjour à tous de nouveau !

J'inclus le même fichier qu'avant avec quelques modifications.

En rouge, la nuance. L'OP 33445 est terminé au 29/06/2022, à partir de cette date là on ne prend plus en compte les temps d'arrêts, surligné en rouge.

Que voulez-vous exclure ? Uniquement les temps d'arrêts ou toutes les mesures pour un(e) OP après une date donnée ?

Autre question : Les arrêts des OP sont listés dans une table particulière ?

Je souhaite exclure les temps d'arrêts après la date donnée.

Dans mon exemple, oui. En réalité, non mais je pense le traiter de cette façon

Rechercher des sujets similaires à "quelle methode choisir power vba"