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 :

visual basic 2022 et Marshal.GetActiveObject("Excel.Application"), GetActiveObject qui est en erreur


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 16
    Par défaut visual basic 2022 et Marshal.GetActiveObject("Excel.Application"), GetActiveObject qui est en erreur
    Bonjour, j'ai plusieurs programmes que j'ai fait avec visual basic 2019 dans les quelles j'ouvre des fichiers excel avec la commande : Dim xlApp As Excel.Application = Marshal.GetActiveObject("Excel.Application"). Impossible de faire cela avec la version 2022 car : 'getactiveobject' ne fais plus partie de Marshall. J'ai cherché une solution sur plusieurs forum mais rien ne fonctionne pour moi. Est-ce encore possible d'ouvrir des fichiers excel avec visual basic version 2022? Si oui, est-ce que quelqu'un pourrait me donner la solution ou m'enligner sur quelque chose qui fonctionne.

    Merci!

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 015
    Par défaut
    Je pense que tu ne trouves rien parce que tu n'utilises pas les bon termes.
    Et cela parce que tu confonds tout, et notamment tu confonds Visual Basic (un langage) avec Visual Studio (un EDI).
    S'ajoute à cela une méconnaissance générale sur les différentes versions de .Net, notamment entre .Net Framework et .Net CORE.

    La dernière version de Visual Basic est la 19.6.
    La dernière version de Visual Studio est la version 2022 (17.14).

    Visual Studio 2019 créé les nouveaux projet en utilisant par défaut .Net Framework.
    Visual Studio 2022 créé les nouveaux projet en utilisant par défaut .Net CORE.

    .Net Framework est propre à la plateforme Windows et bénéficie d'objets permettant d'agir avec les API Windows.
    .Net CORE est voué à être multiplateforme et tout ce qui est propre à Windows uniquement est enlevé (tout en laissant quelques contournements).

    Je pense que tu as installé Visual Studio 2022 et créé un nouveau projet.
    Si tu ouvres un ancien projet (et que tu ne le migres pas en .Net CORE), tu n'as pas le problème.

    Donc, tu as deux solutions :
    - Soit créé ton projet en veillant à utiliser .Net Framework
    - Soit utiliser les API Windows nativement avec la DLL oleaut32.

    Non testé car écrit directement sur le forum.
    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
    using System;
    using System.Runtime.InteropServices;
     
    public static class NativeMethods
    {
        [DllImport("oleaut32.dll", PreserveSig = false)]
        public static extern void GetActiveObject([In] ref Guid rclsid, IntPtr reserved, [MarshalAs(UnmanagedType.IUnknown)] out object ppunk);
     
        public static object GetActiveObject(string progId)
        {
            Type comType = Type.GetTypeFromProgID(progId);
            Guid clsid = comType.GUID;
            GetActiveObject(ref clsid, IntPtr.Zero, out object obj);
            return obj;
        }
    }

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 588
    Par défaut
    bonjour,

    même chose que popo mais en VBA.net
    Code VB.NET : 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
     
    Imports System.Runtime.InteropServices
    public sub Test
    dim Xls as object = GetObject("Excel.Application")
    end sub 
     Public Function GetObject(ByVal App As String) As Object
            Try
                Return Marshal.GetActiveObject(App)
            Catch ex As Exception
                Return CreateObject(App)
            End Try
     
        End Function
     
        Public Function CreateObject(ByVal app As String) As Object
            Dim AppType As Object = Type.GetTypeFromProgID(app)
            Dim ApplInst As Object = Activator.CreateInstance(AppType)
            Return ApplInst
        End Function

  4. #4
    Membre actif
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 16
    Par défaut
    merci pour vos réponses, je vais regarder pour migrer mes programmes.

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

Discussions similaires

  1. [XL-2010] Connexion ADODB depuis Excel sur DB ACCDB qui est protégée
    Par Peall13 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/02/2017, 15h35
  2. Réponses: 0
    Dernier message: 05/07/2016, 17h43
  3. Réponses: 6
    Dernier message: 07/03/2015, 18h26
  4. Réponses: 14
    Dernier message: 22/04/2013, 23h28
  5. Dessiner une courbe en visual basic a partir d'une table excel
    Par jasmin_76 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/04/2009, 09h27

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