Macros diverses

Bonjour,

Dans le cadre du développement d’un outil professionnel, je souhaiterai faire des actions automatiques via des macros :

  1. Copier les valeurs situées sur une feuille 1 (colonnes A à F) sur une feuille 2 (colonnes I à N) en utilisant la fonction “collage spécial”.

  2. Copier une feuille X vers un nouveau classeur tout en conservant la mise en page et la protection de la feuille.

Merci pour votre aide !

Bonne journée

Bonjour

Ce sont des (rares) cas où l’utilisation de l’enregistreur de macros est intéressant (il faut avoir autorisé son emploi dans OutilsOptionsLibreOfficeAvancéFonctionnalités optionnelles).

Tu obtiens des instructions pour le point 1 comme :

dispatcher.executeDispatch(document, ".uno:PasteOnlyText", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:PasteOnlyValue", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:PasteOnlyFormula", "", 0, Array())

et pour le point 2 :

dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "DocName"
args1(0).Value = ""
args1(1).Name = "Index"
args1(1).Value = 32767
args1(2).Name = "Copy"
args1(2).Value = true

dispatcher.executeDispatch(document, ".uno:Move", "", 0, args1())

[Ajout 04-02-20 08:15]

@jumeni a écrit:

l’enregistrement de macro ne me donne pas le résultat attendu. Le résultat obtenu est très aléatoire…

Je ne dirais pas cela. Le résultat est conforme à ce que j’énonçais et non aléatoire. En revanche il faut tenir compte de ses limites (voir l’aide), et bien préparer l’enchaînement des actions à réaliser pour n’enregistrer que ce qui est indispensable. Il est enfin possible de “nettoyer” le résultat, notamment en supprimant la création de variables inutiles et en "dé-commentant " certaines instructions.

Voir l’exemple CopierColler.ods joint qui fait le collage spécial : texte, nombre, date & format (ne colle pas la formule)

Cordialement

Merci pour la contribution !
Mais l’enregistrement de macro ne me donne pas le résultat attendu. Le résultat obtenu est très aléatoire.
Avez-vous une idée du code à inscrire pour obtenir le résultat suivant :

A partir d’un bouton situé sur l’onglet “Feuille 1”, copier les cellules AA1:AF25 de la feuille 2 sur les cellules A1:F25 de la feuille 3.

Merci d’avance