[Résolu] [Calc] Copie d'une feuille à un autre classeur

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 !

[Résolu] [Calc] Copie d'une feuille à un autre classeur

Messagepar Laurent83 » 05 Fév 2018 14:14

Bonjour à tous,

j'ai développé une macro dans le cadre du boulot, que j'utilisait sous OpenOffice.

Nous sommes maintenant passé à LibreOffice, et malheureusement, il y a quelques différences.

Et notamment ce qui me pose souci, la copie d'une feuille d'un classeur, vers un autre.
Etant novice, j'ai créé cette macro en "copiant" le code là où j'en trouvait (beaucoup ici) et je le modifiais pour qu'il corresponde à mon besoin.

Pour faire la copie d'une feuille du classeur A, et la copier dans le classeur B, j'ai utilisé le dispatcher:

Code : Tout sélectionner   AgrandirRéduire
Sub CopySheet2(sourceDoc,sourceSheet,destDoc,destSheet)

REM sourceDoc -> classeur d'origine
REM sourceSheet -> onglet du classeur d'origine
REM destDoc -> classeur où sera copié l'onglet du classeur d'origine
REM destSheet -> onglet de destination


   Dim dispatcher As Object, sourceController As Object, destController As Object
   
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

REM on pointe sur l'onglet d'origine
   sourceController = sourceDoc.currentController
   sourceController.Select sourceSheet

REM puis on copie la feuille
   dispatcher.executeDispatch(sourceController.frame, ".uno:Copy", "", 0, Array())
   
REM puis on pointe sur la feuille de destinaiton sur l'autre classeur
   destController = destDoc.currentController
   destController.Select destSheet

REM et on colle
   dispatcher.executeDispatch(destController.frame, ".uno:Paste", "", 0, Array())
 
End Sub

Cela marchait très bien sur Openoffice, mais là, il copie bien, mais ne colle pas.
J'ai essayé de coller moi même, ca marche bien, donc il copie bien la feuille.
A priori, il se place bien au bon endroit, mais ne veut pas coller.

Que dois-je changer pour que cela fonctionne de nouveau ?

Je vous joins le fichier, qui je l'espère contient la macro SST.
Lorsqu'on lance la macro SST, elle travaille sur le premier classeur, en crée un deuxième et vient y faire des opérations, après avoir copié le format des feuilles de destinations.

Je vous
remercie.
Pièces jointes
test.ods
Fichier test contenant la macro
(55.3 Kio) Téléchargé 51 fois
Dernière édition par Oukcha le 03 Juil 2018 10:54, édité 1 fois.
Raison: Balisage
LibreOffice 5.2.5.1 sous Windows sept 64
Laurent83
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 25 Août 2017 14:22

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Hubert Lambert » 05 Fév 2018 16:51

Bonjour,

Voici quelque chose qui devrait le faire :
Code : Tout sélectionner   AgrandirRéduire
Sub Main
    dest = thiscomponent.Sheets(0)
    CopySheet2("C:\Users\127998\Desktop\source.ods", "Feuille1", dest)
End Sub

Sub CopySheet2(sourceURL, sourceSheetName, destSheet)
    sourceURL = convertToURL(sourceURL)
    destSheet.link(sourceURL, sourceSheetName, "", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
    destSheet.LinkMode = com.sun.star.sheet.SheetLinkMode.NONE
    destSheet.LinkURL = ""
End Sub

Pour plus d'exemples, tu peux faire une recherche sur le forum avec le mot clé SheetLinkMode ;) .
Cordialement.
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)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1206
Inscrit le : 06 Avr 2016 08:26

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Laurent83 » 29 Juin 2018 15:01

Bonjour,

je reviens sur ce fil après des mois sans y avoir touché (j'ai même ouvert un autre fil en ayant complément oublié celui là, et je m'en excuse).

Merci pour votre retour, mais malheureusement, la copie ne se fait toujours pas.
LibreOffice 5.2.5.1 sous Windows sept 64
Laurent83
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 25 Août 2017 14:22

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Hubert Lambert » 29 Juin 2018 15:27

Si ça ne marche pas, fournis-nous le code pour qu'on puisse voir où est l'erreur.
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)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1206
Inscrit le : 06 Avr 2016 08:26

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Laurent83 » 02 Juil 2018 08:07

Bonjour,

voilà en pièce jointe le fichier de données contenant la macro.

J'ai deux sous fonctions copysheet et copysheet2. J'ai essayé les deux et je ne vois pas où ca plante. Surtout que ça marchait convenablement avant avec la copysheet .

Encore merci pour votre aide.
Pièces jointes
test.ods
(55.89 Kio) Téléchargé 28 fois
LibreOffice 5.2.5.1 sous Windows sept 64
Laurent83
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 25 Août 2017 14:22

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Dude » 02 Juil 2018 09:03

"ca plante" ne veut rien dire.
Explique nous ce qui t'arrive avec des copies écran par exemple.

Avec OpenOffice, le document fonctionne :
no_problemo.gif
Clique sur l'image pour voir l'animation
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21695
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Laurent83 » 02 Juil 2018 09:39

Dude a écrit:Avec OpenOffice, le document fonctionne


Oui, c'est là le problème. J'ai créé cette macro lorsque j'utilisais OpenOffice et ça fonctionnait bien.
depuis que nous sommes passés à LibreOffice, elle ne fonctionne plus.

L'onglet Modele est convenablement créé (cf PJ1)
et ce modèle doit être copié sur chaque feuille du nouveau classeur, mais il ne se colle pas (cf PJ2)

Ça vient peut-être de la façon de sélectionner la nouvelle page de destination, car si je stop la macro juste âpres le collage qui ne fonctionne pas et que je CTRL A, CTRL V, ça colle bien.
Pièces jointes
pj2.png
nouveau classeur
pj1.png
Modèle
LibreOffice 5.2.5.1 sous Windows sept 64
Laurent83
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 25 Août 2017 14:22

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Hubert Lambert » 02 Juil 2018 11:57

Bonjour,

CopySheet2 marche très bien sous OpenOffice et LibreOffice. Mais à partir du moment où tu crées la feuille à copier pendant l'exécution de la macro (ce que tu ne précisais pas), il faut sauvegarder le fichier source pour que le lien se fasse.
Si tu rajoutes la ligne
Code : Tout sélectionner   AgrandirRéduire
Mondoc.store()
après la création de la feuille "Modele", ça doit fonctionner... Et si ta feuille s'appelle "Modele", il est vivement conseillé de respecter les majuscules !
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)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1206
Inscrit le : 06 Avr 2016 08:26

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Laurent83 » 02 Juil 2018 12:54

J'ai donc rajouter la ligne de code que tu as précisé. Le document s’enregistre bien, mais la copie ne se fait toujours pas, même en respectant le M majuscule.
Et ce n'est vraiment pas pratique de devoir sauvegarder.

Je préférerais utiliser copysheet, qui n’avait pas besoin de sauvegarder.
Mais celle qui fonctionnera fera l'affaire.


Est-ce que cela fonctionne de ton coté (si tu utilises Libreoffice) ?

encore merci pour votre temps.
LibreOffice 5.2.5.1 sous Windows sept 64
Laurent83
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 25 Août 2017 14:22

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Hubert Lambert » 02 Juil 2018 13:33

Laurent83 a écrit:Est-ce que cela fonctionne de ton coté (si tu utilises Libreoffice) ?

Si je dis que ça marche sous LibreOffice, c'est que je l'ai testé... :wink:
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)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1206
Inscrit le : 06 Avr 2016 08:26

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Laurent83 » 02 Juil 2018 13:35

Je voulais dire est-ce que tu as testé mon fichier et ma macro sous LibreOffice de ton coté?
car en ayant fiat tes modifications, de mon coté ca ne copie toujours pas.

J'utilise la version Version: 5.2.5.1
LibreOffice 5.2.5.1 sous Windows sept 64
Laurent83
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 25 Août 2017 14:22

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar luky-luke » 02 Juil 2018 16:01

Bonjour
Laurent83 a écrit:Je voulais dire est-ce que tu as testé mon fichier et ma macro sous LibreOffice de ton coté?
Je viens de tester et la macro fonctionne sous OpenOffice et LibreOffice.
Une petite remarque tout de même, Hubert Lambert donne la ligne de code suivante
Code : Tout sélectionner   AgrandirRéduire
    CopySheet2("C:\Users\127998\Desktop\source.ods", "Feuille1", dest)
Pour être bien sûr de ne pas se tromper d'adresse URL pour le document d'origine, remplacer par
Code : Tout sélectionner   AgrandirRéduire
CopySheet2 (MonDoc.URL,"Modele",FeuilleDestSST)


Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 936
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Laurent83 » 03 Juil 2018 09:55

Bonjour et merci pour ton retour.

J'ai modifié le code comme tu le proposes et la copie ne se fait toujours pas.

Je te renvoie mon fichier avec la macro à jour.

Si ce fichier fonctionne chez toi, c'est que ça doit être un problème d'environnement, et non le code. qu'en penses-tu ?
Pièces jointes
test.ods
fichier avec macro à jour (utilisation de copysheet2)
(57.61 Kio) Téléchargé 44 fois
LibreOffice 5.2.5.1 sous Windows sept 64
Laurent83
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 25 Août 2017 14:22

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Hubert Lambert » 03 Juil 2018 10:27

Bonjour,

Il semble que, avec LibreOffice, le changement de sélection influence le contenu du presse-papier.
Dans la routine CopySheet, si tu remplaces la ligne
Code : Tout sélectionner   AgrandirRéduire
   destController.Select destSheet
par
Code : Tout sélectionner   AgrandirRéduire
   destController.ActiveSheet = destSheet
tout devrait rentrer dans l'ordre.

Cordialement.
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)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1206
Inscrit le : 06 Avr 2016 08:26

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar luky-luke » 03 Juil 2018 10:30

Bonjour
Test le fichier que je te communique. l'enregistrement du document d'origine se fait à la ligne 785 juste avant la création du nouveau document et après la création complète de la nouvelle feuille.

 Ajout : Hubert à publier son message pendant l'édition du mien. Sa solution peut certainement régler l'affaire également :wink: 


Cordialement
Luke
Pièces jointes
Laurent83.ods
(54.4 Kio) Téléchargé 76 fois
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 936
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Copie d'une feuille à un autre classeur

Messagepar Laurent83 » 03 Juil 2018 10:38

Effectivement, la proposition de Hubert fonctionne parfaitement !!
Encore merci pour toute votre aide.

Est-ce que cela fonctionnait de votre coté avec LibreOffice car vous avez les deux, OpenOffice et LibreOffice d'installés ?

En tout cas, il fallait trouver que cela venait d'un mauvais pointage du presse papier.
Chapeau bas et encore merci.
LibreOffice 5.2.5.1 sous Windows sept 64
Laurent83
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 12
Inscrit le : 25 Août 2017 14:22


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)