XL 2010 Macro rechercher dans exploreur avec juste une partie du nom de fichier

IDK

XLDnaute Nouveau
Bonjour à tous,

Ma demande doit être récurrente mais je ne trouve pas… dsl…
J'aimerai faire une recherche de fichier dans l'explorateur, dans un dossier spécifique et avec juste un morceau du nom de ce fichier.
le tout, à partir d'une boite de dialogue…

Quelqu'un aurait une idée ?

Merci pour votre aide.

IDK
 

Efgé

XLDnaute Barbatruc
Bonjour @IDK et bienvenu sur le forum.

Il est toujours préférable de joindre un fichier exemple, représentatif et anonyme.

Un exemple d'utilisation de l'explorateur
VB:
Sub Explo()
Dim Bureau$, sPath$, Fichier$, Chemin$, Niveau&

'Récupération du chemin du bureau (pour l'exemple)
Bureau = CreateObject("WScript.Shell").specialFolders("Desktop")

'Ouverture de l'explorateur Windows et récupération du chemin d'accès
'Crée une boite de dialogue de sélection de fichiers :
With Application.FileDialog(msoFileDialogFilePicker)
    'suppression des filtres pré existants
    .Filters.Clear
    'Chemin initial de l'explorateur avec filtre
    .InitialFileName = Bureau & "\" & "MonNom*"
    'interdiction des selections multiple
    .AllowMultiSelect = False
    'Affichage de l'explorateur
    .Show
    If .SelectedItems.Count > 0 Then
        sPath = .SelectedItems(1)
        'Trouver le niveau de sous dossier ou se trouve le fichier
        Niveau = (UBound(Split(sPath, "\")))
        'Récupérer la chaine de caractère (nom du fichier) du niveau trouvé
        Fichier = Split(sPath, "\")(Niveau)
        'Recuperer le chemin d'accès
        Chemin = Left(sPath, Len(sPath) - (Len(Fichier) + 1))
    End If
End With
End Sub

Cordialement
 
Dernière édition:

IDK

XLDnaute Nouveau
Bonjour Efgé et merci pour ta réponse,

J'ai mis ton code avec mon chemin de départ pour la recherche mais j'ai un problème:
L'explorateur ne déroule pas et me dit que le fichier n'existe pas.
Pourtant il existe.
Comme il a un nom à rallonge, j'aimerai le chercher avec le début de son nom.

Voici ce que j'ai adapté:

Sub Explo()
'Récupération du chemein du bureau (pour l'exemple)
Dim Bureau$
Bureau = CreateObject("WScript.Shell").specialFolders("Y:\SUPER PUMA\TRONC_COMMUN_APPAREIL\Synthèse PVE Piste et FAL")

'Ouverture de l'explorateur Windows et récupération du chemin d'accès
'Crée une boite de dialogue de sélection de fichiers :
With Application.FileDialog(msoFileDialogFilePicker)
'suppression des filtres pré existants
.Filters.Clear
'Chemin initial de l'explorateur avec filtre
.InitialFileName = "Y:\SUPER PUMA\TRONC_COMMUN_APPAREIL\Synthèse PVE Piste et FAL" & "\" & "MonNom*"
'interdiction des selections multiple
.AllowMultiSelect = False
'Affichage de l'explorateur
.Show
If .SelectedItems.Count > 0 Then
sPath = .SelectedItems(1)
'Trouver le niveau de sous dossier ou se trouve le fichier
Niveau = (UBound(Split(sPath, "\")))
'Récupérer la chaine de caractère (nom du fichier) du niveau trouvé
Fichier = Split(sPath, "\")(Niveau)
'Recuperer le chemin d'accès
Chemin = Left(sPath, Len(sPath) - (Len(Fichier) + 1))
End If
End With
End Sub
 

IDK

XLDnaute Nouveau
Re

Par exemple, ISIR AG 1613-22 PISTE est le nom complet du fichier.
Il fait parti d'une DataBase de plusieurs dossiers et un nombre conséquent de fichiers (Excel, Word, PDF…).
J'aimerai rechercher un fichier en ne tapant que 1613 pour cet exemple.
Et ça, a partir de ma feuille Excel. D'où mon souhait d'une boite de dialogue…

Cordialement
 

IDK

XLDnaute Nouveau
Après beaucoup de recherches, j'ai modifié mon code…
Mais il ne fonctionne toujours pas…
je sais que cela doit être une simple erreur mais je ne la trouve pas.

ce que j'essaie de faire:
J'ai une DataBase avec plusieurs sous-dossiers dans des sous dossiers.
Par exemple, ISIR AG 1613-22 QI 7006628 est le nom complet du dossier que je cherche.
J'aimerai rechercher ce dossier en ne tapant que 1613 ou 7006628 pour cet exemple.
et ensuite, cela m'ouvre l'explorateur avec ce dossier recherché ouvert.

le dossier parent est: Y:\SUPER PUMA\TRONC_COMMUN_APPAREIL\Synthèse PVE Piste et FAL\Liste PVE

il contient 3 dossiers. c'est dans ces 3 dossiers que se trouvent les dossiers recherchés.

pouvez-vous analyser le code suivant svp ?

Sub Recherche_PVE()
Dim folderPath As String
Dim folderName As String
Dim fullPath As String
Dim fso As Object
Dim folder As Object
Dim subfolder As Object

' Spécifie le chemin du dossier cible ici
folderPath = "Y:\SUPER PUMA\TRONC_COMMUN_APPAREIL\Synthèse PVE Piste et FAL\Liste PVE\"
' Demande le morceau du nom du dossier recherché à l'utilisateur
folderName = InputBox("Entrez le numéro du PVE (Au format: XXXX-XX) ou son numéro QI :")

Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)

For Each subfolder In folder.subfolders
If UCase(subfolder.Name) Like UCase(folderName) & "*" Or UCase(subfolder.Name) Like "*" & UCase(folderName) & "*" Or UCase(subfolder.Name) Like "*" & UCase(folderName) Then
' Si le dossier est trouvé, retourne le chemin complet
fullPath = subfolder.Path
MsgBox "Le dossier a été trouvé : " & fullPath
' Ouvrir le dossier trouvé
CreateObject("Shell.Application").Namespace(fullPath).Self.InvokeVerbEx ("Open")
Exit Sub
Else
' ne recherche pas dans les sous-dossiers
End If
Next
MsgBox "Le dossier n'a pas été trouvé."
End Sub


Merci à tous pour votre compréhension !
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 338
Membres
103 191
dernier inscrit
camiux