Forum Replies Created
-
AuthorPosts
-
7 November 2023 at 15 h 14 min in reply to: Trouver la prochaine cellule vide avec une formule #134301
Stéphane Lorin
ParticipantBonjour
une proposition en 2 étapes par formules
en B2 =SI(A2=””;B1;SI(A1=””;A2;MAX(A2;B1)))
en C2 =SI(A2=””;B2;A2)
puis tirer vers le basStéphane
Stéphane Lorin
ParticipantQuelques explications ici
https://learn.microsoft.com/fr-fr/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-resultStéphane
Stéphane Lorin
ParticipantAutre possibilité avec CALCULATE
VAR _ID = [ID]
RETURN CALCULATE(SUM(Tableau1[Valeur]);Tableau1[ID]=_ID)Stéphane
Stéphane Lorin
ParticipantBonjour
Dans Power Pivot pour Excel :
VAR _ID=[ID]
RETURN SUMX(FILTER(Tableau1;[ID]=_ID);[Valeur])Stéphane
24 July 2023 at 2 h 57 min in reply to: Connaître la dernière date disponible pour un élément donné #130359Stéphane Lorin
ParticipantBonjour
Article intéressant de Rick de Groot sur le sujet également : https://gorilla.bi/power-query/removing-duplicates/
L’utilisation de Table.Buffer permet de “maitriser” les enregistrements conservés.Sinon avec Table.Group, le plus simple est d’utiliser Table.Max au lieu de la combinaison Table.Sort, Table.Last
= Table.Group(Source, {“ID”}, {{“Data”, each Table.Max(_,”date”), type record }})
puis de récupérer les champs date et valeurStéphane
Stéphane Lorin
ParticipantBonjour
Problème classique de virgule flottante
ajoutez un arrondi : Number.Round([Champ A] + [Champ B],2)
ou avec Value.Add : Value.Add([Champ A],[Champ B], Precision.Decimal)Stéphane
Stéphane Lorin
ParticipantBonjour
Il est difficile de vous aider avec uniquement vos formules lorsqu’on n’a pas la structure du fichier.
Le mieux serait de fournir un fichier Excel “modèle” avec vos colonnes et quelques lignes anonymisées + votre requête actuelle.
MerciStéphane
Stéphane Lorin
ParticipantBonjour
vous transformez votre colonne de dates en choisissant “Date”, “Mois”, “Début de mois”
puis vous modifiez le code obtenu pour avoir AA-MM avec Date.ToText(une date, “yy-MM”)
ensuite c’est un regroupement classique avec Max et MinCela donne quelque chose comme
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Type modifié” = Table.TransformColumnTypes(Source,{{“Date”, type date}}),
#”Début de mois calculé” = Table.TransformColumns(#”Type modifié”,{{“Date”, each Date.ToText(Date.StartOfMonth(_), “yy-MM”), type date}}),
#”Lignes groupées” = Table.Group(#”Début de mois calculé”, {“Date”, “Point de ventes”}, {{“Min”, each List.Min([Ventes]), type number}, {“Max”, each List.Max([Ventes]), type number}})
in
#”Lignes groupées”Stéphane
Stéphane Lorin
ParticipantUne autre approche en transformant les lignes via des listes
testé sur 10000 lignes et 10 colonnes de A à K et 10 colonnes de A.1 à K.1
quelques secondes chez moiCode à copier dans une nouvelle requête
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText(“VVNbEsQgCLtLv/sh4Ktn6ez9r7ESCWNndqkCQhL0fS+r133VZ5n1s+kb/+t2IGDiKwnP3F/4zKOer5PGigfa9btfpA8PNA8MRg1b40p85X20Mk1LuA5sSoyK2pZwn8CMjR+UmQbt4pzniPPS8EhfpjMXjRcjL96PfgDvcfSpydiyNwoPHrGeetRg0PMbqmxcyBksE/pGrqDHKbwFDsglwbeVDQCKgLGw/PxgFvaS9CNLlVWwRTNpSajsnisBHfqXc0RRA7AwVNSwfqDWHA2kkA+TtmOhDC6I5jw2p7iM4Iab+RAgzCGSxGiVTLfkENKeA5IlZQzSosUeR6EZPNZD0LxHMWTeck2qdgBCfbLlk2qBfz8eFvSjHP16PL8/”, BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [A = _t, A.1 = _t, B = _t, B.1 = _t, C = _t, C.1 = _t, D = _t, D.1 = _t, E = _t, E.1 = _t, F = _t, F.1 = _t, G = _t, G.1 = _t, I = _t, I.1 = _t, J = _t, J.1 = _t, K = _t, K.1 = _t]),
Liste_Colonne = List.Select(Table.ColumnNames(Source), each not Text.Contains(_,”.”)),
Liste_Colonne.1 = List.Select(Table.ColumnNames(Source), each Text.Contains(_,”.”)),
Null = Table.ReplaceValue(Source,””,null,Replacer.ReplaceValue,Liste_Colonne&Liste_Colonne.1),
Repeat1000 = Table.Repeat(Null,1000),
Table.Colonnes = Table.ToRows(Table.SelectColumns(Repeat1000,Liste_Colonne)),
Table.Colonnes.1 = Table.ToRows(Table.SelectColumns(Repeat1000,Liste_Colonne.1)),
Transform = List.Transform(List.Zip({Table.Colonnes,Table.Colonnes.1}), (x) => List.Transform(List.Positions(x{0}), each x{0}{_}??x{1}{_} )),
Résultat = Table.FromRows(Transform, Liste_Colonne)
in
RésultatStéphane
Stéphane Lorin
ParticipantLa formule via le List.Accumulate est intéressante
le temps de réponse est-il correct avec 10000 lignes ?
StéphaneStéphane Lorin
ParticipantBonjour
J’ai déjà essayé d’utiliser Table.ReplaceValue pour faire ce genre de manipulation mais ça ne fonctionne pas. Il faut autant d’étapes que de couple de colonnes A A1, B B1, …Sûrement possible en manipulant des listes
Par exemple avec une nouvelle colonneList.Transform(List.Zip({{[A],[B],[C]}, {[A1],[B1],[C1]}}), each if _{0} < x then _{0} else _{0} * _{1} )
pour obtenir une liste avec les nouvelles valeurs de A, B et C suivant si elles sont inférieures ou non à x
Pourquoi ne pas dépivoter toutes les colonnes et travailler sur les nouvelles colonnes “Attribut” et “Valeur” ?
Stéphane
Stéphane Lorin
ParticipantBonjour
je trouve que c’est plus “simple” avec Table.ReplaceValue qu’avec TransformColumns
= Table.ReplaceValue(Source, each [M], null, (x,y,z)=>x*y, {“C4”, “C8”, “C32”})
x = successivement les valeurs [C4], [C8] et [C32]
y = la valeur [M] de la ligne
z = null (ne sert pas ici)Stéphane
Stéphane Lorin
ParticipantBonjour
il n’est pas nécessaire de se mettre en calendrier 1094.
Il suffit de choisir le format de cellule personnalisé [h]:mm
les [] autour du h indiquent qu’il faut afficher le nombre d’heure et non le jour.Stéphane
Stéphane Lorin
ParticipantBonjour
avec une version récente d’Excel 365 vous avez les fonctions TEXTE.AVANT et TEXTE.APRES
=TEXTE.AVANT(TEXTE.APRES(A1;”\”;-1);”.”)
le -1 pour la dernière occurrence du \
Stéphane
27 March 2023 at 8 h 20 min in reply to: Déterminer la date de fin de semaine à partir de l’année et du N° semaine #126961Stéphane Lorin
ParticipantBonjour
En ISO il faut partir du 4 janvier et non du 1er
Date.StartOfWeek(#date([Année], 1, 4), Day.Monday) + #duration(([NumSemaine] – 1) * 7,0, 0, 0)
Sinon, j’ai déjà proposé sur ce forum une fonction plus simple pour le calcul du n° de semaine ISO
(Date as date) => let
Jeudi_Semaine = Date.AddDays(Date,3-Date.DayOfWeek(Date,Day.Monday)),
Année=Date.Year(Jeudi_Semaine),
Premier_Jeudi_An = Date.AddDays(#date(Année,1,7),-Date.DayOfWeek(#date(Année,1,1),Day.Friday)),
#”N° Semaine” = Duration.Days(Jeudi_Semaine – Premier_Jeudi_An)/7+1
in
#”N° Semaine”Stéphane
-
AuthorPosts