[VBA] Renommer un fichier

Bonjour le forum

Alors, je cherche à renommer un fichier une fois que j'ai effectué mon traitement dessus. En mettant "OK" a la fin. Pour que d'un seul coup d'oeil dans le dossier, on puisse voir les documents qui ont étés traités

Pour ce faire, je m'y prend de cette façon :

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossiers = FSO.GetFolder(chemin)
For Each Dossier In Dossiers.SubFolders
    For Each File In Dossier.Files
     Fichier = File.Name

... traitement ...

    tableau = Split(Fichier, ".")
    tableau(0) = tableau(0) & "_OK"
    File.Name = tableau(0) & "." & tableau(1)
Next File

Sauf que ça ne change absolument rien. Je dois m'y prendre mal ? mais je ne sais pas de quoi ça vient.

Merci d'avance


ça m'affiche une erreu qui dit "Permission refusée" maintenant.

Bonjour Zohnya

Le principe général après avoir fermé le fichier à renommer:

Name CheminComplet & AncienNomDuFichier  As CheminComplet & NouveauNomDuFichier
Next File

Cordialement

Hello, merci pour ta réponse rapide

J'ai essayé d'appliquer ce que tu m'as montré de cette façon :

        tableau = Split(Files.Path, ".")
        tableau(0) = tableau(0) & "_OK"
        nouveauNom = tableau(0) & "." & tableau(1)
        XlBook.Close
        Name Files.Path As nouveauNom 

Sauf que ça me sort une erreur 75 qui dit " erreur d'execution Accès chemin/fichier".

Saurais-tu de quoi ça vient ?

Re

Il faut le Chemin Complet pour l'ancien nom et le nouveau nom.

Quelque chose comme ça:

Name File.path & "\" & Fichier As File.path & "\" &  nouveauNom 

En plus tu utilise Files.Path au lieu de File.path

Cordialement

C'est le chemin complet. (et pour Files.path je l'ai remarqué au moment de le copier/coller. J'ai oublier de corriger en postant)

File.Path contient également le nom :

C:\Besoins\Fichier1.xlsx

et nouveauNom contient :

C:\Besoins\Fichier1_OK.xlsx

Donc normalement ça devrait respecter ce que tu m'as montré non ?

ça donnerait : Name "C:\Besoins\Fichier1.xlsx" As "C:\Besoins\Fichier1_OK.xlsx"

Re

Cela devrais fonctionner.

Je ne vois où peux se situer le problème

Cordialement

Bon, j'ai essayé de plusieurs façon.

J'ai mis le code au début (avant le traitement, pour voir si c'était ça qui buggait). Nope.

J'ai mis le code dans une fonction à part. Nope.

Quoi que je fasse, j'ai toujours cette erreur :

erreur 75 qui dit " erreur d'execution Accès chemin/fichier".

Je suis donc au point mort :/

Si quelqu'un peu me décoincer c'est volontiers.

On ne sait jamais.

Tu as bien vérifier les valeurs de tes variables?

Cordialement

Re

Ouaip. J'ai mis des espions sur absolument tout en mode pas à pas pour voir si quelque chose n'était pas passé entre les gouttes. Mais nada.

Et j'ai bien controlé que le fichier en question existait. :/

Je tiens au courant si j'avance.

Bon,

Alors je me sens débile de pas avoir essayé ça plus tôt mais j'ai essayé de renommer manuellement le fichier depuis l'explorateur windows. Et là, erreur, il me dit qu'il est déjà ouvert quelque part dans Excel et que il faudrait que je le ferme avant de pouvoir le renommer (m'est avis que c'est ça qui pose aussi problème dans ma macro).

Sauf que, je ne vois pas le dit fichier dans mes fenêtre ouvertes (et il me semble que je ferme correctement les fichiers que j'ouvre. Mais Peut être pas du coup. )

Une suggestion pour bien fermer correctement tout ce bazard ?

Il faudrait savoir comment tu l'ouvres, comment tu le ferme.

Commence par fermer Excel.

Cela peut réinitialiser les ouvertures/fermetures mal exécutées.

Cordialement

Ouaip. C'est ce que je viens de faire. (fermer excel, et ses autres instances depuis le gestionnaire).

Mais ça ne change rien.

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossiers = FSO.GetFolder(chemin)
Set Xlapp = CreateObject("Excel.Application")
 For Each Files In Dossiers.Files
      Set XlBook = Xlapp.Workbooks.Open(Files)
      Set XlSheet = XlBook.Worksheets("Page 1")
       ... Traitement ....
        XlBook.Save
        renommer Files.Path <-- C'est là que ça plante. 
        XlBook.Close False
   Next Files
Xlapp.Quit

Et la fonction renommer (celle qui déclanche l'erreur)

Sub renommer(ByVal chemin As String)
    tableau = Split(chemin, ".")
    tableau(1) = tableau(1) & "_OK"
    test = tableau(0) & "." & tableau(1) & "." & tableau(2)
    Name chemin As test
End Sub
  renommer Files.Path <-- C'est là que ça plante. 
        XlBook.Close False

Tu faits dans le mauvais sens.

Il faut d'abord fermer le fichier puis le renommer.....

Cordialement

Punaise. Alleluia Merci. (petite erreur d'innatention )

Bon, maintenant le traitement s'applique 2x mais ça devrait être facile a résoudre.

Merci beaucoup <3

Pour les personnes futures qui tomberait sur ce problème, il faut ajouter un "false" après le "Application.Close".

Merci beaucoup

En plus tu crées des instances qui ne servent à rien.

Tu ne faits qu'engorger la mémoire.

Test ceci:

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dossiers = FSO.GetFolder(chemin)
 For Each Files In Dossiers.Files
      Workbooks.Open (Files)
      Set XlBook = ActiveWorkbook
      Set XlSheet = XlBook.Worksheets("Page 1")
       '... Traitement ....
        XlBook.Close True
        renommer Files.Path < --C 'est là que ça plante.
   Next Files

Cordialement

Rechercher des sujets similaires à "vba renommer fichier"