Effectuer macro sur fichiers d'un répertoire Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
J
JordanK
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 12 septembre 2017
Version d'Excel : 2016 FR

Message par JordanK » 29 janvier 2018, 18:19

Bonjour,

J'aurais besoin de votre aide ! J'ai tout essayé et je n'arrive pas à trouver l'erreur

Mon objectif : Parcourir TOUS les fichiers d'un répertoire et y appliquer une macro (Macro recherche et remplace qui n'est pas compliquée) pour ensuite SAUVEGARDER ces modifications soit sur le même fichier ou soit dans un autre fichier.

Voici le code que j'ai trouvé qui me permet de boucler sur l'ensemble des fichiers du répertoire :

Mon code est le suivant :

Sub BoucleFichiers()
Dim Chemin As String, Fichier As String

'Définit le répertoire contenant les fichiers
Chemin = "C:\Users\U329092\Music\Test\"

'Boucle sur tous les fichiers xls du répertoire.
Fichier = Dir(Chemin & "*.xls")
'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
'Fichier = Dir(Chemin & "*.*")

Do While Len(Fichier) > 0
'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
Fichier.Open
Call traduction
Debug.Print Chemin & Fichier

Chemin2 = "C:\Users\U329092\Music\Test1\" 'Ouverture d'un autre répertoire existant'
unFichier = "NomClasseur_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xls"
ActiveWorkbook.SaveCopyAs Chemin2 & unFichier 'Sauvegarde du fichier crée dans ce répertoire existant'
Fichier = Dir()
Loop
End Sub


Ma problématique : "traduction" étant ma macro, celle-ci ne s'effectue que sur le fichier sur lequel je lance ma macro !! Exemple : J'ai 5 fichiers dans un répertoire, ce code parcours bien les 5 fichiers et sauvegarde 5 fichiers dans un répertoire différent. Cependant, ces 5 fichiers restent IDENTIQUES et ne correspondent pas aux fichiers originaux "traduits" (Mon but final étant de traduire automatiquement des fichiers). Je ne parviens pas à EFFECTUER ma macro sur les fichiers mais seulement sur celui dont je lance ma macro.

Je me doute que mon erreur se trouve sur la boucle "For each" mais je ne vois pas comment m'en sortir !!

Merci d'avance pour votre préciseuse aide

Jordan
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'713
Appréciations reçues : 333
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 30 janvier 2018, 06:18

Bonjour Jordan,

voici un exemple à tester,
la variable wk est déclaré dans le haut du module, ce qui permet de l'utiliser dans la macro traduction
Dim wk As Workbook

Sub Liste_des_fichiers2()
Dim Chemin As String, Fichier As String

Chemin = "C:\Users\U329092\Music\Test\"
Fichier = Dir(Chemin & "*.xls*")

Do While Len(Fichier) > 0
    Workbooks.Open Filename:=Chemin & Fichier
    Set wk = ActiveWorkbook
    
    Call traduction
    
    Chemin2 = "C:\Users\U329092\Music\Test1\" 'Ouverture d'un autre répertoire existant'
    unFichier = "NomClasseur_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xls"
    wk.SaveCopyAs Chemin2 & unFichier 'Sauvegarde du fichier crée dans ce répertoire existant'
'    Fermer le fichier original sans l'enregistrer, n'entraîne pas l'exécution d'une macro AutoClose dans le classeur
    wk.Close SaveChanges:=False
    'prochain fichier
    Fichier = Dir()
Loop
End Sub

Sub traduction()
MsgBox wk.Name
End Sub
Vive ces nouvelles saisons qui nous colorent.
isabelle
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'019
Appréciations reçues : 306
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 30 janvier 2018, 07:05

Bonjour,

Ou alors, dans le même esprit que sabV que je salut au passage :wink: , demander le classeur en argument dans la Sub "Traduction" :
Sub BoucleFichiers()
    
    Dim Cls As Workbook
    Dim Chemin As String
    Dim Chemin2  As String
    Dim Fichier As String
    Dim unFichier As String
    
    'Définit le répertoire contenant les fichiers
    Chemin = "C:\Users\U329092\Music\Test\"

    'Boucle sur tous les fichiers xls du répertoire.
    Fichier = Dir(Chemin & "*.xls")
    'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
    'Fichier = Dir(Chemin & "*.*")
    
    Do While Len(Fichier) > 0
    
        'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
        Set Cls = Workbooks.Open(Chemin & Fichier)
        
        Traduction Cls
        
        Debug.Print Chemin & Fichier
        
        Chemin2 = "C:\Users\U329092\Music\Test1\" 'Ouverture d'un autre répertoire existant'
        unFichier = "NomClasseur_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xls"
        
        Cls.SaveCopyAs Chemin2 & unFichier 'Sauvegarde du fichier crée dans ce répertoire existant'
        
        Cls.Close False
        
        Fichier = Dir()
    
    Loop
    
End Sub

Sub Traduction(Classeur As Workbook)
    
    MsgBox Classeur.Name
    
End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
J
JordanK
Nouveau venu
Nouveau venu
Messages : 6
Inscrit le : 12 septembre 2017
Version d'Excel : 2016 FR

Message par JordanK » 30 janvier 2018, 12:55

Bonjour,

Ca marche nickel !!!
Merci beaucoup de votre aide !!!!
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'713
Appréciations reçues : 333
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 1 février 2018, 23:58

Merci pour ce retour, au plaisir!
si le problème est résolu, s.v.p. pour clôturer le fil, cliquer sur le bouton V vert du post à coté du bouton EDITER, merci!
Vive ces nouvelles saisons qui nous colorent.
isabelle
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message