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 :

L'ouverture d'un fichier Excel se fait mais rien dans la barre de tâche


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 187
    Points : 56
    Points
    56
    Par défaut L'ouverture d'un fichier Excel se fait mais rien dans la barre de tâche
    Bonjour,

    Depuis une macro du logiciel Catia je tente d'ouvrir un classeur excel choisi dans une combobox après clic sur un CommandButton.

    Ce code fonctionne dans une autre macro que j'ai récupérée mais pas dans la mienne.

    Le code de l'ouverture de fichier est :
    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
    Sub ouverture_fichier()
     
        Dim i As Integer
        Dim deja_ouvert As Boolean
        Dim nom_fichier As String
     
        On Error GoTo line999
        'récupère le nom du fichier sans le ".xls" dans la comobox du formulaire
        nom_fichier = VisSansFin_pilotage.ComboBox_Fichier_Archive.text
        'On ouvre le fichier en vérifiant qu'il n'est pas déjà ouvert
        deja_ouvert = False
     
        MsgBox Workbooks.Count
     
        For i = 1 To Workbooks.Count
            If appxls.Workbooks.Item(i).Name = nom_fichier & ".xls" Then
                deja_ouvert = True
                appxls.Workbooks.Item(i).Activate
                MsgBox "Feuille activée"
            End If
        Next
        If deja_ouvert = False Then
           ' EN début de code il y a : Dim appxls As New Excel.Application
           appxls.Workbooks.Open chemin_acces, , True 
           MsgBox "Ouverture du classeur"
        End If
     
        fichier_ouvert = True
        Exit Sub
     
    line999:
        MsgBox "ouverture du fichier impossible"
        fichier_ouvert = False
    End Sub
    Le code de mon bouton est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton_Visualiser_Click()
     
        Call Recup_xls.ouverture_fichier
     
    End Sub
    J'ai essayé de lancer l'ouverture d'Excel après l'exécution de la procédure, puisque j'ai remarqué qu'en ouvrant un fichier excel à la main après l'exécution d' ouverture_fichier les fichiers du "monde parallèle" apparaissaient, mais en vain:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678
    Private Sub CommandButton_Visualiser_Click()
     
        Call Recup_xls.ouverture_fichier
        Dim MyAppID
        MyAppID = Shell("C:\Program Files\Microsoft Office\Office10\EXCEL.EXE", 1)
        AppActivate MyAppID    ' Activate Microsoft Excel.
     
    End Sub
    La macro ajoute un autre EXCEL.EXE dans le gestionnaire des tâches que celui qui est lancé quand j'ouvre un fichier à la main.

    Si je vire le processus EXCEL.EXE qui correspond à l'ouverture de mon fichier du gestionnaire des tâches, quand je relance la macro, l'ouverture plante mais le lancement d'excel avec le classeur vierge se fait...

    Merci d'exorciser mon code

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Pour clarifier l'expression de ton besoin...
    Tu souhaites piloter Excel à partir de Catia au moyen d'une technique appelée automation (anciennement automation OLE) qui est basée sur l'architecture COM de Windows.

    Le principe de base de l'automation est que ton application (ici ton projet Catia) va se "connecter" à un ou plusieurs objets (je vais les appeler objets COM) qui appartiennent à une application exécutée dans un autre processus (une "tâche").

    Le processus existe-t-il déjà ?
    Si oui, on peut référencer un des objets COM de l'application au moyen de la commande GetObject().
    Si non, on peut lancer l'exécution d'un nouveau processus pour l'application cible (ici Excel) et récupérer une référencer à un objet COM grâce à la fonction CreateObject().

    Pour résumer, dans ton code, à un moment où un autre il faudra nécessairement faire appel à CreateObject() ou GetObject().
    Il faut que tu lises l'aide en ligne de VBA pour CreateObject() ou GetObject() et que tu cherches sur le forum ou les tutoriels:
    l'automation est un grand classique fréquemment discuté.
    [EDIT]
    Le mot clé New peut aussi être utilisé à la place CreateObject().
    [/EDIT]


    Avec COM (et en fonction de l'application que l'on veut piloter) on peut choisir de se brancher sur l'application elle-même (ou tout objet "creatable" du modèle cible"), ou bien directement sur un document associé à cette application (ex. un fichier .XLS).

    Avec Excel, tu as ces deux possibilités. Quelques exemples (notés à la "va-vite"):

    Lancer une nouvelle instance d'Excel qui est ensuite référencée par la variable oApp:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oApp As Excel.Application
    Set oApp = CreateObject("Excel.Application")
    Ou son équivalent...
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oApp As Excel.Application
    Set oApp = New Excel.Application

    Ouvrir un fichier existant (classeur) et le référencer avec la variable oWB:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim oWB As Excel.Workbook
    Set oWB = GetObject("C:\Mon fichier.xls")
    Impératif: référencer la bibliothèque Excel

    Une bonne pratique de l'automation est de référencer, dans le projet de ton application, la bibliothèque qui permettra de piloter l'application cible.
    Pour Excel, la bibliothèque s'appelle "Microsoft Excel x.y Object Library" où le n° de version x.y dépend de ce qui est installé sur ton PC.

    Si tu ne le fais pas, tu ne pourras pas "typer" correctement les objets qui devront alors tous être du type Object, par conséquent tu ne pourras pas bénéficier de l'aide au codage (cf. Intellisense).
    De plus, tu ne pourras pas détecter à la compilation les bêtes erreurs de syntaxe.
    Et ça, ce n'est vraiment pas pro !
    _

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par dalmasma Voir le message
    J'ai essayé de lancer l'ouverture d'Excel après l'exécution de la procédure, puisque j'ai remarqué qu'en ouvrant un fichier excel à la main après l'exécution d' ouverture_fichier les fichiers du "monde parallèle" apparaissaient, mais en vain:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678
    Private Sub CommandButton_Visualiser_Click()
     
        Call Recup_xls.ouverture_fichier
        Dim MyAppID
        MyAppID = Shell("C:\Program Files\Microsoft Office\Office10\EXCEL.EXE", 1)
        AppActivate MyAppID    ' Activate Microsoft Excel.
     
    End Sub
    La macro ajoute un autre EXCEL.EXE dans le gestionnaire des tâches que celui qui est lancé quand j'ouvre un fichier à la main.

    Si je vire le processus EXCEL.EXE qui correspond à l'ouverture de mon fichier du gestionnaire des tâches, quand je relance la macro, l'ouverture plante mais le lancement d'excel avec le classeur vierge se fait...
    La fonction Shell te permet "juste" de démarrer un autre processus.

    Pour l'automation, en principe on n'utilise pas Shell, sauf si on a besoin de paramétrer la ligne de commande de l'application à piloter.
    Auquel cas, on exécute d'abord Shell pour exécuter un nouveau processus, puis GetObject pour récupérer une référence sur un objet COM qui existe dans ce nouveau processus.
    _

Discussions similaires

  1. Ouverture d'un fichier excel predefini
    Par nberthonneau dans le forum Access
    Réponses: 10
    Dernier message: 13/06/2007, 23h14
  2. problème d'ouverture d'un fichier EXCEL!!
    Par JauB dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/11/2005, 14h37
  3. Ouverture d'un fichier Excel en VBA par Access
    Par illight dans le forum Access
    Réponses: 2
    Dernier message: 02/11/2005, 12h14
  4. Réponses: 2
    Dernier message: 06/04/2005, 13h01
  5. Réponses: 2
    Dernier message: 22/07/2002, 13h13

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