Excel 2010: remplacer FileSearch de Excel 2003 [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 20-06-2013 à 22:33:17
Bonjour.
Pour une recherche simple dans un dossier (sans parcourir ses sous-dossiers), la fonction Dir fonctionne encore !
Exemple dans un sujet récent …
Marsh Posté le 21-06-2013 à 20:22:17
Exact merci Marc,
fallait juste y penser
du coup le code en est même + court:
Private Sub ComboBox1_Change()
Dim Result As Variant
Dim NomFichier As String
Dim Dossier As String
Dim Nb As Long
Dossier = ComboBox1.Value
Chemin = "D:\Suivi du fil\" & Dossier
ListBox1.Clear
Nb = 0
NomFichier = Dir(Chemin & "*.xls" )
While NomFichier <> ""
ListBox1.AddItem NomFichier
NomFichier = Dir
Nb = Nb + 1
Wend
Label3.Caption = Nb & " fichiers"
If Nb = 0 then
ListBox1.AddItem "Pas de fichier dans le dossier"
End If
End Sub
Marsh Posté le 21-06-2013 à 22:42:00
Bien !
Même en 2003 je continuais à utiliser cette fonction Dir pour les besoins simples.
Et quand je tombe sur une ancienne procédure utilisant FileSearch susceptible de passer en version 2007 ou supérieure,
je la repasse souvent sous Dir …
Sinon dans le code, la variable Result n'est plus utilisée …
Et à la place de Dossier je déclarerai Chemin en String
et je l'initialiserai comme ceci : Chemin = "D:\Suivi du fil\" & ComboBox1.Value …
Chemin doit obligatoirement se terminer par un "\".
La recherche initiale de Dir à partir de 2007 devrait s'effectuer sur les fichiers *.xls*
car en dehors des .xls, il peut y avoir des .xlsb, des .xlsm, …
Dernière précision : Nb = 0 est logique mais pas obligatoire car,
comme la variable Nb est déclarée en Long, elle est donc de facto initialisée à zéro.
Bonne fin de semaine !
Marsh Posté le 22-06-2013 à 10:29:44
Merci pour ces précisions Marc, ça fera + propre effectivement,
Le code j'ai appris pour beaucoup par moi-même alors y'a bien des choses qui ne sont pas super optimisée, du moment que ça fonctionne au départ on est content.
Bon wkend à toi aussi
Marsh Posté le 17-03-2015 à 08:58:00
Bonjour !
J'ai également un problème avec une fonction fileSearch qui évidemment ne fonctionne plus à ce jour :
Code :
|
J'ai bien compris qu'il fallait que j'utilise le Dir donc j'ai fait :
Code :
|
PatternList : extension du fichier, String qui ressemble à "*.htm" par ex.
Par contre, je ne sais pas comment retranscrire le traitement... si j'ai bien compris, je récupère dans ma feuille excel toutes les données de mon fichier xml (unique dans le dossier).
(Le but du code complet est de récupérer le xml existant, l'ouvrir, récupérer les données, supprimer les lignes qu'on ne veut plus, puis refaire le xml (je crois qu'on supprime l'existant pour en recréer un autre)) ...
Fuuuu c'est dur de reprendre du code de quelqu'un ...
Marsh Posté le 17-03-2015 à 16:11:27
Salut, voir ceci : http://silkyroad.developpez.com/vba/classefilesearch/
Marsh Posté le 19-03-2015 à 10:48:26
Je suis désolée, je suis surement un boulet mais je n'arrive pas à importer le complément. Je l'ai téléchargé, je l'ajoute avec Options, puis je vais dans références pour cocher ClFileSearch et il me met une erreur...
Citation : La bibliothèque de types ou l'Assistant requis n'est pas un projet VBA |
Il me l'importe à part...
Imprim Ecran :
http://hpics.li/124c20a
Du coup j'ai essayé de faire glisser les modules et classe dans mon projet, mais je ne reconnais toujours pas fileSearch
Marsh Posté le 20-03-2015 à 08:06:12
J'ai regardé l'aide Excel mais ça ne m'a pas beaucoup aidée...
Marsh Posté le 20-06-2013 à 21:18:13
Bonjour à tous
Voilà suite à migration de Excel 2003 à 2010,
la fonction FileSearch n'existant plus, je suis coincé et n'arrive pas à trouver la solution malgré qlque pistes...
Voilà donc:
dans un userform j'ai une combobox qui liste des noms de dossier (via RowSource), et lors du changement de cette combobox une listbox à coté liste tout les fichiers contenu dans ce dossier via la fonction FileSearch
Voici mon code, si un master vba peut m'aider:
Private Sub ComboBox1_Change()
Dim Result As Variant
Dim NomFichier As String
Dim Dossier As String
Dossier = ComboBox1.Value
Chemin = "D:\Suivi du fil\" & Dossier
ListBox1.Clear
With Application.FileSearch
.NewSearch
.LookIn = Chemin
.FileType = msoFileTypeExcelWorkbooks 'afficher que les .xls
.Execute
nbfile = .FoundFiles.Count
If .FoundFiles.Count > 0 Then
For Each Result In .FoundFiles
'déduit longueur de caractères pour garder que le nom du fichier sans le chemin d'accès:
NomFichier = Right(Result, Len(Result) - InStr(Result, Dossier) - Len(Dossier))
ListBox1.AddItem NomFichier
Next
Else
ListBox1.AddItem "Pas de fichier dans le dossier"
End If
End With
End Sub
Message édité par val74 le 20-06-2013 à 21:20:26