Bonjour,


QUELQUES DONNEES POUR COMPRENDRE MON SUJET
Sous diaporama Powerpoint, (version Office365), je veux pouvoir faire apparaitre des objets (images, zones de texte, formes automatiques) au simple survol d’autres objets.
Je veux qu’au survol par la souris d’un objet « declencheur1 », un objet « PopUp1 » apparaisse (et que tout autre objet « PopUp » actuellement visible disparaisse).

CE QUE J’AI FAIT POUR LE MOMENT
J’ai créé au sein d’un fichier PowerPoint une macro absolument pas optimisée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Sub PopUp1_1_apparaitre()
   If ActivePresentation.Slides(1).Shapes("PopUp1_1").Visible = msoFalse Then
   ActivePresentation.Slides(1).Shapes("PopUp1_1").Visible = msoTrue
   End If
   If ActivePresentation.Slides(1).Shapes("PopUp1_2").Visible = msoTrue Then
   ActivePresentation.Slides(1).Shapes("PopUp1_2").Visible = msoFalse
   End If
   If ActivePresentation.Slides(1).Shapes("PopUp1_3").Visible = msoTrue Then
   ActivePresentation.Slides(1).Shapes("PopUp1_3").Visible = msoFalse
   End If
End Sub
Ici, la macro fait apparaitre le PopUp1_1 (1er PopUp du slide n°1) et disparaitre le PopUp1_2 et le PopUp1_3.
Cette macro se déclenche grâce à une Action insérée dans l’objet Declencheur1.

Il me faut donc coder également :
  • la macro PopUp1_2_apparaitre(), qui se déclenchera au survol de l’objet declencheur2,
  • et la macro PopUp1_ 3_apparaitre(), qui se déclenchera au survol de l’objet declencheur3.



Mais 1 slide contenant 3 couples declencheur-PopUp, c’est loin du volume que je dois gérer :

Actuellement, par de multiples copier-coller, j’ai dupliqué cette macro pour pouvoir gérer 12 PopUps sur 12 slides (donc 144 copies de cette macro). Ça fait déjà un fichier texte de plusieurs milliers de lignes !
Et à terme, mon fichier fera des dizaines de slides, avec jusqu’à 15-20 PopUps par Slide.

JE DOIS DONC OPTIMISER

J’essaie donc de faire la chose suivante (mais je débute…):
  1. Dans une variable num_slide, récupérer le numéro de la slide active au moment où j’active ma macro (au survol de ma souris),
  2. Dans une variable num_shape, récupérer le nom du déclencheur (l’objet dont le survol active la macro) pour en extraire son numéro final (son dernier caractère, « 2 » pour « declencheur2 », par exemple),
  3. Au sein de la boucle for qui fera l’affaire, coller une expression du genre



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
   If ActivePresentation.Slides(num_slide).Shapes("PopUp"&"num_slide"&"_"&"num_shape").Visible = msoFalse Then
   ActivePresentation.Slides(num_slide).Shapes("PopUp"&"num_slide"&"_"&"num_shape").Visible = msoTrue
   End If
Je parviens sans peine à récupérer mon numéro de slide dans ma variable num_slide

MAIS, MON PROBLEME : JE BUTE SUR LA RECUPERATION DU NOM DE LA SHAPE (du déclencheur).

J’ai essayé plusieurs syntaxes, dont la plus souvent proposée : ActiveWindow.Selection.ShapeRange.Name.
Je l’ai triturée, malaxée autant que j’ai pu. Rien à faire.

J’ai l’impression de me heurte à 2 difficultés :
  • ça doit marcher quand on passe en mode diaporama (le format de diffusion est un .ppsm),
  • le déclencheur n’est pas cliqué (juste survolé), donc pas sélectionné.



QUELQU’UN a-t-il une solution à proposer ?