Rechercher une occurence dans un dossier
Bonjour,
Je bloque sur une fonction recherche. J'ai pas mal cherché sur le net mais les solutions que j'ai trouvé sont de véritables usines à gaz. La fonction Like à l'air pas mal mais je n'arrive pas à la faire fonctionner.
Le but de ma macro est de créer, un fichier de devis dans un dossier d'affaire. les dossier d'affaires sont nommés comme suit : ID - Nom_client - Ville
Avec ma macro, je veux chercher le Nom_client dans mon dossier Projet mais l'étoile ne suffit apparemment pas. A savoir que l'ID est composé de 5 chiffres
Voici mon code :
stRep = "C:\Users\Lou\Google Drive\Projets\"
stFichier = Dir(stRep) Like "##### - " & .Cells(AC1, 5) & "*"
'stFichier = Dir(stRep & "*" & .Cells(AC1, 5) & "*") Ne fonctionne pas
If stFichier = "Vrai" Then
MsgBox "Fichier trouvé : " & vbCrLf & stRep & stFichier
Else
MsgBox "Aucun dossier trouvé au nom de " & Feuil3.Cells(AC1, 5)
End IfBonjour,
Teste ce qui suit. (RecupNom) en adaptant le chemin du dossier et le nom du client :
Sub RecupNom()
Dim TblFichiers() As String
Dim Chemin As String
Dim I As Integer
Dim Nom As String
'adapter le chemin du dossier
Chemin = "E:\"
'adapter le nom
Nom = "Client"
'appel de la fonction pour récupérer les noms des classeurs avec l'extension voulue
TblFichiers = EnumFichiers(Chemin, Nom)
'si initialisé (au moins 1 classeur)
If Not (Not TblFichiers) Then
'Le nom des fichiers dans la fenêtre d'exécution (Ctrl+G)
For I = 1 To UBound(TblFichiers): Debug.Print TblFichiers(I): Next I
End If
'ou le message :
If Not (Not TblFichiers) Then
MsgBox "Le nom '" & Nom & "' a été trouvé " & UBound(TblFichiers) & " fois dans le dossier '" & Chemin & "' !"
Else
MsgBox "Il n'existe pas de fichier portant le nom '" & Nom & "' dans le dossier '" & Chemin & "' !"
End If
End Sub
Function EnumFichiers(Chemin As String, Nom As String) As String()
Dim TableauFichiers() As String
Dim Fichier As String
Dim I As Integer
'complète le chemin le cas échéant
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
'récupère seulement les fichiers Excel
Fichier = Dir(Chemin & "*" & Nom & "*")
'boucle sur les fichiers du dossier
Do While (Len(Fichier) > 0)
I = I + 1
ReDim Preserve TableauFichiers(1 To I)
TableauFichiers(I) = Fichier
Fichier = Dir()
Loop
'retourne le tableau des noms de fichiers
EnumFichiers = TableauFichiers()
End FunctionBonjour,
Désolé pour le temps de réaction, je n'ai pas eu le temps de me pencher avant sur ce problème.
Merci de ta réponse, je l'ai testé et la msgbox comme quoi il n'existe pas de fichier portant ce nom s'affiche.
Cela dit, c'est un dossier que je recherche, je ne sais pas si cela fait une différence.
En modifiant
'récupère seulement les fichiers Excel
Fichier = Dir(Chemin & "*" & Nom & "*")par
'récupère seulement les fichiers Excel
Fichier = Dir(Chemin & "*" & Nom & "*", vbDirectory)il me trouve bien mon dossier, donc cela fonctionne !
Maintenant je voudrais récupérer le nom du dossier mais les variables le contenant se vide et je ne comprends pas comment arriver à conserver ce noom. J'en ai besoin pour l'intégrer dans le chemin d'accès
Rhhaaa j'arrive pas à sortir cette variable !
Je suis sur que c'est simple mais je n'arrive pas à mes fins.
Quelqu'un a une idée ?
Bonjour Caindymion,
De quelle variable parles-tu? Du nom du dossier?
Dim listeDossiers as New Collection
Dim Dossier as String
Dossier = Dir(Chemin & "*" & Nom & "*", vbDirectory)
While Dossier <> ""
listeDossiers.add Dossier
Dossier = Dir
WendPS: Chez moi ta ligne de code
Dir(Chemin & "*" , vbDirectory)renvoie tous les fichiers et dossiers du répertoire.
Salut,
Oui j'essaie d'extraire le nom du dossier pour pouvoir l'intégrer dans un chemin d'accès pour déplacer des dossiers.
Ton code ne fonctionne pas quand je l'insère. Voici le code complet :
Sub RecupNom()
Dim TblDossiers() As String
Dim Chemin As String
Dim I As Integer
Dim Nom As String
Dim Nom_dossier As String
'adapter le chemin du dossier
Chemin = "C:\Users\Lou\Google Drive\Projets"
'adapter le nom
Nom = Cells(ActiveCell.Row, 5)
'appel de la fonction pour récupérer les noms des classeurs avec l'extension voulue
TblDossiers = EnumDossiers(Chemin, Nom)
'si initialisé (au moins 1 classeur)
If Not (Not TblDossiers) Then
'Le nom des Dossiers dans la fenêtre d'exécution (Ctrl+G)
For I = 1 To UBound(TblDossiers): Debug.Print TblDossiers(I): Next I
End If
'ou le message :
If Not (Not TblDossiers) Then
MsgBox "Le nom '" & Nom & "' a été trouvé " & UBound(TblDossiers) & " fois dans le dossier '" & Chemin & "' !" & Nom_dossier
Else
MsgBox "Il n'existe pas de Dossier portant le nom '" & Nom & "' dans le dossier '" & Chemin & "' !"
End If
End Sub
Function EnumDossiers(Chemin As String, Nom As String) As String()
Dim TableauDossiers() As String
Dim Dossier As String
Dim I As Integer
'complète le chemin le cas échéant
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
'récupère seulement les dossiers grâce à vbDirectory
Dossier = Dir(Chemin & "*" & Nom & "*", vbDirectory)
'boucle sur les Dossiers du dossier
Do While (Len(Dossier) > 0)
I = I + 1
ReDim Preserve TableauDossiers(1 To I)
TableauDossiers(I) = Dossier
Dossier = Dir()
Loop
'retourne le tableau des noms de Dossiers
EnumDossiers = TableauDossiers()
End FunctionPS: Chez moi ta ligne de code
Code: Tout sélectionner
Dir(Chemin & "*" , vbDirectory)
renvoie tous les fichiers et dossiers du répertoire.
Je ne sais pas comment obtenir uniquement les noms de dossiers mais ce n'est pas très grave car je n'ai que des dossiers et aucun fichier là ou je fais la recherche.
Personne n'a d'idée sur la façon dont je pourrais extraire le nom du fichier trouvé ?
J'ai fini par trouver moi même la solution.
Il suffisait de déclarer une variable publique et de récupérer la valeur de Dossier avant la boucle.
Public Nom_Dossier As String
Sub RecupNom()
Dim TblDossiers() As String
Dim Chemin As String
Dim I As Integer
Dim Nom As String
'adapter le chemin du dossier
Chemin = "C:\Users\Lou\Google Drive\Projets"
'adapter le nom
Nom = Cells(ActiveCell.Row, 5)
'appel de la fonction pour récupérer les noms des classeurs avec l'extension voulue
TblDossiers = EnumDossiers(Chemin, Nom)
'si initialisé (au moins 1 classeur)
If Not (Not TblDossiers) Then
'Le nom des Dossiers dans la fenêtre d'exécution (Ctrl+G)
For I = 1 To UBound(TblDossiers): Debug.Print TblDossiers(I): Next I
End If
'ou le message :
If Not (Not TblDossiers) Then
MsgBox "Le nom '" & Nom & "' a été trouvé " & UBound(TblDossiers) & " fois dans le dossier '" & Chemin & "' !" & Nom_Dossier
Else
MsgBox "Il n'existe pas de Dossier portant le nom '" & Nom & "' dans le dossier '" & Chemin & "' !"
End If
End Sub
Function EnumDossiers(Chemin As String, Nom As String) As String()
Dim TableauDossiers() As String
Dim Dossier As String
Dim I As Integer
'complète le chemin le cas échéant
If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
'récupère seulement les dossiers grâce à vbDirectory
Dossier = Dir(Chemin & "*" & Nom & "*", vbDirectory)
Nom_Dossier = Dossier
'boucle sur les Dossiers du dossier
Do While (Len(Dossier) > 0)
I = I + 1
ReDim Preserve TableauDossiers(1 To I)
TableauDossiers(I) = Dossier
Dossier = Dir()
Loop
'retourne le tableau des noms de Dossiers
EnumDossiers = TableauDossiers()
End Function