Exclure les fichiers cachés avec GetFolder

Chri8Ed

XLDnaute Occasionnel
Bonjour à tous

J'utilise cette macro pour trouver le nombre de fichiers dans des dossiers
Mon problème, c'est que mon résultat est faussé par des fichiers qui sont cachés
Je souhaiterais donc pouvoir exclure ces fichiers cachés du résultat.

Secondement j'ai trouvé comment cibler certains fichiers
Mais je souhaiterais trouvé le moyen au contraire d'exclure certains fichiers
Comme par exemple exclure tous les fichiers dont l’extension est "JPG".
Sachant que mes fichiers en question sont des liens internet et qu'ils ne comportent donc pas d’extension

Merci pour votre aide


VB:
Sub Nombre()
    ListeFichiersDans DossierFichiers
End Sub
Private Sub ListeFichiersDans(ByVal NomDossier As String)
Dim FSO As Scripting.FileSystemObject
Dim DossierSource As Scripting.Folder
Dim Fichier As Scripting.file
Dim r As Long

Dim Path As String
Dim Produit As String
Path = "F:\Mes documents\####\"
Produit = Path & Cells(ActiveCell.Row, 38)

    Set FSO = New Scripting.FileSystemObject
    Set DossierSource = FSO.GetFolder(Produit)
    r = 0
    For Each Fichier In DossierSource.Files
        'If InStr(1, Fichier.Name, ".") Then
            r = r + 1
        'End If
    Next Fichier
        
    Cells(ActiveCell.Row, 22) = r
    
    Set Fichier = Nothing
    Set DossierSource = Nothing
    Set FSO = Nothing
End Sub
 

job75

XLDnaute Barbatruc
Bonjour Chri8Ed,

Cette méthode avec Dir est préférable :
Code:
Sub Nombre()
Dim chemin$, fichier$, n1&, n2&
chemin = ThisWorkbook.Path & "\" 'dossier à adapter
'---fichiers visibles---
fichier = Dir(chemin & "*")
While fichier <> ""
    n1 = n1 + 1
    fichier = Dir
Wend
'---fichiers visibles et cachés---
fichier = Dir(chemin & "*", vbHidden)
While fichier <> ""
    n2 = n2 + 1
    fichier = Dir
Wend
[A1] = "Fichiers visibles": [B1] = n1
[A2] = "Fichiers cachés": [B2] = n2 - n1
Columns(1).AutoFit
Columns(2).HorizontalAlignment = xlCenter
End Sub
A+
 

Chri8Ed

XLDnaute Occasionnel
Bonjour Job75
Merci pour ton aide

J'avais bien vu qu'il existait cette méthode
Mais j'avais lu qu'il était préférable d'utiliser GetFolder
Je constate qu'il n'en ait rien !

Dans les fichiers il y a aussi des fichiers system, j'ai donc rajouter "Or vbHidden"
Ce qui me permet d'avoir la totalité des fichiers visibles et non visibles
C'est donc parfait et cela correspond à ce que je souhaitais et même plus.

Pour ma 2ème question en revanche je n'ai pas trouvé
J'ai toujours un peu de mal avec les boucles
Je sais "Boucler" sur ce que je veux
Mais je ne sais "Pas boucler" sur ce que je ne veux pas

Exemple :
Si je veux des fichiers Jpeg, je vais donc mettre "*.jpg", facile !
Mais si au contraire je veux exclure seulement les fichiers PNG de tous les fichiers photos
Comment puis-je faire dans cette boucle

A+
 

job75

XLDnaute Barbatruc
Re,
Dans les fichiers il y a aussi des fichiers system, j'ai donc rajouter "Or vbHidden"
Ce qui me permet d'avoir la totalité des fichiers visibles et non visibles
"Or vbHidden" n'a aucun sens, voyez la 2ème boucle While de mon code précédent.
Mais si au contraire je veux exclure seulement les fichiers PNG de tous les fichiers photos
Comment puis-je faire dans cette boucle
Il suffit de faire une boucle While spécifique pour compter avec une variable n3 les fichiers PNG, on déduira ensuite n3 de n1.

A+
 

Chri8Ed

XLDnaute Occasionnel
Re,

Peut être que j'ai mal expliqué
Mais j'ai modifié comme cela la 2ème boucle
Et cela fonctionne très bien

VB:
'---fichiers visibles et cachés---
fichier = Dir(chemin & "*", vbSystem Or vbHidden)
While fichier <> ""
    n2 = n2 + 1
    fichier = Dir
Dans mon test, j'ai fichier système et 1 fichiers caché
Donc tout 2 non visibles
Et j'obtiens bien le nombre de 2

Pour votre réponse à ma deuxième question
Je vais donc faire comme cela
Je pensais qu'il était possible d'exclure quelque directement dans la boucle
Je vois que non, je vais donc procéder en 2 étapes comme vous le préconiser

A+
 

Discussions similaires