IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

optimisation macro recherche dans un fichier texte [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 13
    Par défaut optimisation macro recherche dans un fichier texte
    Bonjour,
    J'ai réalisé une macro qui récupérée une valeur dans un fichier xls et cherche cette valeur dans un fichier texte, une fois trouver je copie la ligne et la ligne suivante du fichier texte. Par contre il faut que la macro tourne pendant 30min pour traitement 9000 cellules.
    Je souhaite savoir s'il y a un moyen pour optimiser la recherche.
    Merci d'avance



    Cf-code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub recherche()
     
    Dim strLigne As String
    Dim findval As String
    Dim i As Integer
     
    For i = 1 To 9000
    Open "C:\bluebook2.txt" For Input As #1
    findval = Cells(i, 1).Value 'recupperation de l'information à chercher
     
     
    Do While Not EOF(1)
     
     
     
    Line Input #1, strLigne 'lecture du fichier bluebook2 ligne par ligne
     
    If InStr(1, strLigne, findval, 1) > 0 Then 'condition si l'information trouvé
     
    Cells(i, 2) = strLigne 'copier la ligne en cours de lecture
    Line Input #1, strLigne 'lecture de la ligne suivante
    Cells(i, 3) = strLigne 'copier la ligne suivante
     
    End If
     
    Loop
    Close #1
     
    Next i
     
    MsgBox "traitement terminer"
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Difficile de te proposer une optimisation sans autres précisions, à commencer par la structure même du fichier texte de recherche.
    Tu ne précises par ailleurs pas si ce fichier peut ou non contenir plusieurs occurrences de la valeur recherchée.
    Il semble que non, puisque tu ne remplis que deux cellules.
    Mais si c'est vraiment le cas (une seule occurrence) : quitte donc ta boucle dès que cette occurrence a été trouvée !

    J'observe par ailleurs que tu utilises Instr pour déterminer la présence d'une occurrence. Cela me parait risqué puisque rien ne garantit que la seule présence d'une sous-chaîne de caractères fait que la ligne est celle recherchée ! Imagine que la valeur recherchée soit "Jean" et que ton fichier texte contienne une ligne :
    "Le frère de Jean est mignon"
    et une ligne
    "Le père de Jean est agriculteur"
    Instr reconnaîtra comme occurrences tant la première que la seconde de ces deux lignes. Et comme tu continues de surcroît jusqu'à la fin de ta boucle, ce sera la seconde qui, in fine, sera écrite dans ta cellule d'accueil !

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par n.elamari Voir le message
    Je souhaite savoir s'il y a un moyen pour optimiser la recherche.
    Bonjour,

    ne connaissant pas ton niveau de codage en VBA et comme Excel peut directement ouvrir un fichier texte
    alors il est tellement logique d'utiliser les fonctionnalités internes d'Excel et ce même en VBA !

    Donc ouverture du fichier texte dans une feuille de calculs,
    utilisation de la recherche d'Excel pour trouver une occurrence (voir Find dans l'aide VBA)
    ou encore directement via une simple formule de calculs …
    Sans compter l'activation du Générateur de macros livrant une base de code sur un plateau !

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 13
    Par défaut
    Bonjour,

    Merci pour la repense pour Instr je suis obligé de la garder car je doit prendre en compte que je peux avoir le contenu majuscule ou minuscule, pour la deuxième question ou la valeur je la trouve qu'une fois dans le fichier xls.
    Moi je voulais juste savoir quand je trouve la cellule dans le fichier txt et je copire la ligne 1 et 2, je passe au traitement de la cellume suivante. Est ce que c'est possible?

    Merci d'avance

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si tu peux fournir un exemple de fichier TXT en bidonnant le donné confidentielles!

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 161
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Citation Envoyé par n.elamari Voir le message
    pour Instr je suis obligé de la garder car je doit prendre en compte que je peux avoir le contenu majuscule ou minuscule

    placer en haut du module contenant ta procédure

    afin de ne pas tenir compte de la casse

  7. #7
    Invité
    Invité(e)
    Par défaut
    Si j'ai bien compris si la valeur recherchée n'existe pas dans le fichier texte tu la rajoute?

    Regarde avec un connexion ADO!

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    une chose étonnante que l'on t'a pas fait remarquer c'est ouverture du fichier en mémoire a chaque tour de boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 9000
    Open "C:\bluebook2.txt" For Input As #1
    findval = Cells(i, 1).Value 'recupperation de l'information à chercher
    heu... pourquoi?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 13
    Par défaut
    ci-joint un exemple sachant que j'ai plus de 100000 ligne de fichier texte et 25100 variables à chercher. pour info la variable que je cherche a partir du fichier xls et unique dans le fichier texte ( pas de doublon"
    Fichiers attachés Fichiers attachés

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Alors Patrick un dictionnaire - ou une collection - pour la paire clef / n° ligne et tableau en mémoire …

    Possible aussi par formules de calculs …

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 13
    Par défaut
    bonjour

    concernant l'ouverture du ficher à chaque boucle je ne trouve pas d'autres chose, si vous avez des idées je suis preneur. Merci d'avance

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    concernant l'ouverture du ficher à chaque boucle je ne trouve pas d'autres chose, si vous avez des idées je suis preneur.
    Une idée ? Oh que oui ! l'ouvrir avant de boucler, pardi.
    Enfin quoi : imagine que tu doives chercher un slip ,et unj tee-shirt dans le tiroir d'une commode. Tu vas, toi, :
    - ouvrir le tiroir
    - y chercher le slip et l'en extraire
    - refermer le tiroir
    - rouvrir le tiroir
    - y chercher ton tee-shirt et l'en extraire
    - refermer le tiroir
    ???

    PS : Je n'ai pas ouvert ton classeur (lire ma signature à ce sujet).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche dans un fichier texte
    Par Yazoo70 dans le forum C++
    Réponses: 7
    Dernier message: 12/06/2007, 09h31
  2. recherche dans un fichier texte en perl(débutant)
    Par Shyboy dans le forum Langage
    Réponses: 3
    Dernier message: 05/07/2006, 00h53
  3. [VB]Recherche dans un fichier texte
    Par mirascheat dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/09/2005, 13h11
  4. Recherche dans un fichier texte volumineux.
    Par Actarus69 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 27/07/2005, 18h39
  5. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo