[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 !
Laurent83
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 25 août 2017 15:22

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

Message par Laurent83 »

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

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é 182 fois
Dernière modification par Oukcha le 03 juil. 2018 11:54, modifié 1 fois.
Raison : Balisage
LibreOffice 5.2.5.1 sous Windows sept 64
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message par Hubert Lambert »

Bonjour,

Voici quelque chose qui devrait le faire :

Code : Tout sélectionner

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)
Laurent83
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 25 août 2017 15:22

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

Message par Laurent83 »

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
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message par Hubert Lambert »

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)
Laurent83
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 25 août 2017 15:22

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

Message par Laurent83 »

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é 152 fois
LibreOffice 5.2.5.1 sous Windows sept 64
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25142
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

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

Message par Dude »

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

Avec OpenOffice, le document fonctionne :
Clique sur l'image pour voir l'animation
Clique sur l'image pour voir l'animation
Laurent83
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 25 août 2017 15:22

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

Message par Laurent83 »

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
nouveau classeur
nouveau classeur
Modèle
Modèle
LibreOffice 5.2.5.1 sous Windows sept 64
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message par Hubert Lambert »

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

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)
Laurent83
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 25 août 2017 15:22

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

Message par Laurent83 »

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
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message par Hubert Lambert »

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)
Laurent83
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 25 août 2017 15:22

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

Message par Laurent83 »

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
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 01:17
Localisation : gâtine deux-sèvrienne

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

Message par luky-luke »

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

    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

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
Laurent83
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 25 août 2017 15:22

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

Message par Laurent83 »

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é 181 fois
LibreOffice 5.2.5.1 sous Windows sept 64
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message par Hubert Lambert »

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

   destController.Select destSheet
par

Code : Tout sélectionner

   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
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 01:17
Localisation : gâtine deux-sèvrienne

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

Message par luky-luke »

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é 269 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
Laurent83
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 25 août 2017 15:22

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

Message par Laurent83 »

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
Verrouillé