Recensement de fichiers en utilisant VBA - VB/VBA/VBS - Programmation
MarshPosté le 09-06-2008 à 12:50:28
Bonjour,
Je cherche à utiliser VBA pour recenser des fichiers EXCEL se situant dans un même dossier. Les noms de ces fichiers sont typés selon l'info qu'ils contiennent : ex: XXX_blablabla.xls XXX étant le champ qui défini le type d'info à chercher Je veux être capable de lister tous les fichiers Excel selon les 3 lettres du champ (XXX) J'ai déjà trouver comment lister des fichiers dans un même répertoire:
Citation :
Dim stRep 'Nom du répertoire à parcourir Dim oFSO,oF1 Set oFSO = CreateObject("Scripting.FileSystemObject" ) stRep = "C:\Tmp" If oFSO.FolderExists(stRep) Then For each oF1 in oFSO.GetFolder(stRep).Files Wscript.Echo oF1.Name Next End If
C'est un début à mon problème, cependant 2 problèmes se posent: 1 - ce script liste TOUS les fichiers sont distinctions aucune, j'envisage donc de poser une condition avant d'écrire le nom du fichier. Comment faire un masque pour pouvoir poser ma condition if en ne prenant en compte que les 3 premieres lettres du nom du fichier ? 2 - Ce Wscript.Echo ne fonctionne pas. "Erreur 424 Objet requis"
Public Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean Public Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Dim Cpt As Long
' Const TypeFichier As String = "##.xls" ' Const TypeFichier As String = "trans_###_########.txt" Const TypeFichier As String = "*.xls"
Sub Tst() Dim sChemin As String sChemin = ThisWorkbook.Path With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = sChemin & "\" .Title = "Sélectionner un Dossier" .AllowMultiSelect = False .InitialView = msoFileDialogViewDetails .ButtonName = "Sélection Dossier" .Show If .SelectedItems.Count > 0 Then Cpt = 0 Application.StatusBar = "" DoEvents Lire .SelectedItems(1) End If End With End Sub
Private Sub Lire(sPath As String) Dim Dep As Currency, Fin As Currency, Freq As Currency Dim Coll As Collection Dim i As Long
Application.ScreenUpdating = False QueryPerformanceCounter Dep Set Coll = New Collection
For i = 1 To Coll.Count ShFichiers.Range("A" & i) = Coll.Item(i) Next i
Set Coll = Nothing
QueryPerformanceCounter Fin: QueryPerformanceFrequency Freq With Application ShFichiers.Range("B1" ).Select .StatusBar = "Terminé : " & Cpt & " / " & Format(((Fin - Dep) / Freq), "0.00 s" ) .ScreenUpdating = True End With End Sub
Private Sub ListeFichiers(sChemin As String, Coll As Collection, Recursif As Boolean) Dim FSO As Scripting.FileSystemObject Dim Dossier As Scripting.Folder Dim SousDossier As Scripting.Folder Dim Fichier As Scripting.File
Set FSO = New Scripting.FileSystemObject Set Dossier = FSO.GetFolder(sChemin)
For Each Fichier In Dossier.Files If UCase(Fichier.Name) Like UCase(TypeFichier) Then Cpt = Cpt + 1 Coll.Add Fichier.Path Application.StatusBar = Cpt End If Next Fichier
If Recursif Then For Each SousDossier In Dossier.SubFolders ListeFichiers SousDossier.Path, Coll, True Next SousDossier End If
Set Dossier = Nothing Set FSO = Nothing End Function
Marsh Posté le 09-06-2008 à 12:50:28
Bonjour,
Je cherche à utiliser VBA pour recenser des fichiers EXCEL se situant dans un même dossier.
Les noms de ces fichiers sont typés selon l'info qu'ils contiennent :
ex: XXX_blablabla.xls XXX étant le champ qui défini le type d'info à chercher
Je veux être capable de lister tous les fichiers Excel selon les 3 lettres du champ (XXX)
J'ai déjà trouver comment lister des fichiers dans un même répertoire:
Dim stRep 'Nom du répertoire à parcourir
Dim oFSO,oF1
Set oFSO = CreateObject("Scripting.FileSystemObject" )
stRep = "C:\Tmp"
If oFSO.FolderExists(stRep) Then
For each oF1 in oFSO.GetFolder(stRep).Files
Wscript.Echo oF1.Name
Next
End If
C'est un début à mon problème, cependant 2 problèmes se posent:
1 - ce script liste TOUS les fichiers sont distinctions aucune, j'envisage donc
de poser une condition avant d'écrire le nom du fichier.
Comment faire un masque pour pouvoir poser ma condition if en ne prenant en compte que les 3 premieres lettres du nom du fichier ?
2 - Ce Wscript.Echo ne fonctionne pas. "Erreur 424 Objet requis"
Merci de votre aide par avance !