[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. 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
    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 ??
      0
      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)
        '
        
        0
        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 ?
          0
          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
            0
            1. Impeccable merci mille fois.
              Exactement ce que je recherchais.

              Bonne soirée.
              0
              1. Bienvenue

                Lupin
                0