Comment modifier le nom d'un fichier sur disque ?

Résolu
iBenny -  
yg_be Messages postés 24281 Statut Contributeur -
Bonjour à tous,

je cherche à modifier le nom (l'extension) d'un fichier spécifique [chemin]Fichier.ext et n'y parvient pas. Que devrais-je faire ?

Ayant identifié dans mon code le fichier à renommer : [chemin]Fichier.ext stoké dans la variable image, j'ai essayé d'utiliser :

1- la variable string image
image = [chemin]Fichier.ext


2- d'utiliser CreateObject("Scripting.FileSystemObject") comme suit :
Set jpegs = CreateObject("Scripting.FileSystemObject")
Set jpeg = jpegs.GetFile(image)
jpeg.Name = nouveau nom

sans succès. J'ai essayé aussi :

Set jpegsss = CreateObject("Scripting.FileSystemObject")
Set jpegss = jpegsss.GetFile([chemin])
Set jpegs = jpegss.Files
For Each jpeg In jpegs
   If Right(jpeg.Name, 4) = "jpeg" Then
      jpeg.Name = Left(image, Len(image) - 4) + "jpg"
      Exit For
   End If
Next

sans succès non plus !

Des idées qq'un ?

Merci à l'avance pour vos lumières
iBenny
A voir également:

2 réponses

yg_be Messages postés 24281 Statut Contributeur Ambassadeur 1 584
 
bonjour,
"sans succès", ce n'est pas très factuel.
cela coince où? tu ne donnes pas le code exact que tu utilises.
je suggère de déclarer explicitement tes variables, cela devrait t'aider à découvrir le soucis.
en ce qui concerne ton premier essai, que contient la variable
image
?
en ce qui concerne le second essai, comment réussis-tu à faire
getfile
pour ensuite traiter le résultat comme si c'était un dossier?
deux exemples qui fonctionnent:
Private Sub rn()
Dim fso As New Scripting.filesystemobject, dossier As Folder, fichier As File
Set dossier = fso.GetFolder(ThisWorkbook.Path)
For Each fichier In dossier.Files
If Right(fichier.Name, 4) = "jpyg" Then
   fichier.Name = Left(fichier.Name, Len(fichier.Name) - 4) + "pyg"
   Exit For
End If
Next fichier
End Sub
Private Sub rn2()
Dim fso As New Scripting.filesystemobject, fichier As File
Set fichier = fso.GetFile(ThisWorkbook.Path + "\testyg.pyg")
fichier.Name = "testyg.pygpyg"
End Sub
1
iBenny Messages postés 103 Statut Membre 2
 
Bonjour yg_be,

1- "Sans succès" veux dire que le nom du fichier sur disque n'a pas changé !

2- toutes les variables que j'ai utilisées ont bien sûr été déclarées auparavant et j'ai Option explicite d'indiqué dans la section des variables globales;

3- Dim image as String
image = [chemin] nom du fichier
[chemin]: chaîne de caractère indiquant le chemin complet du fichier à modifier
nom du fichier: chaîne de caractères indiquant le nom du fichier à modifier
[chemin]nom du fichier: chaîne de caractères indiquant le chemin complet suivi du nom du fichier à traiter.
ex:
image = c:/users/usager/documents/fichier.jpeg
Si c'est pas encore clair, n'hésite pas à poser une autre question.

Concernant le deuxième essai,
[chemin]: chaîne de caractère indiquant le chemin complet du fichier à modifier
jpegsss.GetFile([chemin]) => jpegsss.GetFile(c:/user/documents/) par ex... Si c'est pas encore clair, n'hésite pas à demander des précisions...

Je vais maintenant étudier ta suggestion de code...

Merci beaucoup
iBenny
0
iBenny Messages postés 103 Statut Membre 2
 
Bonjour,

j'aime bien nr2 ! Je teste ça...
0
iBenny Messages postés 103 Statut Membre 2
 
Bonjour,

le premier Dim dans nr2 renvoi :

---------------------------
Microsoft Visual Basic
---------------------------
Erreur de compilation:

Type défini par l'utilisateur non défini
---------------------------
OK Aide
---------------------------

On est dans VBA de MS Word 2003 ici...
0
yg_be Messages postés 24281 Statut Contributeur 1 584 > iBenny Messages postés 103 Statut Membre
 
il faut ajouter une référence vers "microsoft scripting runtime".
0
iBenny Messages postés 103 Statut Membre 2 > yg_be Messages postés 24281 Statut Contributeur
 
Comment ?
0
cs_Le Pivert Messages postés 8437 Statut Contributeur 729
 
Bonjour,

tout simplement avec la fonction Replace:

https://www.excel-pratique.com/fr/astuces_vba/replace

0
iBenny Messages postés 103 Statut Membre 2
 
Bonjour et merci de la suggestion MAIS... "Replace" modifie les chaînes de caractères... PAS le nom d'un fichier sur disque.

iBenny
0