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 :

Automatiser l'excution de trois Macros


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut Automatiser l'excution de trois Macros
    Bonjour,

    J'ai un fichier Excel "A" qui contient trois Macros

    Ces macros s'excutent dans l'ordre suivant :

    Je lance la 1 ére macro qui s'appelle "Import" qui extrait des données a partir de plusieurs fichier Word vers mon fichier Excel "A"

    Après l'extraction je lance la macro qui s'appelle "Tri" qui fait un tri sur ces données déjà extraites dans mon fichier Excel "A"

    Et au dernier après le tri je lance une Macro qui s'appelle "Export" qui copie ces données dans un autre nouveau fichier Excel vide "B"

    Ce que je veux faire c'est excuter ces trois macro dans l ordre indiqué c'est-à-dire Impor puis Tri puis Export a l'ouverture de mon autre nouveau fichier Excel vide "B"


    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Points : 173
    Points
    173
    Par défaut
    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 automatisation()
     
        Dim selec As FileDialog
        Dim Fichier As String
        Set selec = Application.FileDialog(msoFileDialogOpen)
        selec.Title = "Sélectionnez le fichier à extraire"
        selec.AllowMultiSelect = False
        selec.Filters.Add "fichiers Excel", "*.xls; *.xlsx"
     
        Import
        Tri
        selec.Show 
        Fichier = selec.SelectedItems(1)
        Export Fichier
     
    End Sub
    Tu appelles tout simplement tes macro, selec sert à créer une fenêtre de sélection de fichier pour lancer ton export. Tu appelles cette méthode via un bouton ou à l'ouverture du fichier, au choix.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut
    Bonjour Soraphiroth,

    Merci pour ta réponse

    Quand je lance cette macro sur mon fichier "A" qui contient les données, j'ai une erreur sur la ligne 10 qui dit : Sub ou Function non definie !

    Une question : Ou je dois mettre cette macro... je suppose dans mon fichier Excel B celui qui va recevoir le resultat final des ces trois macro non ?!

    Ps : Pour l'extraction, j'ai définis un chemin par défaut du dossier contenant les fichier Word à extraire dans ma macro "Import" donc pas la peine de choisir le dossier


    Mercii

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Points : 173
    Points
    173
    Par défaut
    Il faut mettre cette macro dans le fichier "A".

    Ton erreur doit venir du fait que la macro que je t'ai donnée ne soit pas au même endroit que tes macros à toi. Par exemple tes macros peuvent être dans Module1 et la mienne dans Module2, ou tout autre module/feuille. Dans ce cas, il faut écrire ModuleX.TaMacro pour l'appeler. Exemple :

    dans l'édideur j'ai:
    Feuil1
    Feuil2
    --
    Module1
    TestModule

    Si ma macro Automatisation est dans Feuil1 et tes macro dans TestModule, alors je doit écrire dans ma macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TestModule.Import
    TestModule.Tri
    ...
    TestModule.Export Fichier
    Montre nous le code de ta macro Export s'il te plaît, pour voir si elle est adaptée à ce que j'ai écrit.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut
    Re

    Dans mon fichier Excel A j'ai :

    Dans le module 1 la macro Import
    Dans le module 3 la macro Tri
    Dans la module 4 la macro Export voila son code

    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
    Sub Export()
        Dim Ligne As Long, Plage As Range
        Dim Wbk As Workbook, Sh1 As Worksheet, Sh2 As Worksheet, C As Range
        Dim Res As Long, Teste As Boolean
     
        With ThisWorkbook.Sheets("Feuil1")
            Ligne = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
            Set Plage = .Range(.[A4], .Cells(Ligne, 1))
     
            Set Wbk = Workbooks("Mon Fichier Final.xlsm")
            Set Sh1 = Wbk.Sheets("Elements d'obsolescence")
            Set Sh2 = Wbk.Sheets("Elements Greenwich")
            For Each C In Plage
                If C.Row = 65536 Then Stop
                If C.Value <> "" Then Res = C.Row
                If C.Offset(, 2).Interior.ColorIndex = 3 Or _
                    C.Offset(, 4).Interior.ColorIndex = 3 Then
                    Teste = True
                End If
     
                If (Application.CountIf(C.Resize(, 7), "") = 7 And Res > 0) Or C.Row = Plage.Rows.Count + 3 Then
                    If Teste = True Then
                        Ligne = Sh1.Cells(Sh1.Rows.Count, 2).End(xlUp).Offset(2).Row
                        .Range(.Cells(Res, 1), C).Resize(, 7).Copy Sh1.Cells(Ligne, 1)
                    Else
                        Ligne = Sh2.Cells(Sh2.Rows.Count, 2).End(xlUp).Offset(2).Row
                        .Range(.Cells(Res, 1), C).Resize(, 7).Copy Sh2.Cells(Ligne, 1)
                    End If
                    Teste = False
                End If
            Next C
        End With
    End Sub
    Ps : avant d'excuter la macro Export je dois d'abord laisser mon nouveau fichier Excel "B" dans le quel se fera la copie ouvert, puis je lance cette macro dans mon fichier Excel A

    comme je tai déjà dit je veux a l'ouverture de mon fichier B les trois macro s'excute dans l'ordre car chaque macro dépend du résulat de la précédente et j'aurai le résulat final dans ce fichier B qui s'appelle dans le code de la macro Export Mon Fichier Final

    Merci

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Points : 173
    Points
    173
    Par défaut
    mes excuses, j'ai gaffé, message en double. La réponse est en dessous.

    donc :
    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 automatisation()
     
        Dim selec As FileDialog
        Dim Fichier As String
        Set selec = Application.FileDialog(msoFileDialogOpen)
        selec.Title = "Sélectionnez le fichier à extraire"
        selec.AllowMultiSelect = False
        selec.Filters.Add "fichiers Excel", "*.xls; *.xlsx"
     
        Module1.Import
        Module3.Tri
        selec.Show 
        Fichier = selec.SelectedItems(1)
        Module4.Export Fichier
     
    End Sub
    Pour l'automatisation et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Export(byval Fichier as string)
    ... 
            Set Wbk = Workbooks.Open(Filename:=Fichier)
    Pour ta macro Export. Cela ouvrira automatiquement le fichier "B" que tu auras choisis avec ma macro. Dis nous si cela te convient et surtout si ça marche

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Quand tu dis :
    a l'ouverture de mon autre nouveau fichier Excel vide "B"
    Tu veux dire que c'est un nouveau classeur ou que c'est un classeur vide enregistrer sur le disque ?

    Hervé.

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut
    Re,

    je pense que je me suis pas bien expliqué

    Comme je t'ai déja dit y'a trois macros dans mon fichier A

    Ce que je veux, c'est quand j'ouvre mon fichier "B" vide qui s 'appelle dans la macro Export "Mon Fichier Final", les trois macro s'excutent une par une dans l'ordre pour avoir le résultat final dans ce fichier "B"

    Sachant que c'est les deux macro Import et Tri s'excutent sur le fichier Excel A et qui donne le résultat toujours dans le fichier Excel A mais la macro Export s'excute sur le fichier Excel A et donne le résultat final direct sur le fichier B

    Pour ta question : c'est un fichier vide déja crée et qui se trouve sur le disque

    Merci

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Points : 173
    Points
    173
    Par défaut
    Ce que je te propose avec ma macro, c'est qu'au lieu d'ouvrir ton fichier toi même, tu le choisisses directement grace à la macro, qui l'ouvrira elle même. Le résultat est identique, il faut juste ouvrir avec mon menu et non en passant par l'explorateur windows.

    A vrai dire, je ne pense pas qu'Excel soit capable de détecter l'ouverture d'un autre fichier. Il faudrait alors mettre une macro dans le fichier "B" qui appelle les macro de "A", ce qui n'est pas forcément pratique.

  10. #10
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Donc, si je saisi bien, tu veux exécuter toutes les macros depuis le classeur B à son ouverture ?
    Dans le module du classeur B, sur l'évènement "Worbook_Open" et adapter le nom et chemin du classeur ainsi que les noms des modules :
    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
     
    Private Sub Workbook_Open()
     
        Dim NomFichier As String
        Dim NomModule As String
        Dim NomMacro As String
     
        NomFichier = "ClasseurA.xls"
        NomModule = "Module1"
        NomMacro = "Import"
     
        Application.Run "'" & NomFichier & "'!" & NomModule & "." & NomMacro
     
        NomModule = "Module3"
        NomMacro = "Tri"
     
        Application.Run "'" & NomFichier & "'!" & NomModule & "." & NomMacro
     
        NomModule = "Module4"
        NomMacro = "Export"
     
        Application.Run "'" & NomFichier & "'!" & NomModule & "." & NomMacro
     
    End Sub
    Je pense, pour simplifier ce code, que tu devrais créer une seule proc dans le classeur A qui appelerait les trois autres, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub RecupDonnees()
     
        Import
        Tri
        Export
     
    End Sub
    Ou mieux encore, mettre tes proc dans le classeur B et faire référence au classeur A avec une variable classeur. Enfin, c'est toi qui vois.

    Hervé.

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut
    Bonjour Hervé

    Merci pour ta réponse

    Quand je lance la Macro Workbook_Open() qui est dans le module du classeur B, seule la macro Import qui s'excute sur le classeur B

    J'ai vu que tu me proposes une autre méthode , c'est de mettre mes proc dans le classeur B et faire référence au classeur A avec une variable classeur.

    Es ce que tu peux me montrer stp je vois pas du tout comment le faire

    Merciiii

    Bonjour Soraphiroth,

    Merci pour tes réponses

    Dis moi stp ou je dois mettre la premiere macro que tu m'as donnée ? je suppose dans le classeur B ?

    Autre chose : il manque pas un End Sub pour cette Macro ?!!! et puis je la mets aussi ou cette macro ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Export(byval Fichier as string)
    ... 
            Set Wbk = Workbooks.Open(Filename:=Fichier)

    Je pense que la solution que tu me propose est aussi adapatée a mon besoin

    Mercii

  12. #12
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Points : 173
    Points
    173
    Par défaut
    Tout va dans le fichier A. L'intérêt de les mettre dans ce fichier et non B est de ne pas avoir à recopier la macro à chaque nouveau fichier B.

    Pour ta deuxième question, il ne s'agit pas d'une macro mais d'une légère modification de la tienne . Actuellement la tienne se présente sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Export()
        Dim Ligne As Long, Plage As Range
        Dim Wbk As Workbook, Sh1 As Worksheet, Sh2 As Worksheet, C As Range
        Dim Res As Long, Teste As Boolean
     
        With ThisWorkbook.Sheets("Feuil1")
            Ligne = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
            Set Plage = .Range(.[A4], .Cells(Ligne, 1))
     
            Set Wbk = Workbooks("Mon Fichier Final.xlsm")
        'et encore plein de trucs après...
    et pour fonctionner avec la mienne, elle devra ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Export(byval Fichier as string)
        Dim Ligne As Long, Plage As Range
        Dim Wbk As Workbook, Sh1 As Worksheet, Sh2 As Worksheet, C As Range
        Dim Res As Long, Teste As Boolean
     
        With ThisWorkbook.Sheets("Feuil1")
            Ligne = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
            Set Plage = .Range(.[A4], .Cells(Ligne, 1))
     
            Set Wbk = Workbooks.Open(Filename:=Fichier) 
        'et encore plein de trucs après...
    En faisant ainsi, ma macro va ouvrir une fenêtre de sélection de fichier comme celle-ci :

    ce qui te permettra de sélectionner ton fichier B et ainsi les macros s'éxécuteront dessus.
    Images attachées Images attachées  

Discussions similaires

  1. [XL-2010] Automatiser l'excution des Macros par ORDRE
    Par jérémyp8 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2013, 14h42
  2. Revenir sur la cellule sélectionné après exécution d'une macro
    Par Daniel-Gérald dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2007, 21h50
  3. [EXCEL] interrompre l'exécution d'une macro
    Par ustilago dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2006, 10h24
  4. [VBA-E]Exécution d'une macro en arrière-plan
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/04/2006, 23h13
  5. Allongement d'uin temps d'exécution d'une macro
    Par avanrill dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2006, 19h29

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