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 :

Améliorer une macro de renommage de fichiers


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 89
    Par défaut Améliorer une macro de renommage de fichiers
    Bonjour à toutes et à tous,

    étant totalement néophyte (ou à peine autodidacte en VBA), j'ai quelques difficultés.

    Je souhaite réaliser (et améliorer) une petite macro pour renommer une série de fichiers à partir d'une liste excel.

    --------- Voilà le problème ------------------------

    Dans la colonne B, les nouveaux noms.
    Dans la colonne F, les anciens noms.
    (Au départ B et F sont remplis automatiquement par une macro qui recherche et affiche le contenu d'un dossier ciblé).

    La petite macro ci-dessous fonctionne uniquement si la totalité des noms de la colonne B est différente de la colonne F.

    Si un nom dans la colonne B est identique à celui de la colonne F, ça ne marche plus.

    Je voudrais pouvoir changer le nom de certains fichiers (en colonne B).
    Il faudrait donc intégrer une espèce de test (genre If etc...) sur chaque ligne : pour comparer B à F et si B est différent de F on renomme sinon on passe à la ligne suivante...


    Et ça je n'y arrive pas !!

    La macro (déjà bien pratique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Renom()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set repertoire = FSO.GetFolder(ActiveSheet.Cells(1, 1))
    Set fichiers = repertoire.Files
    For Each f In fichiers
        f.Name = Cells(Application.WorksheetFunction.Match(f.Name, Range("f:f"), 0), 2).Value
    Next
    End Sub
    -------------------------------------------------------------------------

    Merci d'avance...
    A+
    D D du 06

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Il suffit de gérer les différentes erreurs qui surviennent.


    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
    Sub Renom()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set repertoire = FSO.GetFolder(ActiveSheet.Cells(1, 1))
    Set fichiers = repertoire.Files
    For Each f In fichiers
    On Error GoTo GererLesErreurs
        NouveauNom = Cells(Application.WorksheetFunction.Match(f.Name, Range("f:f"), 0), 2).Value
        f.Name = Cells(Application.WorksheetFunction.Match(f.Name, Range("f:f"), 0), 2).Value
    Suite:
    Next
    Exit Sub
    GererLesErreurs:
    Message = "Ancien nom : " & f.Name & vbCrLf & "Nouveau nom : " & NouveauNom
    MsgBox Error & vbCrLf & Message
    Resume Suite
    End Sub

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Citation Envoyé par D-D-Du-06 Voir le message
    Dans la colonne B, les nouveaux noms.
    Dans la colonne F, les anciens noms.
    ....

    Si un nom dans la colonne B est identique à celui de la colonne F, ça ne marche plus.
    Et il se passe quoi exactement dans ce cas là?

    PGZ

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 89
    Par défaut Merci ça fonctionne
    Bonjour à toutes et à tous,

    pour répondre à Pgz, voilà ce qui se passe:
    _ Message d'alerte de Visual Basic : Erreur d'exécuton '58';
    _ avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f.Name = Cells(Application.WorksheetFunction.Match(f.Name, Range("f:f"), 0), 2).Value
    Suite:
    surlignée dans VBA;
    _ et aucun fichier renommé...

    Grand Merci du coup de main à Domacri .

    Ci-dessous, son code légèrement modifié et tout fonctionne (quand même nom, juste une jolie boîte de dialogue).

    ----------------------------------------------
    Le code qui fonctionne

    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
    Sub Renom()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set repertoire = FSO.GetFolder(ActiveSheet.Cells(1, 1))
    Set fichiers = repertoire.Files
    For Each f In fichiers
    On Error GoTo GererLesErreurs
        f.Name = Cells(Application.WorksheetFunction.Match(f.Name, Range("f:f"), 0), 2).Value
    Suite:
    Next
    Exit Sub
    GererLesErreurs:
    Message = "Ancien nom : " & f.Name & vbCrLf & "Nouveau nom : " & f.Name & vbCrLf
    MsgBox Error & vbCrLf & Message
    Resume Suite
    End Sub
    -----------------------------------------------------

    Merci encore à tous les deux pour la solution et l'intérêt porté au message.

    A+
    D D du 06

  5. #5
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Si tu ne veux pas connaître les erreurs générées, tu peux utiliser simplement ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Renom()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set repertoire = FSO.GetFolder(ActiveSheet.Cells(1, 1))
    Set fichiers = repertoire.Files
    For Each f In fichiers
    On Error Resume Next
        f.Name = Cells(Application.WorksheetFunction.Match(f.Name, Range("f:f"), 0), 2).Value
    Next
     
    End Sub

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

Discussions similaires

  1. améliorer une macro
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2007, 06h02
  2. [VBA] Menu qui pointe sur une macro contenue dans un fichier xla protégé
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/08/2007, 14h34
  3. Améliorer une macro
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 30/05/2007, 22h33
  4. [VBA-E] une macro qui enregistre mon fichier Excel
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/03/2007, 11h47
  5. [VBA-E]une macro unique pour plusieurs fichiers excel
    Par fanchic29 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/04/2006, 16h20

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