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

VB.NET Discussion :

Trier multiple instance Excel


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut Trier multiple instance Excel
    Bonjour,

    Je voudrais lister dans une combobox l'ensemble des instances ouvertes d'Excel sur une machine, et lorsque l'utilisateur en choisi une, que cette instance soit utilisée pour la suite du programme.

    J'arrive à lister les instances d'excel avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Diagnostics.Process.GetProcessesByName("excel")
    mais cela me donne des "processus", pas des "applications" (comme avec GetObject ou CreateObject)
    Aussi, je ne parviens pas à retrouver l'objet "Application" nécessaire pour manipuler le processus.

    D'où ma question, comment retrouver l'application qui pilote un processus, ou plus généralement quel est le lien entre application et processus?

    J'ai bien trouvé le PID ou même des propriétés en communes entre les deux mais je ne vois pas comment passer de l'un à l'autre.

    Merci de vos suggestions,
    Zebrette

  2. #2
    Membre éclairé Avatar de Chapeau_Bas
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Par défaut
    Bonjour,

    Je ne suis pas sur d'avoir compris ta question, mais je te suggère deux codes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProcessAll(i).MainWindowTitle
    Te permet de récupérer le nom window de ta fenêtre. (Précisément la légende de la fenêtre principale du processus.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     AppActivate(ProcessAll(i).id)
    Te permet de mettre en avant une application par son id de processus.

    Après pour naviguer sur les feuilles d'excel, il existe d'autres moyens en Dotnet.
    Tu peux créer dynamiquement ton classeur, tes feuilles... ou utilisés des existantes.

    Bon courage.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut
    Salut,

    merci de ta réponse.
    En fait je pense que la solution doit te paraitre tellement évidente que... tu ne la donne pas , ou alors je comprends rien:

    Trouver les processus Excel: OK
    Seletionner un processus: OK
    recuperer sont ID: OK
    activer la fenetre (AppActivate): OK
    manipuler le processus: ?

    quand je fais GetObject("","Excel.Application") je récupère un objet de type Application et la j'arrive à faire a peut près tout ce que je veux dans Excel; Mais je récupère toujours le 1er Excel ouvert, s'il y a plusieurs instances, je ne peut pas choisir celle que je veux.

    Avec les processus, je peux voir toutes les instances, mais je ne peut pas récupérer l'application associée, je ne vois donc pas comment manipuler les workbook, worksheet etc...


    Je ne sais pas si je suis plus clair?
    -Zebrette

  4. #4
    Membre éclairé Avatar de Chapeau_Bas
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim xl As Excel.Application          
     
    xl = New Excel.Application
    xl = CreateObject("Ton appli récupérée") 'Ou dans ton cas GetObject
     
    'Crée un classeur par exemple
    xl.Workbooks.Add()
    'Sélectionne la première feuille
    xl.Sheets(1).Select()
    Ou alors sa directement par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xl.Workbooks.Item(1).Sheets(1).select()
    Voila un exemple de manipulation de workbook et worksheet.
    En espérant que sa puisse t'aider.

    Ps:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports Excel = Microsoft.Office.Interop.Excel

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Par défaut
    Tout ca je comprend bien. et ca marche.
    Mais si j'ai deux Excel d'ouvert, je n'arrrive pas à selectionner le 2em, pas deux classeurs dans le meme Excel, 2 Excel.

    CreateObject: créer un nouveau excel (mais je veux utiliser les existants)
    GetObject: me donne le premier ouvert

    Je cherche un equivalent de GetObject qui me permettrait de récupérer la deuxième troisième ou nème instance ouverte. (voir png)
    Images attachées Images attachées  

  6. #6
    Membre éclairé Avatar de Chapeau_Bas
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Par défaut
    Vous pouvez joindre à une instance spécifique si vous connaissez le nom d'un document ouvert dans cette instance. Par exemple, si une instance d'Excel s'exécute avec un classeur ouvert nommé Book2, le code suivant attache avec succès à cette instance même si elle n'est pas l'instance première qui a été lancé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set xlApp = GetObject("Book2").Application
    Source :http://support.microsoft.com/kb/288902

    Tu peux récupérer le nom de ton classeur par les propriétés du processus. Donc théoriquement sa devrais résoudre ton problème.

    Voila, en espérant que cette fois, j'ai bien compris ta question...

Discussions similaires

  1. Trier une table excel
    Par you_techni dans le forum Excel
    Réponses: 6
    Dernier message: 04/08/2006, 17h03
  2. [C++] DLL Multiples instances
    Par ouquoi dans le forum C++
    Réponses: 2
    Dernier message: 18/07/2006, 16h25
  3. trier une feuille excel en VBscript
    Par gritche dans le forum VBScript
    Réponses: 1
    Dernier message: 07/07/2006, 09h33
  4. [vb6] Soucis avec une instance excel
    Par Little-Freud dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 24/04/2006, 16h08
  5. [VBA-E]Relancer une instance excel : shellexecute ?
    Par boosty dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 14/02/2006, 09h49

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