OVH Cloud OVH Cloud

Dossier vide

24 réponses
Avatar
Alf
Bonjour =C3=A0 tous,

Comment tester en vba si un dossier est vide ?
Vide de sous-dossiers et vide de fichiers...


Merci de votre aide =C3=A0 tous
Alf

10 réponses

1 2 3
Avatar
Jacky
Re..
Il y à confusion...;o)
On aurait dû lire :
If Dir(LeDossier, vbDirectory) = "" Then

Oui cela je l'avais corrigé.
Je voulais dire que ta dernière proposition, celle de 17:34 adressée au
demandeur
me retourne
/.
Ce répertoire "D:Mes documentstoto" a 0 répertoire(s) et 1 fichiers.
/.
Pour un repertoire complètement vide
Salutations
JJ
Avatar
Alf
Le dimanche 10 décembre 2017 08:59:37 UTC+1, Alf a écrit :
Bonjour à tous,
Comment tester en vba si un dossier est vide ?
Vide de sous-dossiers et vide de fichiers...
Merci de votre aide à tous
Alf

MichD
La nouvelle procédure me compte toujours 1 fichier de plus, nombre de sous dossiers OK...?
La correction de la procédure de Jacky bloque sur
If Dir(LeDossier, LeDossier) = "" Then
J'ai essayé avec If Dir(LeDossier, VbDirectory) = "" Then, c'est ok mais cette procédure teste si le dossier existe mais pas s'il est vide .
A part cà, mes amis, bonne soirée
Je teste tout cela de nouveau demain...!
Avatar
Michd
Si tu fais référence à cette procédure, j'ai fait quelques tests et à chaque
fois elle retourne le résultat attendu. Est-ce possible que tu aies un ou
des fichiers cachés dans le répertoire de ton test. Je ne suis pas arrivé à
prendre cette procédure en défaut.
'----------------------------------------------------
Sub test()
Dim FSO As Scripting.FileSystemObject
Dim NDossiers As Long, Dossier As Folder
Dim NFiles As Long
Dim Répertoire As String
Répertoire = "E:Mon profiltoto" 'OU
' "c:UsersMon ProfilDocumentstoto"
If Dir(Répertoire, vbDirectory) = "" Then
MsgBox "Ce répertoire """ & Répertoire & """ n'existe pas."
Exit Sub
End If
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossier = FSO.GetFolder(Répertoire)
NDossiers = Dossier.SubFolders.Count
NFichiers = Dossier.Files.Count
MsgBox "Ce répertoire """ & Répertoire & """ a " & _
NDossiers & " répertoire(s)" & " et " & _
NFichiers & " fichiers."
'OU
If NDossiers = 0 And NFichiers = 0 Then
MsgBox "Ce répertoire """ & Répertoire & """ est vide."
End If
End Sub
'----------------------------------------------------
MichD
Avatar
Jacky
Re..
Est-ce possible que tu aies un ou des fichiers cachés dans le répertoire de
ton test


Non, c'est un repertoire que j'ai crée pour l'occasion
Apparemment Alf rencontre le même problème.
Salutations
JJ
Michd a exposé le 10/12/2017 :
Avatar
Michd
Si tu exécutes la procédure pas à pas, après exécution de la ligne de code
suivante :
Set Dossier = FSO.GetFolder(Répertoire)
En passant la souris au-dessus de dossier, tu devrais voir le chemin du
répertoire
Pour les 2 lignes de code suivantes, le résultat est donné par les
propriétés et méthodes de la bibliothèque "Microsoft Scripting Runtime". Si
tu retapes le "point" (.) après "Dossier, tu as droit à une liste déroulante
qui affiche les propriétés et méthodes de l'objet. Tu peux faire la même
chose pour le point de chacun des items de ces 2 lignes de code.
'Nombre de sous-répertoires
NDossiers = Dossier.SubFolders.Count
'Nombre de fichiers dans le répertoire dossier
NFichiers = Dossier.Files.Count
à la procédure suivante, j'ai apporté une légère modification dans la
déclaration de la variable "Dossier" comme suit : Dossier As
Scripting.Folder. Selon les bibliothèques définies dans ton classeur, il se
peut que l'expression "Folder" appartienne a plus d'une bibliothèque. En
précisant dans la déclaration "Scripting.Folder", on va s'assurer qu'Excel
comprend bien que l'on parle de l'objet "Folder" appartenant à cette
bibliothèque.
Chez moi, avec Excel 2016, je fais mouche à chaque fois. Tu as quelle
version d'Excel?
'-------------------------------------------------
Sub test()
Dim FSO As Scripting.FileSystemObject
Dim NDossiers As Long, Dossier As Scripting.Folder
Dim NFiles As Long
Dim Répertoire As String
Répertoire = "E:Denistoto"
If Dir(Répertoire, vbDirectory) = "" Then
MsgBox "Ce répertoire """ & Répertoire & """ n'existe pas."
Exit Sub
End If
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossier = FSO.GetFolder(Répertoire)
'NDossiers = Nombre de sous-répertoires dans
'le répertoire dossier
NDossiers = Dossier.SubFolders.Count
'NFichiers = nombre de fichiers dans le répertoire dossier
NFichiers = Dossier.Files.Count
MsgBox "Ce répertoire """ & Répertoire & """ a " & _
NDossiers & " répertoire(s)" & " et " & _
NFichiers & " fichiers."
'OU
If NDossiers = 0 And NFichiers = 0 Then
MsgBox "Ce répertoire """ & Répertoire & """ est vide."
End If
End Sub
'-------------------------------------------------
MichD
"Jacky" a écrit dans le message de groupe de discussion :
p0kghr$he1$
Re..
Est-ce possible que tu aies un ou des fichiers cachés dans le répertoire
de ton test


Non, c'est un repertoire que j'ai crée pour l'occasion
Apparemment Alf rencontre le même problème.
Salutations
JJ
Michd a exposé le 10/12/2017 :
Avatar
Michd
Sur le Web, tu as une multitude d'exemples comme sur ce site :
http://www.vbaexpress.com/kb/getarticle.php?kb_id#8
La bibliothèque "Microsoft Scripting Runtime" n'est pas récente. Jusqu'à
aujourd'hui, je n'ai encore jamais vu d'exemples qui rapportaient un mauvais
décompte du nombre de fichiers dans un répertoire!
MichD
Avatar
Jacky
RE...
Je suis sur xl2007
J'ai declaré
NFichiers As Long
Toutes les propriétés et méthodes de l'objet sont présente
En méthode pas à pas
NDossiers ==> retourne le bon résultat
NFichiers ==> Retourne toujours un nombre de fichier +1
Même punition avec la dernière version
J'en conclus que c'est un Bug xl2007
Je garde ma bonne vieille méthode avec Dir ;o)
Salutations
JJ
Michd a exposé le 11/12/2017 :
Si tu exécutes la procédure pas à pas, après exécution de la ligne de code
suivante :
Set Dossier = FSO.GetFolder(Répertoire)
En passant la souris au-dessus de dossier, tu devrais voir le chemin du
répertoire
Pour les 2 lignes de code suivantes, le résultat est donné par les
propriétés et méthodes de la bibliothèque "Microsoft Scripting Runtime". Si
tu retapes le "point" (.) après "Dossier, tu as droit à une liste déroulante
qui affiche les propriétés et méthodes de l'objet. Tu peux faire la même
chose pour le point de chacun des items de ces 2 lignes de code.
'Nombre de sous-répertoires
NDossiers = Dossier.SubFolders.Count
'Nombre de fichiers dans le répertoire dossier
NFichiers = Dossier.Files.Count
à la procédure suivante, j'ai apporté une légère modification dans la
déclaration de la variable "Dossier" comme suit : Dossier As
Scripting.Folder. Selon les bibliothèques définies dans ton classeur, il se
peut que l'expression "Folder" appartienne a plus d'une bibliothèque. En
précisant dans la déclaration "Scripting.Folder", on va s'assurer qu'Excel
comprend bien que l'on parle de l'objet "Folder" appartenant à cette
bibliothèque.
Chez moi, avec Excel 2016, je fais mouche à chaque fois. Tu as quelle
version d'Excel?
'-------------------------------------------------
Sub test()
Dim FSO As Scripting.FileSystemObject
Dim NDossiers As Long, Dossier As Scripting.Folder
Dim NFiles As Long
Dim Répertoire As String
Répertoire = "E:Denistoto"
If Dir(Répertoire, vbDirectory) = "" Then
MsgBox "Ce répertoire """ & Répertoire & """ n'existe pas."
Exit Sub
End If
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossier = FSO.GetFolder(Répertoire)
'NDossiers = Nombre de sous-répertoires dans
'le répertoire dossier
NDossiers = Dossier.SubFolders.Count
'NFichiers = nombre de fichiers dans le répertoire dossier
NFichiers = Dossier.Files.Count
MsgBox "Ce répertoire """ & Répertoire & """ a " & _
NDossiers & " répertoire(s)" & " et " & _
NFichiers & " fichiers."
'OU
If NDossiers = 0 And NFichiers = 0 Then
MsgBox "Ce répertoire """ & Répertoire & """ est vide."
End If
End Sub
'-------------------------------------------------
MichD
Avatar
Jacky
RE..
Eurêka..
J'ai supprimer mon sous repertoire toto, puis re-créer
Et là...cela fonctionne
Vas comprendre.....
Merci de ta patience
Salutations
JJ
Avatar
Michd
Comme tu dis... il y d'autres approches :
https://www.extendoffice.com/documents/excel/3159-excel-count-files-in-folder-directory.html
'------------------------------------------
Sub CountFiles()
Dim xFolder As String, xPath As String
Dim xCount As Long, xFiDialog As FileDialog
Dim xFile As String
Set xFiDialog = Application.FileDialog(msoFileDialogFolderPicker)
If xFiDialog.Show = -1 Then
xFolder = xFiDialog.SelectedItems(1)
End If
If xFolder = "" Then Exit Sub
xPath = xFolder & "*.*"
xFile = Dir(xPath)
Do While xFile <> ""
xCount = xCount + 1
xFile = Dir()
Loop
MsgBox xCount & " fichiers trouvés"
End Sub
'----------------------------------------------
MichD
"Jacky" a écrit dans le message de groupe de discussion :
p0m5h9$trr$
RE...
Je suis sur xl2007
J'ai declaré
NFichiers As Long
Toutes les propriétés et méthodes de l'objet sont présente
En méthode pas à pas
NDossiers ==> retourne le bon résultat
NFichiers ==> Retourne toujours un nombre de fichier +1
Même punition avec la dernière version
J'en conclus que c'est un Bug xl2007
Je garde ma bonne vieille méthode avec Dir ;o)
Salutations
JJ
Michd a exposé le 11/12/2017 :
Si tu exécutes la procédure pas à pas, après exécution de la ligne de code
suivante :
Set Dossier = FSO.GetFolder(Répertoire)
En passant la souris au-dessus de dossier, tu devrais voir le chemin du
répertoire
Pour les 2 lignes de code suivantes, le résultat est donné par les
propriétés et méthodes de la bibliothèque "Microsoft Scripting Runtime".
Si
tu retapes le "point" (.) après "Dossier, tu as droit à une liste
déroulante
qui affiche les propriétés et méthodes de l'objet. Tu peux faire la même
chose pour le point de chacun des items de ces 2 lignes de code.
'Nombre de sous-répertoires
NDossiers = Dossier.SubFolders.Count
'Nombre de fichiers dans le répertoire dossier
NFichiers = Dossier.Files.Count
à la procédure suivante, j'ai apporté une légère modification dans la
déclaration de la variable "Dossier" comme suit : Dossier As
Scripting.Folder. Selon les bibliothèques définies dans ton classeur, il
se
peut que l'expression "Folder" appartienne a plus d'une bibliothèque. En
précisant dans la déclaration "Scripting.Folder", on va s'assurer qu'Excel
comprend bien que l'on parle de l'objet "Folder" appartenant à cette
bibliothèque.
Chez moi, avec Excel 2016, je fais mouche à chaque fois. Tu as quelle
version d'Excel?
'-------------------------------------------------
Sub test()
Dim FSO As Scripting.FileSystemObject
Dim NDossiers As Long, Dossier As Scripting.Folder
Dim NFiles As Long
Dim Répertoire As String
Répertoire = "E:Denistoto"
If Dir(Répertoire, vbDirectory) = "" Then
MsgBox "Ce répertoire """ & Répertoire & """ n'existe pas."
Exit Sub
End If
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossier = FSO.GetFolder(Répertoire)
'NDossiers = Nombre de sous-répertoires dans
'le répertoire dossier
NDossiers = Dossier.SubFolders.Count
'NFichiers = nombre de fichiers dans le répertoire dossier
NFichiers = Dossier.Files.Count
MsgBox "Ce répertoire """ & Répertoire & """ a " & _
NDossiers & " répertoire(s)" & " et " & _
NFichiers & " fichiers."
'OU
If NDossiers = 0 And NFichiers = 0 Then
MsgBox "Ce répertoire """ & Répertoire & """ est vide."
End If
End Sub
'-------------------------------------------------
MichD
Avatar
Michd
Une autre petite fonction :
https://www.ozgrid.com/forum/forum/help-forums/excel-general/21161-counting-files-in-a-directory
Tes tas d'autres exemples sur le Web.
'-------------------------------------------------
Function FileCountB(Path As String) As Long
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject").GetFolder(Path)
FileCountB = objFSO.Files.Count
Set objFSO = Nothing
End Function
'-------------------------------------------------
MichD
1 2 3