Dans les macro: comment copier des shapes entre sheets

Je veux à travers cette méthode copier des des rectangles dans l’intérieur sont des bitmaps entre feuilles de calcule.
merci de me répondre,
Cordialement,

Bonjour

Premier exemple pour copier la forme sélectionnée vers Feuille2.A1

sub CopierCollerSelection

dim oClasseur as object, oCopie as object, oFeuilleDest as object, oDestination as object

oClasseur = thisComponent
oCopie = oClasseur.currentController.getTransferable
oFeuilleDest = oClasseur.Sheets.getByName("Feuille2")
oDestination = oFeuilleDest.GetCellRangeByName("A1")
oClasseur.currentController.select(oDestination)
oClasseur.currentController.insertTransferable(oCopie)

end sub

Deuxième exemple pour copier toutes les formes de Feuille1 vers Feuille2.A1 (elles seront donc superposées)

sub CopierCollerSelectionToutesFormes

dim oClasseur as object, oCopie as object, oFeuilleSource as object, oFeuilleDest as object, oDestination as object
dim i as long


oClasseur = thisComponent
oFeuilleSource = oClasseur.Sheets.getByName("Feuille1")
oFeuilleDest = oClasseur.Sheets.getByName("Feuille2")
oDestination = oFeuilleDest.GetCellRangeByName("A1")    

for i = 0 to oFeuilleSource.DrawPage.count - 1
	oClasseur.CurrentController.select(oFeuilleSource.DrawPage.getByIndex(i))	
	oCopie = oClasseur.currentController.getTransferable
	oClasseur.currentController.select(oDestination)
	oClasseur.currentController.insertTransferable(oCopie)
next i

end sub

Voir copyShape.ods

[Ajout]

L’index est la “position” de la forme dans la collection. On ne peut donc pas le modifier. Si tu veux accéder à une forme précise le plus simple est de la nommer dans l’interface (clic droit sur la forme). On peut dès lors accéder à ce nom dans la procédure. Dans l’exemple suivant on ne copie que la forme nommée “bleue” :

dim oClasseur as object, oCopie as object, oFeuilleSource as object, oFeuilleDest as object, oDestination as object
dim oShape as object
dim i as long


oClasseur = thisComponent
oFeuilleSource = oClasseur.Sheets.getByName("Feuille1")
oFeuilleDest = oClasseur.Sheets.getByName("Feuille2")
oDestination = oFeuilleDest.GetCellRangeByName("A1")

for i = 0 to oFeuilleSource.DrawPage.count - 1
	oShape = oFeuilleSource.DrawPage.getByIndex(i)
	if oShape.name = "bleu" then
		oClasseur.CurrentController.select(oFeuilleSource.DrawPage.getByIndex(i))	
		oCopie = oClasseur.currentController.getTransferable
		oClasseur.currentController.select(oDestination)
		oClasseur.currentController.insertTransferable(oCopie)
	end if	
next i

Cordialement

Merci, de m’avoir répondu aussi vite et précis, j’ai une petite question, comment connaître le 'index d’un shape ou comment le modifier ? merci encore !

@merouaneb j’ai édité ma réponse pour ajouter le complément d’information…

Cher Monsieur, je vous remercie du fond du Cœur. Portez vous bien et à bien tôt.