Suppression de dossier avec comme nom une variable

Bonjour,

Je reviens vers vous vu que je rencontre un nouveau problème.

En effet, dans mon fichier j'ai actuellement une macro qui me permet de créer un dossier puis un fichier du nom d'une textbox que je renseigne, jusque la, tout fonctionne

Hors j'ai créer une macro pour supprimer une ligne de mon tableau en fonction d'une nouvelle TextBox et par la meme occasion supprimer le fichier et le dossier correspondant. Et c'est la que je rencontre un probleme.

La ligne et le fichier se supprime normalement, mais pas le dossier.

Voici le code :

Function ExistenceFichier(sFichier As String) As Boolean

    ExistenceFichier = Dir(sFichier) <> ""

End Function

Private Sub CommandButton_supprimer_Click()

    Dim NomPG As String
    Dim CheminFichier As String, ExtensionFichier As String, FicheASupprimer As String

    CheminFichier = "M:\CTX-Fiche_produit\Nouvelle_fiche\"
    ExtensionFichier = ".xlsx"
    NomPG = UCase(TextBox_suppressionpg.Value)
    FicheASupprimer = CheminFichier & NomPG & "\" & NomPG & ExtensionFichier

    Sheets("Liste_MP").Unprotect Password:="******"
    For ligne = 1 To 10
        If Cells(ligne, 3) = NomPG Then
            Rows.Cells(ligne, 3).Select
            If MsgBox("Etes-vous certain de vouloir supprimer cette MP avec sa fiche ?", vbYesNo, "Demande de confirmation") = vbYes Then
                Rows(Selection.Row).Delete
                    If ExistenceFichier(FicheASupprimer) Then
                        Kill FicheASupprimer
                    End If
            Else
                Exit Sub
            End If

        End If

        Unload Me
    Next

    ChDir "M:\CTX-Fiche_produit\Nouvelle_fiche"
    RmDir NomPG
    MsgBox "La MP et sa fiche ont été supprimer !"
    Sheets("Liste_MP").Protect Password:="******"

End Sub

Seulement lors de l'exécution, j'ai un message d'erreur me disant que le Chemin est introuvable et qui me renvoi a la ligne :

RmDir NomPG

La ligne dans le tableau, le fichier excel se supprime normalement, mais pas le dossier et je ne comprends pas. J'ai essayer diverse possibilité sans succès

En espérant que vous pourrez m'aider

Cordialement,

Fonbs

Bonjour,

Vérifie bien si le sous-répertoire existe dans ce chemin et qu'il n'est pas protégé :

"M:\CTX-Fiche_produit\Nouvelle_fiche"
Raja a écrit :

Bonjour,

Vérifie bien si le sous-répertoire existe dans ce chemin et qu'il n'est pas protégé :

"M:\CTX-Fiche_produit\Nouvelle_fiche"

Bonjour, je ne peux malheureusement pas voir si le dossier est protéger, n'étant pas au travail, je regarderais ca lundi.

Par contre le sous-répertoire existe bien, car il est créer en même temps que la ligne dans le tableau.

Pour expliquer, je clique sur un bouton un formulaire s'ouvre, je renseigne tout les partie et quand je valide, le formulaire me remplie le tableau et me créer un dossier du nom d'une textbox de ma formulaire avec le code suivant :

' CREATION D'UN DOSSIER
' ---

Sub CreateFolder(ByVal strDossier As String)
    If Dir(strDossier, vbDirectory) = "" Then
        MkDir strDossier
    End If
End Sub

' ---
' CREATION ARBORESCENCE
' ---

Sub CreateFolders(ByVal strPath As String)

    Dim varFolders As Variant
    Dim varFolder As Variant
    Dim strTemp As String

    On Error GoTo createfolderserr

    varFolders = Split(strPath, "")
    strTemp = ""

    For Each varFolder In varFolders
        If varFolder <> "" Then
            If strTemp <> "" Then strTemp = strTemp & ""
            strTemp = strTemp & varFolder
            CreateFolder strTemp
        End If
    Next
    Exit Sub

createfolderserr:
    MsgBox Err.Description, vbExclamation
    Exit Sub

End Sub

Sub RemplissageTableau()

...
' ---
' CREATION DOSSIER AVEC COMME NOM : PG
' ---
            Dim strChemin As String
            strChemin = "M:\CTX-Fiche_produit\Nouvelle_fiche\" & UCase(TextBox_pg.Value)
            CreateFolders strChemin

End Sub

Ensuite avec une autre macro, je créer un fichier excel du même nom que le dossier, exemple :

M:\CTX-Fiche_produit\Nouvelle_fiche\PG00000ZZ\PG00000ZZ.xlsx

Lors de l'exécution de la macro de mon premier poste, le fichier PG00000ZZ.xlsx s'efface correctement, mais pas le dossier :/

Je regarderais donc si le dossier est protégé. Si c'est le cas, il est possible de le "déprotégé" ?

Merci d'avance,

Cordialement,

Fonbs

Bonsoir,

A vérifier également : que lors de ta commande ChDir, ton lecteur par défaut est déjà M:, car cette commande ne change pas le lecteur par défaut.

Et aussi que le dossier est bien vide.

Cordialement

Ferrand

Bonjour,

Une autre approche. Le dossier et son contenu sont supprimés en une seule fois :

Public Declare Function SHFileOperation _
               Lib "shell32.dll" _
               Alias "SHFileOperationA" ( _
               lpFileOp As OPSTRUCTURE) As Long

Private Type OPSTRUCTURE

    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Long
    hNameMappings As Long
    lpszProgressTitle As String

End Type

Sub SupprimerDossier(Fichier As String, _
                     RetourResult As Long)

    Dim Op As OPSTRUCTURE

    With Op

        .wFunc = &H3
        .pFrom = Fichier
        .fFlags = &H10 'aucune confirmation de suppression

    End With

    RetourResult = SHFileOperation(Op)

End Sub

Function ExistenceFichier(sFichier As String) As Boolean

    ExistenceFichier = Dir(sFichier) <> ""

End Function

Private Sub CommandButton_supprimer_Click()

    Dim NomPG As String
    Dim CheminFichier As String, ExtensionFichier As String, FicheASupprimer As String
    Dim Retour As Long

    CheminFichier = "M:\CTX-Fiche_produit\Nouvelle_fiche\"
    ExtensionFichier = ".xlsx"
    NomPG = UCase(TextBox_suppressionpg.Value)

    Sheets("Liste_MP").Unprotect Password:="******"

    For ligne = 1 To 10

        If Cells(ligne, 3) = NomPG Then

            Rows.Cells(ligne, 3).Select

            If MsgBox("Etes-vous certain de vouloir supprimer cette MP avec sa fiche ?", vbYesNo, "Demande de confirmation") = vbYes Then

                If ExistenceFichier(FicheASupprimer) Then

                    SupprimerDossier CheminFichier, Retour

                    If Retour <> 0 Then

                        MsgBox "Erreur lors de la suppression !"

                    Else
                        'suppression de la ligne seulement si dossier supprimé !
                        Rows(Selection.Row).Delete

                        MsgBox "La MP et sa fiche ont été supprimer !"
                        Sheets("Liste_MP").Protect Password:="******"

                    End If

                End If

            Else

                Exit Sub

            End If

        End If

        Unload Me

    Next ligne

End Sub

Hervé.

Bonjour,

Alors pour répondre:

MFerrand a écrit :

Bonsoir,

A vérifier également : que lors de ta commande ChDir, ton lecteur par défaut est déjà M:, car cette commande ne change pas le lecteur par défaut.

Et aussi que le dossier est bien vide.

Cordialement

Ferrand

Oui, le lecteur par défaut est déjà M: (un disque partagé sur le réseau de ma boite qui ne change jamais) et oui, le dossier est bien vide à l'exécution, vu qu'avant d'essayer de supprimer le dossier, la macro supprime le fichier :/

Bonjour,

Une autre approche. Le dossier et son contenu sont supprimés en une seule fois :

Code: Tout sélectionner

Public Declare Function SHFileOperation _
                   Lib "shell32.dll" _
                   Alias "SHFileOperationA" ( _
                   lpFileOp As OPSTRUCTURE) As Long

    Private Type OPSTRUCTURE

        hWnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Integer
        fAnyOperationsAborted As Long
        hNameMappings As Long
        lpszProgressTitle As String

    End Type

    Sub SupprimerDossier(Fichier As String, _
                         RetourResult As Long)

        Dim Op As OPSTRUCTURE

        With Op

            .wFunc = &H3
            .pFrom = Fichier
            .fFlags = &H10 'aucune confirmation de suppression

        End With

        RetourResult = SHFileOperation(Op)

    End Sub

    Function ExistenceFichier(sFichier As String) As Boolean

        ExistenceFichier = Dir(sFichier) <> ""

    End Function

    Private Sub CommandButton_supprimer_Click()

        Dim NomPG As String
        Dim CheminFichier As String, ExtensionFichier As String, FicheASupprimer As String
        Dim Retour As Long

        CheminFichier = "M:\CTX-Fiche_produit\Nouvelle_fiche\"
        ExtensionFichier = ".xlsx"
        NomPG = UCase(TextBox_suppressionpg.Value)

        Sheets("Liste_MP").Unprotect Password:="******"

        For ligne = 1 To 10

            If Cells(ligne, 3) = NomPG Then

                Rows.Cells(ligne, 3).Select

                If MsgBox("Etes-vous certain de vouloir supprimer cette MP avec sa fiche ?", vbYesNo, "Demande de confirmation") = vbYes Then

                    If ExistenceFichier(FicheASupprimer) Then

                        SupprimerDossier CheminFichier, Retour

                        If Retour <> 0 Then

                            MsgBox "Erreur lors de la suppression !"

                        Else
                            'suppression de la ligne seulement si dossier supprimé !
                           Rows(Selection.Row).Delete

                            MsgBox "La MP et sa fiche ont été supprimer !"
                            Sheets("Liste_MP").Protect Password:="******"

                        End If

                    End If

                Else

                    Exit Sub

                End If

            End If

            Unload Me

        Next ligne

    End Sub
     

Hervé.

Bonjour Hervé, j'ai bien essayer ta macro, seulement je dois avoir un problème au niveau des droits d'utilisateur, vu qu'a peine lancer, la macro bug avec le message suivant :

Erreur de compilation :

Les types Enum privés et définis par l'utilisateur ne peuvent pas être utilisés comme type renvoyés ou paramètre pour les procédures publiques, les membres de données publics ou les types publics définis par l'utilisateur

Et me renvoi a la première ligne :

Public Declare Function SHFileOperation _
                   Lib "shell32.dll" _
                   Alias "SHFileOperationA" ( _
                   lpFileOp As OPSTRUCTURE) As Long

Bref, j'ai re regarder, ré essayer, mais je n'y arrive toujours pas :/

Merci de votre aide en tout cas

Cordialement,

Fonbs

Rechercher des sujets similaires à "suppression dossier comme nom variable"