[Résolu][Calc] Copier une zone avec valeur et format

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
CathyContact3
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 26 juil. 2016 09:00

[Résolu][Calc] Copier une zone avec valeur et format

Message par CathyContact3 »


La modération vous a écrit: Pour la bonne tenue de ce forum, veillez à respecter la syntaxe des balises (première lettre en majuscule puis le reste en minuscules, le tout entre crochets).[Calc] et non [CALC]. Nus l'avons fait pour vous.

Bonjour
Je veux copier une zone de cellules dans un autre classeur avec le format et les valeurs des formules (donc sans les formule, juste le résultat) et sans recopier les boutons de controles.
J'arrive a copier tout ( format formules et boutons de controle ) avec copyRange ou uniquement les valeurs avec dataArray mais je perds les formats.
J'ai eu ces fonctions en parcourant le forum et les suprème de code mais je n'ai pas trouver une solution pour avoir les valeurs et les formats sans formule et sans les boutons de controle.
Je ne suis pas expert du codage, donc je cherche dans les exemples mais je ne trouve pas.
Merci si vous pouvez m'aider
Cathy
Dernière modification par CathyContact3 le 28 oct. 2019 08:19, modifié 2 fois.
Libre Office 7.0.4.2 (X64)
Windows 10.0.19041
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9251
Inscription : 28 août 2010 08:45

Re: [Calc] Copier une zone avec valeur et format sans formul

Message par micmac »

Bonjour,

Avant de poster une nouvelle question, il nous serait agréable que vous donniez suite au fil précédemment ouvert :
[Calc]Comment tuer un process lancé par shell
notamment en précisant la solution retenue et en ajoutant le balisage [Résolu] Image si c'est le cas.
C'est une question de courtoisie pour les gens qui vous ont répondu et consacré bénévolement de leur temps. Notre forum est plus lisible avec ce balisage comme vous avez pu vous en rendre compte en le parcourant.

Merci de votre collaboration
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Copier une zone avec valeur et format sans formul

Message par OOotremer971 »

Bonjour,
CathyContact3 a écrit :Je ne suis pas expert du codage, donc je cherche dans les exemples mais je ne trouve pas.
Tu peux simplement utiliser le dispatcher en enregistrant une macro avec l'enregistreur de macro, d'un copier/collage spécial pour récupérer les bons arguments en cochant et décochant les options du collage spécial qui t’intéressent.

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
CathyContact3
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 26 juil. 2016 09:00

Re: [Calc] Copier une zone avec valeur et format sans formul

Message par CathyContact3 »

Je préfère ne pas utiliser le dispacher qui génère un code énorme et pas très lisible. Je préfère écrire le code directement avec jute le code nécessaire et bien commenté pour les modifs ultérieures. Mon code est déjà énorme et j'essaye de faire des fonctions réutilisables et paramétrées. Je ne trouve pas juste une fonction de copie (valeur+format) genre .copyRange ou dataArray, peut être en paramétrant une fonction de copy des arguments ????
Libre Office 7.0.4.2 (X64)
Windows 10.0.19041
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc] Copier une zone avec valeur et format sans formul

Message par Hubert Lambert »

Bonjour,
CathyContact3 a écrit :Je préfère ne pas utiliser le dispacher qui génère un code énorme et pas très lisible.
La proposition d'OOotremer971 est pourtant, dans le cas d'espèce, plus simple que l'API qui, sauf erreur, ne propose aucun équivalent :

Code : Tout sélectionner

    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    doc = thiscomponent
    controller = doc.CurrentController
    frame = controller.Frame
    frame.ContainerWindow.setFocus()  ' voir bug 70883 (https://bugs.documentfoundation.org/show_bug.cgi?id=70883)
    source = doc.Sheets.getCellRangeByPosition(0,0,3,3,0)
    controller.select(source)
    dispatcher.executeDispatch(frame, ".uno:Copy", "", 0, array())
    dispatcher.executeDispatch(frame, ".uno:Deselect", "", 0, array())

    docdest = stardesktop.loadComponentFromURL("private:factory/scalc", "_default", 0, array())
    controller2 = docdest.CurrentController
    frame2 = controller2.Frame
    A1 = docdest.Sheets.getCellByPosition(0,0,0)
    controller2.select(A1)
    dim args(0) as new com.sun.star.beans.PropertyValue
    args(0).Name = "Flags"
    args(0).Value = "SVDT"
    dispatcher.executeDispatch(frame2, ".uno:InsertContents", "", 0, args())   
    dispatcher.executeDispatch(frame2, ".uno:Deselect", "", 0, array())
Les codes disponibles pour la propriétés "Flags" sont les suivants :

Code : Tout sélectionner

'A' : InsertDeleteFlags::ALL
'S' : InsertDeleteFlags::STRING
'V' : InsertDeleteFlags::VALUE
'D' : InsertDeleteFlags::DATETIME
'F' : InsertDeleteFlags::FORMULA
'N' : InsertDeleteFlags::NOTE
'T' : InsertDeleteFlags::ATTRIB
'O' : InsertDeleteFlags::OBJECTS
(source)

Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
CathyContact3
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 26 juil. 2016 09:00

Re: [Calc] Copier une zone avec valeur et format sans formul

Message par CathyContact3 »

Bonjour. Merci à OOotremer971 et Hubert Lambert.
Cette solution est super car effectivement le code est très petit et très clair. J'avais essayé avec l'enregistreur de macro et faire la copie spéciale mais le code était énorme et plein de code inutile. J'ai essayé de le nettoyer un peu mais ensuite il ne fonctionnait plus... Merci encore d'avoir pris le temps de répondre et de faire un fichier d'exemple en plus. Cela répond exactement à mon problème. :bravo:
Libre Office 7.0.4.2 (X64)
Windows 10.0.19041