Cette modif de formule est-elle exacte ?

Bonjour à tous,

J'avais d'abord posté sur le site https://ask.libreoffice.org/fr/question/269608/filtrer-les-lignes-comportant-des-doublons-calc/?sort=latest

J'avais bien eu une réponse au départ mais la solution est au 1/2 bonne, je pense.

Je remercie au passage la personne qui m'a répondu au début.

Je pense qu'il y a une erreur dans le second test de la formule en question (je vais y venir). Mais je n'ai pas de réponse à savoir si la formule est exacte ou pas.

Et cela me bloque dans mon travail car j'attends et les délais s'allongent pour moi.

Ma question portait donc sur les doublons et supprimer les doublons et notamment celui des2 lignes où le prix d'achat est le prix le plus bas.

La formule proposée par Michel était celle-ci : G5=SI(ET(C5=C6;F5=F6);VRAI();SI(OU(ET(C5=C4;F5<F4);ET(C5=C6;F5<F6));VRAI();FAUX()))

Mais elle m'affiche pas les bons résultats : j'ai vérifié.

Par contre, si je modifie la formule et que j'applique cette formule :

G5=SI(ET(C5=C6;F5=F6);VRAI();SI(OU(ET(C5=C6;F5<f6);et(c5=c6;f5<f6));vrai();faux()))< p="">

Cette formule serait-elle bonne ?

Si oui, elle servirait à m'aider à supprimer les doublons avec prix le plus bas (quelques centaines de lignes à examiner au cas par cas si je veux le faire manuellement).

D'avance merci.

Cordialement,

Je me suis aperçu d'une erreur lors de mon message précédent.

Je corrige la formule (sans doute les restes d'un copié collé) :

G5=SI(ET(C5=C6;F5=F6);VRAI();SI(OU(ET(C5=C6;F5<f6);et(c5=c6;f5<f6));vrai();faux()))

D'avance merci.

Cordialement,

Salut Pingouin( trés drole ce pseudo) !

as-tu un fichier exemple (vidé de tout element confidentiel bien sur)
pour que l'on comprenne mieux ce que tu cherches ?

En lisant "en diagonale" je crois comprendre que l'utilisation d'un
filtre pour enlever les doublons ne serait pas assez précis...
Tes explications sont trés détaillées, c'est super, pour suivre,
vraiment il manque juste un fichier.

Les pj ne passent pas sur la liste, tu peux passer par
https://drop.infini.fr/ ou https://framadrop.org/fr/

Claire

Re bonsoir,

Voici le lien où l'on peut télécharger le tableau échantillon (celui avec la formule que j'ai modifiée mais sans trop la comprendre).

https://framadrop.org/lufi/r/vE6UbUok6V#Ds9/b8szJnmX2iOI3KwhIZA5tZ6yfpbGTyRsEb97890=

Bonjour à tous,

Je reviens vers vous n'ayant pas eu de réponse.

Quelqu'un pourrait me renseigner car je vais supprimer 500 lignes environ si je me fie à la formule proposée dans le tableau envoyé sur le lien  ci-dessus ?

Ou sinon, il me faudra vérifier chacune des lignes comportant des doublons, ce qui prendra un temps fou et source d'erreurs. :frowning:

Merci d'avance.

re !

la modification que tu as faite de la formule de Michel consiste à
supprimer le OU dans le 2e SI
car les 2 conditions du OU sont identiques. Michel testait
alternativement la ligne du dessus et celle du dessous..

Je me demandes si on ne peux pas faire autrement, je creuse tout de
suite, et je te dis.

Claire

Bonjour,

Plus simple que :
SI(ET(C5=C6;F5=F6);VRAI();SI(OU(ET(C5=C6;F5<F6);ET(C5=C6;F5<F6));VRAI();FAUX()))
où on se perd rapidement, je propose :
=(C5=C6) * (F5<F6)
Résultat 1(Vrai) ou 0 (Faux)
Ensuite, il est possible de formater la cellule -> Nombres -> Valeur logique

Bon surf,
Christian

Re !

La proposition de Christian me parait vraiment la plus simple et bien
adaptée, je confirme que l'on se perd rapidement dans ce si imbriqué
(pourtant ce n'est rien 2 SI).

Malgré tout j'ai imaginé une autre solution, qui ne demande pas
le moindre tri (tu peux ajouter des références et des prix
ultérieurement, à condition d'adapter la plage).
https://framadrop.org/lufi/r/TECtHBzCnL#QrT94OION78AowO0eX1WYJZiexXraLX+/1nfL+rSUuQ=

Elle est bassée sur la question initiale "identifier le prix max pour
une référence) (i.e. celui qui est supérieur).

Un index equiv aurait pu faire l'affaire à priori, mais le sommeprod me
parait mieux pour ce cas.

Le sommeprod va permettre de travailler sur une "matrice" (un tableau
de valeurs) constitué de toutes les lignes d'un même libellé associée à
leur prix. On sélectionne dans cette matrice celle qui a le prix max.
NB : l'utilisation de Max est indispensable sinon on aditionne les
prix.

Le somme prod a plusieurs syntaxes. Celles qui est pertinente dans ce
cas
SOMMEPROD(MAX(($C$5:$C$24=$C5)*$F$5:$F$24))
$C$5:$C$24=$C5 toutes les lignes qui correspondent à la condition sont
ajoutées à la matrice

Merci Christian de ta réponse,

Mais je n'ai pas compris ta formule.

J'ai l'impression que tu m'as mis qu'une seule partie de la formule ?

la formule est bien celle là, il n'y manque rien.
C'est une unionde 2 conditions... et si c'est pour du vrai / faux ou
0/1 : Pas besoin de fonction.

Elle est dans le fichier que j'ai joint cet après-midi, tu pourras voir
directement

Claire

Merci de ta réponse, Claire.

Je vois que l'on peut maintenant trier les lignes sur la mention on jette et on garde. Je devrais pouvoir supprimer toutes les lignes on jette qui devraient se suivre.

Cela fonctionne sur le tableau que tu m'as envoyé.

Ce serait grandement pratique pour supprimer des centaines d'articles en question.

Je vais essayer sur le mien.

[...]

Dans ton tableau, tu as 2 cellules tests.

L'une s'appelle Test et l'autre s'appelle Test avec une seule formule.

Laquelle des 2 colonnes test doit-on utiliser ?

Merci.

Oui, bah, ce n'est pas compliqué. Je n'ai pas cherché beaucoup. :slight_smile:

Je suis sur linuxmint, donc Pingouin et comme le pseudo est probablement déjà utilisé, j'ai rajouté "du bureau" car cela concerne la bureautique (notamment pour ce tableau). :wink:

Bon week-end.

J'ai décomposé la formulela colonne Prix final ne calcule que.. le
prixla colonne H (test) compare le prix Final (G et le Prix d'achat -
F)
Le colonne test "1 seule formule" regroule les calculs des colonnes G
et H (selon les formules que je t'ai détaillées)
Soit tu utilises les colonnes G et H (ensemble)
Soit tu n'utilises que I
Tu peux aussi n'utiliser que J, c'est à dire la formule de Christian =>
mais le tri sur libellé (ou code article si tu as) est
indispensable. Si tu veux le "on jette", "on garde"
Si((C5=C6)*(F5<F6);"on jette";"on garde")
elle équivaut à Si(et(C5=C6;F5<F6);"on jette";"on garde")
Bonne nuit !
Claire

Bonjour à tous,

J'ai décomposé la formulela colonne Prix final ne calcule que.. le
prixla colonne H (test) compare le prix Final (G et le Prix d'achat -
F)
Le colonne test "1 seule formule" regroule les calculs des colonnes G
et H (selon les formules que je t'ai détaillées)
Soit tu utilises les colonnes G et H (ensemble)
Soit tu n'utilises que I
Tu peux aussi n'utiliser que J, c'est à dire la formule de Christian =>
mais le tri sur libellé (ou code article si tu as) est
indispensable. Si tu veux le "on jette", "on garde"
Si((C5=C6)*(F5<F6);"on jette";"on garde")
elle équivaut à Si(et(C5=C6;F5<F6);"on jette";"on garde")
Bonne nuit !
Claire

Pour pouvoir l'appliquer à mon tableau à 24 colonnes et un peu de 10000 lignes, je voudrais savoir la chose suivante :

La matrice dans ton fichier exemple va de C5 à F24, c'est bien cela ?

Autre chose : si je lance un tri sur la colonne catégorie, puis nom article, la matrice est préservée quand même ?

Pour info, si je trie sur le résultat de la formule de Christian pour obtenir toutes les lignes à supprimer d'un seul bloc avec des lignes sui se succèdent, le tri me transforme le résultat uniquement avec des zéros.

Alors que si je trie sur la colonne I, il m'affiche bien les on garde et les on jette bien classés.

Je peux donc dans ce cas supprimer toutes les lignes rangées ensemble.

Merci.

Bonjour

Bonjour à tous,

> J'ai décomposé la formulela colonne Prix final ne calcule que.. le
> prixla colonne H (test) compare le prix Final (G et le Prix d'achat -
> F)
> Le colonne test "1 seule formule" regroule les calculs des colonnes G
> et H (selon les formules que je t'ai détaillées)
> Soit tu utilises les colonnes G et H (ensemble)
> Soit tu n'utilises que I
> Tu peux aussi n'utiliser que J, c'est à dire la formule de Christian =>
> mais le tri sur libellé (ou code article si tu as) est
> indispensable. Si tu veux le "on jette", "on garde"
> Si((C5=C6)*(F5<F6);"on jette";"on garde")
> elle équivaut à Si(et(C5=C6;F5<F6);"on jette";"on garde")
> Bonne nuit !
> Claire

Pour pouvoir l'appliquer à mon tableau à 24 colonnes et un peu de 10000
lignes, je voudrais savoir la chose suivante :

La matrice dans ton fichier exemple va de C5 à F24, c'est bien cela ?

La matrice est "créée" au moment d'exécution du Calcul
Elle fonctionne par colonne (et non par plage)
Pour augmenter la taille de la matrice, tu modifies le numéro de ligne
24 => 1000 dans chaque partie de la formule, pour chaque colonne
mentionnée.
Pour faire évoluer plus facilement tes références, il faudrait te
pencher sur les plages nommées.
Par exemple $c$5:$c$24 deviendrait "libelles".
Il te suffirait de modifier l'étendue de la plage nommée pour ajuster
toutes les formules.

Autre chose : si je lance un tri sur la colonne catégorie, puis nom
article, la matrice est préservée quand même ?

C'est une matrice, justement elle te sert à ne pas être coincé par un tri dans ton tableau. Toutes les valeurs de ton tableau sont prises en compte où qu'elles soient par rapport aux autres du même libellé !
Donc oui

Pour info, si je trie sur le résultat de la formule de Christian pour
obtenir toutes les lignes à supprimer d'un seul bloc avec des lignes sui
se succèdent, le tri me transforme le résultat uniquement avec des zéros.

La formule de Christian (et celles évoquées sur Ask) sont dépendantes
du tri des libellés car on compare les lignes 2 à 2 celles d'avant,
celles d'après. C'est justement ce qui me parait limitant, d'où l'autre
solution que je t'ai proposée

Avec la formule de christian, il faut utiliser un filtre automatique.
Et d'ailleurs le filtre est valable pour toutes les solutions
Donc un filtre, pas un tri. Le filtre ne remet pas en cause les
formules, il ne t'affiche pas tout.

Alors que si je trie sur la colonne I, il m'affiche bien les on garde et
les on jette bien classés.

oui car la solution en colonne I est basée sur une recherche dans
toutes les lignes du tableau. Le tri ne l'impacte pas. La boucle est
bouclée ?

Je peux donc dans ce cas supprimer toutes les lignes rangées ensemble.

C'est l'idée, te donner plus de souplesse....

Merci.

pas de soucis, la liste est là pour ça. On est juste réactif dans la limite de nos capacités et disponibilités !

Claire

Bonjour à tous,

Vu le temps que ce sujet est débattu, j'ai jeté un oeil à Internet. J'ai trouvé ceci :

https://www.asso.info-limousin.com/divers/astuces-joomla-internet-ubuntu/18-applications/152-supprimer-les-doublons-dans-un-tableur-libreoffice.

Pourquoi n'est-ce pas applicable à ce cas ?

Thierry

Bonjour Thierry
oui moi aussi j'aurais pensé que c'était suffisant. En réalité non
car on n'a pas de doublons complets sur toutes les lignes du tableaux.
Et l'extraction sans doublons, se fait en isolant une seule colonne
dans ce cas. ça ne répond pas à son besoin.et aussi que le critère de
choix du doublon à conserver est précis : la valeur la plus grande pour
le prix (il n'ya donc pas de doublons sur les prix !)
Reprends les tableaux joints dans l'échange pour voir... car c'est la
première chose que j'ai essayé malgré tout ! :wink:

Il n'y a pas de longs débats, mais juste quelqu'un qui cherche à
comprendre ce qu'il fait.
Claire

Bonsoir à tous,

Je viens de rentrer mais les réponses apportées ne me conviennent pas vraiment ou en partie.

Le lien proposé par Patrick ne concerne pas tout à fait mon problème.

En fait, j'ai besoin de supprimer les lignes où les noms d'articles sont identiques avec comme condition supplémentaire de supprimer le doublon qui a le prix le plus faible.

Les solutions proposées :

1) Le lien donné par Patrick ne correspond pas à mon problème.

2) la formule de Christian ne me permet pas de trier sur les valeurs 0 / 1. Toutes les valeurs passent à 0.

3) la matrice, c'est peut-être bien mais trop complexe pour moi qui n'ai pas assez d'expérience dans Calc. De plus, quand le problème des doublons sera réglé, je vais scinder le tableau avec un onglet  correspondant à une catégorie, etc ....

4) la question du départ portait sur une solution données sur le site Ask : https://ask.libreoffice.org/fr/question/269608/filtrer-les-lignes-comportant-des-doublons-calc/?sort=latest

La solution sur ce site propose une formule avec 2 tests.

Le 1er test fonctionne. Mais la seconde partie du test comporte une erreur de formule.

Comme je ne comprends pas la seconde partie de cette formule, je l'ai modifié quand même en réfléchissant par analogie.

Quand j'essaie avec la formule modifiée, cela donne apparemment des résultats plausibles. Mais n'étant pas certain de cette formule, je n'ose pas supprimer les doublons affichés par cette formule.

Ma question du départ était donc :

Est-ce que la formule que j'ai modifiée est correcte ou pas : G5=SI(ET(C5=C6;F5=F6);VRAI();SI(OU(ET(C5=C6;F5<f6);et(c5=c6;f5<f6));vrai();faux()))

Vous pouvez retrouver un extrait de mon tableau ici :

https://framadrop.org/lufi/r/vE6UbUok6V#Ds9/b8szJnmX2iOI3KwhIZA5tZ6yfpbGTyRsEb97890=

Merci à tous ceux qui cherchent à me dépanner.

Oui , la formule est ok,

Tu peux t'en convaincre en créant une table dynamique :
<sélectionne la plage de cellule (C4:F24)>
insertion - table dynamique - [valider]
<tu glisses dans la zone CHAMPS LIGNES ton CHAMPS DISPONIBLE "Nom et
taille">
<tu glisses dans la zone CHAMPS DE DONNEES ton champs disponibles "P Achat">
tu doubles-clique sur ton champs placé dans CHAMPS DE DONNEES pour
sélectionner MAX> [Valider]

et tu as ton résultat (en comparant à tes formules, c'est bien identique)

Yves