Recherche d'un dossier existant dans un dossier et tous ses sous-dossiers

Résolu
Alb1dza Messages postés 6 Date d'inscription mercredi 13 mai 2009 Statut Membre Dernière intervention 18 août 2010 - 18 août 2010 à 14:04
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 - 18 août 2010 à 19:47
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

the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
18 août 2010 à 15:59
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
3
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
18 août 2010 à 19:47
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.
3
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
18 août 2010 à 14:14
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..
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
18 août 2010 à 16:05
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..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alb1dza Messages postés 6 Date d'inscription mercredi 13 mai 2009 Statut Membre Dernière intervention 18 août 2010
18 août 2010 à 16:17
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
0
the_little_big_man Messages postés 86 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 14 février 2011
18 août 2010 à 16:25
:) je me rappel de mes débuts donc ...
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
18 août 2010 à 16:28
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..
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
18 août 2010 à 16:45
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
0
Rejoignez-nous