[Résolu][Calc] Copie d'une feuille sans ses formules

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 !
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

[Résolu][Calc] Copie d'une feuille sans ses formules

Message par Pickup02 »

Bonjour à tous.

Je suis dérouté par tous les posts relatifs aux exports et enregistrement d'une seule feuille d'un classeur.
Je parviens à exporter une feuille en pdf avec recopie de nom de fichier créer par concaténer sans soucis.

Mais j'ai besoin d'enregistrer aussi cette feuille et uniquement cette feuille (la feuille 31) en format ods pour qu'elle puisse être modifié par un tiers.
Le nom d'enregistrement de cette feuille se situe en A2 sur cette même feuille (feuille 31).

J'essaie de faire en sorte que cette manipulation ce fasse avec un bouton.
Comme avec l'export en pdf sauf que ceci se ferait en ods.

tel que : clic sur bouton, copie du nom de fichier en A2, enregistrement de la feuille avec non de fichier sous format ods.
Cette feuille contient des cellules qui vont recherché des données sur une autres feuilles.

je ne retrouve pas de sujets abordés.

Si quelqu'un à des infos ou une solution .

Merci et bonne journée.
Yohann.
Dernière modification par Pickup02 le 21 sept. 2012 14:35, modifié 1 fois.
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12196
Inscription : 08 nov. 2005 17:23
Localisation : Caen, France
Contact :

Re: enregistrement d'une feuille d'un classeur

Message par Bidouille »

Bonjour,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche. Avez-vous remarqué comment étaient les autres questions postées ?

Lisez ce fil pour savoir quelle balise utiliser : http://user.services.openoffice.org/fr/ ... html#27295

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.

Merci de votre collaboration.
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: enregistrement d'une feuille d'un classeur

Message par Pickup02 »

Bidouille a écrit :Bonjour,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche. Avez-vous remarqué comment étaient les autres questions postées ?

Lisez ce fil pour savoir quelle balise utiliser : http://user.services.openoffice.org/fr/ ... html#27295

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.

Merci de votre collaboration.
Merci Monsieur Bidouille ,Je n'avais pas fait attention que j'étais sorti de la section Calc Désolé .....
Open Office 3.2.1 sur Microsoft XP PRO
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

pour faire plus simple,
j'essaie de modifier le macro ci dessous pour enregistrer en ods une feuille mais pas en pdf.

dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim propFich(1) as new com.sun.star.beans.PropertyValue
dim filterProps(0) as new com.sun.star.beans.PropertyValue
filterProps(0).Name = E2 rem "PageRange"
filterProps(0).Value = "1"
propFich(0).Name = E2 rem "FilterName"
propFich(0).Value = "calc_pdf_Export"
propFich(1).Name = "FilterData"
propFich(1).Value = filterProps()
dispatcher.executeDispatch(document, ".uno:ExportTopdf", "", 0, PropFich())
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Dude »

As-tu remarqué en parcourant ce forum comment était rédigé les messages ?
Quand on poste du code, on l'encadre pour qu'il soit plus lisible :

Code : Tout sélectionner

Du code bien encadré est plus facile à lire
Pickup02 a écrit :j'essaie de modifier le macro ci dessous pour enregistrer en ods une feuille mais pas en pdf.
Le code que tu donnes vient de l'enregistreur de macro.
Il te suffit de l'utiliser et de faire l'opération de copie de feuille que je t'ai conseillée dans ton autre fil.
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Dude,
Dude a écrit : Le code que tu donnes vient de l'enregistreur de macro.
Il te suffit de l'utiliser et de faire l'opération de copie de feuille que je t'ai conseillée dans ton autre fil.
Ce code provient certainement de l'enregistreur, mais je l'ai trouvé sur le forum en l'adaptant à mon classeur.

J'ai utilisé l'enregistreur de macro, sauf que ça ne fonctionne pas, étant donné que mes cellules contiennent des formules, lors de la copie, calc copie les formules mais pas les valeurs.

voila ou j'en suis ... pas terrible hein ?
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Dude »

Pickup02 a écrit :J'ai utilisé l'enregistreur de macro, sauf que ça ne fonctionne pas
"ne fonctionne pas" ne veut rien dire.
Pourquoi ne joins-tu pas un fichier accompagné du code ?
Celui que tu donnes sert uniquement à exporter en PDF.
Pickup02 a écrit :étant donné que mes cellules contiennent des formules, lors de la copie, calc copie les formules mais pas les valeurs
Encore une information qui aurait dû être précisée dès le départ. :evil:
Ton titre ne reflète donc pas le problème que tu exposes : [Calc] Copie d'une feuille sans formule

Tout cela fait a bien sûr fait l'objet de réponses dans le forum.
Par exemple : http://user.services.openoffice.org/fr/ ... ie+feuille
Le copier / coller de données entre classeurs a aussi un suprême : http://user.services.openoffice.org/fr/ ... c6371.html
Et une adaptation en utilisant le collage spécial : http://user.services.openoffice.org/fr/ ... %C3%A9cial
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Dude,
Je n'ai pas pour habitude de devenir rouge ......comme le diable. :evil:

Je suis débutant dans open office c'est une vérité pas une justification !
je suis forcément aussi débutant dans le forum c'est une vérité pas une justification !
Je doit me faire à l'utilisation de ce forum qui est très , même très utile pour un utilisateur comme moi !

alors on peut, retrouver à redire sur tout ce que j'envoie et qui n'entre pas pas dans des formulations aussi explicites que celles que vous utilisez habituellement

On peut aussi retrouver à redire sur les mises en page, manque de détails,fautes d'orthographes, de conjugaisons, de grammaires, etc etc etc.

Alors moi je viens à redire aussi :
Mon titre est quand même explicite, mais on ne pas tout dire dans un titre.
Le titre que tu proposes :
Pickup02 a écrit :[Calc] Copie d'une feuille sans formule
Moi je comprends qu'il n'y pas de formules dans la feuille en question.... libre choix de compréhension .

De plus:
Pickup02 a écrit :Encore une information qui aurait dû être précisée dès le départ. :evil:
Ton titre ne reflète donc pas le problème que tu exposes : [Calc] Copie d'une feuille sans formule
Alors si je l'ai précisé ! :
Pickup02 a écrit :Cette feuille contient des cellules qui vont recherché des données sur une autres feuilles.
.libre choix de compréhension .

Voila. moi je veux bien envoyer même mon fichier : mais 2600 Ko.

Je suis bien conscient que nous sommes "tous" "bénévoles" et que l'on prends de votre temps et je vous en remercie encore une fois de plus.
Donc je relierais encore les posts des liens que tu me fais suivre, je les ai déjà lu et essayer d'adapter les bouts de macros qui correspondent à mes besoins sans y parvenir au resultats escomptés comme je l'ai exprimé dans l'autres section CALC de laquelle je suis sorti pour convenir à la bonne utilisation de ce forum.

Bonne soirée.

Merci encore .
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Dude »

Pickup02 a écrit :[Calc] Copie d'une feuille sans formule
Moi je comprends qu'il n'y pas de formules dans la feuille en question.... libre choix de compréhension .
Dans ce cas : [Calc] Copie d'une feuille sans ses formules
Pickup02 a écrit :moi je veux bien envoyer même mon fichier : mais 2600 Ko.
Il t'appartient de fabriquer un exemple de moins de 500 ko (limite du forum) contenant suffisament d'informations anonymes pour que cela soit compréhensible.
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Bonsoir,

Voilà une macro qui
  • - créée un fichier vide,
    - y copie le contenu de la Feuille31,
    - sauvegarde le nouveau fichier en reprenant le nom de l'original + "_Copie",
    - le fichier est placé dans le même dossier que l'original (l'original doit donc avoir été sauvegardé, sinon ça plante) :

Code : Tout sélectionner

REM  *****  BASIC  *****
'
' Code fourni par le forum francophone OOo/LO
' http://user.services.openoffice.org/fr/forum/viewtopic.php?f=8&t=35225
'
'
' Ce code est placé sous licence GNU GPL
'
' Testé avec OOo 3.2.1, AOO 3.4.1, LO 3.4.3 et LO 3.5.5.3
'
Option Explicit

Sub Main
Dim oCible As Object, oSheet As Object, oCursor As Object
Dim oRange As Object, oRangeCpy As Object
Dim sURL As String, aUrl() As String
	' on Créé la Cible
	sURL = "private:factory/scalc"
	oCible = StarDesktop.loadComponentFromURL(sURL,"_blank",0,Array())
	' On récupère la Feuille31
	oSheet = thisComponent.Sheets.getByName("Feuille31")
	' On récupère la plage utilisée
	oCursor = oSheet.createCursor() : oCursor.gotoStartOfUsedArea(False)
	oCursor.gotoEndOfUsedArea(True) : oRange = oCursor.getRangeAddress() 
	' Et son contenu
	oRangeCpy = oSheet.getCellRangeByPosition(_
					oRange.StartColumn, oRange.StartRow,_
					oRange.EndColumn, oRange.EndRow).getDataArray
	' qu'on copie en Feuille1 du document créé
	oCible.Sheets(0).getCellRangeByPosition(_
					oRange.StartColumn, oRange.StartRow,_ 
					oRange.EndColumn, oRange.EndRow).setDataArray(oRangeCpy)
	' On récupère le nom du document original (avec le path)
	aUrl = split(thisComponent.URL,".ods")
	' on modifie le nom et on rajoute l'extension
	sUrl = aUrl(0) & "_Copie.ods"
	' on sauvegarde la copie et on la ferme
	oCible.storeAsURL(sUrl, Array())
	oCible.close(True)
End Sub
Comme à mon habitude WYWIWYG, je ne teste ni que le fichier a été sauvegardé, ni que la copie existe : ce ne sont jamais que deux tests à rajouter.
 Ajout : L'existence de la Feuille31 n'est pas testée non plus : cela fait donc éventuellement trois tests à rajouter ;) 
 Ajout : 2
Mais il n'y a pas qu'à ce niveau que je m'éloigne des règles de l'Art : les puristes (gOOorOOos entre autres) diront qu'il faut passer par des variables intermédiaires, ce qui est loin d'être faux. Mais je suis toujours gêné par la déclaration et l'utilisation de variables qui ne vont servir qu'une fois ou deux... Je préfère, et de loin, réutiliser ou ne rien déclarer en m'appuyant sur les possibilités de l'API. Pas nécessairement pérenne : on est d'accord ;) Mais il faut bien justifier la maintenance :lol: 
Dernière modification par Churay le 05 sept. 2012 20:37, modifié 6 fois.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Re bonjour,

ci joint une partie de mon fichier pour lequel je souhaite faire exactement la même chose que lors du clic sur le bouton sauvegarder en pdf , sauf je souhaiterais que celui ci soit sauvegarder en ods.

Merci pour ton code Churros , je ne l'ai pas encore tester. mais si mon fichier peu vous donner plus d'éléments !
API V1.ods
une partie du fichier calc avec moult pages supprimées qui ne doivent pas etres utiles à ce que je souhaite obtenir
(228.44 Kio) Téléchargé 492 fois
Merci...
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Bonsoir

Churros ? Churay achiyá, anri, aa! :lol:
mais si mon fichier peu vous donner plus d'éléments !
S'il faut copier l'intégralité de la feuille31 dans un nouveau fichier et sauvegarder : ça le fait.
S'il faut faire autre chose, ça ne le fait donc pas.

Autre chose que je ne teste pas : l'existence de la Feuille31... Toujours le WYWIWYG sans test... :lol:

Par contre changeant de machine, par acquis de conscience, j'ai testé AOO 3.4.1 et LO 3.5.5.3 : vu qu'il n'y a rien d'extravagant -> pas de soucis...
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Oups encore une bourde....désolé Churray....
j'ai faim !!!!
hummmm Churros

désolé
en plus je crois avoir fait une autre bourde !

c'est Dude qui va être énervé .....

heuuun je n'ai plus le fichier sous les yeux mais je doute entre la feuille 31 et 30 ...
je pense que c'est la feuille 30 en fait, celle ou il y à le bouton enregistrer sous pdf....

oups
pardon
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Pickup02 a écrit :heuuun je n'ai plus le fichier sous les yeux mais je doute entre la feuille 31 et 30 ...
je pense que c'est la feuille 30 en fait, celle ou il y à le bouton enregistrer sous pdf....
Vers le début de la macro :
' On récupère la Feuille31
oSheet = thisComponent.Sheets.getByName("Feuille31")
il suffit de remplacer par

Code : Tout sélectionner

   ' On récupère la Feuille30
   oSheet = thisComponent.Sheets.getByName("Feuille30")
c'est Dude qui va être énervé .....
Non : il gagne sa sainteté ici tous les jours, donc il lui arrive de ne pas s'énerver ;)

:lol:
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Churay,

J'ai tester ton code juste en modifiant le numéro de feuille à sauvegarder, ça marche.
Il ne me reste plus qu'à essayer de conserver la mise en page de la feuille originale et de trouver comment l'enregistrer sous le nom de fichier qui se crée automatique en cellule E2 de la feuille originale et pis ce sera super !

Merci, toi et à Dude pour votre aide.

Je ne marque pas encore résolu le temps de déchiffrer le code et de tenter de le modifier.

Bise
bonne journée
Yohann
Open Office 3.2.1 sur Microsoft XP PRO
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

bon j'ai essayé de remplacer les nom de sauvergarde sUrl aur
par nom situé en A2
par

Code : Tout sélectionner

ThisComponent.Sheets.getByName("30")
oFeuille.getCellRangeByName("E2")
Mais sans succès aucun
alors pour la mise en page ...........
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Bonjour

Code : Tout sélectionner

   ' On récupère le nom du document original (avec le path)
   aUrl = split(thisComponent.URL,".ods")
   ' on modifie le nom et on rajoute l'extension
   sUrl = aUrl(0) & "_Copie.ods"

à remplacer par (si le nom contient le chemin et l'extension)

Code : Tout sélectionner

   ' Nom de sauvegarde si le nom contient le chemin et l'extension
   sUrl = convertToURL(ThisComponent.Sheets.getByName("30").oFeuille.getCellRangeByName("E2").String
)
ou (si le nom contient le chemin sans l'extension)

Code : Tout sélectionner

   ' Nom de sauvegarde si le nom contient le chemin sans l'extension
   sUrl = convertToURL(ThisComponent.Sheets.getByName("30").oFeuille.getCellRangeByName("E2").String & ".ods")
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Churay,
Dude",
voila avec une partie de code de chacun d'entre vous , la recopie de ma feuille 30 avec la mise en page vers un nouveau classeur fonctionne.
La recopie se fait en deux temps
Je recopie la feuille 30 vers la feuille 37 du classeur existant en ne copiant que les données sans les formules, puis je créé un nouveau classeur "'sans nom" avec seulement la feuille 37.

Mais je ne parviens pas dans la même macro à sauvegarder ce nouveau classeur sous le nom contenu sans la Cellule E2.

Code : Tout sélectionner

  Rem Copie feuille 30 vers feuille 37
  Dim oDoc As Object, dispatcher As Object
  Dim args(5) As New com.sun.star.beans.PropertyValue
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  oDoc = ThisComponent
  oCadre = oDoc.CurrentController.Frame
  oFeuille1 = oDoc.Sheets.getByName("30")
  oFeuille2 = oDoc.Sheets.getByName("37")
  oCopie = oFeuille1.getCellRangeByName("A1:M50")
  oColle = oFeuille2.getCellRangeByName("A1:M50")
  oDoc.CurrentController.Select(oCopie)
  dispatcher.executeDispatch(oCadre, ".uno:Copy", "", 0, Array())
  args(0).Name = "Flags"
  args(0).Value = "SVDNT"
  args(1).Name = "FormulaCommand"
  args(1).Value = 0
  args(2).Name = "SkipEmptyCells"
  args(2).Value = false
  args(3).Name = "Transpose"
  args(3).Value = false
  args(4).Name = "AsLink"
  args(4).Value = false
  args(5).Name = "MoveMode"
  args(5).Value = 4
  oDoc.CurrentController.Select(oColle)
  dispatcher.executeDispatch(oCadre, ".uno:InsertContents", "", 0, args())
  rem recopie feuille 37 vers un nouveau classeur
  dim document   as object
  rem get access to the document
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "ToPoint"
  args1(0).Value = "$A$5:$F$5"
  dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
  dim args2(0) as new com.sun.star.beans.PropertyValue
  args2(0).Name = "Flags"
  args2(0).Value = "A"
  dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())
  dim args3(2) as new com.sun.star.beans.PropertyValue
  args3(0).Name = "DocName"
  args3(0).Value = ""
  args3(1).Name = "Index"
  args3(1).Value = 32767
  args3(2).Name = "Copy"
  args3(2).Value = true
  dispatcher.executeDispatch(document, ".uno:Move", "", 0, args3())
voila ou j'en suis ....
une petite aide pour l'enregistrement s'il vous plait....
Merci,
Bonne journée.
Yohann
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Bonjour

Avec le fichier précédent :
- récupération du nom en E2 de la Feuille nommée "30"
- puisqu'il n'y a pas de path, récupération du path du fichier original
- puisqu'il n'y a pas d'extension, ajout de ".ods"
- sauvegarde de la copie
- fermeture de la copie

- La copie est dans le même dossier que l'original.

Code : Tout sélectionner

REM  *****  BASIC  *****
'
' Code fourni par le forum francophone OOo/LO
' http://user.services.openoffice.org/fr/forum/viewtopic.php?f=8&t=35225
'
'
' Ce code est placé sous licence GNU GPL
'
' Testé avec OOo 3.2.1, AOO 3.4.1, LO 3.4.3 et LO 3.5.5.3
'
Option Explicit

Sub Main
Dim oCible As Object, oSheet As Object, oCursor As Object
Dim oRange As Object, oRangeCpy As Object
Dim sURL As String, aUrl() As String
	' on Créé la Cible
	sURL = "private:factory/scalc"
	oCible = StarDesktop.loadComponentFromURL(sURL,"_blank",0,Array())
	' On récupère la Feuille30
	oSheet = thisComponent.Sheets.getByName("30")
	' On récupère la plage utilisée
	oCursor = oSheet.createCursor() : oCursor.gotoStartOfUsedArea(False)
	oCursor.gotoEndOfUsedArea(True) : oRange = oCursor.getRangeAddress()
	' Et son contenu
	oRangeCpy = oSheet.getCellRangeByPosition(_
					oRange.StartColumn, oRange.StartRow,_
					oRange.EndColumn, oRange.EndRow).getDataArray
	' qu'on copie en Feuille1 du document créé
	oCible.Sheets(0).getCellRangeByPosition(_
					oRange.StartColumn, oRange.StartRow,_
					oRange.EndColumn, oRange.EndRow).setDataArray(oRangeCpy)
	'
	' On récupère le path du du document original 
	aUrl = split(thisComponent.URL,"/")
	' on modifie le nom et on rajoute l'extension
	aUrl(UBound(aUrl)) = oSheet.getCellRangeByName("E2").String & ".ods"
	sUrl = convertToURL(join(aUrl,"/"))
	'
	' on sauvegarde la copie et on la ferme
	oCible.storeAsURL(sUrl, Array())
	oCible.close(True)
End Sub
Testé avec le fichier API V1.ods et OOo 3.2.1, mais ça ne devrait pas poser de pb avec AOO 3.4.1, LO 3.4.3, LO 3.5.5.3
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Merci Beaucoup Churay,

C'est super

juste sur la sauvegarde la mise en page n'est pas conservée....

Je ne sais pas si je peu cumuler une partie de la fonction de Dude et la tienne ....?
Je me pers dans les déclarations et les codes associés au differents noms de valeurs

.
Mais c'est déjà beaucoup ce que tu as fais .
Merci.
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Cumuler : oui

Là c'est la pause déjeuner, je regarde dans une petite demie-heure, si personne n'a répondu avant
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Re,

J'ai tenté de cumuler ,
le code donne :

Code : Tout sélectionner

 Rem Copie feuille 30 vers feuille 37
  Dim oDoc As Object, dispatcher As Object
  Dim oCadre as Object
  Dim args(5) As New com.sun.star.beans.PropertyValue
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  oDoc = ThisComponent
  oCadre = oDoc.CurrentController.Frame
  oFeuille1 = oDoc.Sheets.getByName("30")
  oFeuille2 = oDoc.Sheets.getByName("37")
  oCopie = oFeuille1.getCellRangeByName("A1:M50")
  oColle = oFeuille2.getCellRangeByName("A1:M50")
  oDoc.CurrentController.Select(oCopie)
  dispatcher.executeDispatch(oCadre, ".uno:Copy", "", 0, Array())
  args(0).Name = "Flags"
  args(0).Value = "SVDNT"
  args(1).Name = "FormulaCommand"
  args(1).Value = 0
  args(2).Name = "SkipEmptyCells"
  args(2).Value = false
  args(3).Name = "Transpose"
  args(3).Value = false
  args(4).Name = "AsLink"
  args(4).Value = false
  args(5).Name = "MoveMode"
  args(5).Value = 4
  oDoc.CurrentController.Select(oColle)
  dispatcher.executeDispatch(oCadre, ".uno:InsertContents", "", 0, args())
  rem recopie feuille 37 vers un nouveau classeur
  dim document   as object
  rem get access to the document
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "ToPoint"
  args1(0).Value = "$A$5:$F$5"
  dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
  dim args2(0) as new com.sun.star.beans.PropertyValue
  args2(0).Name = "Flags"
  args2(0).Value = "A"
  dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())
  dim args3(2) as new com.sun.star.beans.PropertyValue
  args3(0).Name = "DocName"
  args3(0).Value = ""
  args3(1).Name = "Index"
  args3(1).Value = 32767
  args3(2).Name = "Copy"
  args3(2).Value = true
  dispatcher.executeDispatch(document, ".uno:Move", "", 0, args3())
  autosave
End Sub  
  sub autosave
  Dim oCible As Object, oSheet As Object, oCursor As Object
Dim oRange As Object, oRangeCpy As Object
Dim sURL As String, aUrl() As String
 oSheet = thisComponent.Sheets.getByName("37")
 oCible = oSheet
   aUrl = split(thisComponent.URL,"/")
   ' on modifie le nom et on rajoute l'extension
   aUrl(UBound(aUrl)) = oSheet.getCellRangeByName("E2").String & ".ods"
   sURL = convertToURL(join(aUrl,"/"))
   '
   ' on sauvegarde la copie et on la ferme
   oCible.storeAsURL(sURL, Array(0))
     fermepage
End Sub
Problème, en réponse sur cette ligne : oCible.storeAsURL(sURL, Array(0)) , Propriété ou methode non trouvé storeAsURL

et la je ne sais plus !
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Dude »

Pickup02 a écrit :Problème, en réponse sur cette ligne : oCible.storeAsURL(sURL, Array(0)) , Propriété ou methode non trouvé storeAsURL
Reprenons ton code :

Code : Tout sélectionner

oSheet = thisComponent.Sheets.getByName("37")
oCible = oSheet
oCible est un objet cellule et non le classeur. D'ailleurs le nom oSheet porte à confusion.
Donc, il est normal que tu ne puisses l'enregistrer.
Tu dois agir sur l'objet oDoc.

Je dis ça au pif, car là encore :
Au début de la discussion, Dude a écrit :Pourquoi ne joins-tu pas un fichier accompagné du code ?
Tu devrais utiliser XRay pour voir les propriétés et méthodes des objets que tu utilises. C'est un outil indispensable pour comprendre ce que l'on fait.
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Avec un peu de retard : bonsoir

Un peu plus long que prévu parce qu'il y a les réalités boulot à gérer...

Je suis parti de l'idée que gérer les formats était une usine à gaz ne recelant aucune beauté :marto: : donc il fallait ruser un peu et rendre hommage aux codeurs qui nous on gratifié des modèles. Et que partant de là, on devait sortir un truc assez propre et compact (bin vi... on ne se refait pas... ;))

Donc première manip : à partir de [API V1.ods], suppression des feuilles autres que la "30", enregistrement comme modèle dans le même dossier que [API V1.ods], comme il lui fallait bien un nom, j'ai opté pour [API V1-30.ots]. Ayant laissé les formules et les feuilles y faisant référence ayant disparu, on a plein de #REF, mais en bleu c'est pas si moche (nan je déc***e, mais comme c'est sans importance, j'ai laissé en l'état).

Après quoi, on peut reprendre le code précédent, lui faire subir un léger lifting pour s'adapter à la nouvelle approche et accessoirement harmoniser le nommage des variables (selon mes règles, certes...) et enfin on peut dérouler...

Le code est commenté :

Code : Tout sélectionner

REM  *****  BASIC  *****
'
' Code fourni par le forum francophone OOo/LO
' http://user.services.openoffice.org/fr/forum/viewtopic.php?f=8&t=35225
'
'
' Ce code est placé sous licence GNU GPL
'
' Testé avec OOo 3.2.1, AOO 3.4.1, LO 3.4.3 et LO 3.5.5.3
'
Option Explicit

Sub MainV2
Dim oCible As Object, oSheet As Object, oCursor As Object
Dim oRange As Object, oRangeCpy As Object
Dim sUrlSrc As String, sUrlCbl As String, sUrlModel As String, aUrl() As String, sPath As String
	'
	' On récupère la Feuille30
	oSheet = thisComponent.Sheets.getByName("30")
	'
	' On récupère l'url du document original
	sUrlSrc = thisComponent.URL
	' On en extrait le Path
	aUrl = split(sUrlSrc,"/")
	aUrl(UBound(aUrl)) = ""
	sPath = convertToURL(join(aUrl,"/"))
	'
	' L'array n'ayant été modifié que sur son dernier élément
	' on s'en ressert pour créer le nom de la copie
	'
	' On triture pour créer le nom de la copie
	aUrl(UBound(aUrl)) = oSheet.getCellRangeByName("E2").String & ".ods"
	sUrlCbl = convertToURL(join(aUrl,"/"))
	'
	' Et on bénéficie d'un tour gratuit pour le nom de modèle
	aUrl(UBound(aUrl)) = "API V1-30.ots"
	sUrlModel = convertToURL(join(aUrl,"/"))

	'
	' on Créé la Cible à partir du modèle
	oCible = StarDesktop.LoadComponentFromURL(sUrlModel,"_default",0,Array()
	'
	' On récupère la plage utilisée dans l'original Feuille "30"
	oCursor = oSheet.createCursor() : oCursor.gotoStartOfUsedArea(False)
	oCursor.gotoEndOfUsedArea(True) : oRange = oCursor.getRangeAddress()
	' Et son contenu
	oRangeCpy = oSheet.getCellRangeByPosition(_
					oRange.StartColumn, oRange.StartRow,_
					oRange.EndColumn, oRange.EndRow).getDataArray
	' qu'on copie en Feuille1 du document créé
	oCible.Sheets(0).getCellRangeByPosition(_
					oRange.StartColumn, oRange.StartRow,_
					oRange.EndColumn, oRange.EndRow).setDataArray(oRangeCpy)
	'
	' on sauvegarde la copie et on la ferme
	oCible.storeAsURL(sUrlCbl, Array())
	oCible.close(True)
End Sub
Si on enlève les commentaires, c'est pas trop moche me semble-t-il et c'est encore assez compact...
 Ajout : En relisant, j'ai retrouvé un sPath qui ne sert plus à rien (j'ai donc mis en commentaire) : vestiged'une approche dont l'essentiel se faisait dans un sub nommé A_La_Hache, le choix du nom est révélateur...
Mais pour résumer : c'est compact, ça marche mais c'est vraiment sauvage et limite car un peu tiré par les cheveux...
La solution ci-dessus fonctionnant normalement quelle que soit la branche... (bémol : je n'ai pas tester sur la 3.6) autant miser sur une certaine stabilité. 
Dernière modification par Churay le 10 sept. 2012 15:20, modifié 2 fois.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Le modérateur a écrit : :alerte: Évitez de citer l'ensemble du message précédent, cela rend la lecture très difficile.
Dude a écrit :
Pickup02 a écrit :Problème, en réponse sur cette ligne : oCible.storeAsURL(sURL, Array(0)) , Propriété ou methode non trouvé storeAsURL
Reprenons ton code :

Code : Tout sélectionner

oSheet = thisComponent.Sheets.getByName("37")
oCible = oSheet
oCible est un objet cellule et non le classeur. D'ailleurs le nom oSheet porte à confusion.
Donc, il est normal que tu ne puisses l'enregistrer.
Tu dois agir sur l'objet oDoc.

Je dis ça au pif, car là encore :
Au début de la discussion, Dude a écrit :Pourquoi ne joins-tu pas un fichier accompagné du code ?
Tu devrais utiliser XRay pour voir les propriétés et méthodes des objets que tu utilises. C'est un outil indispensable pour comprendre ce que l'on fait.
Bonjour Churay , Bonjour Dude.
j'ai fourni mon fichier "allégé" vers le 11 ieme message "API V1".
C'est Vrai et tu as raison je ne comprends pas toujours ce que je fais , ni ce que les autres font en VBA, j'ai télécharger le Xray et vais m'y employer le plus rapidement possible.
Comme beaucoup de personnes il m'a fallut passer à open par obligation, cela ne me gêne pas outre mesures mais ce déshabituer d'un logiciel pour un autre n'est pas évident ....
Et je suis parti sur une application avec des envies d'automatisation de fonction qui me dépassent ....
Et je compte beaucoup sur vos enseignements et expériences pour y arrivé.

Churay,
Ton code moi je le trouve plutôt pas moche , lol, mais il bloque lors de la recherche de la cellule E2 au début de la macro....
je vais tenter de trouver le problème...

Bonne journée....

et merci

mais c'est pas fini lol....
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Bonjour,
il bloque lors de la recherche de la cellule E2 au début de la macro....
Effectivement : j'ai conclu un peu vite que le sPath était un vestige d'une version olé-olé, mais il sert encore pour bâtir le nom du fichier modèle.
Et je n'avais pas retesté...

J'ai réactivé les lignes concernées dans mon précédent message... Et retesté avec OOo 3.2.1 ;)

Sorry
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Bonjour Churay,

Je ne comprends pas pourquoi cela fonctionne chez toi et pas chez moi ....

Le code bloque sur la ligne suivante

Code : Tout sélectionner

aUrl(UBound(aUrl)) = oSheet.getCellRangeByName("E2").String & ".ods"
je ne comprends pas pourquoi alors que toute les déclarations sont faites ....
Open Office 3.2.1 sur Microsoft XP PRO
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc] enregistrement d'une feuille unique

Message par Churay »

Bonjour,

Par acquis de conscience, je viens de retester avec avec OOo 3.2.1, et LO 3.4.3 : c'est bien Ok
En joignant le fichier peut-être...

Au besoin tu rends anonyme ce que doit l'être.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Churay,

Mon fichier est présent dans le fil vers le onzième message .
http://user.services.openoffice.org/fr/ ... 56#p193856
Open Office 3.2.1 sur Microsoft XP PRO
Pickup02
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 27 juil. 2012 10:25

Re: [Calc] enregistrement d'une feuille unique

Message par Pickup02 »

Le modérateur a écrit : :alerte: Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.

En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
Enfin mon fichier est la quoi :
http://user.services.openoffice.org/fr/ ... p?id=46934

et le code bloque sur :

Code : Tout sélectionner

oCible = StarDesktop.LoadComponentFromURL(sUrlModel,"_default",0,Array()
voila.
Open Office 3.2.1 sur Microsoft XP PRO
Verrouillé