IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tester existence dossier


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    .
    Inscrit en
    Octobre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : .
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2007
    Messages : 53
    Par défaut Tester existence dossier
    Bonjour,

    Je suis débutante (et je risque de le rester, car je n'ai que très peu de temps à accorder à ma programmation sur excel ... bref ...), et là je voudrais faire une macro qui :
    - supprime les dossiers VIDES à l'intérieur d'un dossier.

    mais je ne connais pas les noms des dossiers, ni ne sait s'ils sont vides ou pas ...

    J'ai un dossier maitre : MONDOSSIER
    Dans MON DOSSIER, j'ai des sous-dossiers (ou sous-répertoires), qui ont pour nom un numéro de client sur 6 caractères numériques.
    Dans chaque dossier client, je peux avoir des fichiers ... ou pas ...

    Donc le but est de parcourir MONDOSSIER, et de supprimer les dossiers clients vides ...

    Ce que je ne sais pas, c'est
    - tester l'existence d'un dossier (car je ne connais pas les noms de mes sous-dossiers, je vais faire une boucle de 1 à 999999), et aussi
    - éviter que le "Rmdir" se plante si le dossier n'est pas vide.

    Je ne sais pas si je suis claire ...

    Ah oui ... depuis ce matin, je parcours le net en quête d'info sur ce sujet, ici et ailleurs, mais vu que mon niveau est vraiment débutant, je ne capte rien de ce que je lis !!! (J'ai cru comprendre qu'il fallait utiliser fso, mais késako ?)

    Merci beaucoup d'avance si vous pouvez m'aider !!!

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dans Contribuez, tu as le code pour lister les dossiers et les sous dossiers ainsi que pour lister les fichiers des répertoires et sous répertoires.
    Tu as à adapter le code pour placer les noms dans une ou deux listbox, c'est pour ça que je le mets ici.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub ListerLesSsRepEtLeursFichiers() '(Chemin) 'chemin peut être passé en paramètres
        Dim fso, ListR, sRep, ListF, Rep, LesReps, fich, LesFichs
        Set fso = CreateObject("Scripting.FileSystemObject")
        Chemin = "c:\Program files"
        Set ListR = fso.GetFolder(Chemin)
        Set sRep = ListR.SubFolders
        For Each Rep In sRep
            LesReps = LesReps & Rep.Name
            LesReps = LesReps & vbCrLf
            Set ListF = Rep.Files
            For Each fich In ListF
                LesFichs = LesFichs & fich.Name
                LesFichs = LesFichs & vbCrLf
            Next
            If LesFichs <> "" Then
                  MsgBox LesFichs, 0, "Fichiers du répertoire " & Rep.Name
              Else
                  MsgBox "Il n'y a pas de fichier dans ce répertoire !", 0, "Répertoire " & Rep.Name
            End If
            LesFichs = ""
        Next
        MsgBox LesReps, 0, "Répertoires du dossier " & Chemin
    End Sub
    Ce code ne fait que les afficher les noms mais c'est un bon début
    Je passe la main car je dois m'absenter.
    Bonne chance

  3. #3
    Membre averti
    Profil pro
    .
    Inscrit en
    Octobre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : .
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2007
    Messages : 53
    Par défaut
    Merci merci, c'est déjà beaucoup, je vais imprimer ce code et l'étudier pour essayer de comprendre !

    Ce qui me manque, c'est savoir comment manipuler les objets "système" tels que des fichiers, des répertoires ... ça va déjà bien m'aider !

    J'y vais de ce pas ...

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Chuis reviendu !
    Pour te placer dans un répertoire.
    S'il est dans un lecteur différent, implique que tu te places en premier dans ce lecteur
    ChDrive "Volume"
    Pour te placer dans le lecteur actif (celui qui contient le dossier ouvert ou celui que tu viens de choisir) c'est
    chdir "Chemin complet"
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chdrive "D" 'place dans le lecteur "D:\"
    Chdir "D:\Rep\Sous-Rep\Sous Sous-Rep\" ' place dans le répertoire "D:\Rep\Sous-Rep\Sous Sous-Rep\" (!)
    Après quoi tu peux faire ce que tu veux dans ce répertoire, le lister, ouvrir des fichiers, en supprimer (avec Kill -> Aide en ligne pour la syntaxe), en renommer, ... tout ce qu'on peut faire avec des fichiers
    A+

  5. #5
    Membre averti
    Profil pro
    .
    Inscrit en
    Octobre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : .
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2007
    Messages : 53
    Par défaut
    Merci !

    Donc j'ai un peu avancé, sauf que j'avais un peu simplifié ma question au départ ... en fait, j'ai cette arborescence :

    DOSSIER1
    ----DOSSIER11 (nom = numéro aléatoire de 1 à 999999)
    -------DOSSIER111 (nom = numéro aléatoire)
    -------------DOC1
    -----------------fichiers ou pas
    -------------DOC2
    -----------------fichiers ou pas
    -------DOSSIER112
    -------------DOC1
    -----------------fichiers ou pas
    -------------DOC2
    -----------------fichiers ou pas
    -------------DOC3
    -----------------fichiers ou pas
    ----DOSSIER12 (nom = numéro aléatoire de 1 à 999999)
    -------DOSSIER121 (nom = numéro aléatoire)
    -------------DOC1
    -----------------fichiers ou pas
    -------------DOC2
    -----------------fichiers ou pas
    -------DOSSIER122
    -------------DOC1
    -----------------fichiers ou pas
    -------------DOC3
    -----------------fichiers ou pas
    ...


    Donc le premier code donné, permet de détailler un premier niveau de dossier, mais comment descendre dans l'arborescence jusqu'au dernier niveau, quand les noms de répertoires/dossiers ne sont pas connus ?

    Merci encore !!!

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    J'ai utilisé un autre code plus rapide. Attention : Place le nom complet des fichiers dans la feuille de calculs active.
    Tu adaptes le nom du répertoire parent et tu exécutes CompterSeulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Public nb As Integer
    Public Function CompteLesFichiers(chemin As String) As Long
    Dim fs, RepFich As Variant
        Set fs = CreateObject("Scripting.FileSystemObject")
        CompteLesFichiers = fs.GetFolder(chemin).Files.Count
        NomFich = Dir(chemin & "\")
        Do While NomFich <> ""
            nb = nb + 1
            Cells(nb, 1) = chemin & "\" & NomFich
            NomFich = Dir()
        Loop
     
        For Each RepFich In fs.GetFolder(chemin).SubFolders
            CompteLesFichiers = CompteLesFichiers + CompteLesFichiers(RepFich.Path)
        Next RepFich
    End Function
     
    Sub CompterSeulement()
    Dim chemin As String
        nb = 0
        chemin = "D:\Doc" 'avec ou sans sous-répertoire
        MsgBox CompteLesFichiers(chemin)
    End Sub
    Liste tous les fichiers.

    Tu sauras placer ça dans une ou plusieurs listes ?
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/06/2013, 13h11
  2. tester existance Formulaire
    Par LeScandinave dans le forum Access
    Réponses: 3
    Dernier message: 02/11/2005, 11h20
  3. Réponses: 4
    Dernier message: 08/09/2005, 22h24
  4. Tester existence d'une contrainte
    Par castaka dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/07/2005, 17h47
  5. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo