Dossier vide

Le
Alf
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
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacky
Le #26455323
Bonjour
Essaye ceci
'--------------------------------
Sub Dosierjj()
Dim LeDossier As String
LeDossier = "D:Mes documentstoto" 'A adapter
On Error GoTo fin
ChDir (LeDossier)
MsgBox IIf(Dir(LeDossier) = "", "Dossier vide", "Dossier non vide")
Exit Sub
fin:
MsgBox "Dossier non existant"
End Sub
'--------------------------------
Salutations
JJ
Alf a exposé le 10/12/2017 :
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
Le #26455326
Bonjour,
C'était à l'origine une procédure de Frédéric Sigonneau que j'ai transformé
en fonction en apportant quelques modifications. Il ne te reste plus qu'à
inscrire le répertoire que tu veux évaluer.
Dans la procédure Test, tu peux demander de traiter ou non les
sous-répertoires en utilisant True or False dans la ligne de code suivante :
MsgBox NbDeDossiers(S, Cpte, True)
'Cette ligne de code dans le haut du module
Dim fso As Object, Dossier As Object, sousRep As Object
'-----------------------------------------------------------------
Sub Test1()
Dim S As String, Cpte As Long
'Le répertoire racine à évaluer
S = "C:UsersTon ProfilDocuments"
If Dir(S, vbDirectory) = "" Then
MsgBox "Ce répertoire """ & S & """ n'existe pas."
Exit Sub
End If
Set fso = CreateObject("Scripting.FileSystemObject")
MsgBox NbDeDossiers(S, Cpte, True)
End Sub
'-----------------------------------------------------------------
Function NbDeDossiers(DossierRacine As String, Cpte, _
Optional SsDossiers As Boolean = True)
If Right(DossierRacine, 1) <> "" Then
DossierRacine = DossierRacine & ""
End If
Set Dossier = fso.GetFolder(DossierRacine)
If Dir(DossierRacine & "*.*") = "" Then
Cpte = Cpte + 1
End If
'traitement récursif des sous dossiers
If SsDossiers Then
For Each sousRep In Dossier.SubFolders
NbDeDossiers sousRep.Path, Cpte
Next sousRep
End If
NbDeDossiers = Cpte
End Function
'-----------------------------------------------------------------
MichD
"Alf" a écrit dans le message de groupe de discussion :

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
Le #26455325
La procédure offerte compte seulement les répertoires et sous-répertoires
vides.
Ta demande est différente à la relecture!
MichD
Alf
Le #26455335
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


D'abord, Merci pour vos réponses
Pour Jacky,
J’insère un fichier dans mon répertoire, la procédur e me renvoie quand même "Dossier Vide" ?
Pour MichD
Le dossier est vide et la procédure me renvoie 1 alors qu'il y a 0 fic hiers...?
J'insère un fichier ou sous dossier, me renvoie 2...
Merci pour vos précisions
Jacky
Le #26455362
Bonjour
Pour Jacky,
J’insère un fichier dans mon répertoire, la procédure me renvoie quand même
"Dossier Vide" ?

Etonnant....
Je n'ai pas réussi à provoqué ce que tu évoques
Denis STP
Pourrait-tu tester mon code ?
Salutations
JJ
Alf a exposé le 10/12/2017 :
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

D'abord, Merci pour vos réponses
Pour Jacky,
J’insère un fichier dans mon répertoire, la procédure me renvoie quand même
"Dossier Vide" ?
Pour MichD
Le dossier est vide et la procédure me renvoie 1 alors qu'il y a 0
fichiers...? J'insère un fichier ou sous dossier, me renvoie 2...
Merci pour vos précisions
Jacky
Le #26455366
Oupps !!
Pourrais-tu
Jacky a exposé le 10/12/2017 :
Bonjour
Pour Jacky,
J’insère un fichier dans mon répertoire, la procédure me renvoie quand même
"Dossier Vide" ?

Etonnant....
Je n'ai pas réussi à provoqué ce que tu évoques
Denis STP
Pourrait-tu tester mon code ?
Salutations
JJ
Michd
Le #26455372
Dans mon premier message, le code sert à dénombrer le nombre de répertoires
et de sous-répertoires vides dans le chemin défini.
Celle-ci t'indique si le répertoire défini contient ou non des répertoires
ou des fichiers.
Pour faire rouler cette procédure, tu dois charger la référence suivante :
"Microsoft Scripting Runtime" à partir du menu Outils / références /
tu coches simplement cette dernière. C'est va t'aider à comprendre
les propriétés et méthodes de ces objets, car tu auras une liste
déroulante sur chacun de ces objets représentés par :
Fso, Dossier,
'---------------------------------------------------
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 = "c:Userston profilDocumentstoto1"
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
"Alf" a écrit dans le message de groupe de discussion :

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


D'abord, Merci pour vos réponses
Pour Jacky,
J’insère un fichier dans mon répertoire, la procédure me renvoie quand même
"Dossier Vide" ?
Pour MichD
Le dossier est vide et la procédure me renvoie 1 alors qu'il y a 0
fichiers...?
J'insère un fichier ou sous dossier, me renvoie 2...
Merci pour vos précisions
Michd
Le #26455374
Bonjour Jacky,
Ta procédure ne donne pas d'erreur...
Sauf que j'ajouterais après cette ligne de code
LeDossier = ....
ceci afin de t'assurer que le symbole "" à la toute fin du chemin est
présent sinon la procédure retourne une information fausse. De même, ceci :
ChDir(LeDossier) n'est pas obligatoire!
If Right(LeDossier, 1) <> "" Then
LeDossier = LeDossier & ""
End If
Au lieu d'utiliser On error go to fin
j'utiliserais plutôt ceci :
If Dir(LeDossier, LeDossier) = "" Then
MsgBox "Dossier non existant"
Exit Sub
End If
Dans des procédures plus complexes, une erreur peut-être générée par
plusieurs choses!
MichD
Jacky
Le #26455377
Hello Denis
Je n'ai utilsé Chdir que pour actionné la gestion d'erreur,(76 dans ce
cas).
Ta dernnière proposition (Sub test())
Me retourne pour un repertoire
"D:Mes documentstoto"
complètement vide
*/*
Ce répertoire "D:Mes documentstoto" a 0 répertoire(s) et 1 fichiers
*/*.
Idem pour
"D:Mes documentstoto"
Salutations
JJ
Michd
Le #26455378
J'ai testé avec ceci et cela fonctionne :
Évidemment, il y a avait une erreur sur cette ligne
If Dir(LeDossier, LeDossier) = "" Then
On aurait dû lire :
If Dir(LeDossier, vbDirectory) = "" Then
'---------------------------------------
Sub Dosierjj()
Dim LeDossier As String
LeDossier = "C:Userston profilDocumentstoto" 'A adapter
If Right(LeDossier, 1) <> "" Then
LeDossier = LeDossier & ""
End If
If Dir(LeDossier, vbDirectory) = "" Then
MsgBox "Dossier non existant"
Exit Sub
End If
MsgBox IIf(Dir(LeDossier) = "", "Dossier vide", "Dossier non vide")
End Sub
'---------------------------------------
MichD

"Jacky" a écrit dans le message de groupe de discussion :
p0jrqp$1gbe$
Hello Denis
Je n'ai utilsé Chdir que pour actionné la gestion d'erreur,(76 dans ce
cas).
Ta dernnière proposition (Sub test())
Me retourne pour un repertoire
"D:Mes documentstoto"
complètement vide
*/*
Ce répertoire "D:Mes documentstoto" a 0 répertoire(s) et 1 fichiers
*/*.
Idem pour
"D:Mes documentstoto"
Salutations
JJ
Publicité
Poster une réponse
Anonyme