[Résolu][Calc] Incrementer sélection colonne par bouton

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 !
ZARBI
Fraîchement OOthentifié
Messages : 8
Inscription : 07 juil. 2015 11:01

[Résolu][Calc] Incrementer sélection colonne par bouton

Message par ZARBI »

Bonjour à tous,

la réponse doit être pour vous très simple...

J'ai repris un exemple donnée par DUDE, car je souhaite tout simplement copier/coller une plage de cellule, avec un bouton.

[Calc] Copier / coller entre deux classeurs ou feuilles
https://forum.openoffice.org/fr/forum/v ... =15&t=6371

Mais:
- je voudrais pouvoir incrémenter la zone COLONNE à chaque fois que j'appuie sur le bouton.
exemple : j’appuie cela sélectionne de A1à A6 (puis je colle, peu importe sur un autre document *)
j'appuie cela selectionne de B1 à B6 " "
etc...

1) je ne trouve pas comment incrémenter une colonne puisque ce sont des lettres (donc pas de variable i possible)
la fonction COLONNE() ne semble pas correspondre à ce que je cherche.
Je suis surpris (je cherche mal ?) mais la variabilité sur la sélection des colonnes, j'ai pas trouvé, c'est toujours les lignes...

il y a bien ça (eh oh, j'ai cherché !)
[Résolu][Calc] Copier-coller dans une colonne variable
mais DLE répond "C'est fait." et moi je vois pas trop...


2) je ne sais pas quel genre de boucle il faut et comment la positionner
pour qu'elle s'incrémente pas toute seule tout d'un coup mais attende l'instruction du bouton.

* sur un autre document: chose bizarre, quand je colle dans Writer, c'est une image que j'obtiens (ce qui n'est pas grave en soi,
mais ça me semble étrange que dans la mémoire tampon, cela se transforme ainsi et peut être gênant pour d'autres personnes confrontées
au même problème et qui voudraient du texte et pas une image. Cela ne le fait pas quand je colle dans calc :o )

ci-joint exemple

et code

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 destLigne as Integer
	
	
	origDocument   = ThisComponent.CurrentController.Frame
	origDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	oDesktop = createUnoService( "com.sun.star.frame.Desktop" )
	cURL = ConvertToURL( "private:factory/scalc" )

	
	props(0).Name =  "ToPoint"
	props(0).Value = "$A$"+1+":$A"+6
	
		
	origDispatcher.executeDispatch(origDocument, ".uno:GoToCell", "", 0, props()) 
	origDispatcher.executeDispatch(origDocument, ".uno:Copy", "", 0, Array()) 
	

end sub
Bon, c'est bientôt la fin de l'année, reposez-vous , ça urge pas trop...

Et euh, par avance je m'excuse auprès du modérateur si j'ai pas bien fait quelque chose.

Merci, A bientôt
Pièces jointes
COPIE-COLLE - BOUTON.ods
(10.26 Kio) Téléchargé 67 fois
LibreOffice 3.6
XP
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 09:05

Re: [Calc] Incrementer selection colonne - bouton

Message par joel275 »

Bonsoir,

tu peux incrémenter facilement la colonne en utilisant:

Code : Tout sélectionner

ThisComponent.sheets(0).getCellRangeByPosition(0,0,1,12)
pour la zone A1:B13

A plus.

P.S.: si tu veux quelque chose de plus précis adapté à ton cas, fournis un fichier exemple de ce que tu veux faire.
A jour de LibreOffice et de Ubuntu
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Calc] Incrementer selection colonne - bouton

Message par Piaf »

Bonsoir
Pour le coller sous Writer, comme tu copies un objet (une zone d'une feuille de calcul) et pas du texte, il n'y a aucune transformation.
Pour ta question, sans savoir où coller, j'ai pris le partis de coller chaque copie dans un nouveau classeur.

Code : Tout sélectionner

Sub ActionCopieColle()
Dim oDoc as Object, oDoc2 as Object, oRange as Object, aCopier as Object, oCells as Object
	oDoc = thisComponent
	numCol = oDoc.Sheets(0).getCellByPosition(oDoc.Sheets(0).RangeAddress.EndColumn,oDoc.Sheets(0).RangeAddress.EndRow).Value
	oRange = oDoc.Sheets(0).getCellRangeByPosition(numCol,0,numCol,5)
	oDoc.CurrentController.select(oRange)
	aCopier = oDoc.CurrentController.getTransferable()
	oCells = ThisComponent.CreateInstance("com.sun.star.sheet.SheetCellRanges")
	oDoc.CurrentController.Select(oCells)
	oDoc2 = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, Array() )
	oRange = oDoc2.Sheets(0).getCellRangeByName("A1")
	oDoc2.CurrentController.select(oRange)
	oDoc2.CurrentController.insertTransferable(aCopier)
	oCells = oDoc2.CreateInstance("com.sun.star.sheet.SheetCellRanges")
	oDoc2.CurrentController.Select(oCells)
	oDoc.Sheets(0).getCellByPosition(oDoc.Sheets(0).RangeAddress.EndColumn,oDoc.Sheets(0).RangeAddress.EndRow).Value = numCol + 1
End Sub

Sub ColZero
	thisComponent.Sheets(0).getCellByPosition(thisComponent.Sheets(0).RangeAddress.EndColumn,thisComponent.Sheets(0).RangeAddress.EndRow).Value = 0
End Sub
A tester.
A+
Pièces jointes
COPIE-COLLE - BOUTON.ods
(12 Kio) Téléchargé 65 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
ZARBI
Fraîchement OOthentifié
Messages : 8
Inscription : 07 juil. 2015 11:01

Re: [Calc] Incrementer selection colonne - bouton

Message par ZARBI »

Bonjour,

Merci à Piaf et Joel275 pour leurs réponses.
p' tites précisions:

Si j'ai dit " puis je colle, peu importe sur un autre document",
c'est que c'est sur une autre application que Calc, sinon la méthode copier/coller de Dude m'aurait convenu,
c'est pour cela qu'il me faut passer par le presse papier (désolé pour "mémoire tampon")
et que getTransferable ne convient pas.
Comme précisément Dude utilise "copy" , j'ai pu virer "paste" et garder l'info dans le presse papier.

On peut laisser la partie coller pour les lecteurs qui seraient intéressés...
mais bien séparée pour m'y retrouver !

Par contre le coup du bouton c'est parfait, c'est ça.
Mais je vois même pas ou il "s'insère" dans le code, je veux dire: c'est où qu'elle intervient la fonction bouton
genre "tant que j'appuie pas t'incrémente pas" ou l'inverse...
je vois bien numCol+1 mais ça dit pas que c'est à chaque fois qu'on appuie.

Bon, j'ai fait une chimère entre mon bout de code (de Dude) et celui de Piaf,
mais ça ne marche pas parce que j'arrive pas à combiner deux manières de codifier...
j'entends par là d'un coté UnoService et de l'autre du codage pure .


Code : Tout sélectionner

sub ActionCopieColle
	
 
    Dim oDoc as Object, oDoc2 as Object, oRange as Object, aCopier as Object, oCells as Object
       oDoc = thisComponent.CurrentController.Frame
       oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
     
       numCol = oDoc.Sheets(0).getCellByPosition(oDoc.Sheets(0).RangeAddress.EndColumn,oDoc.Sheets(0).RangeAddress.EndRow).Value
       oRange = oDoc.Sheets(0).getCellRangeByPosition(numCol,0,numCol,5)
       oDoc.CurrentController.select(oRange)
     
   		
     
       oCells = ThisComponent.CreateInstance("com.sun.star.sheet.SheetCellRanges")
       oDoc.CurrentController.Select(oCells)
      
       oDispatcher.executeDispatch (oDoc,"uno:Copy", "",0,Array())
     
       oDoc.Sheets(0).getCellByPosition(oDoc.Sheets(0).RangeAddress.EndColumn,oDoc.Sheets(0).RangeAddress.EndRow).Value = numCol + 1
   
    End Sub 
Merci
LibreOffice 3.6
XP
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Calc] Incrementer selection colonne - bouton

Message par Piaf »

Bonjour
joel275 a écrit :P.S.: si tu veux quelque chose de plus précis adapté à ton cas, fournis un fichier exemple de ce que tu veux faire.
Si tu veux récupérer le texte des colonnes et le mettre dans un document Writer.

Code : Tout sélectionner

Sub ActionTransererTxt()
Dim oDoc as Object, oDoc2 as Object, maCellule as Object, wTexte as Object, monCurseur as Object
Dim numCol as Integer, i as Integer, oTexte as String
	oDoc = thisComponent
	numCol = oDoc.Sheets(0).getCellByPosition(oDoc.Sheets(0).RangeAddress.EndColumn,oDoc.Sheets(0).RangeAddress.EndRow).Value
	For i = 0 To 5
		maCellule = oDoc.Sheets(0).getCellByPosition(numCol,i)
		oTexte = oTexte & maCellule.String & chr(13)
	Next i
	oDoc2 = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array() )
	wTexte = oDoc2.Text
	monCurseur = wTexte.createTextCursor
	wTexte.insertString(monCurseur, oTexte, False)
	oDoc.Sheets(0).getCellByPosition(oDoc.Sheets(0).RangeAddress.EndColumn,oDoc.Sheets(0).RangeAddress.EndRow).Value = numCol + 1
End Sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
ZARBI
Fraîchement OOthentifié
Messages : 8
Inscription : 07 juil. 2015 11:01

Re: [Calc] Incrementer selection colonne - bouton

Message par ZARBI »

Mais !!! ???? c'est :fou: !

j'avais mis un fichier exemple de ce que je veux, qui marche pour le copier, MAIS PAS pour
incrémenter la colonne par le bouton.

Soient des données dans Calc que je veux copier pour les coller ailleurs DANS UNE AUTRE APPLICATION,
je suis bien forcé de passer par le presse papier.

Quand je fais ta macro, Piaf, très bien, ça copie sur Writer, mais si avec le clic droit de la souris,
je fais coller, ça colle ce qui reste en mémoire dans le presse papier et pas les valeurs de la colonne

qui viennent d'être sélectionnées en appuyant sur le bouton !
Donc le presse papier n'est pas à jours des dernières données copiées par le bouton.

Car ce que je veux c'est copier les données du tableau Calc pour les coller à ma guise, avec la souris, (clic droit), sur une autre appli
(Wincom en l’occurrence) . (et pour tout dire j'ai 600 colonnes dans le même genre...)

Car en fait c'est très pratique de préparer un travail sur tableur, puis de coller les informations collectées sur l'appli de réception.
Je précise aussi que je travaille sur deux écrans, sur l'un Calc et sur l'autre l'appli.

Oui, maintenant, je reconnais que je n'avais pas précisé que le coller devait s'effectuer par le clic droit de la souris... :oops:

Toutefois rien n'est perdu, je vais comparer avec le programme de Dude pour voir comment tu fais pour copier les données- et pas une image- dans Writer, c'est super intéressant aussi.
LibreOffice 3.6
XP
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] Incrementer selection colonne - bouton

Message par Dude »

Salut,
ZARBI a écrit :Donc le presse papier n'est pas à jours des dernières données copiées par le bouton.
Le presse-purée est de la responsabilité du système d'exploitation.
Donc commence par regarder ce qu'il contient.

Autre chose :
Dans ta signature, il y a écrit :LibreOffice 3.6
XP
Cette version est archi obsolète, qui plus est sur un système non maintenu.
Commence par te mettre à jour.
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 09:05

Re: [Calc] Incrementer selection colonne - bouton

Message par joel275 »

Bonjour,

on aurait gagné du temps avec le fichier exemple posté tout de suite....
Solution à tester pour mettre une colonne dans le presse-papier et incrémenter le numéro de colonne:

Code : Tout sélectionner

sub ActionCopieColle(oEvt)
	
Dim oDoc as object
Dim origDispatcher as object
Dim MaCol as Long
Dim MaZone as Object
	oDoc = ThisComponent
	MaCol = oEvt.Source.Model.Tag
	MaZone = oDoc.Sheets(0).getCellRangeByPosition(MaCol,0,MaCol,5)
	oDoc.CurrentController.Select(MaZone)
	origDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	origDispatcher.executeDispatch(oDoc.CurrentController.Frame, ".uno:Copy", "", 0, Array()) 
	oEvt.Source.Model.Tag = MaCol + 1
end sub
il faut associer cette macro à ton bouton; il restera à déterminer comment tu comptes remettre à 0 le numéro de colonne.....

A plus.
 Ajout : version corrigée à 15h 
Dernière modification par joel275 le 30 déc. 2016 14:57, modifié 2 fois.
A jour de LibreOffice et de Ubuntu
ZARBI
Fraîchement OOthentifié
Messages : 8
Inscription : 07 juil. 2015 11:01

Re: [Calc] Incrementer selection colonne - bouton

Message par ZARBI »

Bonjour Joel275, Bonjour Dude,

Joel275,

1)
on aurait gagné du temps avec le fichier exemple posté tout de suite....
ben, dans mon premier message, il y a le fichier exemple !

2) ton programme n'implémente pas, ça reste à la colonne A, mais là cette fois, ça se met bien dans le presse papier.

Dude,

quel problème avec le "presse purée" puisque toi-même tu avais fait ainsi et j'ai dit que ça marchait et que le
presse purée marche aussi pour Joel275 ?

quand à mes versions, désolé, parlez-en à mes employeurs...
LibreOffice 3.6
XP
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 09:05

Re: [Calc] Incrementer selection colonne - bouton

Message par joel275 »

Re,
je savais bien que je n'aimais pas les variables déclarées en Static. Désolé, j'ai corrigé dans mon précédent post en utilisant le complément d'information (Tag en anglais) du bouton pour stocker MaCol entre deux appuis sur le bouton.
4A plus.
A jour de LibreOffice et de Ubuntu
ZARBI
Fraîchement OOthentifié
Messages : 8
Inscription : 07 juil. 2015 11:01

Re: [Calc] Incrementer selection colonne - bouton

Message par ZARBI »

Génial ! :super:

Merci Joel275

PS: la solution est dans la correction de 15 H de Joel275
j'avais cliqué sur résolu mais je brûle d'en savoir plus !

Pourrait-on savoir quel est le principe du " oEvt.Source.Model.Tag "
En effet, si je clic sur le bouton plusieurs fois..etc..., que j'enregistre et ferme le document Calc, à
la réouverture il reprend exactement là ou je l'avais laissé. C'est très bien, très pratique.

Mais quel est le principe de fonctionnement de cette formule magique ?

Merci
LibreOffice 3.6
XP
Verrouillé