XL 2010 Boucler sur fichiers à renommer

Wyrgle

XLDnaute Junior
Bonjour,

Je cherche à renommer des fichiers xls/xlsx/csv en "ABC_*.*" qui arrivent toute la journée dans un répertoire que je connais.
'La règle étant qu'un fichier renommé avec le préfixe ABC_ n'est plus à renommer (son contenu est mis en page et imprimé).
Je lance donc la macro à la demande.

VB:
Sub RenameFiles()
Dim Chemin As String, Fichier As String
  'Répertoire contenant les fichiers a processer
    Chemin = "C:\REPERTOIRE TEST\"
    'Boucle sur tous les fichiers du répertoire.
    Fichier = Dir(Chemin & "*.*")
  
    While Fichier <> "ABC_*.*"
         Name Fichier As "ABC_" & Fichier
        Fichier = Dir()
    Wend
End Sub

VBA me met File not found.
Ou est l'erreur ?
Merci pour votre aide

Wyrgle
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Wirgle, bonjour le forum,

Peut-être comme ça :

VB:
Sub RenameFiles()
Dim Chemin As String, Fichier As String

'Répertoire contenant les fichiers a processer
Chemin = "C:\REPERTOIRE TEST\"
'Boucle sur tous les fichiers du répertoire.
Fichier = Dir(Chemin & "*.*")
While Left(Fichier, 4) <> "ABC_*.*"
    Name Chemin & Fichier As Chemin & "ABC_" & Fichier
    Fichier = Dir()
    Wend
End Sub
 

Wyrgle

XLDnaute Junior
Bonjour Wirgle, bonjour le forum,

Peut-être comme ça :

VB:
Sub RenameFiles()
Dim Chemin As String, Fichier As String

'Répertoire contenant les fichiers a processer
Chemin = "C:\REPERTOIRE TEST\"
'Boucle sur tous les fichiers du répertoire.
Fichier = Dir(Chemin & "*.*")
While Left(Fichier, 4) <> "ABC_*.*"
    Name Chemin & Fichier As Chemin & "ABC_" & Fichier
    Fichier = Dir()
    Wend
End Sub

Bonjour Robert,
Merci pour ta réponse, mais la macro lancée une 1ere fois renomme les fichiers et se termine par ce message :
Path/File access error (erreur 75).
La macro lancée une 2eme fois renomme encore les fichiers (ABC_ABC_nomdufichier.*), chose que je dois éviter.
 

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Une suggestion en passant
Avec les dernières versions de Windows, on dispose d'un outil puissant Powershell
Exemple rapide
copier cette ligne dans le bloc-notes et enregister en renommer.ps1
VB:
Get-ChildItem | Where-Object { $_.Extension -eq ".txt" -or $_.Extension -eq ".xls"} | rename-item -NewName { "ABC_" + $_.Name }
j'ai testé, cela marche
Maintenant il faut peaufiner mais pas le temps, je dois aller sous la douche.

Avec cette modification, si on rééxecute le script les fichiers déjà renommés, ne sont renommés à nouveau
VB:
Get-ChildItem  -Exclude ABC_* | rename-item -NewName { "ABC-" + $_.Name } | Where-Object { $_.Extension -eq ".txt" -or $_.Extension -eq ".xls"}
 

Wyrgle

XLDnaute Junior
Bonjour à tous

Une suggestion en passant
Avec les dernières versions de Windows, on dispose d'un outil puissant Powershell
Exemple rapide
copier cette ligne dans le bloc-notes et enregister en renommer.ps1
VB:
Get-ChildItem | Where-Object { $_.Extension -eq ".txt" -or $_.Extension -eq ".xls"} | rename-item -NewName { "ABC_" + $_.Name }
j'ai testé, cela marche
Maintenant il faut peaufiner mais pas le temps, je dois aller sous la douche.

Avec cette modification, si on rééxecute le script les fichiers déjà renommés, ne sont renommés à nouveau
VB:
Get-ChildItem  -Exclude ABC_* | rename-item -NewName { "ABC-" + $_.Name } | Where-Object { $_.Extension -eq ".txt" -or $_.Extension -eq ".xls"}

Bonjour Staple1600,
Hélas je dois juste utilizer VBA, restriction du boulot...
Il doit bien exister une solution pour gérer les fichiers de cette manière...
 

chris

XLDnaute Barbatruc
Bonjour à tous

Petite correction du code de Robert
Code:
Sub RenameFiles()
Dim Chemin As String, Fichier As String

'Répertoire contenant les fichiers a processer
Chemin = "C:\REPERTOIRE TEST\"
'Boucle sur tous les fichiers du répertoire.
Fichier = Dir(Chemin & "*.*")
While Fichier <> ""
If Left(Fichier, 4) <> "ABC_" Then Name Chemin & Fichier As Chemin & "ABC_" & Fichier
Fichier = Dir()
Wend
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

Bonjour Staple1600,
Hélas je dois juste utilizer VBA, restriction du boulot...
Il doit bien exister une solution pour gérer les fichiers de cette manière...
PowerShell fait partie de Windows.
Il ne s'agit pas d'un logiciel tiers.
powershell.jpg

C'est un outil très puissant mais comme dirait Régis :" C'est vous qui voyez!" ;)
 

Staple1600

XLDnaute Barbatruc
Bonsoir Chris

Je bois à la même source que toi ;)
Je n'ai pas de lien précis car malheureusement dans mon boulot, je suis sur un PC bridé et un accès internet filtré.
Par conséquent, je n'ai pas pu expérimenté la puissance de PowerShell et comme je passe déjà un certain temps dans ma Cellule Tablée, si jamais je me lançais dans la Coquille Puissante alors je n'aurai plus de temps pour mes corvées ménagères et mes endives ;)
J'ajouterai que les rares fois où j'ai évoqué Powershell sur XLD, le succès ne fut pas au rendez-vous.
Exemple1
http://www.excel-downloads.com/threads/résolu-corriger-ma-macro-de-listage-de-sous-dossiers.231867/#post-1479926
Exemple2
https://www.excel-downloads.com/threads/recuperer-nombre-de-lignes-dun-csv-sans-louvrir.226618/

Mais le peu que j'en ai vu m'a scotché (c'est bien plus puissant que le Windows Scripting Host qui fut son précurseur)
 
Dernière édition:

chris

XLDnaute Barbatruc
Re

Non, je n'ai pas oublié (je te le chante même si tu n'entends pas :) )

Je ne me sentais pas de commencer l'apprentissage tout de suite à 22h (je risquais ce faisant de mourir idiote mais j'ai survécu donc tout va bien :rolleyes:) mais j'ai noté et compte y revenir (même si c'est, a priori, juste pour comprendre ce que l'on peut faire mais pas forcément en avoir l'usage, quoi que...).

Mais j'aurais du avoir la politesse de te répondre. Alors une autre bise :), pour me faire pardonner, suffira t'elle ?

Je file mais je te tiendrai au courant, promis.
 

Wyrgle

XLDnaute Junior
Bonsoir à tous/toutes,

Un grand merci pour votre aide, et spécialement à Robert et Chris, la macro marche nickel.
Concernant Powershell, je vais voir ce que c'est, mais pas sur de pouvoir l'utiliser sur mon lieu de travail, je suis cantonné aux macros VBA.

Bisous à tous !!!
 

Wyrgle

XLDnaute Junior
Re,
Je reviens sur un détail.
Comme déjà écrit, cette macro marche nickel :
VB:
File_Name = Dir(File_Location & "*.*")
While File_Name <> ""
    Workbooks.Open FileName:=File_Location & "*.*"
        If Left(File_Name, 4) <> "ABC_" Then Name File_Location & File_Name As File_Location & "ABC_" & File_Name
        File_Name = Dir()
Wend

Mais je constate un problème : elle ouvre tous les fichiers du répertoire, alors que je gagnerai du temps si elle ouvrait les fichiers dt les noms ne commencent pas par "ABC_".
Comment faire ?

Et là, mais alors là un gros bisou à celui qui me simplifie cette routine !!:):):)
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Pas sûr de bien comprendre où tu veux en venir. Peut-être comme ça :

VB:
File_Name = Dir(File_Location & "*.*")
While File_Name <> ""
    If Left(File_Name, 4) <> "ABC_" Then
        Workbooks.Open File_Name
        Name File_Location & File_Name As File_Location & "ABC_" & File_Name
    End If
File_Name = Dir()
Wend

 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
693
Réponses
3
Affichages
660

Statistiques des forums

Discussions
314 450
Messages
2 109 726
Membres
110 552
dernier inscrit
jasson