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 :

Ouvrir une instance avec la version Excel de son choix [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Responsable Logistique Internationale
    Inscrit en
    Juin 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Logistique Internationale
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2013
    Messages : 7
    Par défaut Ouvrir une instance avec la version Excel de son choix
    Bonjour à tous,
    Beaucoup de cas similaires, mais pas de solution concrète à mon problème, donc je me permets d'ouvrir une discussion.
    Voilà, j'ai créé un fichier excel 2010 (14.0) avec des macros qui ouvrent différentes instances pour travailler en parallèle sur d'autre fichier xlsx. No problemo,
    Sauf que j'ai trois collaborateurs qui ont besoin de conserver une version Excel 2003 (11.0) pour un logiciel spécifique sur leur poste.
    Et pour ces personnes, lorsque que l'on utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim Oapp as new excel.application
    L'instance s'ouvre automatiquement sur la version 2003.
    Et fait planter la macro car le workbook à ouvrir utilise des fonctions 2010 incompatibles avec 2003.

    Ainsi, j'espère que vous comprendrez ma question : comment faire pour forcer Excel à ouvrir une instance sous la version de son choix?

    Merci d'avance pour votre aide, ce couac met tout mon projet en porte-à-faux...

    PeacBee

  2. #2
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Salut,
    Est ce que cela se produit aussi si une instance de 2010 est déjà ouverte?

    Tu peux vérifier la version de Excel avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Val(Application.Version)< 12 Then exit sub
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Peut être une piste avec le code suivant dans lequel il faudra adapter le chemin.
    J'ai 2003 et 2007, j'ouvre les 2 versions dans des instances différentes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub aa()
    Dim RetVal
    '2007
    RetVal = Shell("C:\Program Files\Microsoft Office\Office12\EXCEL.EXE", 1)
    '2003
    RetVal = Shell("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE", 1)
    End Sub

  4. #4
    Membre du Club
    Homme Profil pro
    Responsable Logistique Internationale
    Inscrit en
    Juin 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Logistique Internationale
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2013
    Messages : 7
    Par défaut
    Merci pour vos réponses!
    Oliv-
    Oui, cela se produit en fait dès que Excel 2003 est installé sur le poste.
    Concrètement j'ai besoin d'indiquer à Excel d'ouvrir une "new excel(14.0).application"...

    Aussi, PMO2017, la fonction Shell semble plus intéressante mais cela implique que tous les utilisateurs aient la même installation (à vérif).
    Par contre avec Shell, comment je peux travailler sur cette instance?
    D'habitude on dim l'application, puis le workbook, puis la sheet... Là je coince, mais bon, il ne m'en faut pas beaucoup ^^.

    Au plaisir de vous lire!

  5. #5
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    essaye avec cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set Oapp = CreateObject("excel.application.14")
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  6. #6
    Membre du Club
    Homme Profil pro
    Responsable Logistique Internationale
    Inscrit en
    Juin 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Logistique Internationale
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2013
    Messages : 7
    Par défaut
    Oliv-
    set oapp = createobject("Excel.application.14")
    Ne fonctionne pas, du moins, il ouvre toujours une version 11.0 et en plus
    oapp.quit
    ne fonctionne pas (je pense que c'est juste une conséquence de 11.0)...
    N'est-il pas possible de récupérer une application ouverte via shell da&ns une variable type excel.application?

    Merci encore,

    PeaceBee

  7. #7
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    si c'est la seule instance d'excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set myapp= getobject(,"excel.application")
    peut être que là ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set myapp= getobject(,"excel.application.14")
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  8. #8
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    en complément,

    tu fais un getobject...
    tu testes si version >=14
    SI KO tu fermes cette instances (tu peux vérifier avant le nombre de fichiers ouverts)
    et tu refais un getobject jusqu'à ce que ce soit un excel >=14
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  9. #9
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,
    Je ne saisis pas bien ta question, j’ai sur mes micros Excel 2003, 2007, 2010 et 2013, si à partir de 2010 par exemple je lance un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim apExc As New Excel.Application
    C’est automatiquement une instance 2013 qui est créée. J’obtiens le même comportement si je lance le code à partir de 2003.


    J’ai l’impression que la version de l’instance créée obéit aux mêmes règles que l’ouverture d’Excel via le double clic sur un fichier quand aucune instance n’est ouverte*.

    Donc testes sur les postes en questions, si quand tu ouvres, sans avoir d’Excel ouvert*, un fichier .xls par double-clic, il s’ouvre sous 2003 au lieu de 2010 (les 2 étant présent), c’est qu’il y un souci dans l’installation (sauf si c’est voulu)… ou qu’il y a eu une maj Office récente qui met le zinzin comme je l’avais signalé dans un billet sur Viadeo :

    Didier GONARD
    Formateur Microsoft Excel, Word, PPT, Outlook et VBA Excel - développeur VBA
    Nantes, France
    Bonjour,

    Ayant sur un micro Office 2003, 2007, 2010 et 2013 d’installés et cohabitants sous W7
    , lors des récentes mise à jour, le lancement par double clic sur un fichier a été réinitialisé sous 2003 pour Excel (d’habitude avec 2003, 2007 ou 2010 c’était toujours la dernière).
    Sur mon autre micro, sous W7, aussi qui ne possède pas 2013, c’est toujours 2010 qui est resté actif par défaut.

    A savoir, pour rétablir le lancement par défaut sous la version voulue, il suffit d’employer la fonction Réparer dont l’accès, bien sûr, est fonction de la version, je vous livre donc les liens utiles.

    2013, 2010 - http://office.microsoft.com/fr-fr/excel-help/re...
    2007 - http://office.microsoft.com/fr-fr/excel-help/qu...
    2003 - http://office.microsoft.com/fr-fr/excel-help/re...

    Pour les formateurs qui ont plusieurs versions cohabitantes (sans virtualisation), cette notion peut être très utile, si vous avez une session sous 2003 par exemple (très courant encore), en préparant votre micro via réparer, les fichiers ouverts par double clic le seront dans la version voulue… (on rétablit si besoin ensuite).

    A noter sinon que l’option «ouvrir avec» ne semble pas efficace pour ce cas de figure.

    Je poste sur ce groupe, car si la modification concernée se fait au niveau d’Office, les comportements résultants sous Excel ou Word peuvent ne pas être identiques.

    Bien cordialement,

    Didier Gonard
    Si c’est le cas, utilise la fonction réparer sur la version d’office la plus récente (cf le billet), ce qui devrait conduire à la création d’instance via VBA automatiquement sous cette version et solutionner ton problème sans plus de complications.

    cordialement,

    Didier

    *sinon les comportements d’ouverture / double-clic différent.

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Testez le code suivant en adaptant les constantes et version signalées par des ###
    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
    '### Constantes à adapter ###
    Const CHEMIN_2007 As String = "C:\Program Files\Microsoft Office\Office12\Excel.exe"
    Const CHEMIN_2003 As String = "C:\Program Files\Microsoft Office\Office11\Excel.exe"
    '############################
     
    Sub ForcerVersionExcel_PeaceBee()
    '### Adapter : param1 le chemin, param2 le n° de version ###
    Call OpenVersionExcel_PeaceBee(CHEMIN_2007, 12)
    End Sub
     
    Sub OpenVersionExcel_PeaceBee(Chemin As String, Version As Long)
    Dim WSH As Object  'IWshRuntimeLibrary.WshShell
    Dim AppXl As Excel.Application
    Dim WB As Workbook
    Dim A$
    Dim Msg$
    Dim ret&
    Dim Passe%
    '---
    A$ = Chr(34) & Chemin & Chr(34) & "/automation -Embedding"
    '---
    Set WSH = CreateObject("WScript.Shell")
    Do  'on passe plusieurs fois pour bien faire comprendre ce qu'on veut
      ret& = WSH.Run(Command:=A$, WindowStyle:=1, WaitOnReturn:=False)
      Set AppXl = CreateObject("excel.application")
      Passe% = Passe% + 1
      Msg$ = Msg$ & "Passe n°" & Passe% & Space(5) & "version : " & AppXl.Version & vbCrLf 'pour visualiser le nombre de passe (à virer)
      If AppXl.Version = Version Then
        Exit Do
      Else
        AppXl.Quit
        Set AppXl = Nothing
      End If
    Loop Until Passe% > 10   'on limite la boucle à 10 passages
    MsgBox Msg$   'pour visualiser le nombre de passe (à virer)
    '---
    Set WB = AppXl.Workbooks.Add
    AppXl.Visible = True
    Set WSH = Nothing
    End Sub
    Si cela fonctionne, il faudra s'occuper de fermer certains process Excel fantômes. Tenez moi au courant.

  11. #11
    Membre du Club
    Homme Profil pro
    Responsable Logistique Internationale
    Inscrit en
    Juin 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Logistique Internationale
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2013
    Messages : 7
    Par défaut
    Désolé du retard, je reviens d'un épuisant voyage et vous réponds avant de dormir!
    Merci à tous pour vos réponses mais même si les liens du billet de Didier ne fonctionnent pas, l'option modifier/réparer l'installation d'Office 2010 (via panneau de config.) fonctionne puisque je n'ai plus ce problème sur mon poste.
    Didier à résolu mon affaire mais je m'aperçois que j'ai mal intitulé mon fil du coup.
    Je classe la discussion comme résolue car je suppose qu'il y a une récompense à la clé, mais il serait préférable qu'un habitué reclasse cette discussion si la dernière solution via un code VBA de PMO2017 fonctionne pour "ouvrir la version excel de son choix via VBA".
    Merci pour votre efficacité, cela donne tout son sens au projet de ce site!

    Peace Bee

  12. #12
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    salut,
    voici ma proposition encodée
    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
    Option Explicit
     
    Sub GETExcel2010()
        Dim xlapp As Object
        Dim cmdExcel As String
        Const maVersion As Integer = 14
        On Error Resume Next
     
        Do
            Set xlapp = GetObject(, "excel.application")
     
            If xlapp Is Nothing Then
                cmdExcel = pathExcel(maVersion) + "excel.exe"
                Shell cmdExcel, vbMinimizedNoFocus
                DoEvents
                Set xlapp = GetObject(, "excel.application")
                If xlapp Is Nothing Then Set xlapp = CreateObject("excel.application")
            End If
            If Val(xlapp.version) <> maVersion Then
                xlapp.Quit
                Set xlapp = Nothing
            End If
        Loop Until Not xlapp Is Nothing
        MsgBox xlapp.version, , "Excel"
     
        ' xlapp.Quit
        Set xlapp = Nothing
    End Sub
     
     
     
    Function pathExcel(version As Integer)
        Dim objWSH As Object
        Set objWSH = CreateObject("WScript.Shell")
        pathExcel = objWSH.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\" + CStr(version) + ".0\Common\InstallRoot\Path")
    End Function
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

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

Discussions similaires

  1. Demarrer une instance avec ISQLPLUS (Oracle 10g)
    Par jpouil dans le forum Oracle
    Réponses: 3
    Dernier message: 22/03/2006, 06h09
  2. [Débutant] Créer une instance avec le nom d'une classe
    Par Quetzalcoatl dans le forum Langage
    Réponses: 7
    Dernier message: 23/01/2006, 20h43
  3. Ouvrir une image avec paint depuis un formulaire
    Par gui38 dans le forum Access
    Réponses: 3
    Dernier message: 14/11/2005, 16h40
  4. ouvrir une popup avec php
    Par Defrancesco dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/10/2005, 10h34
  5. [Eclipse 3.1] ouvrir une fenetre avec un bouton
    Par Nanoulov dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 01/08/2005, 13h33

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