2016-03-01 1 views
0

Je suis nouveau à VBA et j'essaie de faire quelque chose qui me semble simple, mais très difficile à réaliser.Déplacer une forme dans Powerpoint du point A au point B

Contexte:

J'ai une présentation PPT avec 20 diapositives, dans lequel chaque diapositive a 21 formes, mais le dernier. Chaque fois que je veux ajouter une nouvelle forme, il va sur la première diapositive, et donc je dois déplacer toutes les formes pour faire de la place pour le nouveau.

Mon problème: j'ai découvert comment déplacer une forme à l'endroit où je veux en utilisant ce code

With ActiveWindow.Selection.ShapeRange 
    .Left = XXX 'change the number for desired x position 
    .Top = XXX 'change the number for desired y position 
End With 

Cependant, cela ne fonctionne que si je sélectionne ladite 1ère forme. Parce que j'ai des centaines de formes, les nommer toutes pour les déplacer prendrait trop de temps. Donc ce que je voudrais faire est de dire VBA pour sélectionner la forme qui est là:

.Left = 50 
.Top = 50 

et y déplacer

.Left = 140 
.Top = 50 

Cela semble très simple, mais je ne peux pas en quelque sorte la figure comment le faire. Ce fil se rapproche de ce que je veux mais pas encore tout à fait.

Merci d'avance.

+0

Je pense que je compris. Wow c'était rapide. [code] Si .Type = msoAutoShape _ Et .Left = 50 _ Et .Top = 50 Alors .Left = 140 .Top = 50 [/ code] –

Répondre

0

Vous pouvez ajouter la forme à une diapositive donnée et ainsi réduire la nécessité de le déplacer:

' Adds a shape to a given slide or if no slide passed, to the current slide in view 
' Assumes code is running in PowerPoint VBE 
Sub AddShapeToSlide(Optional oSld As Slide) 
    If oSld Is Nothing Then Set oSld = ActiveWindow.View.Slide 
    With oSld.Shapes.AddShape(msoShapeRectangle, 140, 50, 200, 200) 
    .Name = "My New Shape" 
    ' Apply other formatting here 
    End With 
End Sub 
+0

Ceci est ce que je l'utilise pour créer la nouvelle forme. Mais comme il est supposé prendre la place d'une forme qui est déjà là, j'ai besoin de déplacer l'ancien en premier. Exemple: A B C D E F G Je veux créer une nouvelle forme que je mettrais où A est actuellement. Donc, mon but était de déplacer G, puis de déplacer F vers où G était, E vers où F était etc etc et A vers où B était. Puis ajoutez la nouvelle forme. J'ai réussi à le faire avec le code dans mon commentaire au 1er post. Mais merci quand même !! –

+0

Ah, compris :-) –