Bonjour,
Je cherche à monter un scripte vba pour power point, qui me répète une mise en page, de page en page. Je veux identifier les différentes images, les redimensionner et les positionner en plusieurs points de ma diapo. Indication importante, toutes les diapo ne contiennent pas forcement 6 images. Je souhaiterai alors laisser les derniers emplacements vide.
J’ai une macro qui marche pour un slide unique :
Quand j’essaie de la généraliser à l’intégralité du document :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 Sub miseenpage() Dim shp As Shape Dim sld As Slide Set sld = ActivePresentation.Windows(1).View.Slide ' on boucle sur la collection des shapes For Each shp In sld.Shapes ' on test si c'est une shape de type image If shp.Type = msoPicture Then With shp '.Left = 10 '.Top = 10 .Width = 300 .Height = 220 End With End If Next shp On Error GoTo Suite Set shp = sld.Shapes(1) With shp .Left = 10 .Top = 20 End With Set shp = sld.Shapes(2) With shp .Left = 310 .Top = 20 End With Set shp = sld.Shapes(3) With shp .Left = 620 .Top = 20 End With Set shp = sld.Shapes(4) With shp .Left = 10 .Top = 300 End With Set shp = sld.Shapes(5) With shp .Left = 310 .Top = 300 End With Set shp = sld.Shapes(6) With shp .Left = 620 .Top = 300 End With Suite: End Sub
Ça me donne un message d’erreur, me disant que l’indice 2 n’existe pas pour sld.Shapes(), comme si le On Error GoTo Suite n’avait effet qu’au 1er passage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 Sub miseenpage() Dim shp As Shape Dim sld As Slide ' on boucle sur la collection des diapositives For Each sld In Application.ActivePresentation.Slides ' on boucle sur la collection des shapes For Each shp In sld.Shapes ' on test si c'est une shape de type image If shp.Type = msoPicture Then With shp '.Left = 10 '.Top = 10 .Width = 300 .Height = 220 End With End If Next shp On Error GoTo Suite Set shp = sld.Shapes(1) With shp .Left = 10 .Top = 20 End With Set shp = sld.Shapes(2) With shp .Left = 310 .Top = 20 End With Set shp = sld.Shapes(3) With shp .Left = 620 .Top = 20 End With Set shp = sld.Shapes(4) With shp .Left = 10 .Top = 300 End With Set shp = sld.Shapes(5) With shp .Left = 310 .Top = 300 End With Set shp = sld.Shapes(6) With shp .Left = 620 .Top = 300 End With Suite: Next sld End Sub
Voyez-vous où mon code est défaillant ? Serait-il possible d’exclure des diapo (par exemple 1, 3 et7) de la boucle For Each sld In Application.ActivePresentation.Slides ?
Une autre question : Comment sauvegardez-vous vos Macro ? Pour l’instant j’utilise un système précaire de copier-coller dans un document texte, mais il y a probablement plus intelligent.
Merci d’avance pour votre aide.
Quentin
Partager