Renommer tous les fichiers d'un repertoire

Résolu/Fermé
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 - 3 déc. 2022 à 10:01
Le Pingou Messages postés 12198 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 21 novembre 2024 - 3 déc. 2022 à 23:54

Bo

Bonjour à tous,

Je cherche une macro en VBA Excel (Excel2016) pour renommer sans les dupliquer tous les fichiers d’un même répertoire. Dans un répertoire j’ai un ensemble de fichiers nommé de la façon suivante :

Diapo0A.jpg

Diapo1A.jpg

Diapo1B.jpg

Diapo2A.jpg

Diapo2B.jpg

Jusqu’à

Diapo135A.jpg

Diapo135B.jpg

Je souhaiterais renommer ces fichiers de 001 à XXX, je précise que le nombre fichier est variable mais qu’il ne dépassera jamais 999. J’ai charché sur Internet, mais je n’ai rien trouvé qui correspondait à ce que je souhaite.

D’avance merci pour votre aide.

Mistral

A voir également:

11 réponses

brucine Messages postés 17799 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 21 novembre 2024 2 599
3 déc. 2022 à 10:26

Bonjour,

Pourquoi Excel s'agissant de fichiers images?

Un batch fait le job, mais j'attire l'attention qu'en renumérotant à partir de 1, un dispositif de lecture va considérer que 11 est inférieur à 2, c'est pourquoi je pars de 1000 mais chacun fait ce qu'il veut.

 

@ECHO OFF

CD /D E:\mondossier
SET COUNT=1000
FOR /F "delims=" %%a in ('dir /b E:\mondossier\*.jpg') DO SET FILE=%%~na & CALL :PROCESS

:PROCESS
SET /A "COUNT=COUNT+1"
SET FILE=%FILE:~0,-1%
SET FILE=%FILE%.jpg
REN "%FILE%" "%COUNT%_%FILE%"
0
brucine Messages postés 17799 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 21 novembre 2024 2 599
3 déc. 2022 à 11:03

Si j'ai mal compris la question et qu'il s'agit, à préciser, non pas de dossiers mais d'une feuille de calcul dont une colonne renferme des cellules contenant un texte xxx.jpg, on peut faire une opération similaire par export vers CSV du fichier, extraction de la colonne et de la chaîne qui précède le point pour la renommer, mais l'opération est un peu plus complexe, elle passe par rediriger le résultat vers un deuxième fichier CSV temporaire, supprimer l'original, renommer le temporaire au nom de l'original et le réimporter dans Excel (sauf si on peut faire la manipulation directement sur un fichier xls(x), pas sûr).

0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
3 déc. 2022 à 11:13

Bonjour Brucine,

Merci pour ta réponse.

C'est bien d'un repertoire dont il s'agit et non pas une feuille de classeur.

Pourquoi le "jpg" tout simplement parceque j'ai créé un classeur Excel qui permet de créer un diaporama automatiquement un diaporama dans un ordre bien établi.

Concernant la numérotation je suis d'accord si on commence à 1, mais ça fonction si on renomme sur trois chiffre 000.

Je regarde ta proposition et je reviens vers toi.

ordialement

Mistral

0
Le Pingou Messages postés 12198 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 21 novembre 2024 1 450
3 déc. 2022 à 11:30

Bonjour,

Petit programme à essayer, liste ancien et nouveau nom sur la feuille 1 et renomme le fichier jpg dans son répertoire

Dans [rep] vous devez introduire votre répertoire

Sub BoucleFichiersRepertoire()
Dim oFSO As Object
Dim oDossier As Object
Dim oFichier As Object
Dim i As Integer, rep As String
rep = "D:\Jean-Pierre\Images\2020-07 - Copie" 'nom du répertoire
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oDossier = oFSO.GetFolder(rep)
For Each oFichier In oDossier.Files
'ancien nom en colonne A et nouveau nom en colonne B
    Cells(i + 1, 1) = oFichier.Name
    Cells(i + 1, 2) = Format(i, "00#") & ".jp"
' renomme le fichier
    oFichier.Name = Format(i, "00#") & ".jpg"
    i = i + 1
Next oFichier
End Sub

0
brucine Messages postés 17799 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 21 novembre 2024 2 599
3 déc. 2022 à 11:45

Bonjour,

La commande DIR trie par défaut les fichiers dans l'ordre où ils apparaissent dans l'explorateur (et qui est par défaut par date de dernière écriture croissante), s'il ne me convient pas, le choix des commutateurs de sortie est limité (nom et différents types de date).

Si par malheur les fichiers sont triés dans un ordre qui n'obéit à aucune de ces logiques, ton option est imparable parce qu'elle va permettre de définir manuellement l'ordre souhaité.

Sinon, elle a bien sûr l'inconvénient d'être "time consuming" puisqu'il faut que je crée cet ordre à travers les 2 colonnes.

0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
3 déc. 2022 à 14:10

Bonjour Le Pngou,

Mille merci pour cette macro qui fonctionne extaement comme je le souhaitais.

Cepandant deux questions:

1) Serait-il possible de récuperer le chemin du repertoire selon la valeur de la cellule A10 de l'onglet données?

2) D'utiliser une feuille spécifique "Renom_diapo" et de l'effacer justa avant de quitter la macro?

Cordialement

Mistral

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12198 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 21 novembre 2024 1 450
3 déc. 2022 à 14:14

Bonjour,

Oui c'est possible, toutefois un peu de patience c'est la St Nicolas chez moi.


0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
3 déc. 2022 à 14:21

Attention au père Fouetard ...

0
Le Pingou Messages postés 12198 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 21 novembre 2024 1 450
Modifié le 3 déc. 2022 à 15:21

Bonjour,

J'ai de l'avance, voici ma proposition !

Note, personnellement je préfère garder une trace des modifications ...!

Le fichier : https://cjoint.com/c/LLdos0UnYDZ 


0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
3 déc. 2022 à 15:22

Je pensais que tu serais absent pour l'AM ...

J'ai cherché et j'ai trouvé mais je vais regarder ta proposition et je vais comparer ...

Je reviens vers toi au cas ou ...

Mistral

0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
3 déc. 2022 à 17:20

Re,

Je n'ai pas réussi à démarer ton classeur ???

Par contre je suis arrivé au résultat ci-dessous qui fonction,e parfaitementle voici :

Sub Renumerotation()

'**************************************************
'*     Renomme toutes les diapos de 000 à 999     *
'**************************************************

Dim oFSO As Object
Dim oDossier As Object
Dim oFichier As Object
Dim i As Integer, Chemin As String


' Bloquage du rafraichissement et des alarmes.
    Application.ScreenUpdating = False                  ' Bloque le rafraichissement de l'écran.
    Application.EnableEvents = False                    ' Arret de la scrutation.
    Application.DisplayAlerts = False                   ' Bloque les messages Excel.
    
' Gestion des feuilles
    Sheets("Renom_Diapo").Visible = True                'Affichage de la feuille Renom_Diapo.
    Sheets("Menu").Select                               'Sélection de la feuille Menu.
    ActiveWindow.SelectedSheets.Visible = False         'Masquage de la feuille Menu.

' Renommer toutes les photos.
    Chemin = Worksheets("Données").Range("A10").Value
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oDossier = oFSO.GetFolder(Chemin)
    For Each oFichier In oDossier.Files

' Ancien nom en colonne A et nouveau nom en colonne B
    Cells(i + 1, 1) = oFichier.Name
    Cells(i + 1, 2) = Format(i, "00#") & ".jp"
' Renomme le fichier
    oFichier.Name = Format(i, "00#") & ".jpg"
    i = i + 1
Next oFichier

' Raz feuille Renom_Diapo
    Cells.Select
    Selection.ClearContents
    Range("A1").Select

    
' Gestion des feuilles.
    Sheets("Menu").Visible = True                       'Affichage de la feuille Renom_Diapo.
    Sheets("Renom_Diapo").Select                        'Sélection de la feuille Renom_Diapo.
    ActiveWindow.SelectedSheets.Visible = False         'Masquage la feuille Renom_Diapo.

' Rétablissement du rafraichissement et des alarmes.
    Application.ScreenUpdating = True                   ' Bloque le rafraichissement de l'écran.
    Application.EnableEvents = True                     ' Arret de la scrutation.
    Application.DisplayAlerts = True                    ' Bloque les messages Excel.

    MsgBox "Tous les fichiers ont été renommé."


End Sub


Peux-tu me donner ton avis?

J(ai un autre problème avec une procedure:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Puis-je te le soummettre?

Cordialement.

Mistral

0
Le Pingou Messages postés 12198 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 21 novembre 2024 1 450
3 déc. 2022 à 23:54

Bonjour,

Concernant : Je n'ai pas réussi à démarer ton classeur ???

Merci de m'indiquer absolument ce qui ne vas pas....!

Salutations.
Le Pingou

0
Mistral_13200 Messages postés 636 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 15 novembre 2024 4
3 déc. 2022 à 18:30

Le Pingou ne te tracasse pas pour 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

J'ai trouvé la solution.

Encore mille merci à toi pour ton aide.

Cordialement

Mistral

0
Pierr10 Messages postés 12343 Date d'inscription mardi 13 février 2018 Statut Modérateur Dernière intervention 21 novembre 2024 5 147
3 déc. 2022 à 18:45

Bonjour 

Pourquoi n'utilisez-vous pas Ant Renamer ?

https://www.commentcamarche.net/telecharger/utilitaires/3357-ant-renamer/

La fonction Énumération devrait convenir. Regardez les autres propositions.


0