Fichier excel à transformer en tableau
Bonjour,
J'ai un petit souci avec les résumés de rapport journalier exportés en excel à l'aide d'un logiciel de gestion.
Ce n'est pas très clair et ce serait tellement plus facile d'avoir un tableau.
Dans le fichier joint, sur la gauche ce qui est exporté en excel et sur la droite ce que je souhaiterais avoir à l'aide de formules (dans la partie jaune) avec les dates que j'indiquerais moi-même (dans la partie verte)..
Est-ce possible ?
Merci d'avance ...
https://www.cjoint.com/c/OCljCIC5X1t
Windows / Chrome 133.0.0.0
Je suis capable du meilleur comme du pire. Mais dans le pire, c'est moi la meilleure ...
13 réponses
Transformation des résumés journaliers exportés en Excel en un tableau structuré, avec des dates personnalisables. Une solution complexe a été proposée, utilisant des formules avancées (LET, REDUCE, ASSEMB…) pour générer les colonnes Montant HTVA, Remise, TVA et Montant TTC et un total, avec entêtes inclus. Des ajustements pratiques ont été discutés : correction du nom de la feuille, compatibilité Excel 365 et gestion des insertions de lignes qui décalent les formules. Pour plus de robustesse, des versions élargissant les plages (jusqu’à 60 ans) et un contrôle de présence de la ligne « Total des Remises » ont été envisagées. Une approche dynamique et autonome a été présentée pour automatiser la génération du tableau et des totaux, en s’appuyant sur des formules de type LET et assemblages dynamiques.
-
Mon dernier mot :
https://www.cjoint.com/c/OCnsAX0j6x4
Pour le plaisir, je mets la formule monstrueuse (entêtes et totaux inclus, quand même) :
=LET(tout;ASSEMB.H(ASSEMB.V("DATE";SEQUENCE(MAX(CNUM(C5:C20000))-C5+1;;C5));REDUCE("MONTANT H/TVA";SEQUENCE(MAX(CNUM(C5:C20000))-C5+1;;C5);LAMBDA(x;y;ASSEMB.V(x;LET(l;EQUIVX("*";A:A;2;-1);tbl;ASSEMB.H(EXCLURE(REDUCE(CNUM($C$5);DECALER($C$5;;;l);LAMBDA(x;y;SI(DECALER(y;;-2)="récapitulatif du";ASSEMB.V(x;CNUM(y));ASSEMB.V(x;PRENDRE(x;-1)))));-1);DECALER($D$5:$E$5;;;l));PRENDRE(FILTRE(PRENDRE(tbl;;-1);(PRENDRE(tbl;;1)=y)*(CHOISIRCOLS(tbl;2)="HTVA");"");1)))));REDUCE("REMISE";SEQUENCE(MAX(CNUM(C5:C20000))-C5+1;;C5);LAMBDA(x;y;ASSEMB.V(x;LET(l;EQUIVX("*";A:A;2;-1);tbl;ASSEMB.H(EXCLURE(REDUCE(CNUM($C$5);DECALER($C$5;;;l);LAMBDA(x;y;SI(DECALER(y;;-2)="récapitulatif du";ASSEMB.V(x;CNUM(y));ASSEMB.V(x;PRENDRE(x;-1)))));-1);DECALER($D$5:$E$5;;;l));PRENDRE(FILTRE(CHOISIRCOLS(tbl;2);(PRENDRE(tbl;;1)=y)*(CHOISIRCOLS(tbl;2)<>0)*(ESTNUM(CHOISIRCOLS(tbl;2)));"");1)))));REDUCE("TVA";SEQUENCE(MAX(CNUM(C5:C20000))-C5+1;;C5);LAMBDA(x;y;ASSEMB.V(x;LET(l;EQUIVX("*";A:A;2;-1);tbl;ASSEMB.H(EXCLURE(REDUCE(CNUM($C$5);DECALER($C$5;;;l);LAMBDA(x;y;SI(DECALER(y;;-2)="récapitulatif du";ASSEMB.V(x;CNUM(y));ASSEMB.V(x;PRENDRE(x;-1)))));-1);DECALER($D$5:$E$5;;;l));PRENDRE(FILTRE(PRENDRE(tbl;;-1);(PRENDRE(tbl;;1)=y)*(CHOISIRCOLS(tbl;2)="TVA");"");1)))));REDUCE("MONTANT TTC";SEQUENCE(MAX(CNUM(C5:C20000))-C5+1;;C5);LAMBDA(x;y;ASSEMB.V(x;LET(l;EQUIVX("*";A:A;2;-1);tbl;ASSEMB.H(EXCLURE(REDUCE(CNUM($C$5);DECALER($C$5;;;l);LAMBDA(x;y;SI(DECALER(y;;-2)="récapitulatif du";ASSEMB.V(x;CNUM(y));ASSEMB.V(x;PRENDRE(x;-1)))));-1);DECALER($D$5:$E$5;;;l));PRENDRE(FILTRE(PRENDRE(tbl;;-1);(PRENDRE(tbl;;1)=y)*(CHOISIRCOLS(tbl;2)="TTC");"");1))))));ASSEMB.V(tout;{""."".""."".""};ASSEMB.H("TOTAL";SOMME(CHOISIRCOLS(tout;2));SOMME(CHOISIRCOLS(tout;3));SOMME(CHOISIRCOLS(tout;4));SOMME(PRENDRE(tout;;-1)))))
Daniel
-
-
-
-
-
@CarineVL
oui
-
@PHILOU10120
Re,
Ne serait-il pas possible que cette insertion se fasse aussi via une première formule afin d'éviter les erreurs "humaines" ?
Encore merci ...
Carine
-
@CarineVL
Dans ce cas n'est-il pas possible dans votre logiciel de gestion d'extraire la ligne remise même si celle-ci est à zéro
-
@PHILOU10120
Re,
Si j'ai bien compris dans le cas où la remise est à 0 et qu'elle ne figure donc pas, au lieu de l'extraire, il faudrait plutôt l'inclure et indiquer "0" pour que cela fonctionne.
Non malheureusement car la société ayant créé ce logiciel sur mesure (pendant plus de 10 ans) n'existe plus car en faillite ...
C'est la raison pour laquelle on essaie de se débrouiller d'une autre manière "avec les moyens du bord" car plus aucun développement n'est possible dans le futur ...
Bien à vous,
Carine
-
-
-
Clique sur cette icône :
Voici un lien sur mon fichier :
https://www.cjoint.com/c/OCloeMcKxv4
Daniel
-
-
-
@CarineVL
La différence, c'est que tu veux voir figurer les jours comme le 02/02/2025 qui ne figurent pas dans le tableau initial ? Ou il y a autre chose ?
Daniel
-
@danielc0
Re,
Si on peut faire figurer tous les jours du mois, c'est mieux ...
Mais il y a des jours (comme le 06/02) où les colonnes sont décalées et ne reprennent pas le montant dans la bonne colonne ...
Bien à toi,
Carine
-
@CarineVL
Re,
Je viens (peut-être) de comprendre ...
Cela fonctionne avec le fichier de Philou qui avait inséré une ligne à chaque fois qu'il n'y avait pas de remise pour ce jour ...
Ne peut-on pas faire une première formule pour ces jours où il n'y a effectivement pas de remise et insérer une ligne?.
Bien à toi,
Carine
-
-
Formule modifiée :
=LET(tbl;ASSEMB.H(C5:C194;E7:E196;BYROW(D6:D195;LAMBDA(x;SI(ESTTEXTE(x);"";x)));E8:E197;E9:E198);FILTRE(tbl;PRENDRE(tbl;;1)>40000))
Daniel
-
-
@danielc0
Re,
Je viens (peut-être) de comprendre ...
Cela fonctionne avec le fichier de Philou qui avait inséré une ligne à chaque fois qu'il n'y avait pas de remise pour ce jour ...
Ne peut-on pas faire une première formule pour ces jours où il n'y a effectivement pas de remise et insérer une ligne?.
Je commence à avoir tellement de fichiers que cela commence à être difficile de s'en sortir.
Le résultat vient bien du premier fichier envoyé ?
Le plus facile ce serait avec un fichier joint.
Merci d'avance.
Bien à toi,
Carine
-
-
-
-
@CarineVL
Pour avoir le nombre de jours du mois, mets (avec le premier jour du mois en C5) :
=SEQUENCE(FIN.MOIS(C5;0)-C5+1;;C5)
Pour les explications, je prépare un classeur, ça ferait trop long pour un message.
Daniel
-
@CarineVL
Voici. J'ai mis les explications à partir de G5. N'hésite pas à poser des questions si ce n'est pas clair.
https://www.cjoint.com/c/OCmj1Rck7h4
Daniel
-
-
-
Salutations CarineVL
""aussi pour pouvoir l'adapter aux autres mois plus longs""
J'ai fais une réponse dans ce sens dans mon message # 29
Cordialement
-
Pour adapter aux mois les plus longs (et plus encore), en une seule formule, entêtes et totaux compris :
=LET(tbl;ASSEMB.H($C$5:$C$1904;$E$7:$E$1906;$D$6:$D$1905;$E$8:$E$1907;$E$9:$E$1908);flt;FILTRE(tbl;PRENDRE(tbl;;1)>40000);ASSEMB.V(ASSEMB.H(ASSEMB.V("DATE";SEQUENCE(FIN.MOIS(C5;0)-C5+1;;C5));REDUCE({"MONTANT HTVA"."REMISE"."TVA"."MONTANT TTC"};SEQUENCE(FIN.MOIS(C5;0)-C5+1;;C5);LAMBDA(x;y;ASSEMB.V(x;RECHERCHEX(y;PRENDRE(flt;;1);EXCLURE(flt;;1);ASSEMB.H("";"";"";""))))));{""."".""."".""};ASSEMB.H("TOTAL";SOMME(CHOISIRCOLS(flt;2));SOMME(CHOISIRCOLS(flt;3));SOMME(CHOISIRCOLS(flt;4));SOMME(CHOISIRCOLS(flt;5)))))
Daniel
-
Re Daniel,
J'ai fait le test sur un autre mois (Décembre 2024)
Tout fonctionne parfaitement sauf en ce qui concerne les totaux qui ont l'air d'avoir doublé sauf la remise.
Cela me semble très facile d'utilisation car on peut déplacer librement la zone de calcul sans problèmes.
(voir fichier joint)
Bien à vous,
Carine
-
@CarineVL
Ce qui fausse les totaux, c'est le dernier groupe qui est en lui-même un total :
Comme le montant des remises figure avec un point décimal au lieu d'être une virgule, il n'est pas pris en compte.
Je regarde comment éliminer ça.
Daniel
-
@danielc0
Ca n'a pas été trop compliqué :
=LET(tbl;ASSEMB.H($C$5:$C$1904;$E$7:$E$1906;$D$6:$D$1905;$E$8:$E$1907;$E$9:$E$1908);flt;EXCLURE(FILTRE(tbl;PRENDRE(tbl;;1)>40000);-1);ASSEMB.V(ASSEMB.H(ASSEMB.V("DATE";SEQUENCE(FIN.MOIS(C5;0)-C5+1;;C5));REDUCE({"MONTANT HTVA"."REMISE"."TVA"."MONTANT TTC"};SEQUENCE(FIN.MOIS(C5;0)-C5+1;;C5);LAMBDA(x;y;ASSEMB.V(x;RECHERCHEX(y;PRENDRE(flt;;1);EXCLURE(flt;;1);ASSEMB.H("";"";"";""))))));{""."".""."".""};ASSEMB.H("TOTAL";SOMME(CHOISIRCOLS(flt;2));SOMME(CHOISIRCOLS(flt;3));SOMME(CHOISIRCOLS(flt;4));SOMME(CHOISIRCOLS(flt;5)))))
Veux-tu que je joigne le classeur ?
Daniel
-
@danielc0
re,
Fonctionne parfaitement.
Chapeau bas ...
Dans le cas où le fichier est plus important (comme par exemple 6 mois au lieu d'un, cela marche toujours ou faut-t-il se limiter à un seul mois ?
Bien à vous, et vous remerciant encore,
Carine
-
-
-
Bonjour CarineVL
Le fichier modifier avec mois janvier février mars c'est un essai (données copier coller pour exemple, dites moi si cela vous convient ?
https://www.cjoint.com/c/OCmp0kFSm64
-
Bonjour,
C'est vraiment top ...effectué avec minutie pour faciliter le travail ...
Je vois qu'il y a même un contrôle si la ligne contenant "Total des Remises" existe bien.!!!
Une petite question à ce niveau:
Quelle est la procédure à suivre dans le cas où cette ligne n'existe pas ?
J'ai inséré une ligne au 03/12/2024, ajouté "Total des remises" mais le message est le même car en faisant l'insertion, la formule s'est également décalée de 1.
(voir fichier joint)
Comment faire donc pour arriver à un message "OK" ? (tout en conservant le tableau sans vides due aux éventuelles insertions)
Bien à vous,
Carine
-
-
@danielc0
Re,
Effectivement la colonne h/tva est juste sans faire quoique ce soit au niveau des lignes de remises, hormis une petite différence de 0,03€ (voir fichier joint).
Pour le mois de décembre 2024 (2), j'ai sur le serveur 53500,28€ et après récupération des données 53500,31€ (en faisant l'addition sur la partie gauche extraite).
Vos formules sont donc tout-fait correctes ...
Cette petite erreur d'extraction ne proviendrait-t-elle pas de la manière dont les données sont extraites sur le serveur ?
J'avais choisi le mode TEXTE ... et je ne sais pas quelles sont les décimales après la virgule dont il a été tenu compte ...
Comme il y a différents types de collages possibles ...il y en a peut-être un qui correspond mieux ...
Bien à vous,
Carine
-
@CarineVL
ou devoir peut-être reconvertir les données extraites à la décimale nécessaire pour arriver au même chiffre exact ?
-
@CarineVL
Je remarque sur le serveur, il y a 6 chiffres après la décimale alors que sur les données extraites, il n'y en a que 2 de la manière que je l'ai faite en copiant en mode texte...
-
-
Re-,
Un fichier utilisant Power Query
Dans l'onglet "Paramètres", tu mets le chemin et le nom du fichier xml (comme dans l'exemple)
Dans l'onglet "Resultat", tu cliques sur le bouton "Actualiser tout" du ruban "Données" (ou un clic droit sur une cellule de la requête, "Actualiser"), pour mettre à jour la requête.
Pour voir...
https://www.cjoint.com/c/OCns6iglR7F
-
-
Bonjour,
J'ai regardé un tuto et cela me semble effectivement très intéressant pour transformer les données.
Entretemps DanielCo m'a fait un fichier très facile qui m'évite de faire toutes ces manipulations.
Je vous remercie néanmoins pour cette info qui s'avérera sans doute fort utile dans le futur.
Bien à vous,
Carine
-
-
Bonsoir CarineVL
Le fichier au dernier jus de décembre à avril données copier coller pour essai
Tout à l'air Ok à vous de tester
https://www.cjoint.com/c/OCnuf3gJTI4
Bon testes









