Optimisation de lecture d'un fichier texte
Bonjour à tous,
Pour une macro que je fais j'ai besoin de décoder des codes dans un tableur. Pour cela un fichier texte existe comportant sur chaque ligne les codes et leur décodage.
Jusqu'à maintenant pour chaque code je lisais le fichier .txt ligne par ligne jusqu'à trouver son décodage.
Cela fonctionne mais c'est un fichier très lourd et on peut parfois attendre 6-7 secondes pour décoder un code.
Ma question est donc, pensez vous qu'il serait plus rapide de stocker tous les codes/décodages dans un dictionnaire vba au démarrage, quitte à perdre 10-15 secondes au départ ? Le vba est-il adapté à stocker une aussi grande quantité de données (914 000 paires
Ou alors la lecture ligne par ligne est finalement la méthode la plus optimisée ? C'est ce que j'ai d’ailleurs principalement trouvé sur les forums.
Merci !
Bonjour,
Question probablement bête mais n'existe-t-il pas une alternative POWER QUERY avec une jointure ? C'est à dire connecter votre txt au classeur puis réaliser une jointure de la table à décoder VS la table txt et renvoyer le résultat ? Avez vous vérifié cette alternative ?
Tout dépend de la présentation de vos données que ce soit dans le classeur ou le txt.
Cdlt,
PS : Je ne suis pas un expert POWER QUERY mais j'ai quelques légères bases.
Question probablement bête mais n'existe-t-il pas une alternative POWER QUERY avec une jointure ? C'est à dire connecter votre txt au classeur puis réaliser une jointure de la table à décoder VS la table txt et renvoyer le résultat ? Avez vous vérifié cette alternative ?
Tout dépend de la présentation de vos données que ce soit dans le classeur ou le txt.
Bonjour,
Alors je ne connais pas cette alternative mais je vais me renseigner. Pour ce qui est des données, le txt est organisé en 1 ligne pour 1 code + son décodage séparé par une tabulation. Dans le tableur une ligne correspond à 1 patient qui contient 12 champs pouvant chacun contenir un code ou non.
Merci
Bonjour,
Serait-il possible de nous fournir un échantillon des 2 afin que l'on voit si c'est possible ? Mais au vu des informations ça m'en a l'air.
Par avance merci.
Cdlt,
Voilà, merci de m'aider
Sinon j'ai testé avec un dictionnaire et ça fonctionne plutôt très bien, en comptant 15-20 secondes le temps qu'il se génère mais après ça divise clairement mon temps de traitement.
Maintenant si ta solution est plus propre et safe je veux bien regarder ça.
Je met en pièce jointe le tableur codé, les codes sont ces suites de 4-5 lettres après les ":" dans certaines cellules.
Bonjour,
J'arrive à obtenir quelque chose mais je ne suis pas sûr d'avoir la bonne chose ou le bon raisonnement. Je m'explique de ce que j'ai compris. Mon exemple se fait sur la cellule C37 du classeur où j'ai "29:SJA" et la première ligne du txt où j'ai remplacé en 1ère ligne SAYY par SJA pour avoir une correspondance (sinon je n'en trouvais aucune) :
- J'extrait pour chaque cellule la dernière partie après les ":" donc "SJA" et ne conserve que cette partie
- Je fais chercher la correspondance de cette séquence dans le fichier txt ici la première ligne. Je remplace "SJA" par la séquence c'est à dire "07:01/07:06/07:18/07:19/07:21/07:52/07:65/07:69/07:77/07:81/07:83/07:98N/07:103/07:104N/07:106/07:110/07:111/07:112/07:113/07:115/07:116/07:118/07:119/07:120/07:122/07:124/07:128/07:131/07:132/07:150Q/07:153/07:156/07:162/07:164N/07:165/07:166/07:170"
- Ma formule C37 du classeur devient la séquence présentée ci-dessus.
Ais-je tout faux ? HLA je suppose que ce sont des allèles quelque chose comme ça, mais le reste de la codification je reste perplexe (à quoi correspond 29, pourquoi a-t-on parfois 3 lettres, parfois 2, parfois que des chiffres, etc ...)
Ce qui me donne le résultat :
Si j'ai faux, qu'y a-t-il à modifier ?
En vous remerciant par avance pour les explications détaillées.
Cdlt,
Et bien oui c'est exactement ce que je fais avec ma recherche dans le txt, c'est parfait. Oui c'est du HLA en effet, les codes symbolisent les ambiguïtés d'allèles des patients et servent à protéger les informations du typage lorsque les données sont transférées entre différents centres.
Et oui ces codes peuvent aller de 2 à 5 lettres.
J'ai hâte de voir votre code maintenant
Merci énormément d'avoir pris de ton temps pour ça !
Bonjour,
Bon vous allez sûrement prendre peur mais comme vous ne connaissez à priori pas POWER QUERY j'ai essayé de détaillé au maximum afin que vous puissiez reproduire sur votre vrai fichier et explorer quelque peu l'outil.
Ca peut paraître long mais une fois les connexion et la requête avec table structurée mise en place il n'y a plus qu'à faire Données > Actualiser tout pour que tout se fasse tout seul. Ca ne passe pas par macro, donc potentiellement plus fiable si les structures ne changent pas.
Si vous bloquez à une étape dites moi laquelle.
Cdlt,
PS : J'ai passé pas mal de temps pour faire ces captures d'écran, j'espère que cette solution vous satisfera !
Merci beaucoup pour ce tuto je ne connaissais pas du tout. Ça semble très pratique effectivement je vais tester de mon coté et je reviendrais si j'ai un soucis.
Encore merci pour le temps passé et pour la solution