Bonjour à tous.
Malgré une longue recherche je n'ai malheureusement pas trouvé réponse à mon problème.
Mon problème est le suivant:
Depuis un fichier Calc (source), je crée un nouveau fichier Calc en y insérant l'une des feuilles de mon fichier source.
Jusqu'ici pas de problème. Par contre je veux donner un nom à mon nouveau fichier Calc et là, c'est le document source qui est renommé. De toute évidence si mon nouveau fichier est bien le premier visible à l'écran, il n'est pas activé. Malgré mes recherche je n'arrive pas à solutionner mon problème.
Je joins un fichier exemple avec ma macro.
Merci d'avance
[Résolu][Calc] Copie d'une feuille dans un nouveau classeur
Modérateur : Vilains modOOs
Règles du forum
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 !
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 !
-
- Membre OOrganisé
- Messages : 78
- Inscription : 07 avr. 2011 12:04
- Localisation : Vendée (France)
[Résolu][Calc] Copie d'une feuille dans un nouveau classeur
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 08 juil. 2012 21:56, modifié 2 fois.
Raison : Suppression de Calc dans le titre. + Balise [Résolu] et la coche dans le titre du premier message
Raison : Suppression de Calc dans le titre. + Balise [Résolu] et la coche dans le titre du premier message
Libre Office Version: 7.0.4 (x64)
SE Windows 10
SE Windows 10
-
- ManitOOu
- Messages : 2668
- Inscription : 30 avr. 2009 04:54
- Localisation : CATALUNYA
Re: [Calc] Copie d'une feuille dans un nouveau Calc
Bonjour,
Procédure :
- ouvrir le fichier source et lancer la macro qui
- sélectionne la zone à copier (la totalité de la feuille est efficace, certes... mais radicale )
- créer un fichier vide (il est actif)
- sélectionne la feuille de réception dans le nouveau fichier
- y copie la sélection précédente
- donne un nom et sauvegarde via .storeAsURL.
A ce stade c'est le fichier cible qui est activf, pour revenir sur la source, il suffit de sélectionner avec thisComponent.select(oObjet : oObjet étant une feuille, une cellule ou une plage de cellules de la source, pour que cette sélection soit active et donc le document source.
Plusieurs exemples sur le forum sont disponibles pour ce faire.
Ton soucis vient effectivement de l'activation des fichiers. Via l'API, le code a de grandes chances d'être plus compact qu'avec le dispatcher utilisé par l'enregistreur.Mobydick_62 a écrit :Par contre je veux donner un nom à mon nouveau fichier Calc et là, c'est le document source qui est renommé. De toute évidence si mon nouveau fichier est bien le premier visible à l'écran, il n'est pas activé.
Procédure :
- ouvrir le fichier source et lancer la macro qui
- sélectionne la zone à copier (la totalité de la feuille est efficace, certes... mais radicale )
- créer un fichier vide (il est actif)
- sélectionne la feuille de réception dans le nouveau fichier
- y copie la sélection précédente
- donne un nom et sauvegarde via .storeAsURL.
A ce stade c'est le fichier cible qui est activf, pour revenir sur la source, il suffit de sélectionner avec thisComponent.select(oObjet : oObjet étant une feuille, une cellule ou une plage de cellules de la source, pour que cette sélection soit active et donc le document source.
Plusieurs exemples sur le forum sont disponibles pour ce faire.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
-
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 00:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc] Copie d'une feuille dans un nouveau Calc
Bonjour,
Vite fait, en sortant d'une sieste estivale, et entièrement dans la langue de Shakespear (sauf les commentaires) pour ne choquer personne
Cordialement
Luke
Vite fait, en sortant d'une sieste estivale, et entièrement dans la langue de Shakespear (sauf les commentaires) pour ne choquer personne
Code : Tout sélectionner
Option Explicit
Sub Main
Dim MySheet As Object, NewSheet As Object
Dim SourceArea As Object, TargetArea As Object
Dim NewDoc As String, DisplaySource As Object
Dim MyFileName As String, addressDoc As String
Mysheet = ThisComponent.Sheets(2) 'Le document Actif feuille 3
ThisComponent.CurrentController.ActiveSheet = MySheet
SourceArea = Mysheet.GetCellRangeByName("A1:F14") 'La zone à copier
NewDoc = "private:factory/scalc" 'Création d'un nouveau document
DisplaySource = StarDesktop.LoadComponentFromURL(NewDoc,"_blank",0,array())
MyFileName = "NewDoc.ods" 'Le Nom du nouveau document
'addressDoc = convertToURL("C:\NouveauDoc.ods" + MyFileName) ' et son adresse
addressDoc = convertToUrl ("/home/luky-luke/Bureau/" + MyFileName) ' et son adresse
NewSheet = DisplaySource.Sheets(2) ' Choix de la nouvelle feuille
DisplaySource.CurrentController.ActiveSheet = NewSheet
TargetArea = NewSheet.GetCellRangeByName("A1:F14") 'La zone ou l'on copie
TargetArea.DataArray = SourceArea.DataArray 'La copie
DisplaySource.storeAsUrl(addressDoc,array()) 'l'enregistrement avec le nom
End Sub
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
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
-
- Membre OOrganisé
- Messages : 78
- Inscription : 07 avr. 2011 12:04
- Localisation : Vendée (France)
Re: [Calc] Copie d'une feuille dans un nouveau Calc
Bonjour et merci à vous de m''avoir répondu rapidement.
Comme dit Churay : "copier la totalité de la feuille est efficace, certes... mais radicale". Mais l'avantage est que ma feuille cible est complètement identique à ma feuille source. Elle garde toutes les mises en formes (largeur colonnes, hauteur lignes, police de caractères.....ect...).
J'ai repris le code de luky-luke qui fonctionne très bien puisque j'arrive à nommer mon nouveau fichier calc là où je veux. Par contre le code repose sur la copie d'une zone de cellule. Dans le principe c'est parfait mais le problème est que dans mon nouveau classeur je perd toutes les mises en formes de ma feuille source.(largeur colonnes, hauteur lignes, police de caractères.....ect...).
En lisant le livre : Programmation OpenOffice.org 3 l'auteur dit, je cite "Si votre classeur comporte une feuille parfaitement formatée et remplie, il est avantageux de créer une feuille en faisant une copie de la première." Mais son exemple repose sur la copie d'une feuille et le collage dans un même classeur. C'est ce que je voudrais faire mais dans un nouveau classeur.
En reprenant le code de luki-luke, peut être est t'il possible de copier/collier une plage de cellule en gardant leurs mise en forme ?????? Je vais chercher.
Comme dit Churay : "copier la totalité de la feuille est efficace, certes... mais radicale". Mais l'avantage est que ma feuille cible est complètement identique à ma feuille source. Elle garde toutes les mises en formes (largeur colonnes, hauteur lignes, police de caractères.....ect...).
J'ai repris le code de luky-luke qui fonctionne très bien puisque j'arrive à nommer mon nouveau fichier calc là où je veux. Par contre le code repose sur la copie d'une zone de cellule. Dans le principe c'est parfait mais le problème est que dans mon nouveau classeur je perd toutes les mises en formes de ma feuille source.(largeur colonnes, hauteur lignes, police de caractères.....ect...).
En lisant le livre : Programmation OpenOffice.org 3 l'auteur dit, je cite "Si votre classeur comporte une feuille parfaitement formatée et remplie, il est avantageux de créer une feuille en faisant une copie de la première." Mais son exemple repose sur la copie d'une feuille et le collage dans un même classeur. C'est ce que je voudrais faire mais dans un nouveau classeur.
En reprenant le code de luki-luke, peut être est t'il possible de copier/collier une plage de cellule en gardant leurs mise en forme ?????? Je vais chercher.
Libre Office Version: 7.0.4 (x64)
SE Windows 10
SE Windows 10
-
- ManitOOu
- Messages : 3028
- Inscription : 30 avr. 2011 23:08
- Localisation : Casablanca (Maroc)
Re: [Calc] Copie d'une feuille dans un nouveau Calc
Bonjour à tous,
Utilisation exceptionnelle du dispatcher... pour copier la totalité de la feuille avec un code sans complications inutiles, pour conserver tous les formatages, ainsi que les dimensions de cellules.
Utilisation exceptionnelle du dispatcher... pour copier la totalité de la feuille avec un code sans complications inutiles, pour conserver tous les formatages, ainsi que les dimensions de cellules.
Code : Tout sélectionner
REM ***** BASIC *****
Option Explicit
Sub Main
Dim sourceDoc As Object, sourceSheet As Object
Dim destDoc As Object, destSheet As Object, destURL As String
sourceDoc = thisComponent
sourceSheet = sourceDoc.sheets.GetByName("Feuille2")
destDoc = StarDesktop.LoadComponentFromURL("private:factory/scalc","_blank",0,array())
destSheet = destDoc.sheets.GetByName("Feuille3")
CopySheet sourceDoc,sourceSheet, destDoc,destSheet
destURL = "J:\nouveau_classeur.ods" 'à modifier bien sûr
destURL = ConvertToURL(destURL)
destDoc.StoreAsUrl(destURL,array())
End Sub
Sub CopySheet(sourceDoc,sourceSheet, destDoc,destSheet)
Dim dispatcher As Object, sourceController As Object, destController As Object
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
sourceController = sourceDoc.currentController
sourceController.Select sourceSheet
dispatcher.executeDispatch(sourceController.frame, ".uno:Copy", "", 0, Array())
destController = destDoc.currentController
destController.Select destSheet
dispatcher.executeDispatch(destController.frame, ".uno:Paste", "", 0, Array())
End Sub
Je ne comprends pas l'allusionluky-luke a écrit :entièrement dans la langue de Shakespear (sauf les commentaires) pour ne choquer personne
À bientôt
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
-
- Membre OOrganisé
- Messages : 78
- Inscription : 07 avr. 2011 12:04
- Localisation : Vendée (France)
Re: [Calc] Copie d'une feuille dans un nouveau classeur
Bonsoir à tous,
Merci alhazred pour ton aide. C'est exactement ce que je recherchais.
Je passe donc en résolu.
Merci alhazred pour ton aide. C'est exactement ce que je recherchais.
Je passe donc en résolu.
Libre Office Version: 7.0.4 (x64)
SE Windows 10
SE Windows 10