[Résolu] [Calc] Copier texte et mise en forme 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 !
Tilou
Membre lOOyal
Membre lOOyal
Messages : 42
Inscription : 24 sept. 2006 14:16

[Résolu] [Calc] Copier texte et mise en forme par bouton.

Message par Tilou »

Bonjour,
pour faire suite à la question posée dans la section calc (viewtopic.php?p=387275#p387275), où il m'est conseillé de passer par la création d'une macro et notamment par l'enregistreur de macro :

Comment copier la mise en forme et la valeur (numérique ou texte) d'une cellule, à l'aide d'un bouton ?
Si dans mon fichier exemple, la destination de la copie est la cellule G5, l'idéal serait de pouvoir le faire dans plusieurs cellules, lesquelles sont sélectionnées en amont de l'utilisation du bouton.
Merci beaucoup.
Copier texte et mise en forme par bouton.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 11 nov. 2024 10:45, modifié 4 fois.
Raison : [Calc] remplace [CALC]. Faites-le vous-même la prochaine fois
L.O. 24.8.2.1 - Windows 11
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 4117
Inscription : 06 oct. 2008 08:03

Re: Copier texte et mise en forme par bouton.

Message par Oukcha »

Bonjour,

Merci de tenir compte du bandeau rouge en haut de page, et de baliser correctement votre question.

Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1466
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [CALC] Copier texte et mise en forme par bouton.

Message par jeanmi2403 »

Bonjour,
Voilà un code simple pour Copier/Coller une zone. il suffit de le brancher sur l'événement "Exécuter l'action" du bouton.

Code : Tout sélectionner

Sub CopieCellule

	oDoc = ThisComponent
	oFeuille = oDoc.CurrentController.ActiveSheet
	
	oCelluleSource = oFeuille.getCellRangeByName("B5")
	oCelluleDestination = oFeuille.getCellRangeByName("G5")
	
	oDoc.CurrentController.Select( oCelluleSource )
	oCopie = oDoc.CurrentController.GetTransferable
	
	oDoc.CurrentController.Select( oCelluleDestination )
	oDoc.CurrentController.InsertTransferable(oCopie)
	
End Sub
Ceci fonctionne pour un des boutons.
Il est possible d'utiliser la même procédure pour plusieurs boutons, en testant de quel bouton vient l'événement.
Cordialement,
PS : Simple curiosité, quel est le but final de l'opération ?
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
Tilou
Membre lOOyal
Membre lOOyal
Messages : 42
Inscription : 24 sept. 2006 14:16

Re: [CALC] Copier texte et mise en forme par bouton.

Message par Tilou »

Excellent. C'est exactement ce que je voulais.
Merci beaucoup.
L.O. 24.8.2.1 - Windows 11
Avatar de l’utilisateur
yclik
HédOOniste
HédOOniste
Messages : 1752
Inscription : 15 déc. 2010 08:33

Re: [CALC] Copier texte et mise en forme par bouton.

Message par yclik »

Bonjjour
en m'inspirant de la macro de Jeanmi2403 que je salue au passage
une proposition avec une seule macro pour les 3 boutons
macro Copier texte et mise en forme par boutons.ods

Code : Tout sélectionner

Sub copier(Event as variant)

	oDoc = ThisComponent
	oFeuille = oDoc.CurrentController.activeSheet
	Dim NomBouton as string

NomBouton  = Event.Source.Model.Name rem récupère le nom du bouton déclenché

If NomBouton="B1" then 	oCelluleSource = oFeuille.getCellRangeByName("B2")
If NomBouton="B2" then oCelluleSource = oFeuille.getCellRangeByName("B5")
If NomBouton="B3" then oCelluleSource = oFeuille.getCellRangeByName("B8")

	

	oCelluleDestination = oFeuille.getCellRangeByName("G5")
	
	oDoc.CurrentController.Select( oCelluleSource )
	oCopie = oDoc.CurrentController.GetTransferable
	
	oDoc.CurrentController.Select( oCelluleDestination )
	oDoc.CurrentController.InsertTransferable(oCopie)
	
End Sub
avec le nom du bouton
propBouton.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.14 sous Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1466
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Résolu] [Calc] Copier texte et mise en forme par bouton.

Message par jeanmi2403 »

Re-bonjour à tous,
yclik (que je salue également) m'a coupé l'herbe sous le pied.
Mais, pour le fun, je vais rajouter une simplification supplémentaire.
J'inscris l'adresse de la cellule source dans la propriété "Complément d'information" de chaque bouton.
ComprementInfoBouton.png
On récupère cette valeur avec la propriété "Tag" de l'objet bouton.

Du coup on a :

Code : Tout sélectionner

sZoneSource  = Event.Source.Model.Tag rem récupère l'adresse de la cellule à copier
oCelluleSource = oFeuille.getCellRangeByName(sZoneSource)
à la place de la cascade de If. Ca marche quel que soit le bouton.
On peut mettre autant de boutons qu'on veut...

Encore plus fun !!!
On peut mettre l'adresse de la source ET celle de la destination dans le complément d'information.
Il suffira ensuite de les séparer. Par exemple, on met "B8,G5" dans le Complément d'information d'un bouton, "B5,G6" dans un autre, etc ...

Code : Tout sélectionner

	Dim aAdresses() as String
 	sZones  = Event.Source.Model.Tag rem récupère dans une chaîne les adresses source et destination
 	aAdresses = Split (sZones,",") rem on récupère un tableau (arrayde chaînes
 	
 	oCelluleSource = oFeuille.getCellRangeByName(sZonesAdresses(0)) rem B8
	oCelluleDestination = oFeuille.getCellRangeByName(sZonesAdresses(1)) rem G5
Les instructions de copie sont les mêmes que précédemment.
Et chaque bouton copie dans des cellules différentes.
Bonne soirée,
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX