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 :

Macro pour copier/coller les paramètres de dimensionnement d'une image


Sujet :

OpenOffice & LibreOffice

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Macro pour copier/coller les paramètres de dimensionnement d'une image
    Bonjour,
    J'aimerai construire une macro qui récupère la position, dimension et paramètres de crop d'une image (que j'appèle image 'Master'). Ensuite, je séléctionne une seconde image différente (sur la même page ou une autre...) et je lui applique ces paramètres.

    Je suis bien loin de l'objectif... pour le moment je fait une macro qui applique la position et taille d'une image avec des paramètres codés 'en dur'. Je sais pas faire mieux... :-( même après des heures de recherche sur les forums, pas moyen de trouver un code que je puisse facilement adapter.
    - je ne trouve pas comment récupérer les paramètres de crop de mon image 'Master'
    - je ne sais pas comment récuper ces paramètres sur une première images et les passer à une seconde. Pour le moment mes paramètres sont écrits en dur dans ma macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Voici ma petite macro :
    Sub DrawImageResize
            Dim oSize as new com.sun.star.awt.Size
            Dim oPos as new com.sun.star.awt.Point
            oDocument = ThisComponent
            oSelection = oDocument.CurrentSelection
            sel=oSelection.getByIndex (0)
            oSize.Width = 20000
            oSize.Height =10000
            oPos.x=5000
            oPos.y=5000
            sel.setSize(oSize)
            sel.setPosition(oPos)
    End Sub
    Est-ce que quelqu'un pourrait m'aider?
    Merci d'avance de vos coup de main ou idées.
    Cécile

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello Cécile,
    Tout d'abord tu ne nous dis pas avec quoi tu travailles : LibreOffice ? OpenOffice ? Quelle version ?
    Ensuite dans le forum pour rendre les choses plus lisible, il est fortement conseillé de mettre le code à l'intérieur d'une balise Code (le bouton # dans les icônes de l'Editeur de texte).

    Pour ce qui concerne ton problème, il y a quelque chose qui m'intrigue : pourquoi vouloir récupérer la position du master ? si la deuxième image est sur la même page tu vas cacher la première image quand tu vas appliquer les paramètres de positions à la deuxième.
    Je verrais bien pour ton code deux macros :
    une première qui mémorise la taille de l'image sélectionnée
    une deuxième qui applique les paramètres de taille mémorisés sur l'image sélectionnée.
    la mémorisation se fait par une variable globale au début du module de macros.
    Voici un exemple de 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
    REM  *****  BASIC  *****
     
    Global  oLargeurImage,oHauteurImage as Long
     
    Sub Memoriser_DimImage
    Dim oSize as new com.sun.star.awt.Size
    Dim oPos as new com.sun.star.awt.Point
    dim oPic as Object
    oDocument = ThisComponent
    oPic = oDocument.CurrentSelection
    oSize = oPic.getSize()
    oLargeurImage = oSize.Width
    oHauteurImage = oSize.Height
    End Sub
     
    Sub Changer_DimImage
    Dim oSize as new com.sun.star.awt.Size
    Dim oPos as new com.sun.star.awt.Point
    dim oPic as Object
    oDocument = ThisComponent
    oPic = oDocument.CurrentSelection
    oSize.Width = oLargeurImage
    oSize.Height = oHauteurImage 
    oPic.setSize(oSize)
    End Sub
    Il n'y a pas la gestion des exceptions quand par exemple on ne sélectionne pas une image mais dans ce cas le Basic signale une erreur.

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

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut ça avance, un grand merci, reste les paramètres de crop
    Tout d'abord merci beaucoup pour la suggestion de code J.P., j'arrive maintenant à redimensionner et positionner mon image. C'est une très grande avancée pour moi qui démarre avec les macros!
    Je m'excuse pour l'absence de formatage de mon premier code posté sur le forum, c'est la première fois que je faisais un post, j'ai maintenant compris comment il fallait faire et l’intérêt.
    Je suis sur OpenOffice 4.1.1.
    Un seul point noir restant: je n'arrive pas à trouver une fonction qui me récupère les paramètres de crop d'un image. Vous auriez une idée?

    Voici le code actuel auquel je suis arrivée grâce à votre aide :
    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
     
    REM  *****  BASIC  *****
     
    Global  oLargeurImage,oHauteurImage,oPosxImage,oPosyImage as Long
     
    Sub Memoriser_DimImage
    Dim oSize as new com.sun.star.awt.Size
    Dim oPos as new com.sun.star.awt.Point
    Dim oPic as Object
    oDocument = ThisComponent
    oSelection = oDocument.CurrentSelection
    oPic=oSelection.getByIndex (0)
    oSize = oPic.getSize()
    oPos = oPic.getPosition()
    oLargeurImage = oSize.Width
    oHauteurImage = oSize.Height
    oPosxImage = oPos.x
    oPosyImage = Opos.y
    End Sub
     
    Sub Changer_DimImage
    Dim oSize as new com.sun.star.awt.Size
    Dim oPos as new com.sun.star.awt.Point
    dim oPic as Object
    oDocument = ThisComponent
    oSelection = oDocument.CurrentSelection
    oPic=oSelection.getByIndex (0)
    oSize.Width = oLargeurImage
    oSize.Height = oHauteurImage 
    oPos.x = oPosxImage
    oPos.y = oPosyImage
    oPic.setSize(oSize)
    oPic.setPosition(oPos)
    End Sub

    Merci.

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello Cécile,

    voici comment récupérer la rognure de l'image et l'appliquer à une autre. J'en ai profité pour simplifier le code en utilisant des variants comme variables globales ce qui permet de mémoriser des structures qu'étaient par exemple oSize et oPos . Voici le code à essayer :
    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
    REM  *****  BASIC  *****
     
    Global  oRognure, oPosition, oDimension as  Variant
     
    Sub Memoriser_DimImage
     
    Dim oPic as Object
    oDocument = ThisComponent
    oSelection = oDocument.CurrentSelection
    oPic=oSelection.getByIndex (0)
    oDimension = oPic.getSize()
    oPosition = oPic.getPosition()
    oRognure = oPic.GraphicCrop
    End Sub
     
    Sub Changer_DimImage
    dim oPic as Object
    oDocument = ThisComponent
    oSelection = oDocument.CurrentSelection
    oPic=oSelection.getByIndex (0)
    oPic.setSize(oDimension)
    oPic.setPosition(oPosition)
    oPic.GraphicCrop = oRognure
    End Sub
    Et voilà !

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

Discussions similaires

  1. [XL-2007] Macro pour Copier coller des colonnes a partir d'une référence sur une ligne
    Par laurasoe dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/07/2014, 11h10
  2. [Toutes versions] Macro pour copier coller un fichier excel
    Par info009 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/05/2014, 23h48
  3. Pb de macro pour copier coller 100 fichier
    Par petit-ours dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/08/2011, 15h31
  4. [XL-2000] Macro pour copier-coller valeur avec un while
    Par golghot dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/06/2010, 16h52
  5. [XL-2007] macro pour copier coller des selections multiples
    Par bedoch dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/06/2009, 12h31

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