Extraire des données à partir d'un fichier texte

Bonjour,

J'ai besoin d'aide pour créer une macro excel.

Voilà ce que je dois faire: Il faut que la macro aille chercher un fichier texte à choisir et en tire des informations.

Je dispose d'un fichier texte relatif à un patient:

https://www.cjoint.com/c/CFAmP0dJ4hc

qui comporte plusieurs informations: les 14 premières lignes sont sans importance (important à partir de: "Roi")

Dans ce fichier, il y a 2 "Roi": PTV et rectum.

Pour ces deux Roi, je voudrais relever quelques valeurs intéressantes de la deuxième colonne. Pour être plus claire, voici ce que souhaite obtenir:

https://www.cjoint.com/c/CFBjWtvFIjv

La colonne 1 modifiée est la colonne 1 divisée par 20. La colonne 2 modifiée est la colonne 2 divisée par le maximum de chaque Roi.

Voilà. J'espère que c'est clair... Je ne sais pas si c'est important, mais je n'ai pas qu'un seul fichier texte, et pour chacun, le nom et le nombre des Roi sont différents... Il faudrait donc la colonne A apparaisse les Roi qui sont présents dans le fichier texte.

Merci beaucoup pour votre aide

marguerite

Salut Marguerite,

Dans un premier temps, je te propose de tester le transfert des données de ton fichier Texte dans Excel.

A condition que les macros soient enclenchées sur ton PC, si tu cliques sur le bouton « Transfert » du fichier ci-joint, tu devrais pouvoir choisir un fichier Texte dans ton arborescence par double-clic.

Une boîte de dialogue « Assistant – Importation de texte » devrait s’ouvrir et tu cliques deux fois sur « Suivant » puis une fois sur «Terminer».

Tu devrais alors avoir une feuille Excel de plus dans ton fichier Excel – avec les données de ton fichier Texte - et ton fichier Texte devrait s’être refermé sans modification.

Si tout ça joue, on peut voir la suite de la macro afin de récupérer les données que tu désires sur la nouvelle feuille exportée et l’effacer éventuellement lorsque l’on en a plus besoin.

A te relire.

413excel-a-obtenir.xlsm (19.76 Ko)

Merci beaucoup Yvouille!

ça fonctionne très bien! Maintenant j'ai mon fichier texte qui apparaît dans la feuille Excel.

Reste "plus qu'à" récupérer les données...

En espérant te lire bientôt

Marguerite

Re-bonjour,

C’est très bien si cette première partie fonctionne. Pour la suite, je considère que l’on ne parle plus du fichier Texte qui est déjà refermé, mais que l’on discute de la nouvelle feuille Excel qui a été nouvellement créée.

Ce que j’ai compris, c’est que tu as 14 lignes sans trop d’importance puis que, dès la ligne 15, tu as d’abord une dénomination « Roi : PTV ». Alors ma première question, cette dénomination est-elle toujours à la ligne 15 ou elle peut être plus bas ?

Ensuite j’ai également compris que la deuxième dénomination « Roi: PTV-RECTUM » pouvait être placée un peu n’importe où dans tes lignes, en fonction du nombre de valeurs de la dénomination « Roi : PTV » et qu’il faut donc la trouver par une macro (dans ton exemple à la ligne 6842). L’emplacement de la dénomination « Roi: PTV-RECTUM » permettant également de déterminer la dernière ligne concernant la dénomination « Roi : PTV ».

Ensuite, j’ai compris qu’il y avait des valeurs pour ces deux dénominations à récupérer, mais je n’ai pas encore très bien compris quoi. Je vois cependant tout de suite un problème. Il faudrait pouvoir déterminer la dernière ligne de la dénomination «Roi: PTV-RECTUM » puisqu’il y a encore des valeurs pour d’autres dénominations plus loin vers le bas. Alors encore une question : Est-ce que la troisième dénomination est toujours « Roi: rectum » ? Si oui, on peut facilement déterminer – après avoir recherché cette troisième dénomination - la dernière ligne de la dénomination « Roi: PTV-RECTUM » (dans ton exemple à la ligne 13668).

Ayant déterminé le début et la fin de tes deux seules dénominations qui semblent t'intéresser - « Roi : PTV » et « Roi: PTV-RECTUM » - peux-tu me préciser encore dans quelles cellules exactes de ta Feuil1 tu désires quelles valeurs ? Indique moi quelque chose de très précis du genre : Dans la cellule E4 de la Feuil1, je voudrais la valeur minimale de la dénomination « Roi : PTV ».

A te relire.

Re-bonjour,

Oui exactement, les 14 premières lignes sont sans importance (sauf si j'ai encore du temps plus tard...)

Tout ce qui nous intéresse commence à la ligne 15, et commencera toujours à la ligne 15 quelque soit le fichier texte.

Ce qui change d'un patient à l'autre:

  • le nombre de ROI: ici, il n'y en a 6: PTV, PTV-rectum, rectum, tfd, tfg et vessie (il peut y en avoir une dizaine en tout)
  • le nombre de lignes numériques: ici, il y a 6823 lignes pour le PTV. Le nombre de lignes peut différer d'un ROI à l'autre, et d'un patient à l'autre.

En effet le nom d'un ROI va être situé après la dernière ligne numérique du ROI précédant. Donc la ligne "Roi: rectum" n'est pas toujours situé à la ligne 13665.

En plus, les ROI ne sont pas toujours dans le bon ordre! Le rectum peut être au début, au milieu, à la fin...

Le but est de trouver la valeur de la colonne à certaines lignes. En fait, tous les ROI m'intéressent, mais j'ai juste proposer des valeurs pour PTV et rectum, et après j'aurais tenter de faire la même chose pour les autres ROI.

Dans le fichier excel que je souhaite, je voudrais récupérer certaines valeurs de la colonne 2 pour tous les ROI présents.

Le problème, comme décrit plus haut, c'est que les noms des ROIS sont différents! En plus, il peut y avoir thyroïde, encéphale..., et il peut ne pas y avoir de rectum, ni vessie, ni tout autre ROI.

Voilà, pour le fichier patient en question, le fichier excel que je souhaite obtenir:

Dans ce fichier, la colonne B doit contenir tous les ROI présents.

Je vais te décrire exactement le fichier excel que je souhaite:

- ligne 1 : colonne A et B: rien

colonne C : juste écrire le mot "critère"

colonne D : juste écrire le mot "résultat"

-ligne 2: colonne A: juste écrire le mot "volumes cibles"

colonne B juste écrire le mot "PTV"

colonne C: juste écrire le mot "V 95"

colonne D : (ça se complique!) ici, je voudrais aller chercher dans le ROI PTV, la valeur de la colonne 2 correspondant à la valeur de la colonne 1 : 6270 (soit 95% de 6600), soit 304.97. Et cette valeur 304,97, je voudrais qu'elle soit divisée par le maximum de la deuxième colonne qui est toujours la première valeur de la deuxième colonne (313.88). Au final, dans la colonne D, je voudrais: 0.9716

-ligne 3: colonne A: rien

colonne B: juste écrire le mot "PTV-rectum"

colonne C: juste écrire le mot "V 95"

colonne D: je voudrais aller chercher dans le ROI PTV-rectum, la valeur de la colonne 2 correspondant à la valeur de la colonne 1 : 6270 (soit 95% de 6600), soit 302.36. Et cette valeur 302,36, je voudrais qu'elle soit divisée par le maximum de la deuxième colonne qui est toujours la première valeur de la deuxième colonne (304.28). Au final, dans la colonne D, je voudrais: 0.9937

-ligne 4: colonne A: juste écrire le mot "OAR"

colonne B : juste écrire le mot "rectum"

colonne C : juste écrire le mot " V60"

colonne D : je voudrais aller chercher dans le ROI rectum, la valeur de la colonne 2 correspondant à la valeur de la colonne 1 : 3960 (soit 60% de 6600), soit 17.84. Et cette valeur 17.84, je voudrais qu'elle soit divisée par le maximum de la deuxième colonne qui est toujours la première valeur de la deuxième colonne (33.57). Au final, dans la colonne D, je voudrais: 0.5314

-ligne 5: colonne A et B: rien

colonne C: je voudrais aller chercher dans le ROI rectum, la valeur de la colonne 2 correspondant à la valeur de la colonne 1 : 4620 (soit 70% de 6600), soit 13.26. Et cette valeur 13.26, je voudrais qu'elle soit divisée par le maximum de la deuxième colonne qui est toujours la première valeur de la deuxième colonne (33.57). Au final, dans la colonne D, je voudrais: 0.3949

-ligne 6: colonne A et B: rien

colonne C: je voudrais aller chercher dans le ROI rectum, la valeur de la colonne 2 correspondant à la valeur de la colonne 1 : 4884 (soit 74% de 6600), soit 11.62. Et cette valeur 11.62, je voudrais qu'elle soit divisée par le maximum de la deuxième colonne qui est toujours la première valeur de la deuxième colonne (33.57). Au final, dans la colonne D, je voudrais: 0.3461

-ligne 7: colonne A et B: rien

colonne C: la dernière valeur de la colonne 1 ayant une valeur de colonne 2 correspondante non nulle, soit ici: 6397. Et, celle valeur 6397, je voudrais la diviser par 100.

J'imagine que pour les lignes suivantes, tu as compris...^^

A chaque fois que tu vois le ROI PTV, tu dois trouver le V 95 correspondant. Pareil pour PTV-rectum. (ces deux ROI sont à classer dans "volumes cibles").

A chaque fois que tu vois le ROI rectum ou vessie, tu calcules V60, V70 , V74 et Dmax correspondant. A chaque fois que tu vois le ROI tfg ou tfd, tu calcules V50 correspondant. Tous ces ROI sont à classer dans "OAR").

J'espère que c'est à peu près clair.

Merci beaucoup!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Marguerite

Salut,

A lire un ou l’autre de tes commentaires, on pourrait croire que tu m’as mal compris. Lorsque tu dis : « Donc la ligne "Roi: rectum" n'est pas toujours situé à la ligne 13665. », il semble que j’avais dit clairement que j’avais saisi la chose.

J’ai essayé d’avancer un peu et ça semble aller du bon côté. Ca prend un peu de temps car je fais ça en dehors de mes heures de travail.

J’ai continué ma macro de manière à ce qu’elle recherche tous les « Roi » présents sur la feuille exportée. Suite à cela, on pourra déterminer sans problème le début et la fin de chacune des séries de données, ce qui rendra les différents calculs désirés assez aisés.

J’aimerais que tu testes ce bout de macro avec différents fichiers .txt.

Provisoirement, les colonnes F et G de la feuille « Essai » sont tout d’abord effacées puis chaque « Roi » trouvé est listé dans la colonne F avec, en regard, la ligne à laquelle il a été trouvé dans la feuille importée.

Si tu fais des essais avec plusieurs fichiers .txt, tu devrais avoir les feuilles exportées qui s’ajoutent au fur et à mesure (tu auras donc x onglets visibles), puisque pour l’instant ces feuilles ne sont pas effacées automatiquement. Mais les données de la feuille "Essai" sont quand même à chaque fois actualisées.

Peux-tu me dire comment s’appellent ces différentes feuilles exportées ? Normalement elles portent le nom du fichier .txt, non ? Ou est-ce que tous tes fichiers .txt traités s’appellent toujours identiquement ?

Autre question 1 : Peux-tu me dire s’il n’y a absolument aucune logique dans l’ordre des « Roi » ? Si tu pouvais par exemple me dire que les deux « Roi » PTV et PTV-Rectum sont toujours les deux premiers, ou toujours présents, ou qu’il y en a toujours au moins un des deux, ça pourrait aider pour la continuation de la macro.

Autres questions BIS : J’ai encore un peu de peine à comprendre tes calculs. Pour l’instant j’aimerais que tu me donnes des précisions uniquement pour l’un d’eux. Dans l’explication ci-dessous, j’ai compris que tu voulais toujours calculer le 95 % d’un chiffre, mais je n’ai pas compris comment tu trouvais ces 6600 ???? Et où trouves-tu ou comment calcules-tu ces 304.97 ???

marguerite_50 a écrit :

.... colonne D : (ça se complique!) ici, je voudrais aller chercher dans le ROI PTV, la valeur de la colonne 2 correspondant à la valeur de la colonne 1 : 6270 (soit 95% de 6600), soit 304.97.

A te relire.

NB : Si tes fichiers ne sont pas trop gros (après les avoir compressés éventuellement), il vaudrait mieux les joindre par l'intermédiaire des outils du Forum, ce qui rend leur lecture plus aisée.

joindre un fichier

Bonsoir,

Je suis désolée si je t'ai froissé. Effectivement, je n'avais pas bien saisi ce qui était pourtant clair

Un grand merci pour le travail que tu fournis en dehors de tes heures de travail

Les feuilles exportées portent effectivement le nom du fichier .txt, c'est-à-dire sous la forme: NOM PRENOM__NUMERO.txt (DURAND PIERRE__201103032 par exemple).

Concernant l'ordre des "ROI", le PTV est toujours présent et en première position, alors que le PTV-rectum peut ne pas être présent (s'il l'est, il sera toujours situé en deuxième position). En fait, le fichier texte à analyser est créé à partir d'un script sur le logiciel PINNACLE (logiciel dédié au domaine du médical, notamment à la radiothérapie). Si c'est plus facile, je peux m'arranger pour que les ROI soient toujours dans le même ordre?

Concernant les calculs, j'avoue ne pas avoir été très claire

Je travaille actuellement sur le fichier texte créé par le script de Pinnacle. Mon objectif est de modifier le script pour inscrire sur le fichier texte un nombre (la dose prescrite), qui diffère d'un patient à l'autre. Pour l'instant, je fais une étude sur des patients qui ont tous une dose prescrite de 6600. Si je réussi à comprendre la macro que tu réalises, j'essaierai de l'adapter pour qu'elle puisse "lire" la valeur de la dose prescrite dans le fichier texte, et qu'elle fasse des calculs à partir de cette valeur. Donc pour l'instant, 6600 est une valeur fixe, qui ne trouve pas dans le fichier texte.

Comme tu l'as compris, je voudrais calculer 95% de 6600, soit 6270. Dans les données relatives au PTV, dans la première colonne, se trouve ce nombre 6270 (à la ligne 6286 du fichier). En regard de ce nombre, il y a écrit 304.97.

Merci pour le conseil du fichier joint

Cordialement

Marguerite

Salut,

Je crois que j’ai bien avancé avec ton fichier.

Tu m’as dit que tu pouvais modifier l’ordre des Roi si nécessaire. Ceci ne serait absolument pas nécessaire en ce qui concerne les Roi PTV et PVT-RECTUM puisque tu m’as dit qu’ils apparaissent toujours et premier et – si présent - en deuxième. Par contre pour les autres Roi, je ne me suis pas soucié de leur ordre et les Roi tfd et tfg apparaissent au milieu des autres. Donc, je te laisse modifier toi-même à la base l’ordre des Roi OAR si tu le désires. Mais garde quand même en mémoire que je pourrais aussi le faire à la fin de la macro si c’est compliqué à modifier chez toi.

Comme je n’ai pas très bien compris comment on pourrait récupérer la valeur de la dose prescrite de 6600, je te montre comment on peut utiliser une telle valeur d’une autre manière. J’ai donc inscrit ce chiffre de 6600 dans la cellule I1 et la macro va lire cette valeur à un certain moment donné, de manière à pouvoir en calculer des pourcents (50%, 60%, ……95 %). Si tu peux mieux m’expliquer comment on pourrait aller chercher cette valeur automatiquement – par exemple sur la feuille exportée (?) – je modifie ma macro en conséquence. Autrement, est-ce que tu voudrais pouvoir indiquer cette valeur d’une manière manuelle par l’intermédiaire d’une InputBox lors du lancement de la macro ???

Dans tous les cas, il y a le problème des arrondis. Pour l’instant, les 50%, 60%, ….95% de 6600 donnent toujours des chiffres ronds. Est-ce possible que la dose prescrite fois ces pourcents donnent des chiffres décimaux ? Si oui, il faudra prévoir de modifier la macro avec des arrondis ; mon code ne peux effectivement pas aller chercher la valeur inscrite sur la ligne 3304,54

J’ai encore un problème au sujet des «Dmax». Tu m’indiques que la dernière ligne comportant une valeur supérieure à zéro pour le Roi Rectum est la 6397 (ligne Excel 20069). Mais tout d’abord ceci est incorrect car cette ligne n’est pas la dernière comportant une valeur supérieure à zéro mais la première comportant un zéro et deuxièmement il y a encore une valeur supérieure à zéro pour ce Roi à la ligne 6823 (Ligne Excel 20496). Y a-t-il donc une logique de ne pas tenir compte de cette dernière ligne (qui contient apparemment une valeur pour tous les Roi) ? Et s’il ne faut juste pas tenir compte de cette dernière ligne, quelle est la logique de prendre la première ligne avec zéro plutôt que la dernière sans ?

A part ça, il me semble que le reste fonctionne bien. Enfin, en tout cas au niveau de ma macro Par contre je pense que tu t’es trompée dans le calcul du résultat tfd dans ton fichier de démonstration. Tu indiques que tu désires une valeur de 0.005043 alors que la valeur de la ligne 3300 du Roi tfd (ligne Excel 23797) est de 0.93 et que la valeur de la ligne 1 du Roi tfd (ligne Excel 20498) est 91.22 (et donc 0.93 / 91.22 = 0.010195, résultat trouvé par ma macro).

Par la suite, as-tu déjà pensé à ce que tu désires faire avec ce fichier ? L’enregistrer sous le nom du patient ? Ou en effacer la feuille exportée et simplement l’avoir prêt pour une nouvelle utilisation ? Eventuellement que l’on devrait liquider les autres problèmes avant de voir cette partie, mais rien ne t’empêche d’y réfléchir déjà.

Cordialement.

Bonjour,

Quel travail accompli en ci peu de temps!

Par contre, après avoir cliqué sur Transfert, choisi mon fichier, cliqué deux fois sur suivant puis sur Terminé, une fenêtre d'erreur s'affiche. Il est écrit: "erreur d'exécution '13' Impossible de lire la propriété Match de la classe WorksheetFunction.

Lorsque je clique sur Débogage, une ligne est surlignée en jaune dans le code: il s'agit de la ligne:

Dividende = .Cells(Application.WorksheetFunction.Match(Dose_prescrite * 0.95, .Range("A1:A" & DerLig), 0), 2)

située juste en dessous du commentaire "résultat PTV".

Concernant l'ordre des Roi, je vais effectivement essayé d'en modifier l'ordre.

Pouvoir indiquer la valeur de la dose prescrite par l’intermédiaire d’une InputBox serait l'idéal! Je ne savais pas que c'était possible. Par contre, la dose réelle prescrite serait ici de 66. Je m'explique: Lorsque l'utilisateur entre la valeur de dose prescrite dans la future InuptBox, il entre une valeur comprise en 30 et 78. Il faudrait alors multiplier cette valeur par 100, et calculer les pourcentages à partir de la dose entrée par l'ulisateur *100. Par exemple, si la valeur 78 est entrée, tous les pourcentages sont calculés à partir de la valeur de dose prescrite 7800.

Mais en réfléchissant bien, faudrait que l'InputBox soit encore plus précise. Quand l'utilisateur a choisi son fichier texte, une InputBox doit apparaître et poser la question suivante: "Quelle est la localisation?". Une seule réponse parmi ces choix de localisation doit être cochée: "prostate", "prostate + VS", "prostate + VS + zone ganglionnaire", "rectum", "col utérin", "oesophage", "ORL". Serait-ce possible, suivant la case cochée, d'afficher des ROI différents?

Par exemple, si la localisation choisie est "rectum", il faudrait travailler sur les Roi suivants: PTV, vessie, intestin, tfg, tfd.

Si ce genre de choses t'est possible, je te ferai la liste des ROI à travailler par localisation.

Et une fois que l'utilisateur a choisi sa localisation, une autre fenêtre s'affiche et pose la question suivante: "Quelle est la dose prescrite?", à l'utilisateur ensuite de rentrer la valeur de la dose prescrite.

Tu as raison de souligner le problème des arrondis. Il faudrait dans ce cas arrondir à la valeur supérieure. Si l'exemple que tu donnes se présente, la valeur inscrite sera à aller chercher à la ligne 3305.

Tu as raison concernant la dernière ligne comportant un zéro pour le rectum: il s'agit de la ligne 6396. Et il ne faut pas tenir de la dernière ligne pour chaque Roi, parce que pour l'instante je ne sais pas trop d'où viens cette valeur... Il faut prendre la dernière ligne avec un zéro.

Encore une fois tu as raison! le résultat que je souhaite afficher pour le Roi tfd est bien 0.010195...

Cordialement

Marguerite

Pour l’instant ma macro charge une variable Dose_prescrite sur la base de la cellule I1. Dans mon fichier exemple, cette cellule à la valeur 6600.

Dans la ligne qui bloque, je multiplie cette variable Dose_prescrite par 95 % (Dose_prescrite * 0.95) afin de trouver la valeur désirée (dans notre exemple 6600 * 95 % = 6270. Cette valeur de 6270 est elle-même utilisée afin d’être recherchée par la fonction Match (Application.WorksheetFunction.Match). Si ça bloque, il peut notamment y avoir un premier problème : éventuellement que la valeur de la cellule I1 est une valeur qui, multipliée par 95 %, ne donne pas un chiffre rond. Si ce n’est pas ça, il faudrait que je voie ton fichier réel. Inutile de te dire que cette macro a été testée plusieurs fois chez moi et qu’elle fonctionne parfaitement Raison pour laquelle je présume que tu testes ta macro sur un autre fichier (ce qui complique toujours les choses, bien entendu).

Tes demandes suivantes ne semblent pas insurmontables, mais ça commence quand même à prendre de l’ampleur. Je n’ai pas compris si le fait de poser la question « Quelle est la localisation ? » remplaçait la question sur la dose prescrite ou si les deux seraient quand même nécessaires. Selon ce que je pense, chaque localisation aurait une dose prescrite qui lui correspondrait, non ? Si non, on peut bien poser deux questions.

Ensuite, lorsque tu dis que "si la localisation choisie est rectum, il ne faudrait travailler que sur les Roi , y, z, etc.", tu veux dire que ce sont les seuls Roi qui devraient apparaitre sur la feuille nommée pour l’instant « Essai » ?

marguerite_50 a écrit :

Si ce genre de choses t'est possible, je te ferai la liste des ROI à travailler par localisation.

J'attends aussi cette liste.

Amicalement.

J'ai relancé la macro avec le fichier texte envoyé précédemment (que je remets en pièce jointe), mais l'erreur est toujours présente. Je ne comprends d'où peut venir ce problème...



J'ai lancé la macro avec le fichier texte que j'avais mis en annexe

le voici:

mais ça ne fonctionne pas... C'est bien avec celui-ci que tu travailles?

Des 3 fichiers que tu me joins maintenant je n'en ai ouvert qu'un, présumant qu'il s'agit 3 x du même.

Celui-ci ne comporte que deux ROI de seulement 1367 lignes chacun. Comment veux-tu que ma macro trouve la 6270ème ligne de l’un ou de l’autre de ces ROI ?

Dans un tel cas, quelles valeurs doivent être trouvées ?

Le premier fichier que tu m’avais fourni comportait 6 ROI à 6823 lignes chacun. On en a quand même déjà pas mal parlé, non ?

A te relire.

Bonjour,

Oui effectivement tu as raison. Là je me sens vraiment stupide

Mais avec le premier fichier posté (https://www.cjoint.com/c/CGeoFDYHlD3), je n'arrive pas à exécuter la macro...

(le fichier texte est trop gros, même compressé, pour être envoyé en fichier joint sur le site)

Merci

Marguerite

Salut,

J’ai refait un ou deux essais et me suis rendu compte d’un problème qui explique peut-être la chose.

En fait, si le nom du fichier .txt utilisé est trop long, le code bloque sur la ligne With Sheets(Nouvelle_Feuille) qui sera alors surlignée en jaune. Dans un tel cas, le nom de la feuille Excel nouvellement créée par le code et placée à côté des autres feuilles de ton fichier de base ne correspond pas au titre de ton fichier .txt ; ce nom est tronqué sur la droite. Ceci vient – je pense – du fait que le nombre de caractères dans le nom d’un onglet est limité.

marguerite_50 a écrit :

Les feuilles exportées portent effectivement le nom du fichier .txt, c'est-à-dire sous la forme: NOM PRENOM__NUMERO.txt (DURAND PIERRE__201103032 par exemple).

Ton indication ci-dessus semble confirmer mes présomptions.

S’il s’agit vraiment de ce problème, il faudra voir comment on pourra contourner la chose.

Avant que je me lance tête baissée dans une tentative de solution, peux-tu me dire ce qu’il en est chez toi ?

Suite à des problèmes privés, je risque de devoir prendre un peu de temps pour la suite de ce fil. Merci de ta compréhension.

Amicalement.

Bonjour,

J'ai renommé le fichier du patient sous le nom: patient.txt, pour voir s'il s'agissait comme tu le penses d'un problème de longueur trop importante du nom du fichier. Mais la macro ne s'exécute pas non plus.

La ligne With Sheets(Nouvelle_Feuille) ne semble pas poser problème. C'est la ligne située sous le commentaire 'Résultat PTV :

Dividende = .Cells(Application.WorksheetFunction.Match(Dose_prescrite * 0.95, .Range("A1:A" & DerLig), 0), 2)

qui est surlignée en jaune en premier.

A chaque fois qu'une ligne posait problème, je l'ai mise en commentaire pour voir où se situait la ligne suivante comportant une erreur. Apparemment, toutes les lignes comportant .Cells posent souci. Vois-tu d'où pourrait venir le problème?

Merci

Cindy

Salut,

Jai pris le fichier que tu m’as fourni le 4 juillet à 2:43 pm et l’ai enregistré sous un nom quelconque - mais pas trop long - et j’ai repris sur le fil mon "fichier excel_a_obtenir_V3" fourni le 3 juillet que j’ai également (re)enregistré chez moi. Sur la base de ces deux fichiers mon code fonctionne parfaitement.

Je ne sais pas quelles autres actions tu exécutes, mais si tu ne peux pas me dire exactement ce que tu fais d’autre que moi, je ne vais pas pouvoir t’aider.

Ou alors est-ce que quelqu’un qui suit ce fil, peut éventuellement fournir une piste ou au moins confirmer ou infirmer que mon code fonctionne chez lui ????

A vous relire.

Bonsoir

Ton code ne passe pas chez moi, mêmes erreurs que pour marguerite_50

Une piste à explorer : Les valeurs en colonne B sont du texte

Salut Banzai et merci pour ton intervention

Selon tes informations, je présume que le code passe chez moi et non pas chez vous car en Suisse nous utilisons le point comme séparateur décimal et non pas la virgule. Le format que vous devez avoir dans la colonne B de la nouvelle feuille exportée doit alors probablement être du texte AVEC DES POINTS (c’est en tout cas ce que j’ai chez moi), ce qui expliquerait que la suite du code ne passe pas chez vous.

Cindy, je te propose alors deux solutions possibles mais difficiles à tester puisque inutiles chez moi Ces deux possibilités fonctionnent toutefois également indifféremment chez moi.

Teste alors cette macro telle que livrée et – si ça ne passe toujours pas – mets en commentaire la ligne Range("B17:B" & DerLig).NumberFormat = "0.00" de la variante 2 du passage ci-dessous et active les trois lignes de la variante 1.

'-----------------Transformation du format de la colonne B en format non-texte
'    'VARIANTE 1
'    For n = 17 To DerLig
'        .Range("B" & n) = .Range("B" & n) * 1
'    Next n
    'VARIANTE 2
    Range("B17:B" & DerLig).NumberFormat = "0.00"

La variante 1 est assez lente. Cependant, si c’est la seule bonne solution, on pourra essayer d’accélérer les choses en passant par un tableau.

A te (vous) relire.

Bonjour Yvouille,

Merci Banzaï pour ton intervention

Alors, j'ai testé les deux variantes, mais cela ne fonctionne pas.

Par contre, bonne nouvelle: j'ai remplacé tous les points de la colonne B et les ai remplacés par des virgules. Et là ton code fonctionne parfaitement avec les deux variantes!

N'y-a-t-il pas un moyen de réaliser ce remplacement des points en virgules automatiquement?

Merci

Salut,

Comme je te l’ai dit, il était difficile pour moi de trouver une solution à un problème que je n’ai pas

En privé, Banzai m’a soufflé ceci :

Banzai64 a écrit :

Je te propose une alternative pour ouvrir le fichier texte et pour transformer les textes en nombres

Dim Fichier_traité As Variant
  Fichier_traité = Application.GetOpenFilename("Texte (*.txt), *.txt", , "Sélection du fichier texte", , False)
  If Fichier_traité = False Then Exit Sub
 Workbooks.OpenText Fichier_traité
 With ActiveWorkbook
    .Sheets(1).Columns("B").Replace what:=".", replacement:=".", lookat:=xlPart
    .Sheets(1).Copy Before:=ThisWorkbook.Sheets(1)
    .Close savechanges:=False
  End With
Banzai64 a écrit :

Avec ces quelques modifications ton code fait son boulot

A tester.

Cordialement.

NB : Ah, si seulement les Français se décidaient à utiliser le même système décimal que le reste du monde ..... ou presque

Rechercher des sujets similaires à "extraire donnees partir fichier texte"