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

VBA Discussion :

Référence au répertoire office


Sujet :

VBA

  1. #1
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut Référence au répertoire office
    Bonjour,

    Dans une appli msproject (mais cela peut être le cas dans toute autre appli office), je souhaite permettre l'ouverture automatique d'une présentation powerpoint en cliquant sur le bouton d'un userform.

    Le problème est le suivant :
    Mon code doit pouvoir tourner sur des applis office32 (project 2007, office 2007) et office 64 (project 2010, office 2010).

    Après analyse, j'ai étudié plusieurs possibilités :

    • utilisation de la commande shell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell("C:\Program Files\Microsoft Office\Office14\POWERPNT.EXE", 1)
    Mais je dois connaitre la version d'office que possède l'utilisateur, et surtout, l'emplacement de l'exécutable.
    Bon, je me dis que en passant par les variables d'environnement, on devrait peut-être trouver l'emplacement du répertoire.
    en fouillant un peu, je crois avoir trouvé mon bonheur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EnvString = Environ("ProgramFiles")
    EnvString = Environ("ProgramW6432")
    Mais cela ne me donne que l'adresse des répertoires programme, et non ceux de Office.
    si je dois faire une recherche à partir des sous-répertoire, ça va être très long ...


    • utilisation de l'automation :

    On utilise les fonctions natives de Powerpoint

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim docpres As String
    Dim pptApp As PowerPoint.Application
     
    docpres = "<emplacement de mon fichier pptx>"
     Set pptApp = New PowerPoint.Application
    pptApp.Presentations.Open docpres
     pptApp.Visible = True
    le problème, c'est qu'il faut ajouter la référence à la librairie objet de powerpoint. et je souhaiterais que les utilisateurs n'aient pas à le faire manuellement.
    J'ai vu qu'il y avit 2méthodes possibles :
    AddFromFile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    References.AddFromFile("<ma bibliothèque .OLB> ")
    mais là, je me retrouve avec le même problème que ci-dessus
    AddFromGuid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.VBE.ActiveVBProject.References.AddFromGuid("{Référence au .olb}", 5, 0)
    Mais comment l'identifier ?

    Pour moi, la solution serait de connaitre l'adresse complète du répertoire office actif. Etant donnée que nous sommes dans un environnement Microsoft, je pense qu'il doit exister un objet dédié. mais lequel ?

    Merci d'avance pour vos réponses éclairées

  2. #2
    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 674
    Points
    18 674
    Par défaut
    Bonjour,

    je ne suis pas sûr de bien avoir tout suivi mais as-tu testé Application.Path ? …

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Test la solution de l'API ShellExecute : http://access.developpez.com/faq/?pa...n#shellexecute

    Je n'utilise qu'elle et donc aucun soucis.

    Philippe

  4. #4
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Super ! ça marche (presque...) bien

    Quand je veux refermer la fenêtre de mon fichier powerpoint, l'affichage de la fenêtre en mode normal fonctionne en dégradé. je ne peut pas redimensionner la fenêtre ni utiliser les icônes en haut à droite; je dois utiliser Ctlr+F4 pour pouvoir sortir.

    Je pense que c'est du à un problème de compatibilité dans l'API.
    En effet, le cas se présente alors que suis sous project 2007 (dons en 32bit) et qu j'ouvre un fichier .pptx sous powerpoint 2010 (en 64 bits)

    Voila ce que j'ai codé, en m'aidant du tuto de arkham46.

    dans la partie déclarative

    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
    ' Définition du type de données par défaut
    '   pour les variables commançant par Z
    #If VBA7 Then
        DefLngPtr Z
    #Else
        DefLng Z
    #End If
    'ouverture des fichiers externes sans connaître le nom de l'application associée
     
    #If VBA7 Then
        Public Declare ptrsafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
               (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
                ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Longptr
     
        public Declare ptrsafe Function GetDesktopWindow Lib "user32" () As Longptr
     
     
    #Else
     
        Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                                             (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
                                              ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
        Public Declare Function GetDesktopWindow Lib "user32" () As Long
     
    #End If
     
     
    Const SW_SHOWNORMAL = 1
    dans le programme en lui-même :
    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
    Function StartDoc(DocName As String) As Long
        Dim r As Long, msg As String
        Dim zScr_hDC
     
        DocName = "C:\Users\JDS\Documents\30 - kit projet DT\10 - documents de reference\4.000-Processus Gestion avancement projet_nouvelles_macros_v4.0.pptx"
        zScr_hDC = GetDesktopWindow()
     
        r = ShellExecute(zScr_hDC, "Open", DocName, _
                         "", "C:\", SW_SHOWNORMAL)
        If r <= 32 Then
            'There was an error
            Select Case r
            Case SE_ERR_FNF
    ....
            Case Else
                msg = "Unknown error"
            End Select
     
            MsgBox msg
        End If
        StartDoc = r
    End Function
    y at'il quelque chose que j'aurais oublié ?

  5. #5
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bon, je pense qu'en fait le problème venait du fait que je testait cette fonction à partir de la fenêtre d'exécution en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?StartDoc(<ma présentation>)
    Lorsque je l'intègre à mon userform, ça semble marcher parfaitement

    Merci beaucoup pour votre aide

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2009, 23h25
  2. Pb référence Microsoft.Office.Interop
    Par Michelk12 dans le forum C#
    Réponses: 5
    Dernier message: 19/03/2009, 14h22
  3. référence office par défaut
    Par Enigme dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/11/2007, 12h07
  4. Réponses: 4
    Dernier message: 21/05/2007, 18h23
  5. [Référence] Microsoft Office 12
    Par cfidko dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/03/2007, 15h25

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