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 :

Appliquer une macro à tous les classeurs d'un dossier [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut Appliquer une macro à tous les classeurs d'un dossier
    Bonjour à tous,

    Je suis nouveau sur VBA et j'ai un petit souci...

    Je dispose d'une macro "conversion" dans mon module, et je souhaite l'appliquer à tous les autres classeurs du dossier (c'est-à-dire environ 2000 : ça ne va pas planter?)

    Pour ça, j'ai écrit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub tout_convertir()
        Dim Fich As String
        Const chemin = "C:\Users\Robin\Documents\Données\Trades"
        Fich = Dir(chemin & "*.csv")
        Do While Fich <> ""
            Workbooks.Open Fich
            Application.Run ("conversion")
            Workbooks(Fich).Close(True, "bis" & Fich, False)
        Fich = Dir
        Loop
    End Sub
    Malheureusement, Excel me renvoie un message d'erreur : "Erreur de compilation : Erreur de syntaxe".
    Est-ce que quelqu'un voit pourquoi, et comment régler le problème?

    Merci!

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Il manque un \ entre le nom de ton ton dernier répertoire et le nom du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Const chemin = "C:\Users\Robin\Documents\Données\Trades\"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    Exact, merci!

    Mais le message d'erreur subsiste.
    Apparemment, c'est cette ligne qui ne lui plaît pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Workbooks(Fich).Close(True, "bis" & Fich, False)
    Est-ce que ça pourrait venir de l'enregistrement que je lui demande sous un autre nom de fichier?

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Oui sorry, j'avais vu que ma réponse était incomplète mais je n'avais pas eu le temps de la modifier
    Essaie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub tout_convertir()
        Dim Fich As String
        Const chemin = "C:\Users\Robin\Documents\Données\Trades\"
        Fich = Dir(chemin & "*.csv")
        Do While Fich <> ""
            Workbooks.Open chemin & Fich
            Application.Run ("conversion")
            Workbooks(Fich).SaveAs chemin & "bis" & Fich
            Workbooks("bis" & Fich).Close
        Fich = Dir()
        Loop
    End Sub

  5. #5
    Membre éprouvé
    Homme Profil pro
    Data Analyste Senior
    Inscrit en
    Août 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Analyste Senior
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2010
    Messages : 53
    Par défaut
    Enlève les parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(Fich).Close True, "bis" & Fich, False

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    Bonsoir à tous,

    Désolé d'avoir mis autant de temps à répondre, mais je m'y suis remis il y a une heure, et j'ai d'abord essayé de régler le problème tout seul...

    Déjà, point positif : La macro proposée par fring se lance, donc il n'y a a priori plus de problème de syntaxe : Merci!!

    Par contre, les fichiers qui s'enregistrent sont identiques aux fichiers originaux, comme si la macro "conversion" n'agissait pas...

    Pourtant, je l'ai testée individuellement sur un classeur et elle fonctionne très bien.

    Éventuellement, est-ce que c'est possible que les fichiers ne tiennent pas compte de ce qui a été modifié lors de l'enregistrement?
    Sinon, je ne vois pas du tout...

    Merci beaucoup pour votre aide en tout cas!!

    Edit : Je viens de faire un test intéressant, mais que je comprends absolument pas. J'ai essayé d'appliquer ma fonction convertir à un seul fichier, par le biais de la macro suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
        Dim Fich As String
        Const chemin = "C:\Users\Robin\Documents\Données\Trades\"
        Fich = Dir(chemin & "AXAF.PA_trades_20070109.csv")
    Workbooks.Open chemin & Fich
            Application.Run ("PERSONAL.XLSB!conversion")
            Workbooks(Fich).SaveAs chemin & "aa_" & Fich
            Workbooks("aa_" & Fich).Close True
    End Sub
    Et là, comme avant, rien n'est modifié...

    Par contre, avec celle-ci (la même, mais sans fermer le classeur après enregistrement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        Dim Fich As String
        Const chemin = "C:\Users\Robin\Documents\Données\Trades\"
        Fich = Dir(chemin & "AXAF.PA_trades_20070109.csv")
    Workbooks.Open chemin & Fich
            Application.Run ("PERSONAL.XLSB!conversion")
            Workbooks(Fich).SaveAs chemin & "aa_" & Fich
    End Sub
    les modifications sont prises en compte!! Mais je ne peux toujours pas me permettre de laisser ouvert 2000 classeurs ouverts, donc ça ne m'avance pas à grand chose...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    Bonjour à tous,

    J'ai fait quelques petites recherches. Apparemment, l'extension .csv ne permet pas l'enregistrement des modifications effectuées par ma macro (qui met en forme des données de ma feuille excel en les répartissant sur différentes colonnes).

    J'ai donc essayé de sauvegarder les fichiers modifié en .xlsx, ce qui marche :

    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
    Sub tout_convertir()
     
    Application.DisplayAlerts = False
     
        Dim Fich As String
        Const chemin = "C:\Users\Robin\Documents\Données\Trades\"
        Fich = Dir(chemin & "*.csv")
        Do While Fich <> ""
            Workbooks.Open chemin & Fich
            Application.Run ("conversion")
            ActiveWorkbook.SaveAs chemin & "modifs\" & Replace(Fich, csv, xlsx), xlNormal
            ActiveWorkbook.Close
        Fich = Dir()
        Loop
     
    Application.DisplayAlerts = True
     
    End Sub
    J'ai juste un dernier problème : lorsque je veux ouvrir l'un des classeurs créés, j'ai un message d'erreur disant :
    "Le format du fichier que vous tentez d'ouvrir est différent de celui spécifié par l'extension du fichier; Assurez-vous que le fichier n'est pas endommagé et qu'il provient d'une source fiable avant de l'ouvrir. Souhaitez-vous ouvrir le fichier maintenant?"

    Donc apparemment, lorsque j'enregistre mes classeurs, il y a un problème d'extension... Est-ce que quelqu'un voit pourquoi?
    Je n'ai pas envie d'avoir à confirmer ce message d'erreur à chaque fois que j'ouvre un classeur...

    Merci en tout cas pour votre aide précieuse, je pense que j'y suis presque!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Par défaut
    Problème résolu : il suffisait d'enregistrer les fichiers en ".xls", et pas ".xlsx", et sans oublier les "" dans ma fonction Replace.

    Merci pour votre aide précieuse, sans laquelle j'en serais encore à me débattre avec des fonctions qui ne tournent pas!

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

Discussions similaires

  1. Affecter une macro à tous les boutons
    Par Hellstyx dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/09/2014, 12h01
  2. Appliquer une image à tous les formulaires d'une base
    Par Jean-Philippe André dans le forum Contribuez
    Réponses: 1
    Dernier message: 01/02/2012, 11h27
  3. [AC-2003] executer une macro tous les lundi a 14h
    Par chuspyto dans le forum IHM
    Réponses: 4
    Dernier message: 20/04/2010, 09h54
  4. Appliquer la macro à tous le classeur
    Par Garion27 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/03/2009, 15h18
  5. Appliquer une police à tous les contrôles d'une application
    Par Electroniktor dans le forum Windows
    Réponses: 2
    Dernier message: 07/02/2009, 20h16

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