Remplacer un fichier/dossier déjà existant
Bonjour,
J'ai une macro me permettant de renommer, dupliquer et déplacer des fichiers vers des dossier.
Seulement voilà, lorsqu'un fichier/dossier est déjà présent dans le dossier de destination vers lequel je veux envoyer le fichier, la macro s'arrête.
Je souhaiterais donc une fonction me permettant d'écraser les fichiers/dossiers déjà existants dans le dossiers de destination où je veux déplacer mon fichier.
Ci-dessous ma macro complète :
Private Sub CommandButton1_Click()
Dim Myrange As Range
Dim L As Long
Dim CelStart As Long
Dim CelEnd As Long
Dim Fichier As String
Dim NewName As String
Dim Destination As String
CelStart = 5 'Débute à la cellule numéro 5 (A5) car première valeur à prendre en compte
Set Myrange = ActiveWorkbook.Sheets("Duplique et Renommer fichiers").Range("A5").CurrentRegion 'Instancie Myrange à toutes les cellules contigües à A4.
CelEnd = Myrange.Rows.Count + 4 'Compte le nombre de cellules utilisées + 4 pour déterminer le numéro de la dernière cellule à prendre en compte
For L = CelStart To CelEnd
Fichier = Myrange(L - 3, 2) 'correspond à la cellule de la 2ème colonne de la sélection (colonne B)
Destination = Myrange(L - 3, 3) 'correspond à la cellule de la 3ème colonne de la sélection (colonne B)
NewName = Myrange(L - 3, 4) 'correspond à la cellule de la 4ème colonne de la sélection (colonne B)
Copie_Fichier_RD Fichier, Destination
'Renommer_fichier_RD Destination, NewName '(Ax.....Axn++) (Ax="c:\monRep\truc.txt) (Bx.....Bxn++) (Bx="truc.bof)
Next
Set Myrange = Nothing
MsgBox "Terminé"
End Sub
'Renommer le fichiers dont le nom est précisé en argument par NewName.
Public Sub Renommer_fichier_RD(Destination As String, NewName As String)
Dim Fso As New FileSystemObject
If Existe_Fichier_RD(Destination) = False Then Exit Sub
Fso.GetFile(Destination).Name = NewName
End Sub
'Vérifie l'existance d'un fichier.
Public Function Existe_Fichier_RD(Source As String) As Boolean
Dim Fso As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
Existe_Fichier_RD = Fso.FileExists(Source)
Set Fso = Nothing
End Function
'Copie un fichier d'une source vers une destination.
Public Sub Copie_Fichier_RD(Fichier As String, Destination As String)
Dim Fso As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
Fso.CopyFile Fichier, Destination, True
Set Fso = Nothing
End SubEn vous remerciant,
Cordialement,
Baptiste.
Hello,
Tu peux supprimer un fichier :
Kill "C:\Exemple\TestsVBA\Rapport_annuel.xlsx"et tu peux supprimer un dossier :
sPath = "C:\Test"
RmDir sPathBonjour Rag02700,
Merci pour ta réponse, mais il ne s'agit pas de supprimer un fichier/dossier précis, mais un fichier/dossier présent dans le dossier où je veux envoyer mon fichier, en partant du principe que je ne connais pas l'intitulé de ce dossier/fichier, ni son chemin cible.
Baptiste.
Hello,
Seulement voilà, lorsqu'un fichier/dossier est déjà présent dans le dossier de destination vers lequel je veux envoyer le fichier, la macro s'arrête
L'astuce consiste à supprimer le fichier portant le même nom présent dans ce dossier, puis de copier ton fichier.
en partant du principe que je ne connais pas l'intitulé de ce dossier/fichier, ni son chemin cible
Tu le connais ici :
Fichier = Myrange(L - 3, 2) 'correspond à la cellule de la 2ème colonne de la sélection (colonne B)
Destination = Myrange(L - 3, 3) 'correspond à la cellule de la 3ème colonne de la sélection (colonne B)Tu peux tester avant de supprimer si le fichier existe :
Dim Fichier As String
Fichier = Dir("c:\data\A lire.txt")
If Fichier <> "" Then Kill FichierEt pour tester si un dossier existe :
Dim sFolderPath As String
sFolderPath = "C:\Users\DT168\Desktop\Test folder"
If Dir(sFolderPath, vbDirectory) <> vbNullString Then RmDir sFolderPath - Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Seulement voilà, lorsqu'un fichier/dossier est déjà présent dans le dossier de destination vers lequel je veux envoyer le fichier, la macro s'arrête.
Votre problème ne vient pas de là car avec l'option "True", vous écrasez automatiquement tout fichier préalablement existant
Fso.CopyFile Fichier, Destination, TrueA mon avis, votre destination est un répertoire, ce qui provoque une erreur et l'arrêt de la macro. Pour que votre destination ne soit pas un répertoire, la chaîne correspondante doit impérativement se terminer par "\". Destination est un chemin et non un répertoire.
Bonjour,
Ok je vous remercie pour vos réponses, ça fonctionne, bonne journée !
Cordialement,
Baptiste.