Toutes mes réponses sur les forums
-
AuteurMessages
-
Stéphane Lorin
ParticipantBonjour
Voici une possibilité sous Excel avec PowerQuery
Vous chargez votre tableau dans une liste, vous ajoutez une colonne conditionnelle pour récupérer la valeur U0015, U0054… que vous remplissez “vers le bas”.
Vous supprimez la première colonne inutile et vous utilisez la fonctionnalité “colonnes dynamiques” avec l’option avancée “ne pas agréger”
Et vous obtenez le résultat attendu
Les opérations seront les mêmes sous PowerBI,Cordialement
StéphaneAttachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
Voici un exemple de solution “dynamique” sans la dernière version d’Excel avec une combinaison de fonctions ESTNUM + TROUVE pour savoir si le client est présent dans le regroupement, la fonction N pour convertir les VRAI/FAUX obtenus en 1/0 et un SOMMEPROD pour multiplier les montants par ces 1/0.
Un RECHERCHEV impose que chaque client n’ait qu’un seul montant ce qui n’est pas le cas dans une table d vente (avec une date)Cordialement
StéphaneAttachments:
You must be logged in to view attached files.9 janvier 2020 à 3 h 21 min en réponse à : Remplir vers le haut après l'ajout d'une colonne personnalisée #60334Stéphane Lorin
ParticipantBonjour
Avez-vous essayer de remplacer votre « » par null dans votre formule ?
Table.AddColumn(# »Sorted Rows », « TRANSFORMER LES NULLS A VIDE », each if [No FACT] = « NULL » and [Code source facture] = « TAB » then null else [No FACT])Puis de remplir vers le haut
Stéphane
Stéphane Lorin
ParticipantBonjour
En complément à l’article de Sophie, voici une solution simple avec une table de transfert paramétrable : vous indiquez le département de départ, les départements d’arrivée et les coefficients de chacun et vous n’avez plus qu’à actualiser la table de synthèse.Voici les étapes :
– fusion entre la table de départ et la table de transfert sur le champ “département”
– développement des “départements d’arrivée” et des “coefficients”
– ajout de 2 colonnes conditionnelles :
– si “Département d’arrivée” est null alors “Département initial” sinon “Département d’arrivée”
– si “coefficient” est null alors 1 sinon “coefficient”
– multiplication des ventes par ce coefficient retraité
– regroupement par “produit” et “département final” : somme des ventes multipliées par le coef.Stéphane
Attachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
Il faut par exemple ajouter une colonne conditionnelle du type : si [votre 1ere colonne] commence par “Compte” alors [votre 1ere colonne] sinon null
Puis extraire le contenu après le symbole “: ” pour récupérer le n° du compte
Et enfin copier vers le bas (“Fil”)
Procéder de même avec la [column2]Ensuite :
– Supprimer la 1ere ligne
– Utiliser la 1ere ligne comme en-tête (donc la seconde actuellement)
– supprimer les lignes “Total”, les autres lignes “Numéro d’article”, celles qui commencent par “Compte”
– définir la colonne [Quantité] comme un entier, celle des [Achats] dans un “Currency”
et votre base devrait être propre
C’est un nettoyage assez classique de fichier sourceCordialement
Stéphane
28 novembre 2019 à 10 h 20 min en réponse à : Éléments calculés dans un TCD et référence au données du TCD #59481Stéphane Lorin
ParticipantBonjour
Je vous propose une solution dans le fichier ci-joint
Il faudra nécessairement adapter les calculs à votre cas– des produits (P01 à P28)
– des stocks fin de mois (de 1 à 10)
– des ventes (de 1 à 12)pas de formules Power Query trop complexes : des fusions, des colonnes conditionnels, des – !
– une plage développée {[Période en cours]+1..30} pour obtenir la liste de toutes les plages qui suivent celle en cours – à gérer un peu autrement avec des mois et non des périodes de 1 à 12
– une fusion avec les ventes puis un remplissage vers le bas, une fusion de la table avec elle-même et un regroupement pour obtenir le cumul des ventes (voir post de Sophie en septembre)
– le calcul de l’écart entre le stock et ce cumul
– puis le calcul du recouvrement : 1 par période tant que l’écart est négatif, au prorata dès qu’il devient positif, O ensuite (lignes filtrées avant)
– une dernière fusion de toutes les tables pour créer une table de synthèse qui sera la source du TCD final.
C’est améliorable mais je n’ai pas trop de temps.Sinon, votre fichier semble contenir des données réelles, à éviter sur un forum. Pour ma part, je ne travaille pas dans votre secteur d’activité, mais attention, toutes les données ont de la valeurs !
Enfin, c’était une problématique très intéressante à traiter, merci 🙂Cordialement
StéphaneAttachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
En complément à la solution de Sophie, je vous suggère de retirer 5h à votre date et d’en récupérer la partie entière pour le jour et de diviser par huit l’heure puis d’ajouter 1 pour le poste.
Cela donne sous Excel :
– date du poste =ENT([@DateHeureEnr]-5/24)
– n° du poste =ENT(HEURE([@DateHeureEnr]-5/24)/8)+1Voici les étapes avec Power Query
– ajouter une colonne : [DateEnr]-#duration(0,5,0,0) pour retirer 5 heures
– scinder cette colonne pour récupérer d’un coté la date et de l’autre l’heure de 00:00 à 23:59
– récupérer l’heure entière (soit entre 0 et 23) – menu transformer/heure
– la diviser par 8 (soit 0, 1 ou 2) – menu transformer/standard/diviser par entier
– ajouter 1 menu transformer/standard/ajouterCordialement
StéphaneAttachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
Voici une solution par formule matricielle Excel =EQUIV([@Client]&[@Produit];[Client]&[Produit];0)=(LIGNE([@Client])-LIGNE(Tableau1[[#En-têtes];[Client]]))
et une autre par Power Query :
– ajout d’un index de ligne,
– regroupement par [Client] et [Produit] pour récupérer le min de l’index
– fusion des tables pour comparer l’index de la ligne en cours avec l’index min : si égal alors première apparition.Cordialement
Stéphane
Attachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
Une deuxième possibilité en regroupant les #Job avec le Max ID par #Job puisque vous dites que le dernier intervenant est le max des ID. Puis en fusionnant avec la source initiale pour récupérer le nom associé à cet ID.
StéphaneAttachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
Difficile de vous aider sans votre fichier
La liste sans doublon peux-être obtenue facilement avec un tableau croisé en ajoutant un segment pour choisir la date.
Powerquery pourrait être également très utile.
SOMME.SI.ENS remplace souvent avantageusement SOMMEPROD depuis plusieurs versions d’Excel
les fonctions tableaux sont utiles pour éviter les plages du type $C$7:$C$9948Sinon dans votre première formule pour identifier les valeur sans doublon, il est étonnant que votre INDEX commence en ligne 1 mais que les autres fonctions commencent en ligne 7
Cordialement
Stéphane15 novembre 2019 à 5 h 23 min en réponse à : Créer un 'index' par rapport à la première lettre de la colonne voisinecolonne #59126Stéphane Lorin
ParticipantBonjour
En complément, si votre objectif est de filtrer rapidement une liste suivant la première lettre, il est intéressant d’ajouter une colonne avec GAUCHE([votrecolonne]) et de la masquer. Puis de créer un segment sur cette nouvelle colonne.
Il est alors facile d’obtenir tous les libellés qui commencent par une lettre et, avantage supplémentaire, votre liste n’a plus besoin d’être triée de A à Z
StéphaneAttachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
Je ne maîtrise pas suffisamment le DAX pour vous répondre précisément avec ce langage mais voici une possibilité assez simple avec Power Query :
– création d’une table de table (min et max paramétrable)
– fusion de cette table avec la table budget et calcul du budget mensuel cumulé à date (jour/nb jour du mois)
– seconde fusion avec la table réel et calcul du réel mensuel cumulé à date (avec ma méthode expliquée par Sophie le 16/09)
Si cela peut vous aider …Cordialement
StéphaneAttachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
voici une possibilité de réponse avec une fonction SOMME.SI.ENS :* critères pour cumul objectif du mois : > fin du mois précédent et <= fin du mois en cours
* critères pour cumul objectif du 1er à la date : > fin de mois précédente et <= date
Cordialement
Stéphane
Attachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantRe-bonjour
En complément, voici une solution si votre colonne de code n’est pas triée :Table intermédiaire avec la liste de n° de lignes de chaque code
– ajouter un Index à la table initiale
– regrouper les lignes par code en choisissant toutes les lignes et en modifiant la formule : “each _, type table” par “each _[Index], type list” pour récupérer la liste des lignes de chaque code et non une table avec toutes les lignes de chacunReprendre votre table initiale
– ajouter le même Index
– fusionner avec la table intermédiaire par code et récupérer la liste des lignes de chacun
– ajouter une colonne avec la fonction “List.PositionOf” qui permet de récupérer la position de la ligne actuelle dans l’ensemble des lignes du code et ajouter 1 pour ne pas commencer de 0 la 1ère occurrence.Je contrôle que j’obtiens le même résultat qu’avec une formule NB.SI partant du l’en-tête jusqu’à la ligne actuelle : =NB.SI(Liste_Code[[#En-têtes];[Code]]:[@Code];[@Code])
il aurait été plus simple de sauvegarder l’ordre initial des lignes avec un Index, de trier les codes, d’exécuter ma première méthode, et de remettre l’ordre initial, mais bon… c’était pour le plaisir de trouver une autre solution un peu plus complexe !
Voir un exemple ci-joint
Stéphane
Attachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantPrécision : il faut que les “CODE PROD” soient triés pour que les mêmes n° soient les uns avec les autres et non mélangés
Stéphane -
AuteurMessages