[Résolu][Calc] Transfert d'information entre 2 classeurs

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 !
shadowseb
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 29 août 2010 20:56

[Résolu][Calc] Transfert d'information entre 2 classeurs

Message par shadowseb »

Bonjour,

Via une macro, j'aimerais transfert le contenue de certaine cellule vers un autre classeur (Et nom une autre feuille)

Il s'agit ici de facturation avec les taxes et tout

Je voudrais transféré 5 information

Colonne A: Numero de facture (Simplement basé: AAMMJJHHMMSS)
Colonne B: Sous-total
Colonne C: TPS (Taxe de Produit et Service)
Colonne D: TVQ (Taxe de Vente du Québec)
Colonne E: Total

But: Pouvoir faire nos rapports d'impôt sans avoir a ouvrir chacune des factures.

Ensuite, une fois les info transféré, lors du prochain transfert, ne pas écraser les donnés existante mais bien placé dans la ligne du dessous, etc etc

Je cafouille pas mal disons...

Merci!

EDIT: Ajout bonjour et merci, je l'avais oublier
Dernière modification par shadowseb le 13 janv. 2012 16:28, modifié 2 fois.
OpenOffice 3.0.0
Windows XP Pro SP3
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25171
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Transfert d'information entre 2 classeurs

Message par Dude »

Salut,
shadowseb a écrit :Il s'agit ici de facturation avec les taxes et tout
Et tout, et tout... Un classeur illustrant le problème et tout, c'est encore mieux.

Direction le classique suprême de code : http://user.services.openoffice.org/fr/ ... =15&t=6371

:idea:
shadowseb
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 29 août 2010 20:56

Re: [Calc] Transfert d'information entre 2 classeurs

Message par shadowseb »

J'en ai fait l'essai, et malheureusement ça ne convient pas. Je cherche vraiment a faire tel que décrit dans mon premier messsage. Cette macro ouvre un nouveau classeur et fait un copier coller. Je cherche a faire un archivage dans un classeur enregistrer et qui copiera le contenue des cellules à la suite des lignes les unes après les autres
OpenOffice 3.0.0
Windows XP Pro SP3
shadowseb
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 29 août 2010 20:56

Re: [Calc] Transfert d'information entre 2 classeurs

Message par shadowseb »

Re salut!

Étant donné que ce que je veux faire ne semble pas être possible ou en dehors de mes compétences et/ou introuvable, en jouant avec mes fichiers, j'ai découvert le mode "Enregistrer une macro" et j'y ai découvert certaine chose intéressante. J'ai découvert entre autre le collage spécial - Lier. J'ai donc ouvert mon fichier de "destination" et enregistrer une macro qui donne ceci:

Code : Tout sélectionner

REM  *****  BASIC  *****



sub Main
rem ----------------------------------------------------------------------
rem define variables
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")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1:$E$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args4())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertRows", "", 0, Array())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$A$3"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(5) as new com.sun.star.beans.PropertyValue
args7(0).Name = "Flags"
args7(0).Value = "SV"
args7(1).Name = "FormulaCommand"
args7(1).Value = 0
args7(2).Name = "SkipEmptyCells"
args7(2).Value = false
args7(3).Name = "Transpose"
args7(3).Value = false
args7(4).Name = "AsLink"
args7(4).Value = false
args7(5).Name = "MoveMode"
args7(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args7())


end sub
Je sais comment affecter une macro a l'ouverture, voici donc ma nouvelle question:

Est-il possible de faire ouvrir ce fichier, le faire enregistrer puis le fermer, que se soit transparent à l'exécution et que cette macro démarre tout de même?
OpenOffice 3.0.0
Windows XP Pro SP3
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Transfert d'information entre 2 classeurs

Message par luky-luke »

bonjour,

En suivant le lien donné par le Dude et en modifaint les lignes suivante dans la macro "ActionCopieColle :

Code : Tout sélectionner

cURL = ConvertToURL( "private:factory/scalc" )
oDoc = oDesktop.loadComponentFromURL(cURL , "_blank", 0, args() )
par

Code : Tout sélectionner

cURL = ConvertToURL("/le chemin/de mon/classeur archivage.ods")
oDoc = oDesktop.loadComponentFromURL(cURL , "_blank", 0, args() ) 
J'ouvre mon classeur archivage ...
Et en rajoutant ces deux lignes à la fin

Code : Tout sélectionner

destdispatcher.executeDispatch(destDocument, ".uno:Save", "", 0, Array())
destDocument.close(True)
J'enregistre mon classeur archive avec le nouveau contenu et je le ferme.

Ce qui pourrait donner en reprenant ton code et en l'introduisant dans le classeur d'origine, c'est à dire celui qui contient les données que tu veux archiver et non pas celui qui doit contenir l'archivage:

Code : Tout sélectionner

sub ActionCopieColle
	
	Dim oDoc as object
	Dim origDocument as object
	Dim destDocument as object
	Dim origDispatcher as object
	Dim destDispatcher as Object
	dim oDesktop as Object
	Dim args(0) as new com.sun.star.beans.PropertyValue
	Dim props(0) as new com.sun.star.beans.PropertyValue
	Dim cURL as String
	Dim origLigne as Integer
	Dim destLigne as Integer
	
	origDocument   = ThisComponent.CurrentController.Frame
	origDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	oDesktop = createUnoService( "com.sun.star.frame.Desktop" )
	cURL = ConvertToURL("/le chemin/de mon/classeur archivage.ods")   ' le chemin à modifier
	oDoc = oDesktop.loadComponentFromURL(cURL , "_blank", 0, args() )
	destDispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
	destDocument = oDoc.CurrentController.Frame
	
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 2

origdispatcher.executeDispatch(origdocument, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1:$E$1"

origdispatcher.executeDispatch(origdocument, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
origdispatcher.executeDispatch(origdocument, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 1

destdispatcher.executeDispatch(destdocument, ".uno:JumpToTable", "", 0, args4())

rem ----------------------------------------------------------------------
destdispatcher.executeDispatch(destdocument, ".uno:InsertRows", "", 0, Array())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$A$3"

destdispatcher.executeDispatch(destdocument, ".uno:GoToCell", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(5) as new com.sun.star.beans.PropertyValue
args7(0).Name = "Flags"
args7(0).Value = "SV"
args7(1).Name = "FormulaCommand"
args7(1).Value = 0
args7(2).Name = "SkipEmptyCells"
args7(2).Value = false
args7(3).Name = "Transpose"
args7(3).Value = false
args7(4).Name = "AsLink"
args7(4).Value = false
args7(5).Name = "MoveMode"
args7(5).Value = 4

destdispatcher.executeDispatch(destdocument, ".uno:InsertContents", "", 0, args7())
    destdispatcher.executeDispatch(destDocument, ".uno:Save", "", 0, Array()) 'enregistrement du document archivage
    destDocument.close(True)                                                                       ' et la fermeture du document

end sub
Mais tu peux aussi avoir une partie du code dans ton classeur d'origine pour l'ouverture du document et faire comme tu l'écris mettre le reste du code dans le classeur archivage, éxécuter la macro à l'ouverture, ce qui t'éviteras d'avoir à la répeter dans tout les classeurs qui contiennent des données.

En souhaitant t'avoir aidé à résoudre ton problème...
cordialement

Luke

P.S. : je n'ai pas testé , il est l'heure de passer à table :wink:
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
shadowseb
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 29 août 2010 20:56

Re: [Calc] Transfert d'information entre 2 classeurs

Message par shadowseb »

Merci infiniment! J'avais abandonné l'idée de le faire de cette façon, mais ça marche parfait! J'ai fait quelque modif mais dans son ensemble, c'est parfait! Dans la foulé j'ai même réussi a généré un numero de facture basé sur le nombre de facture faite au lieu AAAAMMJJHHMMSS. Merci!
OpenOffice 3.0.0
Windows XP Pro SP3