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 :

Problème ajout de plugin et version 32bits/64bits [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut Problème ajout de plugin et version 32bits/64bits
    Bonjour,

    Pour les besoins d'une macros, j'ai automatisé l'installation des outils d'analyse (Analysis Toolpack) de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Install_Tool_Pack()
        AddIns("Analysis ToolPak").Installed = True
        AddIns("Analysis ToolPak - VBA").Installed = True
    End Sub
    Problème: si je lance ma macro sous un Windows 32 bits, le chemin de la référence est :
    C:\Program Files\Microsoft Office\Office14\Library\Analysis
    Si je lance ma macro sous un Windows 64 bits, le chemin de la référence est :
    C:\Program Files (x86)\Microsoft Office\Office14\Library\Analysis

    Y aurait-il un moyen de rattacher la référence en prenant en compte la différence de l'architecture de l'OS?

    D'avance merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en passant par les constantes de compilations conditionnelles, ici WIN32/64 (y'en a d'autres comme VBA7 etc...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if Win64 then
       ' le chemin de l'OS 64
    #else
       ' le chemin de l'OS 32
    #end if

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Bonjour Joe,

    Ok. Merci pour la suggestion.
    du coup, j'essaie avec la commande Application.OperatingSystem mais celle ci me renvoie "Windows (32 bits) NT 6.01" alors que je suis sur une version 64 bits.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Bon, finalement, j'ai trouvé ce bout de code qui fonctionne (testé sur une machine 64 bits et une machine 32 bits) (source):

    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
    Private Declare Function GetProcAddress Lib "kernel32" _
        (ByVal hModule As Long, _
        ByVal lpProcName As String) As Long
     
    Private Declare Function GetModuleHandle Lib "kernel32" _
        Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long '()
     
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
     
    Private Declare Function IsWow64Process Lib "kernel32" _
        (ByVal hProcess As Long, ByRef Wow64Process As Long) As Long
     
    Sub CheckWhetherIts64()
     
        Dim Its64 As Long
        Dim handle As Long
     
        handle = GetProcAddress(GetModuleHandle("kernel32"), _
                       "IsWow64Process")
     
        If handle > 0 Then ' IsWow64Process function exists
            ' Now use the function to determine if
            ' we are running under Wow64
     
            IsWow64Process GetCurrentProcess(), Its64
        End If
        If Its64 = 1 Then
            MsgBox "it's a 64 bit process."
        End If
    End Sub

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    En revanche, impossible de coder quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddIns("C:\Program Files (x86)\Microsoft Office\Office14\Library\Analysis\ATPVBAEN.XLAM").Installed = True
    Des idées pour préciser le répertoire dans lequel chercher les références?

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    C'est quand même plus compliqué que ce que j'ai proposé

    et tu vas te retrouver avec un nouveau problème sous les bras : utilisation Office 32/64 bits où il faudra gérer les déclarations d'API en structure conditionnelle

    là encore, un petit #If VBA7 répond à la problématique


    mais, si ça marche et te convient, tu peux clôturer la discussion

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Bon, finalement, voici le code final:

    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
    Sub Install_Tool_Pack()
    Dim Its64 As Long
    Dim handle As Long
     
    handle = GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process")
     
    If handle > 0 Then
        IsWow64Process GetCurrentProcess(), Its64
    End If
     
    If Its64 = 1 Then
        AddIns("Analysis ToolPak").Installed = False
        Set myAddIn = AddIns.Add(Filename:="C:\Program Files (x86)\Microsoft Office\Office14\Library\Analysis\ATPVBAEN.XLAM")
        AddIns("Analysis ToolPak").Installed = True
     
        AddIns("Analysis ToolPak - VBA").Installed = False
        Set myAddIn = AddIns.Add(Filename:="C:\Program Files (x86)\Microsoft Office\Office14\Library\Analysis\ANALYS32.XLL")
        AddIns("Analysis ToolPak - VBA").Installed = True
     
    Else
        AddIns("Analysis ToolPak").Installed = False
        Set myAddIn = AddIns.Add(Filename:="C:\Program Files\Microsoft Office\Office14\Library\Analysis\ATPVBAEN.XLAM")
        AddIns("Analysis ToolPak").Installed = True
     
        AddIns("Analysis ToolPak - VBA").Installed = False
        Set myAddIn = AddIns.Add(Filename:="C:\Program Files\Microsoft Office\Office14\Library\Analysis\ANALYS32.XLL")
        AddIns("Analysis ToolPak - VBA").Installed = True
     
    End If
     
    End Sub
    Je n'ai effectivement pas pris en compte la problématique "version d'office". Je pars du principe (en espérant que ce ne soit pas à tort) que celle-ci est la même partout.

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

Discussions similaires

  1. [XL-2016] Compatibilité (de la Version 32bits x86 à la version 64bits x64)
    Par Ghost0000 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/03/2016, 11h48
  2. [XL-2003] Problème de compatibilité 32bits-64bits
    Par mathspountz dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/06/2014, 16h33
  3. [10g] Problème ODBC 32bits/64bits
    Par Icchi dans le forum Connexions aux bases de données
    Réponses: 1
    Dernier message: 29/07/2013, 13h41
  4. [RCP] Problème lors d'ajout de plugin
    Par zozeph dans le forum Eclipse Platform
    Réponses: 6
    Dernier message: 19/04/2010, 00h58
  5. [PMD] [Maven] Problème avec le plugin en version 3.7
    Par sollda dans le forum Qualimétrie
    Réponses: 1
    Dernier message: 26/11/2006, 21h57

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