Toutes mes réponses sur les forums

15 sujets de 46 à 60 (sur un total de 121)
  • Auteur
    Messages
  • en réponse à : cumul journalier avec un critere #130710
    Daniel
    Participant

    Bonjour h.boisteau, le Forum,

    Voici une solution à la question posée, peut-être certaines étapes notamment l’avant dernière peut être supprimée (TriSurIndex_2)

    let
    Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
    ModificationTypeDonnees = Table.TransformColumnTypes(Source,{{“date”, type datetime}, {“machine”, type text}, {“données”, Int64.Type}}),
    AjoutIndexCol = Table.AddIndexColumn(ModificationTypeDonnees, “Index”, 1, 1, Int64.Type),
    TriSurIndex_1 = Table.Sort(AjoutIndexCol,{{“Index”, Order.Ascending}}),
    RunningTotalMachine = Table.AddColumn(
    TriSurIndex_1,
    “Machine Running Total”,
    (OutTable) =>
    List.Sum(
    Table.SelectRows(
    TriSurIndex_1,
    (InTable) => InTable[Index] <= OutTable[Index]
    and
    InTable[machine] = OutTable[machine])[données]
    )
    ),
    TriSurIndex_2 = Table.Sort(RunningTotalMachine,{{“Index”, Order.Ascending}}),
    SuppressionIndexCol = Table.RemoveColumns(TriSurIndex_2,{“Index”})
    in
    SuppressionIndexCol

    Cordialement
    Daniel

    en réponse à : Extraire une valeur Min avec une condition variable #130623
    Daniel
    Participant

    Bonjour y.monte, le Forum,

    En partant de ta table contenant tes données, faire une requête permettant de charger les données en Power Query et faire toutes les modifications à faire. Une fois que cela est fait, dupliquer cette requête et regrouper par CDNO avec comme opération Min sur la colonne BLNO, cela donnera pour chaque CDNO le plus petit numéro de BLNO.
    Exemple : tabDataGroupCDNO
    let
    Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
    #”Type modifié” = Table.TransformColumnTypes(Source,{{“CDNO”, Int64.Type}, {“BLNO”, Int64.Type}, {“1ER BL”, Int64.Type}}),
    #”Colonnes supprimées” = Table.RemoveColumns(#”Type modifié”,{“1ER BL”}),
    #”Lignes groupées” = Table.Group(#”Colonnes supprimées”, {“CDNO”}, {{“BLs”, each List.Min([BLNO]), type nullable number}})
    in
    #”Lignes groupées”
    Fin de l’exemple

    En reprenant la 1ère requête (celle ayant servi de support à la duplication), on va fusionner les deux requêtes en sélectionnant le CDNO. Ensuite il suffit de développer la table ainsi créée en ne gardant que la colonne BLs de la requête tabDataGroupCDNO
    Exemple :
    let
    Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
    #”Type modifié” = Table.TransformColumnTypes(Source,{{“CDNO”, Int64.Type}, {“BLNO”, Int64.Type}, {“1ER BL”, Int64.Type}}),
    #”Colonnes supprimées” = Table.RemoveColumns(#”Type modifié”,{“1ER BL”}),
    #”Requêtes fusionnées” = Table.NestedJoin(#”Colonnes supprimées”, {“CDNO”}, tabDataGroupCDNO, {“CDNO”}, “tabDataGroupCDNO”, JoinKind.LeftOuter),
    #”tabDataGroupCDNO développé” = Table.ExpandTableColumn(#”Requêtes fusionnées”, “tabDataGroupCDNO”, {“BLs”}, {“BLs”})
    in
    #”tabDataGroupCDNO développé”
    Fin de l’exemple

    En espérant que cela t’aidera à résoudre le problème rencontré, d’autres solutions sont certainement possibles.
    Cordialement
    Daniel

    en réponse à : Recherche MIN et MAX suivant deux criteres #129927
    Daniel
    Participant

    Bonjour hboisteau, le Forum,

    Ci-après, ma contribution concernant ta demande

    let
    Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
    ModificationTypeDonnees = Table.TransformColumnTypes(Source,{{“Date”, type datetime}, {“Point de ventes”, type text}, {“Ventes”, Int64.Type}}),
    AnneeMois = Table.AddColumn(ModificationTypeDonnees, “AnnéeMois”, each let
    _Annee = Date.Year([Date]),
    _Mois = Date.Month([Date]),
    _AnneeMois = Text.From(_Annee) & ” – ” & Text.From(_Mois)
    in _AnneeMois),
    GroupAnneeMoisPtVente = Table.Group(AnneeMois, {“AnnéeMois”, “Point de ventes”}, {{“Min”, each List.Min([Ventes]), type nullable number}, {“Max”, each List.Max([Ventes]), type nullable number}})
    in
    GroupAnneeMoisPtVente

    Cordialement
    Daniel

    en réponse à : créer un msgbox qui se ferme automatiquement #127972
    Daniel
    Participant

    Bonjour MLagrange, Kim, le Forum,

    Peut-être allez-vous pouvoir vous inspirer de cette méthode trouvée sur le Net ?
    https://excel-malin.com/codes-sources-vba/msgbox-qui-se-ferme-automatiquement/
    Sinon, on peut aussi utiliser un UserForm que l’on contrôlera complétement et le fermer dès que le traitement sera terminé.
    En espérant que cela vous aidera.
    Cordialement
    Daniel

    Daniel
    Participant

    Bonjour Jérôme, le Forum,

    Merci pour ton retour.
    On peut aussi utiliser Try …. otherwise pour régler le problème des lignes nulles comme suit

    let
    Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],

    // Utilisation de la fonction Power Query TransformColumns qui permet d’exécuter une ou plusieurs fonctions sur cette colonne sans passer par la création de colonnes temporaires
    // le tiret que tu peux voir correspond à l’item de la table en cours (en l’occurence Source est la table et Ville est la colonne de la table)
    AjoutColonneVillesTmp = Table.TransformColumns(Source,
    {
    {“Villes”,each try fnEnleverAbreviations(fnEnleverAccents(_)) otherwise _}
    }
    ),
    #”Type modifié” = Table.TransformColumnTypes(AjoutColonneVillesTmp,{{“Villes”, type text}})
    in
    #”Type modifié”
    Cordialement
    Daniel

    en réponse à : Regroupement de lignes #126551
    Daniel
    Participant

    Bonjour Christophe, le Forum,

    Autre solution, là encore la fin n’est pas parfaite mais cela répond au besoin exprimé.
    Requête tabDepart (2)
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabDepart”]}[Content],
    ModificationDataTypes = Table.TransformColumnTypes(Source,{{“CodeClient”, Int64.Type}, {“NomContact”, type text}, {“TelephoneContact”, type text}, {“EmailContact”, type text}, {“FonctionContact”, type text}}),
    GrouperSurCodeClient = Table.Group(ModificationDataTypes, {“CodeClient”}, {{“AllRows”, each _, type table [CodeClient=nullable number, NomContact=nullable text, TelephoneContact=nullable text, EmailContact=nullable text, FonctionContact=nullable text]}}),
    TransformColonneAllRows = Table.TransformColumns(GrouperSurCodeClient, {“AllRows”, each
    let
    GrouperNomContacts = Table.AddColumn(GrouperSurCodeClient , “NomContact”, each Text.Combine([AllRows][NomContact],”|”)),
    GrouperTelephoneContacts = Table.AddColumn(GrouperNomContacts , “TelephoneContact”, each Text.Combine([AllRows][TelephoneContact],”|”)),
    GrouperEmailContacts = Table.AddColumn(GrouperTelephoneContacts , “EmailContact”, each Text.Combine([AllRows][EmailContact],”|”)),
    GrouperFonctionContacts = Table.AddColumn(GrouperEmailContacts , “FonctionContact”, each Text.Combine([AllRows][FonctionContact],”|”)),
    NombreOccurenceNom = Table.AddColumn(GrouperFonctionContacts , “NbOccNomContact”, each Text.Length(Text.Select([NomContact] , “|”)) + 1),
    NombreOccurenceTel = Table.AddColumn(NombreOccurenceNom , “NbOccTelContact”, each Text.Length(Text.Select([TelephoneContact] , “|”)) + 1),
    NombreOccurenceEmail = Table.AddColumn(NombreOccurenceTel , “NbOccEmailContact”, each Text.Length(Text.Select([EmailContact] , “|”)) + 1),
    NombreOccurenceFct = Table.AddColumn(NombreOccurenceEmail , “NbOccFctContact”, each Text.Length(Text.Select([FonctionContact] , “|”)) + 1)
    in NombreOccurenceFct
    }),
    DevelopperTableData = Table.ExpandTableColumn(TransformColonneAllRows, “AllRows”, {“CodeClient”, “NomContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”, “NbOccNomContact”, “NbOccTelContact”, “NbOccEmailContact”, “NbOccFctContact”}, {“CodeClient.1”, “NomContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”, “NbOccNomContact”, “NbOccTelContact”, “NbOccEmailContact”, “NbOccFctContact”}),
    FractionnerColonneNomContact = Table.SplitColumn(DevelopperTableData, “NomContact”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), List.Max(DevelopperTableData[NbOccNomContact])),
    FractionnerColonneTelContact = Table.SplitColumn(FractionnerColonneNomContact, “TelephoneContact”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), List.Max(DevelopperTableData[NbOccTelContact])),
    FractionnerColonneEmailContact = Table.SplitColumn(FractionnerColonneTelContact, “EmailContact”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), List.Max(DevelopperTableData[NbOccEmailContact])),
    FractionnerColonneFctContact = Table.SplitColumn(FractionnerColonneEmailContact, “FonctionContact”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), List.Max(DevelopperTableData[NbOccFctContact])),
    AjoutColonneControle = Table.AddColumn(FractionnerColonneFctContact, “Contrôle”, each if [CodeClient] <> [CodeClient.1] then 0 else 1),
    FiltreLigneControleEgalesZero = Table.SelectRows(AjoutColonneControle, each ([Contrôle] = 1)),
    SuppressionColonnes = Table.RemoveColumns(FiltreLigneControleEgalesZero,{“NbOccNomContact”, “NbOccTelContact”, “NbOccEmailContact”, “NbOccFctContact”,”Contrôle”}),
    PermutationdesColonnes = Table.ReorderColumns(SuppressionColonnes,{“CodeClient”, “NomContact.1”, “TelephoneContact.1”, “EmailContact.1”, “FonctionContact.1”, “NomContact.2”, “EmailContact.2”, “FonctionContact.2”, “NomContact.3”, “EmailContact.3”, “FonctionContact.3”})
    in
    PermutationdesColonnes
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Regroupement de lignes #126548
    Daniel
    Participant

    Bonjour Christophe, Eric, le Forum,

    Une autre piste de solution, je joins un fichier pour visualiser le résultat.
    Requête :
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabDepart”]}[Content],
    ColonnesList = List.Skip(Table.ColumnNames( Source),1),
    ModificationDataTypes = Table.TransformColumnTypes(Source,{{“CodeClient”, type text}, {“NomContact”, type text}, {“TelephoneContact”, type text}, {“EmailContact”, type text}, {“FonctionContact”, type text}}),
    FusionColonnesContacts = Table.CombineColumns(ModificationDataTypes,{“NomContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”},Combiner.CombineTextByDelimiter(“|”, QuoteStyle.None),”InfosClient”),
    GrouperSurCodeClient = Table.Group(FusionColonnesContacts, {“CodeClient”}, {{“AllRows”, each _, type table [Code client=nullable number, NomContact=nullable text, TelephoneContact=nullable text, EmailContact=nullable text, FonctionContact=nullable text]}}),
    TransposeColonnesContact = Table.AddColumn(GrouperSurCodeClient,”TransposeColonnes”, each Table.Transpose(Table.SelectColumns([AllRows],{“InfosClient”}))),
    DevelopperColonnesContacts = Table.ExpandTableColumn(TransposeColonnesContact, “TransposeColonnes”, {“Column1”, “Column2”, “Column3”}, {“Contact 1”, “Contact 2”, “Contact 3”}),
    FractionneColonneContact1 = Table.SplitColumn(DevelopperColonnesContacts, “Contact 1”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), {“NomContact 1”, “TelephoneContact 1”, “EmailContact 1”, “FonctionContact 1”}),
    FractionneColonneContact2 = Table.SplitColumn(FractionneColonneContact1, “Contact 2”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), {“NomContact 2”, “TelephoneContact 2”, “EmailContact 2”, “FonctionContact 2”}),
    FractionneColonneContact3 = Table.SplitColumn(FractionneColonneContact2, “Contact 3”, Splitter.SplitTextByDelimiter(“|”, QuoteStyle.Csv), {“NomContact 3”, “TelephoneContact 3”, “EmailContact 3”, “FonctionContact 3”}),
    ModificationDataTypes_1 = Table.TransformColumnTypes(FractionneColonneContact3,{{“NomContact 1”, type text}, {“TelephoneContact 1”, type text}, {“EmailContact 1”, type text}, {“FonctionContact 1”, type text},{“NomContact 2”, type text}, {“TelephoneContact 2”, type text}, {“EmailContact 2”, type text}, {“FonctionContact 2”, type text},{“NomContact 3”, type text}, {“TelephoneContact 3”, type text}, {“EmailContact 3”, type text}, {“FonctionContact 3”, type text}}),
    SuppressionColonneAllRows = Table.RemoveColumns(ModificationDataTypes_1,{“AllRows”})
    in
    SuppressionColonneAllRows

    Ce n’est pas parfait sur la fin car le fractionnement des trois colonnes implique qu’il n’y en ait pas plus de trois autrement il faudra adapter la requête afin d’ajouter un ou plusieurs fractionnements.
    Peut-être cela te donnera-t-il des pistes de réflexions tout au moins je l’espère.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Prorata de dates selon segment #126464
    Daniel
    Participant

    Bonjour alexleseche2, le Forum,

    1 – Création d’une table de dates (utilisation des fonctions TimeIntelligence)
    2 – Duplication de cette table de dates, la nouvelle table que j’ai nommée dimDateS pour table Dates Segment.
    Ce qui nous donne dimDates et dimDatesS comme table de dates.
    3 – Liaison à faire entre la tables des quittances (date début) et dimDates (date)
    4 – Création de la mesure suivante :
    Montant quittance (periode) =
    VAR DateFinSegment = MAX( DimDatesF[Date] )
    VAR DateDebutSegment = min(DimDatesF[Date])
    VAR DateDebutQuittance = MIN( tabQuittances[Date début])
    VAR DateFinQuittance = MIN( tabQuittances[Date fin])
    VAR nbJours = DATEDIFF(IF(DateDebutQuittance > DateDebutSegment, DateDebutQuittance, DateDebutSegment), IF(DateFinQuittance < DateFinSegment, DateFinQuittance, DateFinSegment), DAY)+1
    VAR nbJoursQuittance = DATEDIFF(MIN(tabQuittances[Date début]), MAX(tabQuittances[Date fin]), DAY)+1
    VAR MttQuittanceParJour = [Mtt_Quittance]/nbJoursQuittance
    RETURN
    SUMX(VALUES(tabQuittances[Quittance]), mttQuittanceParJour*nbJours)

    Dans le fichier joint, tu trouveras deux colonnes de calcul
    “MttPeriodeSegment” utilisant plusieurs mesures pour le calcul, je ne les détaille pas ici (voir fichier pbix) et “Montant quittance (periode)” regroupant toutes ces mesures dans des variables. Les deux donnant le résultat attendu.
    D’autres membres auront certainement d’autres solutions à te proposer.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Rapport Journalier #126319
    Daniel
    Participant

    Bonjour hboisteau, le Forum,

    Je faisais juste référence à ton post du 25/02/23 ou si je ne m’abuse une question similaire était posée et à laquelle j’avais apporté des éléments de réponse. Si je me trompe, alors mes excuses, mais il est difficile de répondre à partir d’une vue finale sans connaître le modèle de données. La fonction DAX ‘SamePerdiodLastYear([calendrier[Date]’ devrait être utilisée pour le calcul correspondant aux valeurs de l’année passée.
    Cordialement
    Daniel

    en réponse à : Rapport Journalier #126295
    Daniel
    Participant

    Bonjour hboisseau, le Forum,
    Le fichier joint est-il le résultat final à obtenir ou est-ce que ce sont les données à importer ?
    Une table de dates doit être incorporée pour utiliser les fonctions Time intelligence. Pour les mesures voir le post du 25/02/23 cela devrait te donner des pistes.
    Cordialement
    Daniel

    en réponse à : comparaisons resultats #126044
    Daniel
    Participant

    Bonjour hboisteau, le Forum,

    L’utilisation des fonction de Time Intelligence nécessite la création d’une table de dates, reprenant toutes les dates d’une année ou plus si nécessaire. L’ajout de colonnes dans cette table peuvent là aussi être conseillées comme le nom du mois, le numéro du mois, l’année ou le trimestre et d’autres encore selon le besoin.
    J’ai modifié légèrement ton tableau (voir pièce jointe). Chargement dans Power BI et création de mesures.
    TotalJournalier = SUM(tabDataResultatJournalier[Résultat journalier])
    SameDateLastMonth = IF(ISBLANK([TotalJournalier]),BLANK(),CALCULATE([TotalJournalier], DATEADD(dimDates[Date], -1, MONTH)))
    Différence_Jour = if(ISBLANK([SameDateLastMonth]),BLANK(),[TotalJournalier] – [SameDateLastMonth])

    CumulMensuel = if(ISBLANK([TotalJournalier]),BLANK(),CALCULATE([TotalJournalier],DATESMTD(dimDates[Date])))
    SamePeriodLastMonth = IF(ISBLANK([CumulMensuel]),BLANK(),CALCULATE([CumulMensuel], DATEADD(dimDates[Date], -1, MONTH)))
    Différence_Mois = if(ISBLANK([SamePeriodLastMonth]),BLANK(),[CumulMensuel] – [SamePeriodLastMonth])

    CumulAnnuel = if(ISBLANK([TotalJournalier]),BLANK(),CALCULATE([TotalJournalier],DATESYTD(dimDates[Date])))
    SamePeriodLastYear = IF(ISBLANK([CumulAnnuel]),BLANK(),CALCULATE([CumulAnnuel], DATEADD(dimDates[Date], -1, MONTH)))
    Différence_Annee = if(ISBLANK([SamePeriodLastYear]),BLANK(),[CumulAnnuel] – [SamePeriodLastYear])

    En les plaçant dans un visuel de type Matrice, cela donne le résultat escompté (voir image en pièce jointe).
    En espérant que cela t’aidera.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calcul de jour complexe #125961
    Daniel
    Participant

    Bonjour Yohan, le Forum,

    J’aurais tendance à créer une colonne calculée dans le modèle de données qui calculerait le nombre de jours en fonction de tes trois cas

    Exemple
    Nb_Jours =
    VAR __JourSemDebut = WEEKDAY(Dates[Date début])
    VAR __JourSemFin = WEEKDAY(Dates[Date fin])
    VAR __JoursTravailles = NETWORKDAYS(Dates[Date début], Dates[Date fin],true)
    RETURN
    if(__JourSemDebut=5 && __JourSemFin = 1,__JoursTravailles+1,__JoursTravailles)

    if(__JourSemDebut=5 && __JourSemFin = 1 représente le cas ou la date de début tombe un Jeudi et la date de fin un dimanche, auquel cas on ajoute un jour représentant le Samedi au nombre de jours considérés comme travaillés. Les deux autres cas, un simple calcul des jours travaillés entre deux dates devrait suffire.
    D’autres solutions seront probablement proposées par d’autres membres, n’ayant pas trouvé plus simple, je te propose cette solution.
    Cordialement
    Daniel

    en réponse à : Erreur formule Contains #125953
    Daniel
    Participant

    Bonjour r_naish24, le Forum,
    Est-ce que tu ajoute bien une colonne (onglet Modélisation, nouvelle colonne) et non pas une mesure (qui normalement dans ce cas doit te retourner cette erreur).
    En ajoutant une colonne et en reprenant la formule indiqué dans ton post, chez moi cela fonctionne bien.
    Cordialement
    Daniel

    en réponse à : difference de deux releve entres deux heures #125948
    Daniel
    Participant

    Bonjour hboisteau, le Forum,

    Pour répondre à la demande, par rapport aux données fournies, voici deux propositions :

    1ère solution (voir l’exemple 2), assez simple dépivoter les colonnes contenant les valeurs ce qui nous donne une colonne Attribut contenant les noms (Valeur 1, Valeur 2, Valeur 3) et une colonne Valeur contenant les différents nombres. Ensuite, pour les étapes suivantes on peut repartir de l’exemple que j’ai donné dans un précédent post.

    2ème solution : (voir l’exemple 3), je me suis inspiré d’une réponse fournie par Stéphane Lorin (merci à lui).
    En fait, avec un requête contenant les données d’origine, une 2ème calculant les écarts et une 3ème regroupant les deux précédentes, on obtient bien le résultat. Peut-être que d’autres solutions plus optimales seront proposées.
    La présentation des données dans les différents exemples, dépend surtout de l’utilisation des données dans un tableau de bord, je pense qu’une présentation sous la forme du 2ème exemple se prête mieux à des synthèses (matrices dans Power BI par exemple ou tableaux croisés dynamiques dans Excel).
    Voir fichier ci-joint (hboisteau_1-1.xlsx). autre fichier joint par erreur
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    Daniel
    Participant

    Bonjour konanothnielr, le Forum,

    Ok, je comprends alors peut-être que la fonction suivante OFFSET devrait, je pense répondre à cette problématique. Regarde le lien ci-dessous sur le site de Microsoft.

    https://learn.microsoft.com/en-us/dax/offset-function-dax

    Exemple d’utilisation
    Previous sumo of Price = CALCULATE(
    SUM(Sheet1[Price]),
    OFFSET(
    -1,
    ALLSELECTED(Sheet1[Color])))

    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
15 sujets de 46 à 60 (sur un total de 121)