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 :

Excécuter Macro dans plusieurs fichiers Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut Excécuter Macro dans plusieurs fichiers Excel
    Bonjour à tous,

    Je suis super débutant en Excel....
    J'ai réalisé plusieurs macros pour organiser la mise en page de fichiers Excel placés sur un serveur.
    Dans le répertoire 1 (\\serveur\partage\rep1), j'ai deux fichiers et donc 2 macro :
    - Biggest_Files (fichiers volumineux du répertoire 1) => Macro_Biggest_Rep1
    - Duplicate_Files (fichiers dupliqués du répertoire 1) => Macro_Duplicate_Rep1

    Dans le répertoire 2 (\\serveur\partage\rep2), j'ai deux fichiers et donc 2 macro :
    - Biggest_Files (fichiers volumineux du répertoire 2) => Macro_Biggest_Rep2
    - Duplicate_Files (fichiers volumineux du répertoire 2) => Macro_Duplicate_Rep2

    Les macros sont dans perso.xls.
    Je voudrais automatiser le passage des macros sur les fichiers concernés dans les répertoires.

    J'ai fais plusieurs recherches sur Internet mais je ne parviens pas à trouver de solution.
    Pouvez-vous SVP m'aider à ce sujet.
    Merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    C'est pas la première fois que je le dis, mais automatiser veut à la fois tout dire et rien dire. Donc, pas étonant que tu n'aies rien trouvé là dessus.

    La question, c'est quand veux-tu que les macros soient exécutées?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    Merci pour ta réponse.
    Je dirais 1 fois par mois.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Quel jour précisément? Le 1, le 15, le 31, ...?

    Et, ce qui est plus important: veux-tu le faire à l'ouverture de n'importe quelle feuilel de calcul, où l'ouverture d'une feuille de calcul bien précise?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    Pour le jour, je dirais le 31.
    A l'ouverture d'une feuille de calcul bien précise.
    Merci pour ton aide !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Excuse moi, mais j'ai le droit d'aller manger, non?

    Je te propose alors de mettre ce code dans l'élément "ThisWorkbook" de ta feuille de calcul (perso.xls si j'ai bien compris):

    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
    29
    30
    31
    32
    33
    Private Sub Workbook_Open()
        If dernier_jour_mois(Date) Then
            Call Macro_Biggest_Rep1
            Call Macro_Duplicate_Rep1
            Call Macro_Biggest_Rep2
            Call Macro_Duplicate_Rep2
        End If
    End Sub
     
    Public Function dernier_jour_mois(ByVal date_testee As Date) As Boolean
        Dim jour As Integer, mois As Integer, annee As Integer
        jour = Day(date_testee)
        mois = Month(date_testee)
        annee = Year(date_testee)
        dernier_jour_mois = False
        If jour = 31 Then
            If (mois <= 7 And mois Mod 2 = 1) Or _
            (mois >= 8 And mois Mod 2 = 0) Then dernier_jour_mois = True
            Exit Function
        End If
        If jour = 30 Then
            If (mois <= 6 And mois Mod 2 = 0) Or _
            (mois >= 9 And mois Mod 2 = 1) Then dernier_jour_mois = True
            Exit Function
        End If
        If jour >= 28 And mois = 2 Then
            If annee Mod 4 <> 0 Then
                dernier_jour_mois = True
            Else
                If jour = 29 Then dernier_jour_mois = True
            End If
        End If
    End Function
    Au passage une petite fonction qui indique si le jour en paramètre est le dernier jour du mois.

    Et là donc ça s'exécutera à chaque ouverture de classeur en fin de mois.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    Je suis débutant... et je ne trouve pas ThisWorkbook.
    perso.xls pour moi, c'est l'endroit où sont stockés mes macros (quand je fais Outils, Macro, Macro. Là où il y a d'indiqué Macro dans : j'ai PERSO.xls

    J'ai regardé le code et je ne comprends pas comment les macro vont se lancer car on n'indique pas à quel endroit (sur quels fichiers et emplacements on veut qu'elles s'appliquent).

    En fait, ce que je voudrais (si c'est réalisable), c'est genre un fichier .bat, où xla ou autre chose, que je puisse lancer quand je veux (par ex en fin de mois) qui exécuterait toutes les macros que je visualise quand je fais quand je fais Outils, Macro, Macro.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Regarde dans ton éditeur de code: sur la gauche dans les dossiers tu as ThisWorkbook quelque part, et c'est dedans qu'il faut coller le code.

    Si tu veux lancer la code quand tu veux, soit tu mets un bouton qui lance tes 4 procédures dans une de tes feuilles, soit tu appelles une macro (via le menu macro) qui appelle tes 4 procédures.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    Editeur de code, est ce que ça correspond à Visual Basic Editor ?
    Si oui, je ne vois rien qui correspond à ThisWorkbook.
    Je suis sous Excel 2002.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Oui c'est ça l'éditeur.
    Développe le dossier "Microsoft Excel Objects": ThisWorkbook est dedans.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    Merci pour ta réponse.
    Je suis désolé mais je ne trouve pas.
    Je te joins une capture pour que tu puisse visualiser :

    http://img510.imageshack.us/my.php?image=excelgi3.jpg

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Désolé, mais mon serveur entreprise bloque imageshack (et beaucoup d'autres trucs... ), donc je ne peux rien voir.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    Salut,

    Ca y est j'ai trouvé (enfin...)
    J'ai positionné mes macros dans un fichier excel (vide) que j'ai nommé Macro.xls.
    Dans ce fichier, j'ai deux macros :
    - Biggest_Files
    - Duplicate_Files

    J'aimerais pouvoir appeler les macros qui sont dans le fichiers Macro.xls et les lancer dans les répertoires où se trouve les fichiers à modifier :
    \\serveur\partage\Rep1\fichier.xls

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Tu as la réponse dans cette FAQ:
    http://excel.developpez.com/faq/?page=VBA#Run

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    En fait, cette fonction permet d'appeler la macro, OK.
    Mais pour l'appeler, il faut modifier les fichiers un à un.
    Impossible dans mon cas, car les fichiers sont remplacés toutes les semaines.

    En fait ce que je cherche à faire (mais je me demande de + en + si c'est possible...) c'est de disposer d'un fichier (vide) qui contient ma macro (pour faire simple une seule macro).

    Je veux créer un batch, ou un exe, ou quoi que ce soit d'autre qui aille lire la macro dans mon fichier macro.xls et qui l'exécute sur les fichiers sur le serveur.
    Peut-être en indiquant le path quelque part :
    \\serveur\partage\rep1\fichier1.xls
    \\serveur\partage\rep1\fichier2.xls

    Voilà. Merci pour ton aide.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    A mon avis tu ne t'es pas bien organisé.
    Ou alors tu as changé de concept comme de chemise.

    Pourquoi tu ne mets pas tes procédures Biggest_Files et Duplicate_Files dans ton fichier perso.xls?

    Si tu envisage le .exe (ce qui est tout à fait possible), tu devrais alors t'orienter du coté du VB et non pas du VBA.

    Je serais toi, je verrais du coté du VB en faisant un programme qui affiche une boîte de dialogue qui demande dans quel répertoire sont les fichiers à mettre en forme. Ton programme (j'appele plus ça macro quand c'est du VB) parcourra alors tous les fichiers Excel du répertoire et les mettra en forme.
    La petite difficulté, c'est que tu devras toucher un peu mieux l'utilisation d'applications externes (vu que la Excel sera une application externe) pour faire ce que font tes 2 procédures.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    Je viens de réussir à appeler la macro de mon fichier macro.xls depuis un autre fichier test.xls.
    Maintenant que la macro est appelée comment lui dire d'ouvrir les fichiers dans les path spécifiés, d'exécuter la macro et pour finir de l'enregistrer :
    \\serveur\partage\rep1\fichier1.xls
    \\serveur\partage\rep1\fichier2.xls

    Voilà la syntaxe de la macro dans mon fichier test.xls :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub TEST2()
    Result = Application.Run("macro.xls!Macro1")
    End Sub

    Merci pour ton aide.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Pour supprimer ton message, fais "Editer"->"Supprimer".

    Ensuite, je t'ai conseillé de mettre tes macros à appeler dans ton classeur d'appel: pourquoi chercher midi à 14 heures?

    Ainsi, tu mets tout dans test.xls, et à l'exécution tu lui demande d'afficher un userform contenant un textbox et un bouton de validation pour saisir le chemin du dossier à traiter.

    Ce qui donnera ça:
    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
    29
    30
    31
    ' Tes 2 procédures de traitement ici, _
    avec un classeur en paramètre (celui que tu vas traiter)
    Sub Macro_Biggest_Rep1(ByRef gros_classeur As Workbook)
        ' Traitement d'un gros classeur
    End Sub
     
    Sub Macro_Duplicate_Rep1(ByRef fichier_duplique As Workbook)
        ' Traitement d'un classeur duplique
    End Sub
     
    Sub TEST2()
        Dim liste_fichiers() As String, fichier_teste As Variant
        Dim adresse_classeur As String
        UserForm1.Show ' Tu intègres du code dans ton userform _
         pour vérifier que le chemin spécifié existe
        ' A cet endroit tu mets insère un code qui met en mémoire _
        tous tes noms de fichiers excel dans liste_fichiers
        For Each fichier_teste In liste_fichiers
            adresse_classeur = UserForm1.TextBox1.Value & "\" & fichier_teste
            If gros_fichier Then ' Tu adapte cette condition
                Workbooks.Open adresse_classeur
                Macro_Biggest_Rep1 ActiveWorkbook
                Workbooks.Close adresse_classeur
            End If
            If fichier_duplique Then ' Là aussi tu adapte
                Workbooks.Open adresse_classeur
                Macro_Duplicate_Rep1 ActiveWorkbook
                Workbooks.Close adresse_classeur
            End If
        Next
    End Sub
    Ce code n'est pas complet, mais c'est une bonne base pour faire ce que tu veux.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    Merci ! Je vais tester.

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Attnetion: tu as également un Userform (avec un Textbox) à programmer également.

    Il devra vérifier que le chemin que tu as rentré est valide.

    De plus, tu devras l'utiliser en non-modal pour te permettre de copier/coller le chemin.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/08/2017, 16h55
  2. Réponses: 1
    Dernier message: 11/02/2011, 14h14
  3. Réponses: 10
    Dernier message: 28/08/2008, 09h15
  4. Réponses: 9
    Dernier message: 10/05/2007, 10h56
  5. Macros sur Plusieurs fichiers Excel
    Par Echizen1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2006, 11h21

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