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 :

Supprimer un répertoire et les fichiers qu'il contient mais en plus simple


Sujet :

Macros et VBA Excel

  1. #1
    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
    Points : 15 543
    Points
    15 543
    Par défaut Supprimer un répertoire et les fichiers qu'il contient mais en plus simple
    Si ça existe, tout est dans le sujet. Il doit certainement y avoir plus simple que ce que j'ai fait
    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
    Sub SupprimerCeRépertoire()
    Dim Rep, TabRep, RepSup, RepName
        Rep = "D:\Quit\LettresTypes\"
        TabRep = Split(Rep, "\")(UBound(Split(Rep, "\")) - 1)
        RepSup = Left(Rep, InStr(Rep, TabRep) - 1)
        RepName = Dir(RepSup, vbDirectory)
        Do
            If LCase(RepName) = LCase(TabRep) Then
                ChDir Rep
                Kill "*.doc"
                DoEvents
                ChDir RepSup
                RmDir Rep
                DoEvents
                Exit Do
            End If
            RepName = Dir
        Loop While Not ok
    End Sub
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim fso
    rep = "C:\dossier"
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FolderExists(rep) Then
        fso.DeleteFolder rep
    Else
        MsgBox "Repertoire non trouvé : " & rep
    End If
    Attention : supprime également tous les fichiers et les sous-dossiers

  3. #3
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Merci dadavyvy, c'est ce que je cherchais. Mais je souhaiterais éviter de référencer les fso.
    Dans un contexte voisin, Maxence HUBICHE, il a dit "L'avantage de Dir, c'est qu'il sert uniquement à cela, et qu'il est dans la bibliothèque VBA (donc obligatoirement présent) et donc, il devient inutile de référencer les fso en plus."
    Et j'aimerais bien lui faire plaisir
    Si tu as une idée.
    A+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    En fait avec un CreateObject, on n'a pas besoin de reférencer la bibliotheque dans VBA, il suffit juste qu'elle ait été bien installée... De même avec un objet Word.Application ou autre, pas besoin de référencer la Microsoft Word Library.
    Référencer la biblio, te permet d'avoir l'aide intuitive de VBA...
    Et parfois même, les deux ne sont pas compatibles, comme avec la librairie LotusNotes... Incompatibilité de type selon VBA... grrrr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim sess As NotesSession
    Set sess = CreateObject("Notes.NotesSession")
    'Et là erreur !....
    Mais bon, ça n'a rien avoir avec le sujet...

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bjr,

    J'aime bien l'API SHFileOperation pour les opérations sur les fichiers/répertoire.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Option Explicit
     
    Private Type SHFILEOPSTRUCT
        Hwnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Integer
        fAnyOperationsAborted As Boolean
        hNameMappings As Long
        lpszProgressTitle As String
    End Type
    Private Const FOF_SILENT As Long = &H4
    Private Const FOF_NOCONFIRMATION As Long = &H10
    Private Const FO_DELETE = &H3
    Private Declare Function SHFileOperation Lib "Shell32.dll" _
                Alias "SHFileOperationA" _
                (lpFileOp As SHFILEOPSTRUCT) _
                As Long
     
     
    Function TestSuppressionRépertoire()
    Dim tshFileOp As SHFILEOPSTRUCT
    Dim lRet As Long
    With tshFileOp
        .wFunc = FO_DELETE
        .pFrom = "E:\MonRépertoireàSuprrimer"
        .fFlags = FOF_SILENT Or FOF_NOCONFIRMATION
    End With
    lRet = SHFileOperation(tshFileOp)
    If lRet = 0 Then
        MsgBox "Opération réussie"
    Else
        MsgBox "Erreur lors de la suppression"
    End Select
    End Function

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Merci à tous.
    Un merci particulier à Arkham46 Je sais que le plus simple n'est pas toujours le plus efficace mais bon. J'ai bien vu que tu gères l'existence du répertoire à supprimer mais comme ce qui m'importe est de ne plus l'avoir, j'avais simplifié
    Dans la sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub SupprimerEnDos()
    Dim Rep
        Rep = "D:\Quit\LettresTypes"
        'If VerifExistence(Rep) Then
            Call Shell("cmd /c RD /S /Q " & Rep)
        'End If
    End Sub
    'Et dans la fonction
    Function VerifExistence(Rep) As Boolean
        On Error Resume Next
            ChDir Rep
            VerifExistence = Err = 0
    End Function
    Parce que, tant qu'à faire de passer par les API, le passage par le dos eut été beaucoup plus simple.
    Hélas, si ce code fonctionne (je parle du Shell) la vérif provoque une erreur, le message retourné étant "Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus" (!)
    J'ai donc supprimé la vérif, ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub SupprimerInconditionnellementUnRepEnDos(Rep)
            Call Shell("cmd /c RD /S /Q " & Rep)
    End Sub
    Les paramètres sont là, /S pour supprimer tout ce que contient le répertoire et lui-même, /Q pour éviter une confirmation.
    En réalité, c'est un peu ce que je cherchais quand je souhaitais "plus simple", mais par VBA.
    Encore merci de vous être penchés sur mon pb.
    Si on n'a pas, je ferai avec. Avec Vista, faudra réviser ça...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    bonjour
    avez vous une commande shell proche de celle ci dessus mais permettant de faire un del *.* dans un répertoire mais sans supprimer ce répertoire

    actuellement j'utilise la fonction "envoicorbeille" que j'ai trouvée sur le forum mais je la trouve tres longue à s'executer car il y a de nombreux fichier et je me demande si une commande type shell ne serait pas plus rapide

    merci par avance
    laurent

  8. #8
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, tu as ça avec le même code à peine modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub SupprimerEnDos()
    Dim Rep
        Rep = "D:\GlouGlou"
        If VerifExistence(Rep) Then
            Shell "cmd /c Del *.* /q"
        End If
    End Sub
     
     
    Function VerifExistence(Rep) As Boolean
        On Error Resume Next
            ChDir Rep
            VerifExistence = Err = 0
    End Function
    Mais tu as aussi ça en VBA.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    merci bien
    je vais essayer cela
    a+
    laurent

  10. #10
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Pendant que tu y es, teste ça
    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
    Sub SupprimerEnVBA()
    Dim Rep As String, Ext As String
        Rep = "D:\GlouGlou\"
        Ext = "*.xls"
        If VerifExistence(Rep) Then
            On Error Resume Next
            Kill Rep & Ext
            If Err <> 0 Then MsgBox "Aucun fichier " & Ext & " trouvé"
        End If
    End Sub
     
    Function VerifExistence(Rep) As Boolean
        On Error Resume Next
            ChDir Rep
            VerifExistence = Err = 0
    End Function
    Et tu peux adapter "*.xls" comme tu veux

  11. #11
    Membre à l'essai
    Homme Profil pro
    Gestionnaire de stocks (Pharmacie)
    Inscrit en
    Septembre 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Gestionnaire de stocks (Pharmacie)
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2018
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par dadavyvy Voir le message
    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim fso
    rep = "C:\dossier"
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FolderExists(rep) Then
        fso.DeleteFolder rep
    Else
        MsgBox "Repertoire non trouvé : " & rep
    End If
    Attention : supprime également tous les fichiers et les sous-dossiers
    code interessant
    Mais comment adapter pour supprimer tous les dossiers sauf un dossier specifique "X" par exemple? Merci

Discussions similaires

  1. [VBA-*]Lister les sous-répertoires et les fichiers de ceux-ci
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 8
    Dernier message: 19/01/2017, 19h05
  2. Afficher les répertoires, pas les fichiers
    Par alfred40 dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2008, 23h17
  3. Réponses: 2
    Dernier message: 13/07/2008, 14h57
  4. [VBA-*]Lister les sous-répertoires et les fichiers de ceux-ci
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/04/2007, 22h41
  5. Comment supprimer un répertoire ayant des fichiers
    Par pinson dans le forum Delphi
    Réponses: 2
    Dernier message: 02/11/2006, 09h52

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