Recherche d'un dossier existant dans un dossier et tous ses sous-dossiers [Résolu]

Signaler
Messages postés
6
Date d'inscription
mercredi 13 mai 2009
Statut
Membre
Dernière intervention
18 août 2010
-
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
-
Bonjour,

J'utilise actuellement une "chaîne de If...Then...Else" pour rechercher si un dossier existe déjà dans un dossier et tous ces sous-dossier.

C'est fastidieux et ça ne fonctionnerait plus si un nouveau sous-dossier était créé. Savez-vous comment je pourrait adapter le code ci-dessous ?

Private Sub OK_Click()
If Dir$("P:\...\dossier 1\Alb1dza", vbDirectory) = vbNullString Then
If Dir$("P:\...\dossier 2\Alb1dza", vbDirectory) = vbNullString Then
MkDir "P:\...\dossier\Alb1dza"
Else
MsgBox "Dossier déjà présent dans Dossier 2"
End If
Else
MsgBox "Dossier déjà présent dans Dossier 1"
End If

End Sub


Merci d'avance

Alb1dza

8 réponses

Messages postés
86
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
14 février 2011

petite recherche sur le forum et j'ai ceci
Sub TousLesDossiers(LeDossier$, Idx As Long)
Dim fso As Object, Dossier As Object
Dim sousRep As Object, Flder As Object
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set Dossier = fso.GetFolder(LeDossier)
  
  'examen du dossier courant
  For Each Flder In Dossier.subfolders
      Idx = Idx + 1
      Cells(Idx, 1).Value = Flder.Path
  Next
  
  'traitement récursif des sous dossiers
  For Each sousRep In Dossier.subfolders
    TousLesDossiers sousRep.Path, Idx
  Next sousRep
  
  Set fso = Nothing
   
End Sub 'fs

'utilisation
Sub test()
  TousLesDossiers "C:\Documents and Settings", 0
End Sub


donc il suffit de changer le "C:\Documents and Settings" par le repertoire que tu vx parcourir et changer la boucle For par:
  For Each Flder In Dossier.subfolders
      Idx = Idx + 1
      If "dossier cherché" = Flder.Path Then
      MsgBox "dossier existe dans " & Flder.Path
      Exit Sub
      End If
  Next
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
Bonjour,

En vb.net, on peut faire quelque chose du style :
Imports System.IO
Private Function DirectoryExist(ByVal dirName As String, ByVal dirPath As String) As String

        If Directory.Exists(Path.Combine(dirPath, dirName)) Then
            Return dirPath
        Else
            For Each subDirPath As String In Directory.GetDirectories(dirPath)
                If Not String.IsNullOrEmpty(DirectoryExist(dirName, subDirPath)) Then
                    Return subDirPath
                End If
            Next
        End If

        Return String.Empty

End Function


à utiliser comme ceci :

Dim dirToFind As String = "Dossier4"
Dim res As String = DirectoryExist(dirToFind, "C:\Dossier1")
If Not String.IsNullOrEmpty(res) Then
  MessageBox.Show(String.Format("Le dossier {0} existe dans le dossier {1}", dirToFind, res))
End If


La fonction "DirectoryExist" renvoi le chemin du premier dossier qui contient "dirName" en partant de "dirPath" et en parcourant tous les sous-dossier.
Elle renvoie une chaine vide si le dossier n'a pas été trouvé.

Il y a plein d'autres façons de faire, mais ca peut aider.
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
4
Bonjour,

Il existe sur ce forum un tas de sujet traitant de ce problème, à savoir la recherche récursive de dossiers ou de fichiers; as-tu effectué une recherche?

Es-tu en VB.net??car Msgbox ne devrait plus être employé, mais messagebox.show


L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
4
Bonjour The_little_big_man,

Tu es bien gentil de faire la recherche à sa place


L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
6
Date d'inscription
mercredi 13 mai 2009
Statut
Membre
Dernière intervention
18 août 2010

Bonjour à tous les deux et merci de vos réponses !

@ The_little_big_man : effectivement tu es très gentil de faire la recherche pour moi ! Je vais faire le test !

@ lolokun : je me doutais bien qu'il existait quelque-chose sur le sujet (croyez-moi j'ai passé des heures sur le forum), mais étant débutant je ne connaissais pas le terme "récursive". Effectivement je viens de le refaire, avec le vocabulaire adapté, c'est plus simple !

Alb1dza
Messages postés
86
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
14 février 2011

:) je me rappel de mes débuts donc ...
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
4
De rien, par contre la réponse est plutôt valable en vb6/vbs, si tu es en vb.net il doit sûrement y avoir d'autres méthodes plus simples utilisant les fonctions du framework..

L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
Bonjour,
voir la classe system.io
"Scripting.FileSystemObject" n'est pas valable , chez moi cette saleté est désactivée


a+
google est mon ami quand tu cherches quelque chose demande lui clairement