[Résolu][Calc] Copie dans la 1er ligne vide d'une feuille

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 !
jmsch
Membre lOOyal
Membre lOOyal
Messages : 34
Inscription : 14 déc. 2008 17:57

[Résolu][Calc] Copie dans la 1er ligne vide d'une feuille

Message par jmsch »

Bonjour,
j'ai une macro qui copie une série de cellule vers une nouvelle feuille mais comment la modifier pour qu'elle n'écrive pas toujours dans la même ligne mais dans la 1er ligne vide.

j'ai bien essayé de copier les cellules en déplacant les cellules existante vers le bas mais la j'ai mes formulles qui change à chaque nouvelle copie (la ligne qui se rajoute sur le haut n'est plus prise en compte par les formulles)

merci

Code : Tout sélectionner

sub copie_devis1
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 = "ToPoint"
args1(0).Value = "$AA$4:$EY$4"

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

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

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

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

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

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

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

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

rem ----------------------------------------------------------------------
dim args6(1) as new com.sun.star.beans.PropertyValue
args6(0).Name = "By"
args6(0).Value = 1
args6(1).Name = "Sel"
args6(1).Value = false

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

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

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

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "ToPoint"
args8(0).Value = "$I$1"

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


end sub
Dernière modification par jmsch le 16 janv. 2009 17:16, modifié 2 fois.
Avatar de l’utilisateur
MrPropre
MOOdérateur
MOOdérateur
Messages : 1138
Inscription : 01 oct. 2008 16:54

Re: macro qui copie dans la 1er ligne vide d'une feuille

Message par MrPropre »

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.

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

N'oubliez pas que le terme "Macro" ou "OpenOffice" ne doit pas être employé car il est implicite. Essayer de synthétiser au mieux ce que vous cherchez à faire.

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

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

Plutôt que du code, fournissez plutôt un fichier complet. Cela augmentera vos chances de réponse en évitant d'avoir à recréer quelque chose qui au final, pourrait ne pas convenir.

Merci de votre collaboration.
Nettoyez votre PC du piratage, utilisez des logiciels libres à chaque lavage.
Une seule dose de OpenOffice suffit à éliminer durablement toute trace de MS-Office.
jmsch
Membre lOOyal
Membre lOOyal
Messages : 34
Inscription : 14 déc. 2008 17:57

Re: [Calc] Copie dans la 1er ligne vide d'une feuille

Message par jmsch »

désolé d'avoir transgressé les règles, à l'avenir je tacherais de ne plus oublier.
OpenOffice 3.01 sous vista sp1
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 12:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Calc] Copie dans la 1er ligne vide d'une feuille

Message par Alain de La Chaume »

Bonjour à tous,
Bonjour jmsch
MrPropre, le 28 Déc 2008 12:20, vous suggère :
Plutôt que du code, fournissez plutôt un fichier complet. Cela augmentera vos chances de réponse en évitant d'avoir à recréer quelque chose qui au final, pourrait ne pas convenir.
Et il a tout à fait raison. Par conséquent, si le bout de code qui suit ne vous convient pas... Ben, tant pis ! :lol:

Code : Tout sélectionner

'************************************************************ 17/11/08
'**** Retourne dans col et ligne l'adresse de la
'**** dernière cellule non vide de la feuille oFeuille.
'*********************************************************************
sub getLastCell(oFeuille as object, col as long, ligne as long) 
dim dscCherche as object
dim posTrouve
dim oCellAdresse as object
dim oCell as object
dim colFin as long, ligneFin as long

	col = -1 : ligne = -1	' par défaut, retourne -1
	
	' Se positionner sur la dernière cellule de la feuille
	colFin = oFeuille.rangeAddress.endColumn
	ligneFin = oFeuille.rangeAddress.endRow
	oCell = oFeuille.getCellByPosition(colFin,ligneFin)
	thisComponent.currentController.select(oCell)
	
	' Effectuer une recherche vers le haut
	dscCherche = oFeuille.createSearchDescriptor
	with dscCherche
		.SearchString = "."
		.SearchBackwards = true
		.SearchRegularExpression = true
	end with
	posTrouve = oFeuille.findFirst(dscCherche)
	if (isNull(posTrouve) = false) then
		' Cellule trouvée
		oCellAdresse = posTrouve.cellAddress
		ligne = oCellAdresse.row
		col = oCellAdresse.column		
	end if
end sub
Cordialement,
Alain.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
jmsch
Membre lOOyal
Membre lOOyal
Messages : 34
Inscription : 14 déc. 2008 17:57

Re:[Résolu] [Calc] Copie dans la 1er ligne vide d'une feuill

Message par jmsch »

merci pour ton aide j'avais oublié de marquer resolu
j'ai conservé ma macro et lors du coller j'ai coché déplacer les céllules vers le bas ainsi j'ai les saisie les plus récent toujours en premier

Code : Tout sélectionner

 copie_devis
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 = "ToPoint"
args1(0).Value = "$AC$4"

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

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$AC$4:$FT$4"

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 = 6

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

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

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

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

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

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

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

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

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

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "ToPoint"
args9(0).Value = "$I$1"

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


end sub
OpenOffice 3.01 sous vista sp1