Ouvrir tout fichier d'un même répertoire, les renommer selon data à l'intér

Bonjour le forum,

Voilà je souhaiterai (si possible) :

1_ouvrir tout les fichiers (.xlsm) et qui aurait tous des noms différents, d'un même répertoire

2_Trouver 2 infos à l'intérieur (EmployeeName =Last and First Name)

3_Renommer donc chaque fichier par une nomenclature qui leur "presque" propre, seul EmployeeName changerai bien sur.

4_Fermer chaque fichier

Sub RenommerFichier()

Dim EmployeeName As String

Rep = "C:\Users\moi\Desktop\Répertoire\"
fic = Dir(Rep & "*.xlsm")

Workbooks.Open "C:\Users\moi\Desktop\Répertoire\*.xlsm"

    'Nom de la feuille dans le classeur fermé
     NomFeuille = "CHECKED"

'Trouve le nom de famille dans le fichier
Set Row = Rows(6).Find(what:="LAST NAME ?", LookAt:=xlWhole)
If Not Row Is Nothing Then col = Row.Select
Set LastName = ActiveCell.Offset(0, 4)

'Trouve le prénom dans le fichier
Set Row = Rows(6).Find(what:="FIRST NAME ??", LookAt:=xlWhole)
If Not Row Is Nothing Then col = Row.Select
Set FirstName = ActiveCell.Offset(0, 1)

EmployeeName = LastName & FirstName

'Fermer fichier
Workbooks("QSH_Expense claim_" & mois & "_" & EmployeeName & ".xlsm").Close SaveChanges:=True

'renommer fichier
Name Rep & fic As Rep & "QSH_Expense claim_" & mois & "_" & EmployeeName & ".xlsm"

'Fermer fichier
Workbooks("QSH_Expense claim_" & mois & "_" & EmployeeName & ".xlsm").Close SaveChanges:=True

End Sub

Le problème étant d'ouvrir ces fichiers sans connaitre leur nom initial, puis de réaliser le travail en boucle.

Enfin j'imagine !! sur de rien sinon je ne serais pas sur le forum :D

Merci d'avance pour les lecteurs, et bon courage a tous pour ce 2ième confinement..

Bonjour,

un essai d'une solution possible, si j'ai tout compris :

Dim Fic As String, Rep As String, WB As Workbook, WS As Worksheet
Rep = "C:\Users\moi\Desktop\Répertoire\"
Fic = Dir(Rep & "*.xlsm")
Do While Fic <> ""    ' Commence la boucle.
    Set WB = Workbooks.Open(Rep & Fic)'variable pour le nouveau classeur ouvert
    Set WS = WB.Worksheets("CHECKED")  'variable pour la feuille du nouveau classeur

    'Trouve le nom de famille dans le fichier
    Set Trouve = WS.Rows(6).Find(what:="LAST NAME ?", LookAt:=xlWhole) 'remplacer Row par Trouve car mot "réservé" VBA
    If Not Trouve Is Nothing Then LastName = Trouve.Offset(0, 4)

    'Trouve le prénom dans le fichier
    Set Trouve = WS.Rows(6).Find(what:="FIRST NAME ??", LookAt:=xlWhole)
    If Not Trouve Is Nothing Then FirstName = Trouve.Offset(0, 1)

    WB.Close 'ferme le classeur

    'EmployeeName = LastName & FirstName
    Name Rep & Fic As Rep & LastName & FirstName & ".xlsm"  'renomme le classeur )
    Fic = Dir    ' Extrait le fichier suivant.
Loop

Il faudrait sans doute gérer le cas où le nom ou le prénom n'existe pas pour éviter un plantage.

A tester

A+

Salut AlgoPlus,

Merci pour ta réponse

J'ai donc copié le code, l'ai modifié pour le chemin, et l'ai testé il s'exécute bien, mais le nouveau nom de mon fichier s'appelle toujours ".xslm" quoiqu'il arrive. Lorsque j'en met 2 forcément, le code s’arrête m'indiquant que le ".xslm" est déjà attribué, logique.

j'ai testé en enlevant TROUVE LastName et ai mis :

LastName = WS.Range("A1")

Un truc simple avec un prénom, idem rien n'a été remonté, et le fichier s'est appelé ".xslm". Les cellules où se trouvent les LastName et FirstName étaient fusionnées et en format standard, je l'ai ai donc dé fusionnées, mais pareil.

pourquoi donc cela ne marche pas chez moi ?

Encore merci,

si le fichier s'appelle toujours ".xlsm" , c'est que les variables FirstName et LastName ne sont pas initialisées ou bien initialisées avec ...rien.

a priori les noms et prénoms se trouvent en ligne 6 , sont ils toujours au même endroit pour tous les fichiers ? si oui il est possible de simplifier leur recherche

Le test avec

LastName = WS.Range("A1")

devrait fonctionner dans la mesure où il y a quelque chose en A1 du (des) fichier (s) ouvert(s).

A+

Oui effectivement, je n'ai ni déclaré les variables LastName et FirstName as string. j'ai une question sur l'initialisation de la variable; ici c'est annoncer que LastName= qqch ?

Donc que cela soit avec LastName = Trouve.Offset(0, 4) ou bien avec LastName = WS.Range("A1") c'est la même chose ?

Euh oui sinon je te confirme les noms et prénoms se trouvent en ligne 6 et sont toujours au même endroit pour tous les fichiers. ^^'

Merci à toi,

Si les nom et prénom sont toujours au même endroit (et dans la même feuille "CHECKED") , (par exemple en C6 et G6)

'Trouve le nom de famille dans le fichier 
LastName = WS.Range("C6").Value 

'Trouve le prénom dans le fichier 
FirstName = WS.Range("G6").Value

le reste sans changement.

ça simplifie et évite que le Find ne trouve pas "LAST NAME ?" ou "FIRST NAME ??" (un espace en + ou - ...) et donc que les variables ne soient pas initialisées.

A+

AlgoPlus salut,

Oui ça simplifie FORTEMENT les choses!! et ça fonctionne du coup ^^

Merci à toi :D (des fois j'aime bien me compliquer les choses on dirait )

a +

Rechercher des sujets similaires à "ouvrir tout fichier meme repertoire renommer data inter"