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

VBA Discussion :

Trouver un mot et sélectionner les lignes suivantes


Sujet :

VBA

  1. #1
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut Trouver un mot et sélectionner les lignes suivantes
    Bonjour,

    j'aimerais connaitre la macro qui me permettrais de trouver un mot se trouvant dans un fichier TXT puis de sélectionner l'ensemble des lignes qui suivent ce mot. Cela a pour but de modifier des mots dans l'ensemble de la sélection.

    Petite précision : cela doit se faire en ouvrant le fichier dans la mémoire et non de le copier dans Excel.

    N'hésitez pas à me poser les questions nécessaires si je n'ai pas été assez clair dans mes explications.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    C'est tout à fait faisable, mais il faudrait donner plus de contexte, comme par exemple, si tu as un fichier avec
    A
    B
    C
    D
    Si tu cherches A, on prend toutes les lignes jusqu'à la fin du fichier ?

    Une fois que tu as tes lignes, tu les modifies, et tu en fais quoi en fin de compte ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par breizhgen Voir le message
    Bonjour,

    j'aimerais connaitre la macro qui me permettrais de trouver un mot se trouvant dans un fichier TXT puis de sélectionner l'ensemble des lignes qui suivent ce mot. Cela a pour but de modifier des mots dans l'ensemble de la sélection.

    Petite précision : cela doit se faire en ouvrant le fichier dans la mémoire et non de le copier dans Excel.

    N'hésitez pas à me poser les questions nécessaires si je n'ai pas été assez clair dans mes explications.

    Merci
    bonjour breizhgen
    pour l'ouverture en mémoire de ton fichier texte
    même chose que ta discussion précédente
    selon le poids de ton fichier choisir le mode d'ouverture entier ou ligne par ligne
    pour le reste les fonction string feront tres bien l'affaire
    un exemple de ton fichier txt et le mot en question
    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

  4. #4
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    bonsoir à vous deux,

    voici un extrait de mon fichier texte :

    essai.txt

    et voici ce que je cherche à faire :

    Début de la recherche : 0 @S1@ SOUR
    Chercher 1 TITL
    Remplacer par 1 ABBR
    Chercher 1 TEXT
    Remplacer par 2 CALN
    Chercher 2 CALN
    Remplacer par 1 REPO @R8@\n2 CALN
    Chercher SOUR
    Remplacer par SOUR\n1 QUAY 3\n1 TITL Registres numérisés\n1 TYPE Deed
    Chercher 0 @S
    Remplacer par 3 MEDI Microfilm\n0 @S

    cela doit être réalisé dans chaque bloc 0 @Sxx@ SOUR (les xx étant un chiffre différent), et seulement dans ces blocs.

    les \n sont des retours à la ligne qui, si j'ai bien tout compris doivent être écrit comme ceci : & vbCrLf &

    puis juste avant la ligne 0 TRLR ajouter :

    0 @R8@ REPO
    1 NAME Archives départementales du Morbihan
    1 ADDR 80, rue des Vénètes
    2 CONT CS 52405
    2 CONT 56010 VANNES Cedex
    1 PHON 02 97 46 32 52
    1 EMAIL archives@morbihan.fr
    1 WWW https://archives.morbihan.fr/

    la ligne TRLR est toujours la dernière ligne du fichier

    Merci pour votre aide

    David

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    dis moi il n'y a pas un soucis dans ton raisonnement la
    Chercher 1 TEXT
    Remplacer par 2 CALN
    Chercher 2 CALN
    Remplacer par 1 REPO @R8@\n2 CALN
    a moins que tu ais les deux dans le texte

    au quel cas tu reprend le dernier exemple tu enlève 2/3 truc et les lignes de replace tu les remplace par les replace dont tu a besoins
    je te laisse un peu essayer tout seul ca te permettra de comprendre le principe que j'ai employé dans l'autre
    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

  6. #6
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    dis moi il n'y a pas un soucis dans ton raisonnement la

    a moins que tu ais les deux dans le texte

    au quel cas tu reprend le dernier exemple tu enlève 2/3 truc et les lignes de replace tu les remplace par les replace dont tu a besoins
    je te laisse un peu essayer tout seul ca te permettra de comprendre le principe que j'ai employé dans l'autre
    bien vu en fait je peut me passer d'une manip et remplacer 1 TEXT par 1 REPO @R8@\n2 CALN directement (l'art de se compliquer la vie )

    tu as totalement raison, il faut que me lance, d'ailleurs j'ai adapter ce petit script peux tu me dire ce que tu en pense et si il y a un moyen de ne pas recopier chaque fois le replace :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Sub NPFX()
     
    Dim Chemin As String, F1 As String, F2 As String, T As String
    Dim ChaineSource As String, ChaineDestin As String
     
        'A adapter...
    ChaineSource = "1 NPFX"
    ChaineDestin = "2 NPFX"
        Chemin = "C:\Users\JAN\Desktop\"
        F1 = "jan 2.txt"
        F2 = "jan 2.txt"
     
        'Traitement
        With CreateObject("Scripting.FileSystemObject")
            'Ouvre le fichier texte et mémorise le contenu
            With .OpenTextFile(Chemin & F1, 1)
                T = .readall
                .Close
            End With
            'Traite le contenu
            T = Replace(T, ChaineSource, ChaineDestin)
            'Crée le fichier texte modifié
            With .CreateTextFile(Chemin & F2, True)
                .WriteLine T
                .Close
            End With
        End With
     
    ChaineSource1 = "1 NSFX"
    ChaineDestin1 = "2 NSFX"
     
        'Traitement
        With CreateObject("Scripting.FileSystemObject")
            'Ouvre le fichier texte et mémorise le contenu
            With .OpenTextFile(Chemin & F1, 1)
                T = .readall
                .Close
            End With
            'Traite le contenu
            T = Replace(T, ChaineSource1, ChaineDestin1)
            'Crée le fichier texte modifié
            With .CreateTextFile(Chemin & F2, True)
                .WriteLine T
                .Close
            End With
        End With
     
    ChaineSource2 = "1 NICK"
    ChaineDestin2 = "2 NICK"
     
        'Traitement
        With CreateObject("Scripting.FileSystemObject")
            'Ouvre le fichier texte et mémorise le contenu
            With .OpenTextFile(Chemin & F1, 1)
                T = .readall
                .Close
            End With
            'Traite le contenu
            T = Replace(T, ChaineSource2, ChaineDestin2)
            'Crée le fichier texte modifié
            With .CreateTextFile(Chemin & F2, True)
                .WriteLine T
                .Close
            End With
        End With
    End Sub

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    le FSO c'est BOFF je prefere open
    d'autant plus que tu utilise readall qui prend tout le texte tu risque retomber dans les plantage du a poids du fichier


    et le must
    tu ouvre F1 tu modifie NblablazPX et tu sauve en F2
    ensuite tu ré ouvre F1!!!!!!!!!
    tu modifie NblablazSPX et tu sauve en F2
    résultat tu a perdu ta première passe de modif

    tu peux m'expliquer pourquoi tu fait pas tes deux replaces en une seule ouverture/fermeture
    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

  8. #8
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    le FSO c'est BOFF je prefere open
    d'autant plus que tu utilise readall qui prend tout le texte tu risque retomber dans les plantage du a poids du fichier


    et le must
    tu ouvre F1 tu modifie NblablazPX et tu sauve en F2
    ensuite tu ré ouvre F1!!!!!!!!!
    tu modifie NblablazSPX et tu sauve en F2
    résultat tu a perdu ta première passe de modif

    tu peux m'expliquer pourquoi tu fait pas tes deux replaces en une seule ouverture/fermeture
    je me douter que ce n'étais pas le top

    comme ce n'est pas le sujet de mon post, je vais revenir à ce dernier pour ne pas me disperser

    Donc j'ai tester en reprenant ton script avec INDI, en démarrant par ce que tu avais fait, à savoir un contrôle avec une msgbox. Résultat hyper décevant car mon fichier est trop lourd et il mets une plombe avant de trouver le 1er 0 @S...

    Je me dit que la solution pour gagner en rapidité serait de trouver la 1ère ligne qui sera toujours 0 @S1@ SOUR de sélectionner la totalité des lignes jusqu'à 0 TRLR, de les couper et de les recopier dans un fichier txt vierge. Puis une fois les remplacements effectués, opération inverse coller la totalité des lignes juste avant 0 TRLR et supprimer le fichier qui a servit a la modif.

    Qu'en pense tu ?

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut RE
    la tu es en train de me perdre
    traitons un sujet a la fois sil te plait
    tu est sur des replace pour l'instant
    si tu me dit qu'avec FSO tu n'a pas de soucis de mémoire sur tes fichiers
    on fait les 3 replaces d'un coup et c'est tout
    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
    Sub NPFX()
        Dim Chemin As String, F1 As String, F2 As String, T As String
       ' Dim ChaineSource As String, ChaineDestin As String
        dim NPFX$,NSFX$,NPFX2$,NSFX2$
        NPFX = "1 NPFX"
        NPFX2 = "2 NPFX"
        NSFX = "1 NSFX"
        NSFX2 = "2 NSFX"
        NICK = "1 NICK"
        NICK2 = "2 NICK"
        Chemin = "C:\Users\JAN\Desktop\"
        F1 = "jan 2.txt"
        F2 = "jan 2.txt"
        'Traitement
        With CreateObject("Scripting.FileSystemObject")
            'Ouvre le fichier texte et mémorise le contenu
            With .OpenTextFile(Chemin & F1, 1)
                T = .readall
                .Close
            End With
            'Traite le contenu AVEC LES REPLACE
            T = Replace(T, NPFX, NPFX2)
            T = Replace(T, NSFX, NSFX2)
            T = Replace(T, NICK, NICK2)
            'Crée le fichier texte modifié
            With .CreateTextFile(Chemin & F2, True)
                .WriteLine T
                .Close
            End With
        End With
    End Sub
    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

  10. #10
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut Re
    Bonjour Patrick,

    merci pour ce bout de script,je viens de modifier les miens et fait les adaptations en fonction.

    pourrais tu m'expliquer comment faire pour sélectionner la totalité d'un texte après une phrase précise, le couper et le coller dans un nouveau fichier.

    Je joints un fichier texte exemple, le texte à couper se situe à partir de la ligne "0 @S1@ SOUR"

    Merci pour ton aide

    tests.txt

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    je te donne le principe

    texte=
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     toto mange des bannannes comme un singe
    il les manges quelques fois avec du chocolat
    mais de temps en temps 
     il aime bien manger des  pommes aussi
    il les mange avec du sucre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    agarder=split(texte,"mais de temps en temps")(1)
    resultat
    il aime bien manger des pommes aussi
    il les mange avec du sucre
    attention a ce que l'expression de l'argument du split ne soit pas présent plusieurs fois sinon il faut compiler a partir de (1) (2),(3),etc....
    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

  12. #12
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 148
    Points : 74
    Points
    74
    Par défaut Re
    Bon je suis pas doué, j'ai beau cherché je ne trouve pas.

    Existe t'il des tutos pour manipuler des fichiers txt au travers d'Excel ?

    Ce me serait bien utile

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    il ne s'agit pas ici de manipuler les fichier texte mais une chaine de caractères

    je t'ai montré une solution parmi d'autres

    sinon voila un tuto pour commencer
    https://silkyroad.developpez.com/VBA...nesCaracteres/
    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

Discussions similaires

  1. Awk - afficher un champs et tout ce qui suit
    Par AralVor dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 19/07/2018, 09h12
  2. Trouver les mots qui diffèrent de deux caractères.
    Par I'mSky dans le forum Langage
    Réponses: 9
    Dernier message: 26/11/2011, 13h52
  3. [RegEx] Supprimer tout ce qui n'est pas un mot
    Par Astorz dans le forum Langage
    Réponses: 5
    Dernier message: 08/02/2008, 03h24
  4. Où trouver des documents pour tout ce qui est format de fichier ?
    Par Fresh75 dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 14/07/2007, 16h32
  5. Case à cocher qui sélectionne toutes valeurs d'une liste
    Par athos7776 dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/07/2007, 20h09

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