VBA recherche texte dans fichiers

oui "M106" mais aussi "M06" et on viens de m'apprendre que cela peut aussi etre "M6"

change le programme avec ceci

                If InStr(1, ContenuLigne, "M106") <> 0 Or InStr(1, ContenuLigne, "M06") <> 0 Or InStr(1, ContenuLigne, "M6") <> 0 Then
8prog-outils.xlsm (22.64 Ko)

t au top 👍

je regarde ça demain matin.

je te tiens au courant et je viens d'avoir une autre idée...mais on verra demain...😉

Je pense qu'il va falloir mettre les paramètres dans un onglet pour ne pas avoir à retoucher la macro en cas de besoin.

J'attends de tes nouvelles.

salut,

alors la version de ton prog d'hier 12h56 m'affiche toute la ligne; exemple M106T32 ; l’idéal serait de faire comme la version antérieur; juste le 32

pour la dernière version d'hier , idem mais en plus cela affiche également par exemple les M63 (ce sont des paramètres machine) ; il faudrait pouvoir prendre en compte le M6T et comme au dessus n’affichait que le chiffre qui suit ...

je te prépare un autre message pour t'expliquer mon idée d'hier...

pour ce qui est de mon idée complémentaire je t'explique :

a certain moment dans les pgm est indiqué M0 ou M00 (M0 uniquement pas les M03 ou M06 par exemple) ces codes sont toujours précédés ou suivi d'une ligne entre parenthèses (commentaires pgm ) et si c'est possible j'aimerai également pouvoir récupéré tous ces commentaires...

alors la version de ton prog d'hier 12h56 m'affiche toute la ligne; exemple M106T32 ; l’idéal serait de faire comme la version antérieur; juste le 32

C'était volontaire, vu la tournure des événements, je pense qu'il faut ajouter une troisième colonne avec tes formules classiques qui iront chercher ce dont tu as besoin sans avoir à aller systématiquement dans le code VBA qui doit rester simple, sinon on aura des allers-retours à l'infini. Je considère que la principale fonction du code VBA est de lire tous les fichiers des dossiers et sous-dossiers et repérer les lignes. Les reste peut être fait par filtre ou formules classiques.

Du reste, je pense aussi à mettre en place un tableau des valeurs à repérer comme M106, M06, M6 en excluant les M63 etc...

Maintenant il y a le coup des commentaires ... je vais regarder dans un second temps.

quoi qu'il en soit je te remercie deja mille fois.

Pour revenir aux outils, cela doit toujours être suivi par un T, c'est-à-dire M106T, M06T, M6T ? cela simplifierait

oui exactement.

pas possible de t'envoyer un message perso ? je voulais te transmettre un vieux pgm entier.

oui exactement.

ben non, j'ai vu des lignes avec M106 sans T

N63T63M106

! ?

dans les pgm est indiqué M0 ou M00 (M0 uniquement pas les M03 ou M06 par exemple) ces codes sont toujours précédés ou suivi d'une ligne entre parenthèses (commentaires pgm ) et si c'est possible j'aimerai également pouvoir récupéré tous ces commentaires...

est-ce systématiquement encadré par des parenthèses, avec les commentaires qui suivent ? comme j'ai vu

(M00)
(ENLEVER TOURTEAU)

j'avais zapper.....quel boulet je suis

N63T63M106 oui la aussi il faut extraire le ne après le T

pour le M0 , oui c'est le commentaire entre parenthèses qu'il faut extraire. cette parenthèse peut-être situé avant ou après le M0 voir les deux.

N63T63M106 oui la aussi il faut extraire le ne après le T

conclusion, je reste sur la sélection de la ligne entière parce que les cas semblent être nombreux, cela te donnera la main au travers d'une fonction

pour le M0 , oui c'est le commentaire entre parenthèses qu'il faut extraire. cette parenthèse peut-être situé avant ou après le M0 voir les deux.

oui mais est-ce que M0 ou M00 est toujours encadré de parenthèses ? c'était ma question, je vais prendre cette hypothèse

le M0 ou M00 n'est lui jamais entre parenthèses.

en gros : quand ton pgm voit un M0 il doit extraire la ligne précédente et la ligne suivante uniquement si elles sont contenu dans une parenthèse.

Il y en a plus que nécessaire car les règles M106T ne sont plus ce qu'elles étaient au début ...

avec la détection des lignes en (M0), (M00) cela devient complexe

Option Explicit
Dim ligne As Long
Sub importer()
Dim chemin$, Rep As FileDialog

    ' choix du répertoire
    Set Rep = Application.FileDialog(msoFileDialogFolderPicker)
    Application.FileDialog(msoFileDialogFolderPicker).Title = "Choix du répertoire des fichiers ..."
    Rep.Show
    If Rep.SelectedItems.Count = 0 Then Exit Sub
    chemin = Rep.SelectedItems(1) & "\"

    ' effacement données
    If Not ActiveSheet.ListObjects(1).DataBodyRange Is Nothing Then ActiveSheet.ListObjects(1).DataBodyRange.Delete

    ' lecture
    ligne = 2
    lire chemin

End Sub

Sub lire(chemin As String)
Dim fso, SourceFolder, SubFolder
Dim fichier$, ContenuLigne$, avant$, apres$, flag As Boolean
Set fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = fso.GetFolder(chemin)

fichier = Dir(chemin)
Do While fichier <> ""
    Open chemin & fichier For Input As #1
        avant = "": apres = "": flag = False
        Do While Not EOF(1)
            Line Input #1, ContenuLigne

            ' la ligne précédente a été détectée comme (M0), (M00) etc.
            ' on indique alors le contenu de la ligne si c'est un commentaire
            If flag Then
                If ContenuLigne Like "(*)" Then
                    apres = ContenuLigne
                    Cells(ligne, 4) = apres
                    flag = False
                End If
                ligne = Range("A" & Rows.Count).End(xlUp).Row + 1
            End If

            If ContenuLigne Like "(M0*)" Then ' ligne commentaire
                    flag = True
                    Cells(ligne, 1) = fichier
                    Cells(ligne, 2) = ContenuLigne
                    Cells(ligne, 3) = avant ' ligne avant
            Else ' sinon recherche outil
                If ContenuLigne Like "*M106*" Or ContenuLigne Like "*M06*" Or ContenuLigne Like "*M6*" Then
                    Cells(ligne, 1) = fichier
                    Cells(ligne, 2) = ContenuLigne
                    ligne = Range("A" & Rows.Count).End(xlUp).Row + 1
                End If
            End If

            ' on conserve la ligne avant si c'est un commentaire
            If ContenuLigne Like "(*)" Then
                avant = ContenuLigne
            Else
                avant = ""
            End If

        Loop
    Close #1
    fichier = Dir
Loop

For Each SubFolder In SourceFolder.subfolders
    lire SubFolder.Path & "\"
Next SubFolder

End Sub
8prog-outils.xlsm (23.63 Ko)

le M0 ou M00 n'est lui jamais entre parenthèses.

ah, ce n'est pas ce que j'ai fait car ce n'est pas l'exemple fourni !

est-ce que M0 et M00 sont seuls sur une ligne ?

seul sur la ligne : parfois oui, parfois non

C'est un peu "normand" comme réponse .... est-ce que le fichier posté te convient ? je vois qu'il n'a pas encore été chargé.

je croyais que tu voulais modifier quelque chose ...

je viens de regarder du coup :

cote présentation c' top

par contre, dans les résultat ca m'affiche des M63 ou M61 par exemple...

parfois des lignes entière

moi je n'ai besoin que du nombre situe juste apres le M106T ou M06T ou M6T

je t'envoi quelque choses en privé

par contre, dans les résultat ca m'affiche des M63 ou M61 par exemple...

parfois des lignes entière

moi je n'ai besoin que du nombre situe juste apres le M106T ou M06T ou M6T

je l'avais signalé ...

Il y en a plus que nécessaire car les règles M106T ne sont plus ce qu'elles étaient au début ...

du reste, après M106 il n'y a pas ici de T et tu demandais quand même d'extraire

N63T63M106 oui la aussi il faut extraire le ne après le T

Le plus dur est fait : extraire les infos, la macro est déjà complexe eu égard à mes critères (notamment dû au fait des (M0) et (M00); je pense maintenant qu'il faut que le reste soit fait par des fonctions standards.

Rechercher des sujets similaires à "vba recherche texte fichiers"