Suppression de données multiples

Bonsoir à toutes et tous,

Je viens vers vous car je cherche un moyen simple, si possible sans macro de faire du tri dans un de mes classeur.

J'ai une liste de patient avec un numéro pour chaque patient

A chacune de ses consultation, un numéro d'acte unique est associé

Pour chaque consultation s'il y a une prescription, excel me met une ligne avec

n° patient - n° acte - prescription codée (J01 = antibio)

par exemple

1 - 3225 - J01

1 - 3565 - J01

2 - 48523 - J01

2 - 48565 - J01A

2 - 48565 - J01B

Mon problème concerne les 4èmes et 5èmes lignes : comment dire à excel : si j'ai deux antibio dans la même consultation (même numéro d'acte), je veux que tu n'en gardes qu'un (n'importe lequel) et que tu me supprimes l'autre ?

Car je voudrai qu'au final Excel me produise le résultat suivant

1 - 3225 - J01

1 - 3565 - J01

2 - 48523 - J01

2 - 48565 - J01A (ou B je m'en fous)

Merci d'avance de votre aide

Sans macro, tu ne supprimeras pas la ligne.

Par contre tu peux peut-être te tourner vers un tableau croisé dynamique. Je ne suis absolument pas un expert dans ce domaine, je laisse donc le soin à d'autres de te conseiller ou non cette solution.

Bonsoir,

Pour mieux comprendre ta demande, il faudrait joindre le ou les fichiers concernés. Si confidentiel, mettre des exemples bidons, ce qui nous intéresse c'est la structure des fichiers et comment ils sont alimentés. En effet, tu dis que Excel met une ligne... comment fait-il cela ? Macros, fonctions, autre classeur... pas très compréhensible.

A+

Chris

Elendir a écrit :

Mon problème concerne les 4èmes et 5èmes lignes : comment dire à excel : si j'ai deux antibio dans la même consultation (même numéro d'acte), je veux que tu n'en gardes qu'un (n'importe lequel) et que tu me supprimes l'autre ?

Bonjour,

il y a une fonction toute faite pour cela : données > supprimer doublons > ne cocher que les colonnes A et B ... epicetou !

Bonjour et merci de votre aide

- la fonction supprimer les doublons ne marche pas : je veux faire disparaître la ligne entièrement si j'ai un doublon dans ma colonne "n°acte"

Or quand je l'utilise elle supprime bien les doublons dans ma colonne sélectionnée, mais elle ne fait pas disparaître les cellules sur la même ligne des autres colonnes ce qui du coup décale tout mon tableau

Je vous joins le fichier contenant les renseignements pour mes 10 premiers patients

4exemple-forum.xlsx (10.83 Ko)

Pour vous montrer ce que je voudrai qu'Excel fasse, regardez le patient n°1 : dans la 3ème colonne vous avec plusieurs numéros d'acte (par exemple on retrouve le n°818111 deux fois). Il faudrait qu'Excel ne regarde QUE cette colonne et que quand il trouve deux résultats identiques dans cette colonne, qu'il me supprime toute la ligne correspondant au doublon (c'est à dire ici me supprimer toute la ligne 6)

Est-ce faisable selon vous ?

Le fichier global contient lui 114000 lignes

SI si, cela fonctionne

Il faut sélectionner TOUTES les colonnes et ne laisser cochée que la 3ème !

capture d ecran 13

Bonjour,

Il y a encore des points qui me semblent obscurs :

1 comment alimentes tu ton fichier : si c'est manuellement, alors pourquoi taper la ou les lignes que tu ne veux pas voir ?

2 si l'alimentation provient soit par un copier coller soit par un autre fichier, je suis perplexe quant aux lignes que tu veux enlevées : dans ta première explication tu parles d'enlever les doublons d'antibiotiques dans une prescription et il faut les reconnaître grâce à la référence J01 or dans ton fichier tu parles simplement d'enlever les doublons de la colonne C ?? Ne connaissant rien à ces codes, je m'interroge de savoir si ce sont bien des antibiotiques ??

Bref, avec ces interrogations, j'ai essayé de te trouver une solution SANS MACROS.

Partant du principe que si tu les encodes ces lignes c'est qu'il doit y avoir une raison et donc que c'est utile de ne pas les perdre d'une part, et, d'autre part, qu'il est impossible d'enlever une ligne d'un tableau avec des fonctions, je te propose la solution suivante :

1 Nous dupliquons ton tableau source et nous appelons le stableau source "Original" et la copie "Sélection"

2 Nous insérons une colonne devant le tableau d'encodage "Original" (cette colonne pourra être "masquée" par la suite pour ne pas perturber la lecture du tableau). Le tableur calculera dans cette colonne les lignes "utiles" en ajoutant 1 à chaque ligne qui ne sera pas un doublon de la ligne précédente dans la colonne C. On obtient ainsi une suite numérique de 1 pour toutes les lignes utiles. Tu verras que dans l'exemple il y a 2 lignes en moins puisque 2 doublons.

3 Dans le tableau "Sélection", nous remplaçons les données par des formules de rechercheV qui vont aller chercher les informations dans le tableau "Original" en allant chercher la suite de numérique de 1 en se basant sur le numéro de ligne ou se trouve la fonction (les numéros de lignes augmentant naturellement de 1 à chaque ligne) et dans la colonne où se trouve la fonction +1 puisque le tableau "Original" contient une colonne de plus. Nous utilisons ainsi la propriété de la fonction RechercheV qui, avec le paramètre FAUX va toujours chercher LE PREMIER ELEMENT CORRESPONDANT A LA DEMANDE. Ainsi quand elle cherchera la ligne 5 : elle trouvera la première ligne 5 et négligera la deuxième - nous aurons ainsi supprimer le ou les doublons POUR AUTANT QU'ILS SE SUIVENT.

Le restant de la formule consiste en des tests qui permettent d'enlever :

  • les NA quand la recherche arrivera en fin de tableau et qu'elle ne trouvera pas de lignes correspondantes
  • mettre des blancs quand la première colonne est à blanc.
Le tableau Sélection te présentera donc ton tableur expurger des doublons.

Il faut naturellement dupliquer les formules dans le tableau Sélection autant de fois que tu penses en avoir besoin (dans l'exemple j'ai envisagé 200 lignes mais tu peux porter cela à 200.000 lignes).

De même il faut dupliquer la formule de la colonne A dans le tableau Original autant de fois que nécessaire.

J'espère que cette solution correspond à tes souhaits.

Une autre solution consisterait à faire un tableau croisé dynamique mais cela demande un peu plus de connaissances en Excel (je ne sais pas où tu te situes et si tu as déjà fait ce genre de tableau) d'une part et , d'autre part, comme je ne suis pas certain d'avoir tout compris de la problématique, je n'ai pas été plus loin pour te laisser le soin de corriger éventuellement ma saisie du problème.

Merci de confirmer.

A+

Chris

6exemple-forum.xlsx (34.19 Ko)

Je reviens pour te dire que la solution de Steelson est tout à fait correcte mais naturellement tu perds définitivement les lignes où il y a un doublon. A toi de voir.

A+

Chris

Merci Steelson, effectivement cela fonctionne ainsi

@ Chris1945 : tout d'abord un grand merci pour le temps passé sur mon problème

Je t'explique plus en détail : on a fait une extraction de base de données concernant l'angine et les antibiotiques.

La colonne A correspond à un numéro de patient unique : quelque soit le médecin qu'il va aller voir il aura toujours ce même numéro. Ainsi, s'il consulte 6 fois il aura 6 fois son numéro

La colonne B est le numéro unique de chaque médecin

La colonne C correspond à une consultation. Le soucis c'est que quand on extrait pour chaque consultation les prescriptions d'antibiotiques (J01 en colonne O comme tu l'as bien compris), s'il y en a deux le logiciel nous créé 2 lignes de consultations identiques.

Ce qui fait que la seule chose pouvant donner 2 lignes pour le même acte (donc 2 numéros identiques en colonne C) c'est qu'il y a eu 2 prescriptions d'antibiotiques.

Et dans ma recherche ce n'est pas le soucis : mon but est de savoir s'il y a eu antibiothérapie ou non, pas le nombre (provenant en général d'un bug logiciel)

Comme tu l'as pressenti, je suis novice en excel : je maitrise toutes les fonctions de base (SI, NB.SI, ou encore SOMME.PROD) mais ça s'arrête là.

J'ai déjà un tableau avec toutes les consultations (= ACT id = colonne C) sur lequel on m'a fait une macro fonctionnelle me permettant de faire des sélections. En fait ma macro regarde les dates de consultation pour angine : s'il y a plusieurs consultations en 15 jours elle me créé un tableau où elle n'en garde qu'une mais me note à chaque fois s'il y a eu des AINS prescrits.

C'est à dire que s'il y a eu 3 consultations pour angine les 10 - 15 et 20 mai 2002 elle ne gardera que le 20 mai 2002. Mais s'il y a eu prescription d'AINS le 15 et pas le 20, la macro m'indiquera quand même qu'il y a eu des AINS prescrits dans la consultation conservée. (le but étant de ne pas rater une prescription )

Pour rajouter à cette macro le critère antibiotique il faut que j'ai une seule réponse par consultation, en oui/non, sinon je risque un décalage dans le boulot fait par ma macro.

Voilà pourquoi je ne dois conserver qu'une ligne par acte.

Ta solution me parait parfaite : je vais la tester "grandeur nature" et te tiendrai au courant dans les 24h.

D'ailleurs ta solution me donne de l'espoir, car j'aurai un dernier travail à effectuer, qui me parait très compliqué. Cependant avec une fonction recherche cela peut marcher

Merci en tout cas et je reviens dès que j'ai testé

Après test, il doit y avoir quelque chose que j'ai du mal faire car le tableau "selection" reste obstinément vide au dela de ce que tu as fais

  • j'ai fais un copier-coller de mon tableur dans l'onglet "original"
  • j'ai dupliqué ta formule en colonne A en la mettant jusqu'en bas du tableau (jusque là tout allait bien, les chiffres pris étaient conformes)
  • Dans le tableau sélection j'ai étendu ta formule jusqu'à la 200ème ligne, ta formule s'est bien recopiée, mais elle a abouti à des cases blanches dès la 28ème ligne du tableau sélection (alors que la formule est bien renseignée dans la barre)

J'avoue ne pas trop comprendre, je t'envoie le tableau des 200, si tu peux me dire où je rate quelque chose, ce serait super !

Désolé, j'ai oublié de te dire qu'il fallait aussi adapter les formules aux nombres de lignes dans l'onglet Sélection :

Colonne A =SI(ESTNA(RECHERCHEV(LIGNE()-1;Original!$A$2:b]$Q$200000[/b];COLONNE()+1;FAUX));"";RECHERCHEV(LIGNE()-1;Original!$A$2:$Q$200000;COLONNE()+1;FAUX))

Autres colonnes :

=SI($A2="";"";RECHERCHEV(LIGNE()-1;Original!$A$2:$Q$200000;COLONNE()+1;FAUX))

J'ai porté à 200000 lignes.

A toi de voir si plus et il faut naturellement dupliqué sur 200.000 lignes et il faut également que la colonne A de l'onglet Original soit également sur 200.000 lignes.

A+

Chris

Effectivement, je n'avais pas pensé à modifier la plage d'action de ta formule. Avec la modification ça marche parfaitement

Je me retrouve avec un tableau fiable pour mes antibiotiques.

Il va falloir maintenant que je fasse quelque chose d'un peu différent avec ces valeurs

Merci beaucoup pour le coup de main !

Sur un de mes classeurs, j'ai deux onglets

Le 1er avec ma base de donnée déjà exploitée (donc avec suppression des multiples consultations rapprochées de moins de 15 jours pour n'en garder qu'une seule)

Le 2ème avec cette base que nous venons de produire, qui indique pour chaque consultation s'il y a eu antibio ou pas à une date donnée pour une consultation donnée

Soucis : il va falloir que pour chaque consult, excel regarde dans l'autre onglet voir s'il y a eu un antibio dans les 15 jours précédents et me le dise. Pour cela il va devoir vérifier le numéro de patient ainsi que celui de l'acte

Je vais essayer de résoudre le problème en jouant sur les colonnes de recherche de la matrice. Si je n'y arrive pas je t'écrirai pour voir ce que tu en penses

OK Pas de soucis : penses à m'envoyer les deux fichiers concernés et je verrai ce que je peux faire mais tu fais bien de d'abord essayer par toi même : c'est comme cela que l'on apprend le mieux.

Bonne chance et A+

Chris

Rechercher des sujets similaires à "suppression donnees multiples"