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

OpenOffice & LibreOffice Discussion :

Comment améliorer une macro [LibreOffice][Texte]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut Comment améliorer une macro
    [Résolu]

    Bonjour,
    je me présente un peu...

    Patrick Guimberteau j'ai oeuvré pour OpenOffice à ses débuts (2000 à 2007) mais je n'ai jamais fait de programmation.

    Donc je me retrouve bien embêté. Pour pallier à des documents trop long, je cherche à ajouter des liens façon onglets sur le coté de chaque page (variable de 10 à 300 pages).
    Les onglets, ça va (Draw copié collé dans Writer)...
    Les liens aussi (ctrl+k) cela va vite.
    Mais copier coller la barre des onglets dans chaque page c'est plus galère. Alors je cherche à automatiser cette tâche.

    J'ai enregistrer une macro mais elle ne 'couvre pas tout le document :

    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
    Sub Main
    End Sub
    sub Copie
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    dispatcher.executeDispatch(document, ".uno: PageDown", "", 0, Array())
    dispatcher.executeDispatch(document, ".uno: Paste", "", 0, Array())
    dispatcher.executeDispatch(document, ".uno: PageDown", "", 0, Array())
    end sub
    Comment faire pour récupérer le nombre de page depuis la page courante et faire autant de copie de l'objet sélectionné sur les pages du document ?.

    J'ai essayé depuis la faq à recoller du code mais je n'y connais rien et cela ne fonctionne pas. Puis-je avoir de l'aide ?
    CF : http://openoffice-libreoffice.develo...-d-un-document

    Cordialement
    Patrick
    Merci à Zoom61 pour la rectification du message.

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Bonjour,

    Ce code te donne la page en cours et le nombre de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Zoom61()
        Dim monDocument As Object
        Dim PageEncours As Object
        Dim PageActive As Integer, PageFin As Integer
        monDocument = ThisComponent
        PageEncours = monDocument.CurrentController.ViewCursor
        PageActive = PageEncours.Page
        PageEncours.jumpToLastPage
        PageFin = PageEncours.Page
        PageEncours.jumpToPage(PageActive)
        Print "Page en cours : " & PageActive & " - Nombre de pages : " & PageFin
    End Sub
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Bonjour,
    merci pour cette réponse.

    J'avais bien vu un truc similaire dans la Faq.

    Mais mon problème c'est copier l'objet sélectionné sur le nombre de page.
    A dire en langage humain :
    - Je sélectionne l'objet et le copie
    - je compte le nombre de pages restantes depuis la page affichée
    - Je descends d'une page
    - Je colle colle l'objet
    et ainsi de suite, le nombre de fois compté.

    c'est là le hic! piquer des bouts de code j'y arrive, mais les chainer ... je cale.

    Cordialement
    Patrick

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    Patrick, je ne vois pas très bien ce que tu veux faire. Peux-tu mettre une copie d'écran de ce que tu veux obtenir ou un document exemple en pièce jointe ?

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    Patrick, je ne vois pas très bien ce que tu veux faire. Peux-tu mettre une copie d'écran de ce que tu veux obtenir ou un document exemple en pièce jointe ?
    Bonjour,
    donc un document global avec des sections identifiés par un titre.
    Voir le document joint qui en reprend la trame.
    Désolé mais je mets les fichiers en dropbox, je n'arrive pas à les passer par le forum !?...

    https://www.dropbox.com/s/dhxoy0gbyw...NIQUE.zip?dl=0

    Ce document est constitué de la page de garde, la table des matières, une page parfois pour quelques explications (préambule) et on démarre vraiment à la troisième ou quatrième page.
    Seulement ce document peut être long et parmi nos interlocuteurs, tout le contenu ne les concerne pas forcément.
    Donc pour leur faciliter la lecture par section on pose une mini table des matières, à partir du préambule, sous forme d'onglet à cliquer (de simple hypertextes).

    C'est la seule méthode qui résiste à l'export en PDF. Un index remanié façon onglets et posé dans l'entête pour être dupliqué automatiquement, ne fonctionne plus dans le PDF. De plus on n'est pas certain du matériel et versions de logiciels de nos interlocuteurs... donc la navigation dans le pdf via des liens fonctionne bien. On en reste là.

    On copie donc cette barre d'onglets, après avoir transformé les textes en hypertextes, autant de fois qu'il y a de pages restante depuis le préambule. Avec 20 pages, ok, mais quand il y a 300 pages...
    D'où la macro pour copier la sélection (la barre d'onglets) et en faire une copie sur chaque page.

    Seulement ma compétence s'arrête à l'enregistrement d'une macro et suis incapable de l'améliorer...

    Dans le principe je suppose que cela donne ceci :

    Var1 = page en cour
    Var2 = Nombre de page
    Var3 = Var2-Var1 nombre de copie à réaliser
    Objet1 = objet préselectionné
    Boucle
    PageDown compteur + 1
    Coller
    Compteur = Var3 = Non je boucle Oui goto fin
    Fin

    Mais alors pour écrire çà dans la bonne syntaxe !

    J'espère avoir répondu à ta question.

    Bon alors je continue mes recherches (c'est mieux d'apprendre à pécher que de se faire nourrir ! )
    En faisant ma bouillie cela donne ceci pour le principe mais cela ne fonctionne pas:

    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
    sub Copie
    rem ----------------------------------------------------------------------
    rem Définition des variables
    dim document   as object
    dim dispatcher as object
    Dim PageActive As Integer, PageFin As Integer
    rem ----------------------------------------------------------------------
    rem get access to the document - C'est dans la macro enregistrée je laisse
    document   = ThisComponent.CurrentController.Frame
    rem : C'est dans la macro enregistrée je laisse
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Copie de l'objet sélectionné C'est dans la macro enregistrée je laisse
    dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    rem -----Page suivante C'est dans la macro enregistrée je laisse
    rem ---- je suppose que je peux calculer le nombre de copie
    PageNb = PageActive-PageEncours
    rem ---- il faut une boucle à partir de là
    dispatcher.executeDispatch(document, ".uno:PageDown", "", 0, Array())
    rem -----Collage de l'objet sélectionné C'est dans la macro enregistrée je laisse
    dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
    rem -----Fin de la boucle
    end sub
    Pour vérifier si je peux calculer sur les variables j'ai modifié le code de Zoom61 pour avoir le nombre de copie à réaliser et alimenter le compteur de ma boucle. C'est bon j'ai bien le calcul de fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Zoom61()
        Dim monDocument As Object
        Dim PageEncours As Object
        Dim PageActive As Integer, PageFin As Integer, PageNb As Integer
        monDocument = ThisComponent
        PageEncours = monDocument.CurrentController.ViewCursor
        PageActive = PageEncours.Page
        PageEncours.jumpToLastPage
        PageFin = PageEncours.Page
        PageNb = PageFin-PageActive 
        PageEncours.jumpToPage(PageActive)
        Print "Page en cours : " & PageActive & " - Nombre de pages : " & PageFin & " - Nombre de copie : " & PageNb
    End Sub
    Bon reste à voir si j'arrive à mixer les deux macros sans casse, déjà pour une copie sans boucle avec le "print final" de zoom61...

    J'ai bidouillé un peu plus la macro de Zoom61 mais et cela fonctionne, la chance du débutant...
    La barre d'onglets en mémoire est collée sur la page suivante, une page seulement.

    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
    Sub Zoom61()
        Dim monDocument As Object
        Dim PageEncours As Object
        Dim PageActive As Integer, PageFin As Integer, PageNb As Integer
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
        monDocument = ThisComponent
        PageEncours = monDocument.CurrentController.ViewCursor
        PageActive = PageEncours.Page
        PageEncours.jumpToLastPage
        PageFin = PageEncours.Page
        PageNb = PageFin-PageActive 
        PageEncours.jumpToPage(PageActive)
        document   = ThisComponent.CurrentController.Frame
    rem : C'est dans la macro enregistrée je laisse
    	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Copie de l'objet sélectionné C'est dans la macro enregistrée je laisse
    	dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    	dispatcher.executeDispatch(document, ".uno:PageDown", "", 0, Array())
    rem -----Collage de l'objet sélectionné C'est dans la macro enregistrée je laisse
    	dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
        Print "Page en cours : " & PageActive & " - Nombre de pages : " & PageFin & " - Nombre de copie : " & PageNb
    End Sub
    Bon maintenant il faudrait que je trouve à faire la boucle et le compteur....

    Alors en fouinant j'ai trouvé le principe du compteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim I 
    For I = 1 To 10
      ' ...  Inner part of loop 
    Next I
    Je remplace I par Compteur (c'est plus clair pour ma neurone) et je mets les lignes de code que je pense être le 'coller et page suivante' dans la boucle...
    Pour le compteur je suppose qu'il doit aller de 1 à PageNb. Cela fonctionne mal. Dans mon document d'essai la copie est faite 4 fois par page jusqu'à la page 23 (j'ai 58 pages)...

    Je vais boire un café, çà commence à m'énerver...

    Cela donne ceci :
    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
    Sub Zoom61()
        Dim monDocument As Object
        Dim PageEncours As Object
    	Dim Compteur As integer
        Dim PageActive As Integer, PageFin As Integer, PageNb As Integer
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
        monDocument = ThisComponent
        PageEncours = monDocument.CurrentController.ViewCursor
        PageActive = PageEncours.Page
        PageEncours.jumpToLastPage
        PageFin = PageEncours.Page
        PageNb = PageFin-PageActive 
        PageEncours.jumpToPage(PageActive)
        document   = ThisComponent.CurrentController.Frame
    rem : C'est dans la macro enregistrée je laisse
    	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Copie de l'objet sélectionné C'est dans la macro enregistrée je laisse
    	dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    For Compteur = 1 To PageNb
    	dispatcher.executeDispatch(document, ".uno:PageDown", "", 0, Array())
    rem -----Collage de l'objet sélectionné C'est dans la macro enregistrée je laisse
    	dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
      Next Compteur
        Print "Page en cours : " & PageActive & " - Nombre de pages : " & PageFin & " - Nombre de copie : " & PageNb
    End Sub
    Cordialement
    Patrick

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,

    j'ai réussi à récupérer les fichiers dropbox que je mets en partage ici .

    Nom : Onglets_mémoire technique2.jpg
Affichages : 506
Taille : 65,8 Ko


    Ami calmant, J.P
    Fichiers attachés Fichiers attachés
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Cela devrait ressembler à quelque chose comme cela :
    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
    Sub Zoom61()
        Dim monDocument As Object
        Dim PageEncours As Object
        Dim Compteur As integer
        Dim PageActive As Integer, PageFin As Integer, PageNb As Integer
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
        monDocument = ThisComponent
        PageEncours = monDocument.CurrentController.ViewCursor
        PageActive = PageEncours.Page
        PageEncours.jumpToLastPage
        PageFin = PageEncours.Page
        PageNb = PageFin-PageActive 
        PageEncours.jumpToPage(PageActive)
        
    
    document   = ThisComponent.CurrentController.Frame
    rem : C'est dans la macro enregistrée je laisse
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Copie de l'objet sélectionné C'est dans la macro enregistrée je laisse
        dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    For Compteur = PageActive+1 To PageFin
    
        PageEncours.jumpToPage(Compteur)
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Collage de l'objet sélectionné C'est dans la macro enregistrée je laisse
        dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
      Next Compteur
        Print "Page en cours : " & PageActive & " - Nombre de pages : " & PageFin & " - Nombre de copie : " & PageNb
    End Sub
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  8. #8
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par zoom61 Voir le message
    Cela devrait ressembler à quelque chose comme cela : (...)
    Ben là les copies se font mais toutes sur la même page.

    Pfuuu ! çà prend le choux ces histoires !!!!

    Quand cela fonctionne ce n'est qu'à moitié ! plusieurs copies sur une page, des pages sautées et tout le document n'est pas couvert !....

    Patrick

  9. #9
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    j'ai réussi à récupérer les fichiers dropbox que je mets en partage ici .

    Merci

    Patrick

  10. #10
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par zoom61 Voir le message
    Cela devrait ressembler à quelque chose comme cela :
    (Voir le code plus haut)

    Par hasard en reprenant tout çà, à tête reposée ce matin, j'ai repris le code de Zoom61 sur mon poste à la maison. J'avais copié du texte (son code) et quand j'ai lancé sa macro sur mon document d'essai (104 pages) la copie s'est bien faite sur tout le document. J'avais oublié, au préalable, de copier la barre...

    Content de ce résultat, je copie la barre et lance la macro. Et là cela bloque !

    En fait c'est l'objet dessin qui fait capoter la macro. Pourquoi, je ne sais pas, évidemment.
    Une piste : c'est un objet Draw et pas Writer ...?!

    Donc je regarde quels objets sont correctement repris par la macro....

    J'ai un 'conteneur' dans lequel je peux mettre mes liens et une image de fond. Il est dupliqué sur tout le document par la macro de Zoom61. L'objectif est atteint.

    Maintenant la question du "pourquoi pas un objet Draw ?" étant secondaire je vais pouvoir explorer les options possibles plus sereinement.

    Je vous tiens au courant de l'évolution mais je considère que mon problème est résolu.
    Encore merci pour vos interventions et votre aide (Zoom61) cela m'a permis de mettre mon nez dans le code. Je ne suis pas atteint du virus mais je vais quand même m'y mettre un peu.

    Cordialement à tous et à suivre...
    Patrick
    ------------------------------------------------------------------
    Liste des objets reconnus par la macro:

    1 - Le cadre texte - Ok.
    Mais il va falloir trouver à l'habiller façon onglet. Donc une image en arrière peut faire l'affaire. Reste à mettre les textes et les transformer en hypertextes. On peut considérer que le reste n'est qu'une question esthétique.

    2 - La table des matières encapsulée dans un cadre de texte - OK.
    On peut modifier les styles pour avoir des textes verticaux. L'esthétique sera plus dure à peaufiner. L'avantage c'est que les liens sont fait automatiquement par la table des matières et il suffit d'une actualisation pour s'adapter au document. On peut mettre une image en fond. Pour soulager le travail de rédaction, cette solution est à privilégier.

    J'arrête là mes essais, pour me focaliser sur l'esthétique de cette table des matières transformée en "onglets de navigation".
    Encore une fois, merci.

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    ce que j'ai remarqué avec le code de zoom61, c'est que lorsqu'on faisait le coller (uno:paste) l'objet graphique allait à la page 2, si bien qu'au bout du compte on se retrouvait avec tous les objets graphiques sur la page 2. Il doit y avoir un problème avec le curseur. En regardant de plus près ta barre d'onglets je me suis aperçu qu'elle avait un ancrage à la page. Il y a une propriété dans l'objet graphique qui permet de spécifier la page d'ancrage : AnchorPageNo. Alors j'ai un peu modifié le code à zoom61 pour que juste après le Paste on modifie la page d'ancrage de l'objet graphique qui est alors l'objet sélectionné. Voici le code :
    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
    Sub Zoom61()
        Dim monDocument As Object
        Dim PageEncours As Object
        Dim oSel As Object
        Dim Compteur As integer
        Dim PageActive As Integer, PageFin As Integer, PageNb As Integer
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
        monDocument = ThisComponent
        PageEncours = monDocument.CurrentController.ViewCursor
        PageActive = PageEncours.Page
        PageEncours.jumpToLastPage
        PageFin = PageEncours.Page
        PageNb = PageFin-PageActive 
        PageEncours.jumpToPage(PageActive)
     
    document   = ThisComponent.CurrentController.Frame
    rem : C'est dans la macro enregistrée je laisse
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Copie de l'objet sélectionné C'est dans la macro enregistrée je laisse
        dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    For Compteur = PageActive+1 To PageFin
     
        PageEncours.jumpToPage(Compteur)
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Collage de l'objet sélectionné C'est dans la macro enregistrée je laisse
        dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
        oSel = monDocument.CurrentController.Selection.getByIndex(0)
        oSel.AnchorPageNo = Compteur
      Next Compteur
        Print "Page en cours : " & PageActive & " - Nombre de pages : " & PageFin & " - Nombre de copie : " & PageNb
    End Sub
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    (...). En regardant de plus près ta barre d'onglets je me suis aperçu qu'elle avait un ancrage à la page. Il y a une propriété dans l'objet graphique qui permet de spécifier la page d'ancrage : AnchorPageNo. Alors j'ai un peu modifié le code à zoom61 pour que juste après le Paste on modifie la page d'ancrage de l'objet graphique qui est alors l'objet sélectionné.(...)
    Ho, ben je viens d'essayer cela m'a l'air tout bon....

    J'essaye avec mes fichiers et je te dit.
    Cordialement
    Patrick

  13. #13
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    (...) Alors j'ai un peu modifié le code à zoom61 pour que juste après le Paste on modifie la page d'ancrage de l'objet graphique qui est alors l'objet sélectionné. (...)
    Et bien effectivement cela m'a l'air d'être ce paramètre (oSel.AnchorPageNo) qui faisait capoter la macro avec certains objets ancrés à la page.

    Merci du coup de main !

    Bon maintenant je regarde à modifier le code pour agir sur une présélection et non l'objet en copie....
    Je regarde à faire un index (sommaire) vertical le plus sympathique possible et je mettrais tout çà en fichiers joints à cette discussion, cela pourra servir à d'autres.

    A suivre...

  14. #14
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Bon alors après des essais sur mon poste,
    Voici l'état des lieux...
    Pour réaliser des textes à hyperliens façon onglets en vue de faire des documents Pdf, on peut :

    1 - Faire des onglets dans un cadre de texte, avec un index (sommaire) dont les textes sont à la vertical. Cela permet d'avoir l'automatisme de l'actualisation propre aux index. Mais coté apparence je suis bloqué car nous utilisons un code couleur que je ne peux pas paramétrer dans un index. Pare exemple Mode (opératoire) est sur fond bleu et Préambule sur fond orange clair. Dans un index je ne peux pas rendre le fond du texte dépendant du contenu. Il faudrait pouvoir utiliser un style de paragraphe conditionnel selon son contenu, ce qui n'existe pas, à ma connaissance. Pour pallier, il faut, après actualisation, cliquer sur chaque entrée de l'index et mettre une couleur de fond en retouchant le paragraphe. On perd l'avantage de l'index par le travail de relookage...

    La macro de Zoom61 convient. La macro retouchée par Jurassic pork ne convient pas, la propriété AnchorPageNo n'est pas reconnue pour ce type d'objet. Il faudrait inclure une routine de détection du type d'objet pour la rendre polyvalente.

    2 - Faire une barre d'onglets dans Draw et la coller dans document Writer, l'ancrer à la page pour faciliter le positionnement, éditer les textes pour les transformer en hyperliens. Idéal coté esthétique, mais du travail (très simple) pour les hyperliens.

    La macro de Zoom61 ne convient pas. La macro retouchée par Jurassic pork convient, la propriété AnchorPageNo étant reconnue pour ce type d'objet.

    Je joins le document permettant de faire des essais. Désolé mais encore une fois je suis obligé de passer par dropbox, sur mon poste les boutons de la gestion des pièces jointes se chevauchent.
    https://www.dropbox.com/s/mufsj8gd8m...pages.zip?dl=0

    Cordialement
    Patrick

  15. #15
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Patrick Guimberteau Voir le message
    Je joins le document permettant de faire des essais.
    Le fichier joint ne contient pas la ou les macros
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  16. #16
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par zoom61 Voir le message
    Le fichier joint ne contient pas la ou les macros
    Ben oui, les macros sont celles données plus haut...

    La tienne :
    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
    Sub Zoom61()
        Dim monDocument As Object
        Dim PageEncours As Object
        Dim Compteur As integer
        Dim PageActive As Integer, PageFin As Integer, PageNb As Integer
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
        monDocument = ThisComponent
        PageEncours = monDocument.CurrentController.ViewCursor
        PageActive = PageEncours.Page
        PageEncours.jumpToLastPage
        PageFin = PageEncours.Page
        PageNb = PageFin-PageActive 
        PageEncours.jumpToPage(PageActive)
     
     
    document   = ThisComponent.CurrentController.Frame
    rem : C'est dans la macro enregistrée je laisse
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Copie de l'objet sélectionné C'est dans la macro enregistrée je laisse
        dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    For Compteur = PageActive+1 To PageFin
     
        PageEncours.jumpToPage(Compteur)
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Collage de l'objet sélectionné C'est dans la macro enregistrée je laisse
        dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
      Next Compteur
        Print "Page en cours : " & PageActive & " - Nombre de pages : " & PageFin & " - Nombre de copie : " & PageNb
    End Sub
    Et celle retouchée par Jurassic Pork...
    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
    Sub Zoom61()
        Dim monDocument As Object
        Dim PageEncours As Object
        Dim oSel As Object
        Dim Compteur As integer
        Dim PageActive As Integer, PageFin As Integer, PageNb As Integer
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
        monDocument = ThisComponent
        PageEncours = monDocument.CurrentController.ViewCursor
        PageActive = PageEncours.Page
        PageEncours.jumpToLastPage
        PageFin = PageEncours.Page
        PageNb = PageFin-PageActive 
        PageEncours.jumpToPage(PageActive)
     
    document   = ThisComponent.CurrentController.Frame
    rem : C'est dans la macro enregistrée je laisse
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Copie de l'objet sélectionné C'est dans la macro enregistrée je laisse
        dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
    For Compteur = PageActive+1 To PageFin
     
        PageEncours.jumpToPage(Compteur)
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    rem -----Collage de l'objet sélectionné C'est dans la macro enregistrée je laisse
        dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
        oSel = monDocument.CurrentController.Selection.getByIndex(0)
        oSel.AnchorPageNo = Compteur
      Next Compteur
        Print "Page en cours : " & PageActive & " - Nombre de pages : " & PageFin & " - Nombre de copie : " & PageNb
    End Sub
    Je peux aussi joindre une explication sur l'intégration de ces macros dans Writer si besoin.

    Cordialement
    Patrick

  17. #17
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Patrick Guimberteau Voir le message
    Ben oui, les macros sont celles données plus haut...
    Aujourd'hui cela paraît logique mais dans 3 mois la personne qui tombe sur ce problème n'aura peut-être pas la même logique
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  18. #18
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    DEVELOPPEZ-Onglets-5pages.odt
    Citation Envoyé par zoom61 Voir le message
    Aujourd'hui cela paraît logique mais dans 3 mois la personne qui tombe sur ce problème n'aura peut-être pas la même logique
    Voilà donc le document test avec les macros inclues.

    Cordialement
    Patrick

  19. #19
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Patrick Guimberteau Voir le message
    Voilà donc le document test avec les macros inclues.
    Merci
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  20. #20
    Membre habitué
    Avatar de Patrick Guimberteau
    Homme Profil pro
    dessinateur - rédacteur
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur - rédacteur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par zoom61 Voir le message
    Merci
    C'est un plaisir !
    D'ailleurs voici le document retouché pour Develeppez.com qui explique le topo...

    Macro et Onglets Developpez_com.pdf

    Nom : DEVELOPPEZ-Onglets-5pages.jpg
Affichages : 443
Taille : 188,7 Ko

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

Discussions similaires

  1. [VBA-E] comment realiser une macro "passive"
    Par Marc dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/06/2006, 08h20
  2. Réponses: 9
    Dernier message: 25/01/2006, 15h35
  3. Comment insérer une macro excel dans une macro word?
    Par max2245 dans le forum VBA Word
    Réponses: 15
    Dernier message: 07/01/2006, 17h44
  4. [vbexcel]Comment stopper une macro sans la planter.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/11/2005, 14h45

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