Vous avez un diaporama qui tourne en boucle sur une borne, et ce diaporama affiche des objets liés et régulièrement modifiés (tableaux ou graphiques Excel, texte Word, etc.). Comment faire pour que ces modifications soient prises en compte dans le diaporama, sans pour autant l'interrompre ?

Rappelons que les objets insérés avec lien sont, par défaut, automatiquement mis à jour à l'ouverture de la présentation. Il n'en est pas de même lorsque la présentation est déjà ouverte (il faut demander la mise à jour), et encore moins en cours de diaporama où il sera difficile de demander la mise à jour.

Pour régler ce problème, une macro est donc nécessaire.

Voici une première macro qui met à jour un seul objet dans une diapositive en particulier. Pour l'exemple, j'ai nommé cet objet "Excel", et il se trouve sur la troisième diapositive. Cet exemple met à jour l'objet lorsque le diaporama (qui fonctionne en boucle) redémarre à la première diapositive :

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
If SSW.View.CurrentShowPosition = 1 Then
ActivePresentation.Slides(3).Shapes("Excel").LinkFormat.Update
End If
End Sub

Et voici une seconde macro qui met à jour tous les objets de la présentation insérés avec liaison, sous condition que ce soient des objets OLE, dès que le diaporama redémarre à la première diapositive :

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
Dim diapo As Slide, sh As Shape
If SSW.View.CurrentShowPosition = 1 Then
For Each diapo In ActivePresentation.Slides
    For Each sh In diapo.Shapes
        If sh.Type = msoLinkedOLEObject Then
        sh.LinkFormat.Update
        End If
    Next
Next
End If
End Sub
 

NB : Ne modifiez pas le nom de ces macros. Il s'agit d'une macro événementielle automatique et seul ce nom la fera fonctionner.