Poser votre question
0

Dans les macro: comment copier des shapes entre sheets

posée 2019-05-31 17:24:13 +0200

Image Gravatar de merouaneb

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,

éditer requalifier signaler fermer fusionner supprimer

1Réponse

0

répondue 2019-06-01 07:18:39 +0200

Image Gravatar de pierre-yves samyn

updated 2019-06-01 08:18:31 +0200

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 C:\fakepath\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

éditer signaler supprimer permalien plus

Commentaires

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 !

Image Gravatar de merouanebmerouaneb ( 2019-06-01 07:29:53 +0200 )éditer

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

Image Gravatar de pierre-yves samynpierre-yves samyn ( 2019-06-01 08:19:29 +0200 )éditer

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

Image Gravatar de merouanebmerouaneb ( 2019-06-01 15:31:03 +0200 )éditer
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2019-05-31 17:24:13 +0200

Consultée: 23 fois

Mise à jour: Jun 01