choix de diagnostic dans une matrice

Bruno2209

XLDnaute Nouveau
Bonjour,
Voici le problème que je souhaite résoudre :
- sur une feuille "diagnostic" une colonne de références en format texte.
- la feuille "données" comporte x lignes de patients qui peuvent avoir de 1 à n diagnostics notés sur autant de colonnes.

Je souhaiterais extraire pour chaque patient le 1er diagnostic rencontré qui fasse partie d'un sous-ensemble de la colonne de référence "diagnostic".

Je patauge (débutant++) en utilisant index/equiv pour chaque colonne de diagnostic, puis la fonction si, mais l'ensemble est lourd car le fichier complet comprend près de 14000 diagnostics de référence, et le fichier de données, plusieurs milliers de lignes et de 1 à 21 colonnes.

Je vous remercie de votre aide éventuelle.
Bruno.
 

Pièces jointes

  • Diagnostic.zip
    1.7 KB · Affichages: 33

Bruno2209

XLDnaute Nouveau
Re : choix de diagnostic dans une matrice

Bonjour,
Merci de vous préoccuper de ceci.
Pourquoi pas, mais je ne suis pas familier de VB ; la "contrainte supplémentaire" sera de ma guider dans la recopie. Les seules macro dont j'ai l'expérience ont été réalisées par l'enregistrement automatique.
2 choses me préoccupent : le résultat et comprendre...
Encore merci.
Bruno.
 

dixit

XLDnaute Impliqué
Re : choix de diagnostic dans une matrice

re
voici un premier jet vite fait avec macro
à améliorer sans doute ; faire des tests sur un fichier d'essai
à suivre
edit : nouvelle version avec commentaires sur une feuille INFORMATION et directement dans la macro
 

Pièces jointes

  • ED94365 Bruno2209 - Diagnostic.xls
    36 KB · Affichages: 43
Dernière édition:

Bruno2209

XLDnaute Nouveau
Re : choix de diagnostic dans une matrice

re,
- dans l'exemple présent le sous-ensemble recherché est l'intervalle des codes entre C00 et D48.9. Il peut y avoir jusqu'à 5 caractères ; mais la recherche sur les 3 1ers caractères est suffisante (il s'agit de la Classification Internationale des maladies CIM10, et ce sous-ensemble correspond au diagnostic de cancérologie, les codes a 3 caractères sont des codes "Père" utilisés pour les comparaisons épidémiologiques). Pour ce point, j'ai utilisé la macro en réduisant ma liste de diagnostic à ce seul sous-ensemble, car je n'ai pas vu de "limites" dans le code.
- le résultat est proche du résultat attendu mais pas complètement sans que je comprenne ce qui différencie les uns des autres : les codes qui débutent par Z ou M sont inscrits alors qu'ils sont absents de la liste "Diagnostic". Sur le fichier joint, j'ai annoté les résultats faux.
- je rage car j'avais trouvé dans ce forum, il y a qques mois des éléments de syntaxe que je connaissais pas et qui permettaient de comparer une ligne et une colonne ; j'ai mis en colonne M à Q, ma piteuse recette actuelle, lourdissime lorsqu'il y a 20 colonnes de diagnostic.
encore merci
Bruno.
 

Pièces jointes

  • ED94365 Bruno2209 - Diagnostic2.zip
    45.3 KB · Affichages: 17
Dernière édition:

dixit

XLDnaute Impliqué
Re : choix de diagnostic dans une matrice

bonsoir,
voici une nouvelle version
lire la feuille INFORMATIONS
nota : j'ai constaté que sur la colonne B de la feuille Données est vide, contrairement au fichier d'origine ; la macro traite donc à partir de la colonne C.
à suivre
 

Pièces jointes

  • ED94365 Bruno2209 - DiagnosticVER2.zip
    40.9 KB · Affichages: 19

Bruno2209

XLDnaute Nouveau
Re : choix de diagnostic dans une matrice

Bonsoir,

FORMIDABLE. J'ai testé avec des données réelles sur 5 colonnes de diagnostic et la table complète de "Diagnostic" : résultat parfait.
Je me permets 2 autres demandes :
- comment puis je modifier la ligne "For Vt = 2 To Vdercol - 1 " pour qu'elle accepte les noms de colonne plutôt que leur rang ?
- pouvez vous me conseiller un lien pour savoir comment intégrer cette macro dans un classeur utilisable dans d'autres fichiers ?

Un grand merci.
Bruno.
 

ODVJ

XLDnaute Impliqué
Re : choix de diagnostic dans une matrice

Bonsoir à tous,

une proposition sous forme de formule matricielle :
Code:
=SI(MIN(SI((B2:D2>="C00")*(B2:D2<="D48.9")>0,COLONNE(B2:D2)))=0,"",SI(ESTNA(RECHERCHEV(INDEX(B2:D2,1,MIN(SI((B2:D2>="C00")*(B2:D2<="D48.9")>0,COLONNE(B2:D2)))-COLONNE(B2:D2)+1),Diagnostic!$A$1:$A$10,1,0)),"",RECHERCHEV(INDEX(B2:D2,1,MIN(SI((B2:D2>="C00")*(B2:D2<="D48.9")>0,COLONNE(B2:D2)))-COLONNE(B2:D2)+1),Diagnostic!$A$1:$A$10,1,0)))
à valider par CTRL+MAJ+ENTER

remplacer :
B2 : D2 par la zone diagnostic de la feuille données (ici pour la ligne 2)
Diagnostic!$A$1:$A$10 par la liste des codes de la feuille diagnostic

je ne sais pas trop ce que ça va donner en temps de réponse mais c'est à essayer

Il est sans doute possible d'optimiser cette formule. Je laisse ce travail aux artistes du forum.

Si cette formule te convient et que tu veux des explications, n'hésite pas.

Cordialement
 

Bruno2209

XLDnaute Nouveau
Re : choix de diagnostic dans une matrice

Bonjour et Merci ODVJ,
c'est parfait avec l'avantage de me donner aisément un peu plus d'autonomie immédiate sur la position des colonnes. J'ai testé sur 5 colonnes et la liste complète de Diagnostic, après avoir remplacé les , par des ; (j'utilise excel 2002 ?).
Il me reste à comprendre comment adapter la condition (de C00*** à D489) pour l'utiliser sur d'autres requètes ( notamment des listes discontinues de code à 7 caractères 4 lettres puis 3 chiffres).
Enfin je crois avoir lu qu'il y a une contrainte sur RechercheV (1ere colonne à gauche triée ?).
Bonne journée.
Bruno.
 

dixit

XLDnaute Impliqué
Re : choix de diagnostic dans une matrice

bonjour,
j'avais fait une nouvelle version (pour mieux traiter selon longueur des codes) avant de lire les derniers message donc je la joins.
je regarde la suite
pour RECHERCHEV il est possible de travailler sur des données non triées à condition de mettre le dernier argument à FAUX - voir sur mon site perso
bye
 

Pièces jointes

  • ED94365 Bruno2209 - Diagnostic.zip
    42.6 KB · Affichages: 27

dixit

XLDnaute Impliqué
Re : choix de diagnostic dans une matrice

re
avant de poursuivre en macro, quelques précisions sont indispensables (et faut-il poursuivre en macro ?) :
1 - "modifier la ligne "For Vt = 2 To Vdercol - 1 " pour qu'elle accepte les noms de colonne" : nom de colonne ? s'agit-il de la 1ère ligne du tableau exemple MMP ou simplement de A B C ... ?
2 -"utiliser sur d'autres requètes ( notamment des listes discontinues de code à 7 caractères 4 lettres puis 3 chiffres)" : quelle est l'étendue réelle du besoin ? il vaudrait mieux bien appréhender l'ensemble du problème pour que la proposition soit efficace.
3 - "comment intégrer cette macro dans un classeur utilisable dans d'autres fichiers ?" : utiliser la macro sous forme de macro complémentaire (à adapter). En relation également avec la question précédente on peut se demander s'il ne serait pas plus performant d'utiliser un formulaire vba ; c'est plus difficile mais c'est beaucoup plus beau ...
je mets en attente
bon dimanche
 

Bruno2209

XLDnaute Nouveau
Re : choix de diagnostic dans une matrice

Merci Dixit,
J'avais peur d'abuser.
Ma feuille de données décrit les séjours de patients hospitalisés : en ligne les séjours différents, en colonnes, leurs caractéristiques : identifiant, âge, durée de séjour,...etc. et surtout
- Diagnostics de 1 à 23, les 3 premiers peuvent être hierarchisés. Ces Dgs sont codés en CIM10 (14 000 codes, comprennant une lettre de A à Z puis de 2 à 5 chiffres).
-Actes de 1 à n, codés en CCAM ( 8000 codes, comprennant 4 lettres majuscules, puis 3 chiffres).
Il ya donc Y colonnes identifiées par un libellé : DP, DR, DA1, DA2,..,FPPC, MMP, ..Acte CCAM1, acte CCAM 2,..,

Les nomenclatures CIM10 et CCAm sont régulièrement actualisées ; il m'est aisé d'extraire de ces nomenclatures la partie de référence sur laquelle je souhaite travailler ( oncologie, acte d'alimentation artificielle,etc..). on peut donc considérer que la recherche admet l'ensemble de la colonne A de la feuille de référence (Diagnostic dans l'exemple utilisé).

Je souhaite rechercher pour chaque ligne, le 1er code éventuellement présent appartenant à la référence. Je classe les colonnes selon la hiérarchie souhaitée.Le fichier source est un fichier .txt de x lignes et 1 colonne que je convertis en autant de colonnes nécessaires.

J'avais lu sur ce forum , il y a qques semaines, des posts qui m'avaient mis sur la voie par l'emploi de formule matricielle, la combinaison d'index/equiv et d'une 3ième fonction dont je n'ai plus le souvenir (indirect, somme prod sur des formats texte ??!!) désormais plus je navigue, plus mes souvenirs se délitent.
Bon dimanche.
Bruno.
PS : je n'ai pas encore regardé ta suite
 

Discussions similaires

Statistiques des forums

Discussions
312 017
Messages
2 084 627
Membres
102 618
dernier inscrit
Elise751