Réinitialiser FileSearch

jbballeyguier

XLDnaute Nouveau
Bonjour,

j'ai créé une macro qui utilise deux fois FileSearch dans deux boucles selon le schéma suivant :

début_boucle1
recherche1
début_boucle2
recherche2
fin_boucle2
fin_boucle1

Le problème est que recherche1 et recherche2 ne regardent pas dans le même dossier. Résultat, au premier tour de boucle, la recherche marche bien. Mais dès que la première boucle commence son second tour, la macro plante, et je me rends compte que que le .LookIn est resté sur la valeur de la recherche2... donc je me demande s'il y a moyen de forcer une réinitialisation du .LookIn... ?

Voici l'intégralité de ma macro :

Code:
Sub changenoms()
    ' Récupérer le nom de l'enchainement
    Dim enchainement As Range
    Dim adresse As String
    Dim nomench As String
    Dim nouveaunom As String
    Dim ScanFic As Office.FileSearch
    Dim ScanScn As Office.FileSearch
    Dim j As Integer
    
    Dim niveau1 As String
    Dim niveau2 As String
    Dim variante As String
    Dim priorite As String
    
    Dim cell_titre As String
    Dim cell_niveau1 As String
    Dim cell_niveau2 As String
    Dim cell_priorite As String
    Dim cell_oldid As String
    
    

n = 2
Set ScanFic = Application.FileSearch

    With ScanFic
    
    Chemin = (ThisWorkbook.Path & "\" & "Enchainements")
                .NewSearch
                .LookIn = Chemin
                .SearchSubFolders = True
                .FileType = msoFileTypeExcelWorkbooks
                .Execute
                
                For Each NomFic In .FoundFiles
                    j = 1
                    Workbooks.Open Filename:=NomFic, UpdateLinks:=False
                    Ench = CStr(NomFic)
                    Ench = Mid(Ench, InStrRev(NomFic, "\") + 1)
                    nomench = Workbooks(Ench).Sheets("CR détaillé").Range("C1").Value
                                     
                    ThisWorkbook.Sheets("Nomenclature").Activate
                        Do Until Cells(j, 6).Value = nomench
                            Cells(j + 1, 6).Select
                            j = j + 1
                        Loop
                  
                    niveau1 = ActiveCell.Offset(0, -4).Value
                    niveau2 = ActiveCell.Offset(0, -3).Value
                    variante = ActiveCell.Offset(0, -2).Value
                    priorite = ActiveCell.Offset(0, -1).Value
                    
                    nouveaunom = niveau1 & "_" & niveau2 & "_" & variante
                    
                    If niveau2 <> "" Then
                        Workbooks(Ench).Activate
                        ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & niveau1 & "\" & niveau2 & "\" & nouveaunom & ".xls"
                        nouveaunom = ActiveWorkbook.Name
                    Else
                        ActiveWorkbook.SaveAs ThisWorkbook.Path & niveau1 & "\" & nouveaunom & ".xls"
                        nouveaunom = ActiveWorkbook.Name
                    End If
                    
                    cell_titre = Cells(n, 1).Address
                    cell_niveau1 = Cells(n, 2).Address
                    cell_niveau2 = Cells(n, 3).Address
                    cell_priorite = Cells(n, 4).Address
                    cell_oldid = Cells(n, 5).Address
                    
                    
                    ' On crée le "cartouche" de métadonnées de l'enchainement dans l'entête de la fiche.
                    Sheets("Entête").Activate
                        Cells(30, 1) = niveau1
                        Cells(30, 2) = niveau2
                        Cells(30, 3) = variante
                        Cells(30, 4) = priorite
                            With Range(Cells(30, 1), Cells(30, 7))
                                .Interior.ColorIndex = 1
                                .Font.ColorIndex = 36
                                .Font.Bold = True
                                .Borders.ColorIndex = 2
                            End With
                    
                    Workbooks(nouveaunom).Sheets("CR détaillé").Activate
                    m = 1
                        Do While Cells(m, 8).Value <> "FIN"
                            'If Cells(m, 8) <> "" Then
                                Cells(m, 8).Select
                                domainefiche = ActiveCell.Value
                                domainefiche = Mid(domainefiche, 5, 3)
                                domainefiche = ThisWorkbook.Path & "\" & "Fiches" & "\" & domainefiche & "\" & "01_Finalisée"

                                ' On recherche les fichiers dans l'arborescence et on les ouvre
Set ScanScn = Application.FileSearch
                                        With ScanScn
                                            .NewSearch
                                            .LookIn = domainefiche
                                            .SearchSubFolders = True
                                            .FileType = msoFileTypeWordDocuments
                                            .Execute
                                        
                                            Dim FicheScenario As String
                                            Dim IdFiche As String
                                            
                                                    For Each NomScn In .FoundFiles
                                                            FicheScenario = ActiveCell.Value
                                                            IdFiche = Mid(NomScn, InStrRev(NomScn, "\") + 1)
                                                            IdFiche = Mid(IdFiche, 1, 11)
                                                            
                                                            If FicheScenario = IdFiche Then
                                                                ActiveSheet.Hyperlinks.Add Anchor:=selection, Address:= _
                                                                NomScn, TextToDisplay:=FicheScenario
                                                            End If
                                                    Next
                                            End With
                                            
                                        'End If
                                        m = m + 1
                                    Loop
                                    
                                    'On ajoute les références de l'enchainement dans la table d'enchainements
                                        ThisWorkbook.Activate
                                        Sheets("Table_Ench").Activate
                                            Range(cell_titre) = Workbooks(nouveaunom).Sheets("Entête").Cells(1, 2)
                                            Range(cell_niveau1) = niveau1
                                            Range(cell_niveau2) = niveau2
                                            Range(cell_priorite) = priorite
                                            Range(cell_oldid) = nomench
                                    
                    n = n + 1
                    
                    Workbooks(nouveaunom).Close savechanges:=True
                    ThisWorkbook.Activate
                    
                Next
                    
    End With
    
End Sub

Merci d'avance pour vos idées ;)
 

Gael

XLDnaute Barbatruc
Re : Réinitialiser FileSearch

Bonjour Jbballeyguier, bonjour James,

L'aide VBA sur "Newsearch" précise:


Les valeurs des critères de recherche sont maintenues pour toute la durée d'une session. Utilisez cette méthode chaque fois que vous changez les critères de recherche ; notez qu'elle ne rétablit pas la valeur par défaut de la propriété LookIn.


Et je n'ai pas trouvé de solution pour réinitialiser cette valeur :(

@+

Gael
 

James007

XLDnaute Barbatruc
Re : Réinitialiser FileSearch

Bonjour Gaël, ;)

Merci pour l'info ...
Il me revient en mémoire qu'effectivement il faut pièger la fonction avec un critère "bidon" (qui sert à purger ) du genre
.LastModified = msoLastModifiedAnyTime

pour pouvoir repartir ensuite sur un vrai critère ...

A +
 
Dernière édition:

jbballeyguier

XLDnaute Nouveau
Re : Réinitialiser FileSearch

Erf, ça ne fonctionne pas.

J'ai mis la méthode de la manière suivante :

Code:
With ScanFic
    
    Chemin = (ThisWorkbook.Path & "\" & "Enchainements")
                .LastModified = msoLastModifiedAnyTime
                .NewSearch
                .LookIn = Chemin
                .SearchSubFolders = True
                .FileType = msoFileTypeExcelWorkbooks
                .Execute

c'était bien comme ça ?
 

Gael

XLDnaute Barbatruc
Re : Réinitialiser FileSearch

Re,

Je ne sais pas si c'est une piste intéressante, mais j'ai vu sur le net plusieurs utilisations de ".lookin" avec un tableau:

Code:
For i = 1 To Nr_Folders
 
With Application.FileSearch
.NewSearch
[COLOR=red].LookIn = Folder_List(i)[/COLOR]
.SearchSubFolders = False
.Filename = File_Criteria
.Execute
End With
 
Next i

A essayer peut-être en mettant les noms de dossiers dans un tableau string ?

@+

Gael
 

jp14

XLDnaute Barbatruc
Re : Réinitialiser FileSearch

Bonjour à tous

La piste de Gael est la bonne.
L'aide VBA précise
LookIn, propriété
Renvoie ou définit le dossier sur lequel portera la recherche spécifiée. Type de données String en lecture-écriture.

JP
 

jbballeyguier

XLDnaute Nouveau
Re : Réinitialiser FileSearch

Merci pour la réponse Gael... cependant, cela ne fonctionne toujours pas.

J'ai défini un tableau string avec deux valeurs (comme je ne connais pas la totalité des dossiers, je n'ai défini que les deux racines où filesearch va chercher les fichiers.

La particularité c'est que j'ai fait une boucle dans une boucle. Lorsque je passe de la boucle1 à la boucle2, .LookIn est bien modifié... mais après il reste bloqué sur la valeur précédent, et je ne sais pas pourquoi oO
 

jbballeyguier

XLDnaute Nouveau
Re : Réinitialiser FileSearch

J'ai décidé finalement de changer de méthode.
Puisque je ne pouvais pas surmonter le problème, j'ai décidé de le contourner.
J'ai lancé une recherche sur l'une des racine, et j'ai exporté le résultat dans une feuille excel. Cette dernière me sers de table de référence. Du coup je n'utilise FileSearch qu'une fois, et ça marche ^^

Bizarre tout de même cette limitation de .LookIn non ?
 

James007

XLDnaute Barbatruc
Re : Réinitialiser FileSearch

Bien vu ... avec cette fonction ... il faut faire preuve de ruse ... ou passer par FSO ... ce qui d'après ce que j'ai lu devient obligatoire avec Excel 2007...
parce que FileSearch a été supprimé dans la version 2007 ...

A +
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35