Microsoft 365 Renommer fichiers dans répertoire depuis excel oldname et newname

Elpichichi

XLDnaute Nouveau
Bonjour, j'ai déjà parcouru le forum et trouvé une macro qui est quasiment terminé, mais étant amateur en vba, je n'arrive pas à faire ce que je veux dans la macro "Renomme". Vous allez surement rire tellement c'est simple pour vous, c'est sûr...

Dans le fichier joint, je voudrais renommer l'ancien nom de fichier se trouvant en colonne A ( à partir de A2.... ) avec le nom de la colonne H ( où j'ai déjà renseigné une formule ), dans la formule je dis que si tu trouve dans le nom de fichier un _ ( underscore ) tu trouve sa position et tu ne gardes que le côté droit avec l'extension ( mais ça encore je sais faire ).

Merci à vous, ça me ferait gagner du temps.
 

Pièces jointes

  • Liste_Fichier_Ctest_Renomme_MJ.xlsm
    20.3 KB · Affichages: 27

Elpichichi

XLDnaute Nouveau
Bonsoir, on le remplace mais dans le cas que j'ai pu voir ce n'etait pas normal dans la mesure ou il n'y avait qu'un seul fichier a renommer il ne pouvait donc pas exister. Je pense que le souci venait du rename ou il ne prenait pas en compte le nouveau nom en colonne H.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @Elpichichi , @danielco , le Forum

Quand on manipule des fichiers, je recommande toujours de mettre ceinture et bretelles !

VB:
Sub Renomme()
Dim Cell As Range
Dim MyPath As String
Dim NewName As String
Dim OldName As String
Dim x As Integer


MyPath = "C:\Users\te\Documents\XLD\PourForum\PourForum\Vos_Fichiers_SOURCE\"
''MyPath = Range("A1")

  For Each Cell In Range("A2:A" & Range("A65536").End(xlUp).Rows.Row)
    OldName = MyPath & Cell.Offset(0, 1)
    NewName = MyPath & Cell.Offset(0, 7)
    
    If UCase(Right(NewName, 3)) <> UCase(Right(OldName, 3)) Then
        MsgBox NewName & vbCrLf & " Vous ne pouvez pas changer d'extention !", vbExclamation, "Attention !"
        Exit Sub
    End If
    
    If Dir(OldName) = "" Then
        MsgBox OldName & vbCrLf & " n'existe pas !", vbExclamation, "Attention !"
        Exit Sub
    End If
    
    If Dir(NewName) <> "" Then
        MsgBox NewName & vbCrLf & " existe déjà", vbExclamation, "Attention !"
        Exit Sub
    End If
    
    Name OldName As NewName
    x = x + 1
  Next
 
MsgBox x & " fichiers ont été renommés", vbInformation, "Procédure terminée"
End Sub

Bonne soirée
@+Thierry
 

Elpichichi

XLDnaute Nouveau
Bonsoir @Elpichichi , @danielco , le Forum

Quand on manipule des fichiers, je recommande toujours de mettre ceinture et bretelles !

VB:
Sub Renomme()
Dim Cell As Range
Dim MyPath As String
Dim NewName As String
Dim OldName As String
Dim x As Integer


MyPath = "C:\Users\te\Documents\XLD\PourForum\PourForum\Vos_Fichiers_SOURCE\"
''MyPath = Range("A1")

  For Each Cell In Range("A2:A" & Range("A65536").End(xlUp).Rows.Row)
    OldName = MyPath & Cell.Offset(0, 1)
    NewName = MyPath & Cell.Offset(0, 7)
   
    If UCase(Right(NewName, 3)) <> UCase(Right(OldName, 3)) Then
        MsgBox NewName & vbCrLf & " Vous ne pouvez pas changer d'extention !", vbExclamation, "Attention !"
        Exit Sub
    End If
   
    If Dir(OldName) = "" Then
        MsgBox OldName & vbCrLf & " n'existe pas !", vbExclamation, "Attention !"
        Exit Sub
    End If
   
    If Dir(NewName) <> "" Then
        MsgBox NewName & vbCrLf & " existe déjà", vbExclamation, "Attention !"
        Exit Sub
    End If
   
    Name OldName As NewName
    x = x + 1
  Next

MsgBox x & " fichiers ont été renommés", vbInformation, "Procédure terminée"
End Sub

Bonne soirée
@+Thierry
Bonjour, je viens de tester. Résultat presque top, lorsque le fichier n'existe pas déjà, pas de souci celà renomme bien le fichier (ex: F1594793534553_YCARNET1 en YCARNET1), cependant si le fichier YCARNET1 existait déjà, il ne réécrase pas celui-ci. J'aurai préféré qu'il écrase le fichier si nom existe déjà.

Cdlt,

En tout cas merci.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Elpichichi , , @danielco , le Forum

Le Statement Name en VBA "n'écrasera" jamais un fichier, il ne manipule pas un fichier comme un Save As ou autre, il peut simpliment le Renommer ou éventuelle le Déplacer à condition de rester dans le même Drive.

De même Name ne créé pas de fichier ou de répertoire.

En fait Name c'est juste la manipulation du "path" d'un fichier, pas la manipulation "physique" de celui-ci...

J'espère que c'est clair ?

En paliatif si le nouveau nom du fichier existe déjà on peut le capter et fair un truc de ce style :

VB:
If Dir(NewName) <> "" Then
    NewName = MyPath & Cell.Offset(0, 7) & " " & Format(Now, "YYYY-MM-DD hh-mm-ss")
    MsgBox "Votre Attention, un nom existait déjà, il a été horodaté"
End If

Bonne journée
@+Thierry
 

Elpichichi

XLDnaute Nouveau
Je vais regarder. En fait, pourquoi je demande celà c'est parce que je traite ensuite ces fichiers .csv dans Access avec Table lié, d'où ma volonté de garder le même nom de fichier pour qu'ensuite j'ai un traitement assez complexe sur Access qui génère des tables + requêtes. En gros je n'ai plus qu'à cliquez sur un bouton et tout se met à jour. Mais bon je vais voir.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Je suis perplexe comme Patrick, soit dans ton répertoire, il y a de la pagaille, soit quelqu'un d'autre travaille aussi sur ce répertoire et fait n'importe quoi, soit le plus vraisemblable tu as déjà fait tourner la macro de Name, et ce sont des résidus du traitement précédent...

J'espère que tu comprends bien qu'il n'existe qu'un seul fichier, avec un Statement Name qu'il se nomme F1594793534553_YCARNET1 ou YCARNET1 , le fichier est le même et d'ailleurs même la dernière date de changement vue par Windows n'est pas modifiée lors d'un Statement Name.

Donc ensuite ton traitement Access lui ayant besoin d'un FileName conventionné, si YCARNET1 est là il le traitera, de toute manière c'est celui-là ...; Ce dont tu dois t'assurer par contre c'est de purger ce répertoire entre chaque traitement, Name n'est pas là pour ça !

Voir l'instruction "Kill" éventuellement...

Bon travail
@+Thierry
 

Elpichichi

XLDnaute Nouveau
Bonsoir, il n'y a que moi qui gere ce dossier ce n'est pas le bazarre mais effectivement c'est surement une bonne idee de deplacer vers un autre dossier une fois le fichier renommé ainsi pas de risque de mesage "existe deja". Bien sur je le viderai avant ( je vous le dis car je vous voyais venir lol).
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 213
Membres
103 158
dernier inscrit
laufin