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

VB 6 et antérieur Discussion :

[VB6-OOo]createUnoService => type ou procedure non définie


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut [VB6-OOo]createUnoService => type ou procedure non définie
    Bonjour,

    Je suis toujours entrain de tenter de faire intéragir Calc et le presse papier et dans cet optique, j'ai voulu créer un service UNO en avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For i = 0 To oDocument.Sheets.Count - 1
      Clipboard.Clear
      Set Sheet = oDocument.Sheets.getByIndex(i)
      Set oCells = Sheet.getCellRangeByName("A1:Z3000")
      oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
      oDocument.getCurrentController().Select (oCells)
    Quand le deboggeur arrive à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    J'ai ce message d'erreur : type ou procedure non defini.
    J'ai suivi les instructioins de plusieurs site, dont celui et je vois pas ce que j'ai oublié !
    Donc si quelqu'un verrait d'où vient l'erreur, ca m'aiderait !
    merci

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    J'ai suivi les instructioins de plusieurs site, dont celui et je vois pas ce que j'ai oublié !
    J'ai l'impression que tu mélanges les macros purement OpenOffice et le pilotage d'OOo depuis VB/VBA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim oServiceManager As Object, oDispatcher As Object
     
        Set oServiceManager = CreateObject("com.sun.star.serviceManager")
        Set oDispatcher = oServiceManager.createInstance("com.sun.star.frame.DispatchHelper")

    http://silkyroad.developpez.com/VBA/PiloterOpenOffice/


    bonne soirée
    michel

  3. #3
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par SilkyRoad
    bonsoir



    J'ai l'impression que tu mélanges les macros purement OpenOffice et le pilotage d'OOo depuis VB/VBA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim oServiceManager As Object, oDispatcher As Object
     
        Set oServiceManager = CreateObject("com.sun.star.serviceManager")
        Set oDispatcher = oServiceManager.createInstance("com.sun.star.frame.DispatchHelper")

    http://silkyroad.developpez.com/VBA/PiloterOpenOffice/


    bonne soirée
    michel
    En effet il semblerait que je confonde les deux !
    Donc ca vaut dire que si je veux inter-agir le presse papier avec OOo, le code présent ici : http://ooo.developpez.com/faq/?page=...es#Question132
    Ne marche pas non plus ?!
    Car quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For i = 0 To oDocument.Sheets.Count - 1
      Clipboard.Clear
      'Set oct1 = oDocument.getCurrentController()
      Set Sheet = oDocument.Sheets.getByIndex(i)
      Set oCells = Sheet.getCellRangeByName("A1:Z3000")
      'outilService = GetProcessServiceManager
      Set oDispatcher = oServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
      oDocument.Select (oCells)
    Il semble pas trop aimer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     oDocument.Select (oCells)
    J'ai aucun message d'erreur, l'appli continu en sortant de la procédure :s

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    Avant de sélectionner les cellules, il faut activer chaque feuille...

    quel esr l'objectif de ta macro?


    michel

  5. #5
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par SilkyRoad
    Avant de sélectionner les cellules, il faut activer chaque feuille...

    quel esr l'objectif de ta macro?


    michel
    Comment activer une feuille ?

    L'objectif de ma macro :

    Parcourir, chaque feuille de mon fichier (d'où la boucle For), en collant à chaque fois le contenu dans le presse papier.
    Certaines feuilles contiennent des objets non textuels (graphique, etc ...)
    Dès que je tombe sur une feuille qui contient un objet non textuel, je lance un traitement particulier.
    Une fois le traitement achevé, je colle le résultat dans le presse papier.
    Ensuite je copie le contenu du presse papier sur la feuille courante (d'où l'usage de la propriété pastespecial avec Excel).

    Voilà, j'espère avoir été assez clair

  6. #6
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par SilkyRoad
    Avant de sélectionner les cellules, il faut activer chaque feuille...
    michel
    j'ia vu pas mal de choses qui ressemblait à ceci sur des forums :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maFeuille = thisComponent.Sheets.getByName("NomFeuille")
    thisComponent.CurrentController.select(maFeuille.getCellRangeByName("A1"))
    Est-ce la propriété getByname qui active la feuille ???
    Si oui, dans ce cas ca voudrait dire qu'on ne peut pas activer la feuille si on ne connais pas déjà le nom ??

    Merci

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    Est-ce la propriété getByname qui active la feuille ???
    non, c'est la ligne suivante.


    As tu essayé de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maFeuille = thisComponent.Sheets.getByName("NomFeuille")
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maFeuille = ThisComponent.Sheets(0)


    (à adapter lors d'un pilotage depuis VB bien entendu)


    michel

  8. #8
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Ok, voilà donc où j'en suis rendu :
    Les lignes mises en gras sont celles où ca pose problème.
    Pendant les anomalies, la suite de la procédure est zappée à partir de la ligne en gras. L'appli continue le traitement sans poursuivre le reste de la procédure et sans aucun message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = 0 To oDocument.Sheets.Count - 1
     Clipboard.Clear 
     Set Sheet = oDocument.getSheets().getByIndex(i)
     oDocument.CurrentController.ActiveSheet = Sheet
     Set oCells = Sheet.getCellRangeByName("A1:Z3000")
     oDocument.CurrentController.select(oCells)
     Set oDispatcher =      oServiceManager.createInstance("com.sun.star.frame.DispatchHelper")

  9. #9
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Bon, j'ai finalement trouvé, en définissant oCells comme un Variant et non comme un objet !
    Par contre je suis entrain de me rendre compte de quelque chose.
    La sélection des zones est, pour la plupart des exemples trouvées, utilisée pour ensuite y coller le contenu du presse papier.
    Est ce que c'est possible de passer par ce mécanisme également pour coller directement le contenu de la zone dans le presse papier ? Suis-je obligé de parcourir toutes les cellules de la zone une par une ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/09/2008, 20h14
  2. Type 'MSMAPI.MAPISession' non défini
    Par bobby51 dans le forum VB.NET
    Réponses: 2
    Dernier message: 18/06/2008, 09h28
  3. Réponses: 4
    Dernier message: 01/07/2005, 16h20
  4. Combinaisons de type signés et non signés
    Par Hell dans le forum Langage
    Réponses: 4
    Dernier message: 01/11/2004, 19h01
  5. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51

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