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

Forms Oracle Discussion :

Forms, Word et OLE2


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Par défaut [RESOLU]Forms, Word et OLE2
    Bonjour,

    Je dois me mettre à OLE2 en forms 6i. J'ai donc bien compris le principe d'utiliser les macros Word pour avoir le code à produire pour une action. Malgré çà, j'ai un "petit" problème pour effectuer un copier-coller.

    Pour le principe: j'ai un blob où est stocké un modele. Je souhaite ouvrir le modèle, le dupliquer par copier-coller dans un nouveeau document avant de faire une fusion (plus tard !). Avec le code suivant, le copier-coller s'effectue dans le modèle et non dans le nouveau document ???

    -- Open Word and activate it
    FORMS_OLE.ACTIVATE_SERVER('AC_CONTENU.WD_DOC');

    -- Verb index 1 => Open the embedded document for editing
    FORMS_OLE.EXEC_VERB('AC_CONTENU.WD_DOC', 1);

    -- Get a handle on the Word document in the OLE container
    v_modele := FORMS_OLE.GET_INTERFACE_POINTER('AC_CONTENU.WD_DOC');

    -- Get a handle on the Application object
    v_app := OLE2.GET_OBJ_PROPERTY(v_modele,'Application');
    v_documents := OLE2.GET_OBJ_PROPERTY(v_app, 'Documents');

    -- Copie
    v_sel := ole2.GET_OBJ_PROPERTY(v_app, 'Selection');
    ole2.INVOKE(v_sel,'WholeStory');
    ole2.INVOKE(v_sel,'Copy');

    -- Nouveau doc
    v_doc_final := OLE2.INVOKE_OBJ(v_documents,'Add');

    -- Colle
    OLE2.INVOKE(v_sel, 'Paste');
    OLE2.INVOKE(v_sel, 'Paste');

    -- Fermer le doc de ref
    --FORMS_OLE.CLOSE_SERVER('AC_CONTENU.WD_DOC');

    A moins que je n'utilise pas la bonne méthode pour arriver à ce résulat. J'avais aussi songé à faire un sauver sous, mais j'aimerai autant ne pas passer par une svg disque.

    Merci ;-)

  2. #2
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Bien que cette discussion concerne plutot VBA pour office que ORACLE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    - Copie
                v_sel := ole2.GET_OBJ_PROPERTY(v_app, 'Selection');            
          ole2.INVOKE(v_sel,'WholeStory');
          ole2.INVOKE(v_sel,'Copy');
    
                -- Nouveau doc
                v_doc_final := OLE2.INVOKE_OBJ(v_documents,'Add');
    
                -- Colle
                OLE2.INVOKE(v_sel, 'Paste');<=== v_sel  concerne ce que tu viens de copier ! (donc la selection )
    Tu dois refaire une selection entre "Add" et "Paste"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    -- Nouveau doc
                v_doc_final := OLE2.INVOKE_OBJ(v_documents,'Add');
                v_sel := ole2.GET_OBJ_PROPERTY(v_app, 'Selection');  
                -- Colle
                OLE2.INVOKE(v_sel, 'Paste');
    de manière générale, avant de faire de l'OLE2, enregistre une macro en VBA et réécrit la ensuite en OLE2. Cela te permet de ne pas sauter d'étapes !

  3. #3
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Par défaut
    OK merci. Ca marche bien maintenant.

    Merci aussi pour la méthode, c'est ce que j'avais utiliser pour arrvier au code que j'ai mis. Visiblement, ce n'est pas infaillible.

    Question lié à OLE2: y a-t-il moyen de trouver qq part les valeurs/ordre des arguments à passer à une methode VB ?
    Exemple: je souhaite faire de la fusion, mais j'aimerai me débarasser des questions à l'utilisateur (lors du rattachement de la source de données).

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Citation Envoyé par pat44 Voir le message
    OK merci. Ca marche bien maintenant.

    Merci aussi pour la méthode, c'est ce que j'avais utiliser pour arrvier au code que j'ai mis. Visiblement, ce n'est pas infaillible.

    Question lié à OLE2: y a-t-il moyen de trouver qq part les valeurs/ordre des arguments à passer à une methode VB ?
    Exemple: je souhaite faire de la fusion, mais j'aimerai me débarasser des questions à l'utilisateur (lors du rattachement de la source de données).
    Dans l'aide en ligne VB, tu as la description des méthodes (et donc de leurs paramètres).
    Ces paramètres ont en général le même nom en OLE2.
    Deuxieme question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.displayAlert=false

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Par défaut
    bon, j'ai tenté de supprimer la demande de séléection de la feuille excel pour la requete lors de la liaison avec la source de donnée excel.

    Je suis donc parti de cette macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        ActiveDocument.MailMerge.OpenDataSource Name:= _
            "L:\TMA_LOCO\LOCO\PFO\GEN\21283-0720C0031-0-1-20070830112930.xls", _
            ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
            AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
            WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
            Format:=wdOpenFormatAuto, Connection:= _
            "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=L:\TMA_LOCO\LOCO\PFO\GEN\21283-0720C0031-0-1-20070830112930.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Databa" _
            , SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _
            wdMergeSubTypeAccess
    Pour en faire çà dans Forms (p_data est le nom de mon fichier source de données):
    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
     
    		v_arg := OLE2.CREATE_ARGLIST; 
    		OLE2.ADD_ARG(v_arg, p_data); --Name
    		OLE2.ADD_ARG(v_arg, 0); -- ConfirmConversion
    		OLE2.ADD_ARG(v_arg, 0); -- ReadOnly
    		OLE2.ADD_ARG(v_arg, -1); -- LinkToSource
    		OLE2.ADD_ARG(v_arg, 0); -- AddToRecentFiles
    		OLE2.ADD_ARG(v_arg, ''); -- PasswordDocument
    		OLE2.ADD_ARG(v_arg, ''); -- PasswordTemplate
    		OLE2.ADD_ARG(v_arg, 0); -- Revert
    		OLE2.ADD_ARG(v_arg, ''); -- WritePasswordDocument
    		OLE2.ADD_ARG(v_arg, ''); -- WritePasswordTemplate
    		OLE2.ADD_ARG(v_arg, 'Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source='||p_data||';Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Databa'); -- Connection
    		OLE2.ADD_ARG(v_arg, 'SELECT * FROM `Feuil1$`'); -- SQLStatement
    		OLE2.ADD_ARG(v_arg, ''); -- SQLStatement1
    		OLE2.ADD_ARG(v_arg, 1); -- SubType
    		OLE2.INVOKE(v_fusion, 'OpenDataSource', v_arg); 
    		OLE2.DESTROY_ARGLIST(v_arg);
    Ca ne plante pas, mais ce ne m'attache pas non plus ma source de données.
    Je suppose qu'il y a une erreur dans les paramètres Connection ou SQL Statement, mais étant un pur Oraclien, j'ai franchement du mal à voir quoi.

    Merci d'avance

  6. #6
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Par défaut
    J'ai finalement contourné le pb en changeant le type de source de données.

    a+

Discussions similaires

  1. [PAO]probleme mise en forme word 2003
    Par lucie31 dans le forum Word
    Réponses: 18
    Dernier message: 05/12/2012, 19h46
  2. Windows form Word
    Par The_Big_Lebowski dans le forum VB.NET
    Réponses: 3
    Dernier message: 01/12/2010, 10h57
  3. Mise en forme Word depuis Excel
    Par bguichardaz dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/10/2009, 13h25
  4. mise en forme word
    Par cornet04 dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/06/2008, 13h06
  5. [Mise en Forme WORD] Chapitre spécifique.
    Par Paloma dans le forum Word
    Réponses: 11
    Dernier message: 29/02/2008, 21h49

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