[VBS] Correction d'un script

Résolu
Bonsoir à tous,

j'ai besoin de votre soutient pour établir un script VBS. Je souhaite que le programme recherche dans les fichiers appartenant à un dossier une chaine de caractères demandées à l'utilisateur.
J'ai déjà fait un début mais le programme lit les fichiers lignes par lignes ; la chaine de caractères doit correspondre à une ligne entière or moi je veux qu'elle puisse êtreque dans une partie.
j'espère avoir été un minimum explicite :)

Voici déjà mon code :

dim dossier,recherche
dossier=inputbox("Dans quel dossier chercher ?","Sélection du dossier")
recherche=inputbox("Quelle recherche à effectuer ?","Sélection de la recherche")

Dim arrFileLines()
Dim stRep
Dim oFSO,oFl
Set oFSO = CreateObject("Scripting.FileSystemObject")
stRep = "C:\DNC30\DNC30BER\" & dossier
If oFSO.FolderExists(stRep) Then
For each oFl in oFSO.GetFolder(stRep).Files

i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(oFl, 1)
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
For l = Lbound(arrFileLines) to UBound(arrFileLines)
if instr(recherche,arrFileLines(l)) then msgbox oFl
Next

Next
End If

Merci de votre aide.

7 réponses

  1. Impeccable merci mille fois.
    Exactement ce que je recherchais.

    Bonne soirée.
    1. re:

      suggestion :

      '---------------------------------------------------------------------------------------------------
      '
        Dim Dossier, Recherche, Reponse, Drapeau
        Dim arrFileLines(), stRep, oFSO, oFl, objFSO, objFile
        Dim i,l
      
        Dossier = Inputbox("Dans quel dossier chercher ?","Sélection du dossier")
        Recherche = Inputbox("Quelle recherche à effectuer ?","Sélection de la recherche")
        Reponse = ""
      
        If ( Dossier <> "") Then
          If ( Recherche <> "" ) Then
            Set oFSO = CreateObject("Scripting.FileSystemObject")
            stRep = Dossier
            If oFSO.FolderExists(stRep) Then
              For each oFl in oFSO.GetFolder(stRep).Files
                i = 0
               Set objFSO = CreateObject("Scripting.FileSystemObject")
               Set objFile = objFSO.OpenTextFile(oFl, 1)
               Do Until objFile.AtEndOfStream
                 Redim Preserve arrFileLines(i)
                 arrFileLines(i) = objFile.ReadLine
                 i = i + 1
                Loop
                objFile.Close
               Drapeau = False
                For l = Lbound(arrFileLines) to UBound(arrFileLines)
                  if instr(1,arrFileLines(l),Recherche,1) then
                    Drapeau = True
                  End If
                Next
                If (Drapeau) Then
                    Reponse = Reponse & VbCrLf & oFl.Name
                   Drapeau = False
                End If
              Next
            End If
          End If
        End If
      
        Set oFSO = Nothing
        Set objFile = Nothing
        Set objFSO = Nothing
      
        WScript.Echo Reponse
      
      WScript.Quit(0)
      '
      

      Lupin
      1. Merci bien une fois de plus. Reste encore un détail (après je t'embête plus :) ): si la chaine se trouve plusieurs fois dans le même fichier, alors j'ai plusieurs fois le nom de ce fichier dans la boite de message finale. Comment faire pour ne l'afficher qu'une seule fois s'il te plait ?
        1. Bonjour,

          Je me suis permis de modifier légèrement votre script :

            Dim Dossier, Recherche, Reponse
            Dim arrFileLines(), stRep, oFSO, oFl, objFSO, objFile
            Dim i,l
          
            Dossier = Inputbox("Dans quel dossier chercher ?","Sélection du dossier") 
            Recherche = Inputbox("Quelle recherche à effectuer ?","Sélection de la recherche") 
            Reponse = ""
          
            If ( Dossier <> "") Then
              If ( Recherche <> "" ) Then
                Set oFSO = CreateObject("Scripting.FileSystemObject") 
                stRep = Dossier 
                If oFSO.FolderExists(stRep) Then 
                  For each oFl in oFSO.GetFolder(stRep).Files 
                    i = 0 
                   Set objFSO = CreateObject("Scripting.FileSystemObject") 
                   Set objFile = objFSO.OpenTextFile(oFl, 1) 
                   Do Until objFile.AtEndOfStream 
                     Redim Preserve arrFileLines(i) 
                     arrFileLines(i) = objFile.ReadLine 
                     i = i + 1 
                    Loop 
                    objFile.Close 
                    For l = Lbound(arrFileLines) to UBound(arrFileLines) 
                      if instr(1,arrFileLines(l),Recherche,1) then
                        Reponse = Reponse & VbCrLf & oFl.Name
                      End If
                    Next 
                  Next 
                End If 
              End If
            End If
          
            Set oFSO = Nothing
            Set objFile = Nothing
            Set objFSO = Nothing
          
            WScript.Echo Reponse
          
          WScript.Quit(0)
          '
          
          1. Merci beaucoup à toi.
            Encore un petit truc: tu a du remarquer qu'à la fin le nom des fichiers dans lesquels apparait la chaine de caractères s'affiche dans une boite de message... . Mais mle problème est que si la chaine est trouvées dans 10 fichiers (par exemple) j'aurai 10 boites de messages avec le même résultat.
            Est-ce qu'il y a moyen de n'en mettre qu'une seule s'il te plait ??
            1. Bonjour,

              cette ligne :

              if instr(recherche,arrFileLines(l)) then msgbox oFl

              devrait s'écrire :

              if instr(1,arrFileLines(l),recherche,1) then msgbox oFl

              Lupin