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

Excel Discussion :

Agir sur plusieurs instances en même temps


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Agir sur plusieurs instances en même temps
    Bonjour,

    J'aimerai savoir comment via vba ou via un batch on peut agir sur plusieurs instances excel simultanément.

    Je m'explique:

    J'ai plusieurs feuilles de calculs ouvertes, chaqu'une dans une instance excel différente.
    Pour chaque feuille, je dois lancer une macro, en appuyant sur un boutton.
    Manuellement c'est possible, une fois mes feuilles ouvertes, je "navigue" d'une feuille à l'autre pour cliquer sur le boutton.
    Cela me permet d'avoir mes macro finies presque en meme temps.

    J'aimerai donc automatiser cette requête,

    Merci

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour et bienvenue au forum
    S'agit-il de lancer une même macro sur plusieurs feuilles de plusieurs classeurs?
    Imaginons la procédure simple suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub toto(nomClasseur As String, nomFeuille As String)
        Workbooks(nomClasseur).Sheets(nomFeuille).Range("A1").Value = "toto"
    End Sub
    En appelant la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test
        Call toto("monClasseur", "maFeuille")
    End Sub
    J'écris toto dans la cellule A1 du de la feuille maFeuille du classeur monClasseur. S'il y a plusieurs classeurs et plusieurs feuilles, il faut appeler toto autant de fois qu'il y a de feuilles.
    Peut-être peux-tu nous donner ton code pour que nous puissions mieux t'aider.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 35
    Points : 55
    Points
    55
    Par défaut VBS
    Bonjour,

    Je vous propose de passer par VBA + VBS :

    Un fichier Excel avec du code VBA permettra de lancer plusieurs scripts VBS qui vont à leurs tour lancer une nouvelle instance d'Excel, ouvrir le fichier et lancer le code à exécuter.

    Tout d'abord le script VBS :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    Dim Args
    Set Args = WScript.Arguments
     
    If Args.Count < 2 Then
    	Call MsgBox("Not Enough Arguments")
    	Call WScript.Quit
    End If
     
    Dim FileName
    FileName = Args(0)
     
    Dim MacroName
    MacroName = Args(1)
     
    Dim HasArguments
    If Args.Count = 3 Then
    	HasArguments = True
    	Dim MacroArgument
    	MacroArgument = Args(2)
    Else
    	HasArguments = False
    End If
     
    Dim XlApp
    Set XlApp = CreateObject("Excel.Application")
    XlApp.Visible = True
     
    Dim Wb
    Set Wb = XlApp.Workbooks.Open(FileName, , True) 'ReadOnly
     
    If HasArguments Then
    	Call XlApp.Run(MacroName,Cstr(MacroArgument))
    Else
    	Call XlApp.Run(MacroName)
    End If
     
    'Si fermeture nécessaire une fois le code terminé
    'Wb.Close
    'XlApp.Quit
     
    Set Wb = Nothing
    Set XlApp = Nothing
    Ensuite, le code VBA :

    Le module permettant de lancer les script :
    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
    34
    35
    Option Explicit
     
    Public Sub Sample()
     
        Dim FileName As String
        FileName = ThisWorkbook.FullName
        'Supposons qu'il s'agisse du même fichier
     
        Dim NbRun As Long
        NbRun = 10
     
        Dim i As Long
        For i = 1 To NbRun
            Dim cmd As String
            cmd = GetCommand(ThisWorkbook.Path & "\Run Excel File.vbs", FileName, "Sample.Message", "Hello " & i)
            Call Shell(cmd, vbHide)
        Next
     
    End Sub
     
    Private Function GetCommand(ScriptFile As String, ParamArray Args() As Variant) As String
     
        Const DblQuot = """"
     
        Dim Result As String
        Result = "cscript " & DblQuot & ScriptFile & DblQuot
     
        Dim i As Long
        For i = 0 To UBound(Args)
            Result = Result & " " & DblQuot & Args(i) & DblQuot
        Next
     
        GetCommand = Result
     
    End Function
    Et enfin le module "Sample" qui contient la fonction à faire exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Public Sub Message(msg As String)
     
        Call MsgBox(msg)
     
    End Sub
    Et voilà un aperçu du résultat :
    Nom : 2017-04-23 18_40_41-C__Users_Famille VAZEUX_Desktop_Run Excel File.vbs - Notepad++.png
Affichages : 347
Taille : 20,9 Ko

    @+
    Power Tree - Complément Excel
    www.xl-powertree.com
    Analysez et consolidez vos tableaux Excel

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour araigné

    Je te remercie pour la réponse,
    Je pense que cela va beaucoup m'aider.

    Je voudrai juste lancer la macro que tu m'as envoyé pour comprendre le déroulement,
    le fichier vbs se nomme bien File.vbs?

    Car quand je lance la macro tel qu'il est, rien ne se passe.

    Merci encore

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 35
    Points : 55
    Points
    55
    Par défaut
    Bonjour,
    Le fichier s'appelle "Run Excel File.vbs" dans l'exemple. Il ne faut pas hésiter à changer son nom.

    @+
    Power Tree - Complément Excel
    www.xl-powertree.com
    Analysez et consolidez vos tableaux Excel

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour ton retour,

    J'essaye de comprendre, j'ai renommé le vbscript Run Excel File.vbs
    Il n'y a que la première itération de la boucle i = 1 to NBRun qui tourne,
    Une fois cette boucle finie, et la fonction GetCommand appelée, le "vbHide" fait que la page Excel se ferme.

    Je ne vois ni appel du script ni MsgBox.

    Pourrais tu m'expliquer pourquoi.

    On est d'accord que le nom du classeur n'importe pas étant donné que FileName=ThisWorbook.FullName

    Merci

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour !

    Citation Envoyé par mlbmlb Voir le message
    J'ai plusieurs feuilles de calculs ouvertes, chaqu'une dans une instance excel différente.
    Quelle horreur ‼   Vade Retro Satanas !     Y-a-t-il un quelconque intérêt ?

    A part gâcher inutilement des ressources, ralentir le système voir carrément risquer un sévère plantage et une perte de données …

    Faut-il encore rappeler Excel chargeant tout en mémoire, programme et données
    et comme ici c'est le forum dédié aux formules de calculs, pas celui dédié au code VBA …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 35
    Points : 55
    Points
    55
    Par défaut
    Bonjour mlbmlb,

    Avant d'utiliser l'instruction :
    Il conviens d'enregistrer le classeur sur le disque dur.

    Le "vbHide" n'est là que pour indiquer le "style" de fenêtre dans laquelle l'instruction Shell doit lancer le programme, doc msdn ici.

    Bonjour Marc-L,

    Le seul intérêt que j'y vois est d’exécuter du programme vba/Excel en asynchrone, ce qui peut valoir le coup pour des gros calculs

    @+
    Power Tree - Complément Excel
    www.xl-powertree.com
    Analysez et consolidez vos tableaux Excel

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Tant que cela ne plante pas le système et tant qu'il y a des sauvegardes …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Bonjour Mar L
    Bonjour Mar L

    Je ne comprend pas pourquoi dans mon cas WScript.count est inférieur à 2
    Car quand je clique sur le batch le message d'erreur "Not Enough Argument" apparait

    Merci Beaucoup

  11. #11
    Membre émérite

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Points : 2 523
    Points
    2 523
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour !
    Quelle horreur ‼   Vade Retro Satanas !     Y-a-t-il un quelconque intérêt ?

    A part gâcher inutilement des ressources, ralentir le système voir carrément risquer un sévère plantage et une perte de données …
    Hélas certains programme exporte des données dans Excel ( ce c.. d'excel ouvre une instance à chaque fois ) j'ai eu le cas à résoudre pour un soft propriétaire de machine à mesurer 3D et bien malgré l'aide du forum, j'ai rien put résoudre impossible de seulement fermer et enregistrer autrement qu'a la main ( dire si je suis le sujet avec attention )

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Quand c'est mal codé, c'est mal codé !

    Car il n'est pas difficile d'utiliser l'instance déjà ouverte
    ou, à la rigueur, d'en ouvrir une temporaire puis la fermer après un traitement particulier …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/01/2009, 12h29
  2. Appliquer PageSetup sur plusieurs feuilles en même temps
    Par sl.info dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/10/2007, 14h22
  3. Recherche sur plusieurs tables en même temps
    Par Zouzou1er dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/10/2007, 09h40
  4. Réponses: 3
    Dernier message: 17/07/2007, 09h44
  5. Réponses: 2
    Dernier message: 19/07/2006, 19h45

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