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 :

Traitement dans plusieurs instances en simultané [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut Traitement dans plusieurs instances en simultané
    Bonjour

    J'ai une macro qui ouvre plusieurs classeurs dans autant d'instances. Par contre, je ne sais pas lancer automatiquement la macro qu'ils contiennent. Si je la lance avec le Workbook_Open, les classeurs s'exécutent en séquence. Je mets ci-dessous mon 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
    Sub test()
      Dim EXLAPP(25) As Object, Chemin As String, Alpha As String, Lettre As String
      If Left(Application.UserName, 6) = "Daniel" Then
          Chemin = "d:\Users\dcola\Documents\Donnees\Daniel\mpfe\Jean-Claude Cholet\"
      Else
          Chemin = "c:\Mes matchs\"
      End If
      Alpha = "abcdefghijklmnopqrstuvwxyz"
      For i = 0 To 25
        Lettre = UCase(Mid(Alpha, i + 1, 1))
        Set EXLAPP(i) = CreateObject("Excel.Application")
        EXLAPP(i).Visible = True
        EXLAPP(i).Workbooks.Open Chemin & "Liste des doublons_" & Lettre & ".xlsm"
      Next i
    End Sub
    Par avance, merci pour vos suggestions.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re Bonjour daniel
    je supose que tu veux lancer une macro qui se trouve dans un modiule respectif de chaque classeur

    etant donné que pour executer une macro on fait application.run ("nom macro")
    je supose que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXLAPP(i).run( "nom de la macro")
    doit fonctionner
    a tester j'en suis pas sur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour et merci pour ta réponse.

    Ca ne fonctionne pas. J'ai remplacé ta ligne par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set Wbk = EXLAPP(i).Workbooks.Open(Chemin & "Liste des doublons_" & Lettre & ".xlsm")
        EXLAPP(i).Run ("'" & Wbk.Name & "'!test")
    La macro s'exécute bien une première fois dans la nouvelle instance mais le code initial n'ouvre pas de nouvelle instance. Il continue à mouliner et quand la macro lancée s'achève, il continue à tourner en affichant périodiquement le message :

    Nom : Capture.PNG
Affichages : 495
Taille : 8,8 Ko

    A moins que tu aies une idée, je pense que je vais laisser tomber.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    non je n'ai pas d'aure idée

    peut etre réactiver l'instance initiale pour qu'elle puisse lancer les autre instances
    ajouter un doevents pour tout les window aussi pas un doevents simple
    de facon a ce que chaques instance est le temps de faire leur job
    je regarderais ca des que j'ai un moment, j'ai tellement de projets ouverts je veux pas trop me dispercer

    a moins de passer par un vbs dynamique (passe la main)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    De toute façon merci.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re j'ai pris 10 minutes pour tester su 5 fichier "fichier(A B C D E )"
    a l'ancienne avec un vbs dynamique ca fonctionne
    dans le classeur maitre j'ai mis ce 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
    Sub demarre()
        Dim code$, Scripts$, fichier$, x&, i, vbs$
        'code = code & "msgbox wscript.arguments(0)" & vbCrLf
        code = code & "Set oExcel = CreateObject(""Excel.Application"")" & vbCrLf
        code = code & "oExcel.Visible = True" & vbCrLf
        code = code & "oExcel.workbooks.open(wscript.arguments(0))" & vbCrLf
        code = code & "oExcel.run(""test"")" & vbCrLf
     
        vbs = ThisWorkbook.Path & "\creator.vbs"
        x = FreeFile: Open vbs For Output As #x: Print #x, code: Close #x
        Scripts = """" & vbs & """ "
        With CreateObject("WScript.Shell")
            sufixe = "ABCDE"
            For i = 1 To Len(sufixe)
                nom = ThisWorkbook.Path & "\" & "fichier" & Mid(sufixe, i, 1) & ".xlsm"
                .Run Scripts & nom  
            Next
        End With
    End Sub
    dans chaques fichiers "fichierA,fichierB,etc... j'ai mis cette toute petite sub pour tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [Sub test()
    Application.DisplayAlerts = False
    Sheets(1).Cells(1, 1) = "fait"
    ThisWorkbook.Save
    Application.Quit
    End Sub
    voila la sub demarre va créer le vbs et lancer autant d'instances du vbs que de lettre dans sufixe

    tout mes fichiers ont " fait" dans A1 j'ai bien verifié
    autrement dit tout a fonctionner

    voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

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