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

VBScript Discussion :

Problème d'accès aux workbooks depuis le passage à Office 365


Sujet :

VBScript

  1. #1
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut Problème d'accès aux workbooks depuis le passage à Office 365
    Bonjour,

    J'ai développé pas mal de scripts VBS qui me permettent de manipuler les exports Excel faits par une application externe et de les présenter comme je le souhaite dans un fichier Excel.

    Pseudo code :
    - j'ouvre un classeur Excel "template"
    - j'ouvre mon application externe
    - j'envoie vers Excel un objet de mon application externe
    - je copie le contenu exporté à un endroit précis de mon classeur "template"
    - ...
    - j'enregistre mon classeur "template" avec le nom définitif

    Avec Excel 2007, ça fonctionne impeccablement.

    Avec Excel 365, ça ne fonctionne plus : en effet, quand j'envoie vers Excel un objet de mon application externe, l'export semble se faire dans une nouvelle instance d'Excel. Je n'arrive donc pas à y accéder depuis mon objet Excel défini en VBS.
    Effet de bord : le script VBS n'attend même pas que l'envoi vers Excel soit terminé avant de passer à la ligne suivante.


    Autre exemple :
    - j'ouvre un classeur Excel
    - j'ouvre mon application externe
    - j'envoie vers Excel un objet de mon application externe
    - j'envoie vers Excel un objet de mon application externe
    - j'envoie vers Excel un objet de mon application externe
    - j'envoie vers Excel un objet de mon application externe
    - je demande à mon objet Excel de me dire combien il a de Workbooks

    Avec Office 2007, il me répond "5" (celui que j'ai ouvert + les 4 que j'ai créés par mon application externe).
    Avec Office 365, il me répond "1" (celui que j'ai ouvert uniquement).


    Je ne sais pas comment mettre un vrai code VBS qui illustrerait le problème. Il faudrait que je trouve une "application externe qui génère des envois vers Excel" libre.

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,

    j'envoie vers Excel un objet de mon application externe
    cette application porte un nom ou est-ce confidentiel ?
    parce que le problème est certainement lié à la manière dont cette application crée un nouveau workbook
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    C'est QlikView.

    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ' Excel
    Set ExcelApp = CreateObject("Excel.Application")
    ExcelApp.Visible = True
    Set WorkBook = ExcelApp.Workbooks.Open("c:\chemin\vers\mon\fichier.xls")
     
    ' QlikView
    Set myApp = CreateObject("QlikTech.QlikView")
    Set ActiveDocument= myApp.OpenDoc("c:\chemin\vers\mon\application.qvw")
    Set obj = ActiveDocument.GetSheetObject("CHART_01")
    obj.sendtoexcel
    A ce moment là, en Excel 2007, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExcelApp.ActiveWorkbook
    il pointe bien vers le nouveau classeur qui vient d'être exportée, alors qu'en Excel 365 il pointe vers mon classeur initial.

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    je n'ai pas trouvé de documentation (sérieuse) de référence sur le modèle objet exposé par QLikView
    la syntaxe de la méthode SendToExcel m'intrigue néanmoins
    faute de paramètre à cette méthode, comment QLikView identifie-t-il l'instance du serveur Excel ?
    bien sûr, il peut en créer une lui-même mais est-ce le cas ?
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Quand on utilise "sendtoexcel", QlikView ouvre un nouveau workbook et y met le contenu.
    Si Excel n'est pas ouvert, il l'ouvre.

    Avant avec Excel 2007, c'est comme s'il ne pouvait y avoir qu'1 seule instance d'Excel et tous les workbooks étaient forcément dedans.
    Avec Excel 365, c'est comme si chaque ouverture d'Excel était indépendante et qu'il était possible d'avoir N instance qui ne communiquent pas entre elles.

    Idéalement, je voudrais trouver une option qui dit "ouvre Excel toujours dans 1 seule instance".

    Je voudrais trouver un truc gratuit qui peut s'instancier en VBS et peut ouvrir un fichier Excel, qui pourrait illustrer le phénomène.

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    ok, il y a trois façons potentielles dans ce contexte pour exporter des données vers un classeur d'Excel :

    1. l'appli crée une nouvelle instance d'Excel et les données sont transférées dans le classeur ouvert par défaut
    2. l'appli récupère l'instance en cours d'Excel - qui a été lancé au préalable - et transfère les données dans le classeur en cours
    3. l'appli reçoit en paramètre une référence à un classeur spécifique d'Excel déjà chargé et l'utilise ensuite pour y transférer ses données

    apparemment, on doit oublier l'option 3 vu ce que tu indiques
    restent le 1 et le 2.
    si la méthode SendToExcel a été correctement écrite, elle devrait faire ce que tu as toi-même indiqué dans ton article blog du 04.03.2016
    (1er exemple de code lignes 19 à 25), c'est à dire tenter dans un 1er temps de récupérer une instance d'Excel (GetObject) et seulement en cas d'échec la créer (CreateObject).
    sauf....que les serveurs automation peuvent très bien réagir de façon différente à une demande de création d'une nouvelle instance.
    ceux qui interdisent les instances multiples peuvent renvoyer une erreur ou renvoyer toujours l'instance courante...
    donc il serait bien possible que le comportement de 365 ait changé sur ce point et il suffirait alors d'interdire les instances multiples si l'option existe...
    je pense que nos amis les experts du vba excel seront en mesure de te renseigner sur cet aspect.

    sinon reste le plan B s'il s'agit de simples données sans formules ou macros, créer directement from scratch le fichier xlsx (il y a des fils sur le sujet dans ce sous-forum)
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Ce qui est sûr, c'est que ce n'est pas la solution 2 : QlikView n'exporte jamais dans le workbook ouvert, toujours dans un nouveau.


    sinon reste le plan B s'il s'agit de simples données sans formules ou macros, créer directement from scratch le fichier xlsx (il y a des fils sur le sujet dans ce sous-forum)
    C'est bien sur impossible. Il n'est pas concevable de refaire les calculs fait dans l'outil de BI.

  8. #8
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    alors il est vraisemblable que 365 autorise désormais par défaut la création d'une nouvelle instance lorsque celle-ci est sollicitée par automation
    ce qui n'était pas le comportement par défaut des versions antérieures.
    il existe certainement une option à activer ou une valeur de clé à changer pour modifier cet état de fait.

    C'est bien sur impossible. Il n'est pas concevable de refaire les calculs fait dans l'outil de BI.
    je ne connais pas le modèle objet de QlikView mais je pensais que les données calculées par lui étaient exposées via le SheetObject
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  9. #9
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Je vais utiliser comme contournement le fait d'utiliser la fonction "copie dans le clipboard les données" pour ensuite les copier dans mon Excel.

    Le problème c'est que :
    - potentiellement on perd la mise en forme
    - lorsqu'il y a beaucoup de données, c'est vraiment plus lent

Discussions similaires

  1. Problème d'accès aux disques depuis virus
    Par coolzy dans le forum Composants
    Réponses: 4
    Dernier message: 05/11/2008, 08h44
  2. problème d'accès aux données sur serveur par poste client
    Par rahan_dave dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2006, 09h13
  3. Réponses: 16
    Dernier message: 07/02/2006, 14h19
  4. [Applet] problèmes d'accès aux images
    Par wwave dans le forum Interfaces Graphiques en Java
    Réponses: 18
    Dernier message: 16/09/2005, 14h42
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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