IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment renommer les fichiers dans les dossiers et sous-dossiers avec vba ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut Comment renommer les fichiers dans les dossiers et sous-dossiers avec vba ?
    Bonjour,

    J'ai la macro suivante avec laquelle je peux renommer les fichiers dans le répertoire précis d'après le contenu de la colonne B, mais malheureusement elle ne prend pas en charge les sous dossiers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Sub renameFiles()
     
    Dim xDir As String
    Dim xFile As String
    Dim xRow As Long
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
    If .Show = -1 Then
        xDir = .SelectedItems(1)
        xFile = Dir(xDir & Application.PathSeparator & "*")
        Do Until xFile = ""
            xRow = 0
            On Error Resume Next
            xRow = Application.Match(xFile, Range("A:A"), 0)
            If xRow > 0 Then
                Name xDir & Application.PathSeparator & xFile As _
                xDir & Application.PathSeparator & Cells(xRow, "B").Value
            End If
            xFile = Dir
        Loop
    End If
    End With
    End Sub
    donc je demande si vous pouvez m'aider svp à fixer le dossier de recherche sur l'adresse suivante "C:\Users\Desktop\ST\" et de faire la recherche dans les sous dossiers aussi et merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    Le meilleur moyen d'exploiter le contenu d'un dossier et ses sous-dossiers est encore de passer par une fonction récursive.
    Et dans ce cas, la fonction Dir est ton pire ennemis (elle n'est pas copine avec les appels récursifs).
    A mon sens, la bibliothèque FSO est ta meilleur amie.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    Public Sub test()
        Dim Fso As Object       '// Scripting.FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        Dim folder As Scripting.folder
        Set folder = Fso.GetFolder("c:\monDossier")
        BrowseFolders folder
    End Sub
     
    Public Sub BrowseFolders(ByRef baseFolder As Object)    '// Scripting.folder
            '// Traitement du dossier courrant
        TraitementDossier baseFolder
     
            '// traitement des sous-dossiers
        Dim folder As Object        '// Scripting.folder
        For Each folder In baseFolder.Folders
            BrowseFolders folder
        Next
    End Sub
     
    Sub TraitementDossier(ByRef folder As Object)   '// Scripting.folder
        '//
        '// code quelconque
        '//
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Salut,

    Le meilleur moyen d'exploiter le contenu d'un dossier et ses sous-dossiers est encore de passer par une fonction récursive.
    Et dans ce cas, la fonction Dir est ton pire ennemis (elle n'est pas copine avec les appels récursifs).
    A mon sens, la bibliothèque FSO est ta meilleur amie.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    Public Sub test()
        Dim Fso As Object       '// Scripting.FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        Dim folder As Scripting.folder
        Set folder = Fso.GetFolder("c:\monDossier")
        BrowseFolders folder
    End Sub
     
    Public Sub BrowseFolders(ByRef baseFolder As Object)    '// Scripting.folder
            '// Traitement du dossier courrant
        TraitementDossier baseFolder
     
            '// traitement des sous-dossiers
        Dim folder As Object        '// Scripting.folder
        For Each folder In baseFolder.Folders
            BrowseFolders folder
        Next
    End Sub
     
    Sub TraitementDossier(ByRef folder As Object)   '// Scripting.folder
        '//
        '// code quelconque
        '//
    End Sub
    Bonjour,

    Merci @deedolith, mais comment je peux modifier ma macro pour pouvoir l'insérer dans la partie TraitementDossier surtout la partie qui me permet de renommer les fichiers ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub TraitementDossier(ByRef folder As Object)   '// Scripting.folder
    Dim xDir As String
    Dim xFile As String
    Dim xRow As Long
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
    If .Show = -1 Then
        xDir = .SelectedItems(1)
        xFile = Dir(xDir & Application.PathSeparator & "*")
        Do Until xFile = ""
            xRow = 0
            On Error Resume Next
            xRow = Application.Match(xFile, Range("A:A"), 0)
            If xRow > 0 Then
                Name xDir & Application.PathSeparator & xFile As _
                xDir & Application.PathSeparator & Cells(xRow, "B").Value
            End If
            xFile = Dir
        Loop
    End If
    End With
    End Sub

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par mahdiweb Voir le message
    Merci @deedolith, mais comment je peux modifier ma macro pour pouvoir l'insérer dans la partie TraitementDossier surtout la partie qui me permet de renommer les fichiers ?
    Hola, minute papillon !

    Je ne t'ai donné qu'un exemple (et non une solution).
    A toi de l'étudier et voir comment tu peux t'en inspirer pour intégrer une solution à ta problématique.
    Exécute ma fonction test en mode pas à pas (raccourcis clavier: F8) , met en place des espions et observe ce qui se passe.

  5. #5
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Hola, minute papillon !

    Je ne t'ai donné qu'un exemple (et non une solution).
    A toi de l'étudier et voir comment tu peux t'en inspirer pour intégrer une solution à ta problématique.
    Exécute ma fonction test en mode pas à pas (raccourcis clavier: F8) , met en place des espions et observe ce qui se passe.
    Merci @deedolith c'est gentil de ta part

  6. #6
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Par défaut
    enfin,

    Voici le code si quelqu'un d'autre aura besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Sub sample()
     
        Dim FileSystem As Object
        Dim HostFolder As String
     
        HostFolder = "C:\le chemin du dossier principale"
     
        Set FileSystem = CreateObject("Scripting.FileSystemObject")
        DoFolder FileSystem.GetFolder(HostFolder)
    End Sub
     
    Sub DoFolder(Folder)
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")
    On Error Resume Next
        Dim SubFolder
        For Each SubFolder In Folder.SubFolders
            DoFolder SubFolder
        Next
        Dim File
        Dim new_name As String
        For Each File In Folder.Files
            ' Operate on each file
            new_name = Application.VLookup(File.Name, sh.Range("A:B"), 2, 0)
          File.Name = new_name
        Next
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Comparer les noms de fichiers dans un dossier avec ceux dans une feuille excel
    Par Offoloren dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/06/2018, 13h25
  2. Réponses: 13
    Dernier message: 30/11/2011, 09h04
  3. [JFilechooser] comment renommer un fichier ou un dossier
    Par imenmannou dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 08/05/2008, 21h49
  4. Comment copier un fichier dans le dossier temporaire ?
    Par zaydoun_391 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 28/12/2007, 05h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo