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 SubSeulement 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 NomPGLa 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 SubEnsuite 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 SubHervé.
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 SubHervé.
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 LongBref, j'ai re regarder, ré essayer, mais je n'y arrive toujours pas :/
Merci de votre aide en tout cas
Cordialement,
Fonbs