Modifier les liaisons entre Excel et Power Point par code

maxwellou

XLDnaute Occasionnel
Bonjour,

Voilà mon soucis, j'ai une présentation Power Point avec 160 slides et autant de liaison sur des fichiers Excel.

Lorsque je veux modifer la sources des données Excel, je suis contraint de modifier un par un les 160 liaisons.

Ma question est : Existe-il une solution pour modifier toutes les sources en une seule fois ? (sachant que les sources sont dans des répertoires différents, ex. ci-dessous:

Source à modifer => c:\tableau de bord\2013\janvier\indicateur 1\fichier excel 01/2013.xls

Source cible => c:\tableau de bord\2013\février\indicateur 1\fichier excel 02/2013.xls


Merci de votre aide.
 

tototiti2008

XLDnaute Barbatruc
Re : Modifier les liaisons entre Excel et Power Point par code

Bonjour maxwellou,

Existe-il une solution pour modifier toutes les sources en une seule fois ?

S'il n'y a aucune règle sur les nouveaux classeurs à lier, c'est sûr que non
S'il y a une règle, je sais que c'est faisable sur Excel, jamais essayé sur Powerpoint
Peux-tu expliquer la règle de modification de tes liens ?
 

maxwellou

XLDnaute Occasionnel
Re : Modifier les liaisons entre Excel et Power Point par code

Merci de ta réponse.

Mais qu'entends tu pas "règle" ?

La modification se fait mensuellement ou trimestriellement. C'est à dire, chaque mois, j'ai environ 50 fichiers Excel qui alimentent une présentation Power Point. Cette derniere est composé de graphique et de tableau issu des fichiers Excel. Chaque mois, ces graphiques et tableaux changent avec de nouvelles données et sont enregistés dans une nouveau répertoire.

Mon soucis est de pouvoir modifier l'ensemble des liaisons, la seule règle à modifier serait le chemin des liaisons (qui changent chaque mos car nouveau "mois")
 

mromain

XLDnaute Barbatruc
Re : Modifier les liaisons entre Excel et Power Point par code

Bonjour maxwellou, Tototiti :), le forum,

Voici un code VBA PowerPoint qui permet de modifier les liaisons d'une présentation :
VB:
Sub UpdateLinks()
Dim oldPath As String, newPath As String
Dim pptPres As Presentation, pptSlide As Slide, pptShape As Shape

    newPath = "c:\Classeur1.xlsx"
    oldPath = "c:\Classeur2.xlsx"

    'loop on each slides, and on each shapes
    Set pptPres = ActivePresentation
    For Each pptSlide In pptPres.Slides
        For Each pptShape In pptSlide.Shapes
            If pptShape.Type = msoLinkedOLEObject Then 'if it is a "linked object" then
                If pptShape.LinkFormat.SourceFullName = oldPath Then
                pptShape.LinkFormat.SourceFullName = newPath 'modify the link
                pptShape.LinkFormat.Update 'update the link
                End If
            End If
        Next pptShape
    Next pptSlide
End Sub
Toutes les liaisons vers c:\Classeur2.xlsx pointeront vers c:\Classeur2.xlsx.

Si ta présentation fait référence à plusieurs sources, il faudra sûrement adapter le code...

A+

Miki
 

maxwellou

XLDnaute Occasionnel
Re : Modifier les liaisons entre Excel et Power Point par code

Merci beaucoup de ta réponse.

Malheureusement il me semble que ta solution propose de modifier à seule lien. Dans mon cas, j'ai environ 50 fichiers excel qui représentent mes différentes sources.

En fait, ce qui change dans le chemin de mes sources c'est uniquement le "mois"...cad, le fichier se nomme quasiment à l'identique d'un mois sur l'autre, ce qui change c'est le mois en fin de nom (exemple_novembre 2012.xls) et le chemin aussi puisque nous créons un nouveau répertoire pour le nouveau mois analysé (c:\TDB\mois M\fichierExcel_nov2012.xls) (c:\TDB\mois M+1\fichierExcel_déc2012.xls)

Merci de votre aide.
 

mromain

XLDnaute Barbatruc
Re : Modifier les liaisons entre Excel et Power Point par code

Re bonjour,

du coup, je rejoins Tototiti.
Existe-t-il des "règles" de nommage de tes fichiers ?
Si oui, quelles sont-elles ?

Par exemple, à la lecture de ton précédent post, je vois :
le fichier se nomme quasiment à l'identique d'un mois sur l'autre, ce qui change c'est le mois en fin de nom (exemple_novembre 2012.xls) et le chemin aussi puisque nous créons un nouveau répertoire pour le nouveau mois analysé (c:\TDB\mois M\fichierExcel_nov2012.xls)
ça n'a pas l'air très régulier...

Est-ce que cette règle pourrait suffire ?
Dans les liaisons de ma présentation, remplacer :
  • \2013\Janvier\ par \2013\Février\
  • Jan par Fev
A+

Miki
 

tototiti2008

XLDnaute Barbatruc
Re : Modifier les liaisons entre Excel et Power Point par code

Bonjour mromain, :)
Re,

Est-ce que cette règle pourrait suffire ?
Dans les liaisons de ma présentation, remplacer :
  • \2013\Janvier\ par \2013\Février\
  • Jan par Fev
@maxwellou
Tu vois, ça c'est une règle, un modèle de changement des liens
C'est de la programmation, ça demande de suivre une logique
 

maxwellou

XLDnaute Occasionnel
Re : Modifier les liaisons entre Excel et Power Point par code

En fait d'après ce que je comprends de vos remarque il y a deux règles:

- changement dans le chemin du nom du mois concerné (old = c:\Mois M\fichier.xls) (new=c:\Mois M+1\fichier.xls

- changement dans le chemin du nom du fichier xls (old= "fichier_mois M.xls) (new = "fichier_mois M+1.xls)
 

mromain

XLDnaute Barbatruc
Re : Modifier les liaisons entre Excel et Power Point par code

Re bonjour,

Une fois de plus, "changer Mois M en Mois M+1" est assez léger...
Regarde ton post précédent. Mois M+1 vaut Novemvre ou Nov ???

Comme l'a très bien dit Tototiti, la programation demande de suivre une logique, d'avoir une certaine rigueur.

Cela dit, voici un essai qui suit la règle de mon précédent post :
VB:
Sub UpdateLinks()
Dim oldPath As String, newPath As String, oldName As String, newName As String, oldLink As String, newLink As String
Dim pptPres As Presentation, pptSlide As Slide, pptShape As Shape, myFso As Object
    oldPath = "\2013\Janvier\"
    newPath = "\2013\Février\"
    oldName = "Jan"
    newName = "Fev"
    
    Set myFso = CreateObject("Scripting.FileSystemObject")
    'loop on each slides, and on each shapes
    Set pptPres = ActivePresentation
    For Each pptSlide In pptPres.Slides
        For Each pptShape In pptSlide.Shapes
            If pptShape.Type = msoLinkedOLEObject Then              'if it is a "linked object" then
                
                oldLink = pptShape.LinkFormat.SourceFullName        'get curent path
                newLink = Replace(Replace(oldLink, oldPath, newPath), oldName, newName)     'compute new path
                
                If Not myFso.FileExists(newLink) Then               'check new path validity
                    MsgBox "File not found ! (" & newLink & ")", vbCritical, "Error"
                Else
                    pptShape.LinkFormat.SourceFullName = newLink    'modify the link
                    pptShape.LinkFormat.Update                      'update the link
                End If
                
            End If
        Next pptShape
    Next pptSlide
End Sub

J'ai rajouté un test afin de savoir si le path du nouveau fichier (suite aux deux substitutions) pointe sur un fichier qui existe vraiment.

A+
Miki

[EDIT]
PS: Contrairement au précédent, ce code n'a pas été testé...
 
Dernière édition:

maxwellou

XLDnaute Occasionnel
Re : Modifier les liaisons entre Excel et Power Point par code

Tout d'abord, je vous présente mes excuses si je vous ai paru un peu futile dans mes réponses. Croyez-moi, loin de là mon intention. D'ailleurs je vous remercie beaucoup pour votre aide.

En fait, je comprends que cela peut paraître simpliste (Mois_M et Mois_M+1) mais je ne sais pas comment vous répondre autrement...

Je ne change que cette variable (Mois) dans mon chemin d'accès à ma nouvelle source.

Donc, dans dans mon esprit, je voulais savoir si on pouvait commander à Power Point de mettre à jour les liaisons du fichier de (par exemple Septembre 2012) par les données sources de Octobre 2012.

La règle est que chaque mois, c'est la même présentation Power Point seulement on change "juste" le nom du mois.

Sinon j'ai teste ton code Mromain et voilà le message d'erreur qu'il m'affiche :

erreur.jpg
 

Pièces jointes

  • erreur.jpg
    erreur.jpg
    18.3 KB · Affichages: 324
  • erreur.jpg
    erreur.jpg
    18.3 KB · Affichages: 312

mromain

XLDnaute Barbatruc
Re : Modifier les liaisons entre Excel et Power Point par code

Re,

Pas de souci :). C'est juste que la programation ne connait pas l'"à peut près"...

Pour en revenir à ton problème, je pense que ce serait plus simple si tu nous donnais un exemple.
Peux-tu nous préparer un fichier zip contenant :
  • un exemple de présentation
  • un répertoire (Mois M) avec les sources Excel utilisé dans la présentation
  • un répertoire (Mois M+1) avec les nouveaux fichiers Excel
Ce sera plus simple pour trouver une solution...

A+
Miki
 

tototiti2008

XLDnaute Barbatruc
Re : Modifier les liaisons entre Excel et Power Point par code

Re,

Une version légèrement modifiée du code Mikaël :

Code:
Sub UpdateLinks()
Dim oldPath As String, newPath As String, oldName As String, newName As String, oldLink As String, newLink As String
Dim pptPres As Presentation, pptSlide As Slide, pptShape As Shape, myFso As Object
Dim Message As String
    Message = "Liens traités :" & Chr(10)
    oldPath = "\2013\Janvier\"
    newPath = "\2013\Février\"
    oldName = "Jan"
    newName = "Fev"
   
    Set myFso = CreateObject("Scripting.FileSystemObject")
    'loop on each slides, and on each shapes
   Set pptPres = ActivePresentation
    For Each pptSlide In pptPres.Slides
        For Each pptShape In pptSlide.Shapes
            If pptShape.Type = msoLinkedOLEObject Then              'if it is a "linked object" then
               
                oldLink = pptShape.LinkFormat.SourceFullName        'get curent path
               newLink = Replace(Replace(oldLink, oldPath, newPath), oldName, newName)     'compute new path
               If newLink <> oldLink Then
                If Not myFso.FileExists(Left(newLink, InStr(1, newLink, "!") - 1)) Then           'check new path validity
                   MsgBox "File not found ! (" & newLink & ")", vbCritical, "Error"
                Else
                    Message = Message & oldLink & " - " & newLink & chr(10)
                    pptShape.LinkFormat.SourceFullName = newLink    'modify the link
                   pptShape.LinkFormat.Update                      'update the link
               End If
               End If
            End If
        Next pptShape
    Next pptSlide
    MsgBox Message
End Sub

Notamment pour la vérification d'existence du fichier
Sinon ça a tourné en l'état chez moi sur un exemple que je me suis fait

Edit :
Tout d'abord, je vous présente mes excuses si je vous ai paru un peu futile dans mes réponses.
Non, pas de problème, on ne veut pas d'excuse, juste un peu de rigueur :)

je comprends que cela peut paraître simpliste (Mois_M et Mois_M+1) mais je ne sais pas comment vous répondre autrement...

Oui mais Mois, pour janvier par exemple, peut être écrit :
01
janvier
Janvier
Jan
Janv
...etc
et en programmation, ce n'est pas la même chose

Bon anniversaire à ta môman :)
 
Dernière édition:

maxwellou

XLDnaute Occasionnel
Re : Modifier les liaisons entre Excel et Power Point par code

Bonjou à tous,

Voilà le fichier exemple.

Dans cet exemple, le fichier PPTX est en janvier 2013, et je souhaiterais le dupliquer pour Mars 2013 avec les données de Mars 2013 (répertoire "indicateur").

Pour ce cas si, ll suffirait juste de mettre à jour la liaison dans Power Point. Toutefois, mon problème est lié au fait que dans une véritable situation, il y a plus de 50 fichiers Excel qui sont la source pour Power Point et donc autant de lien à mettre à jour manuellement.

J'espérais donc arriver à changer la liaison automatiquement pour les tous les fichiers sachant que le seule variable qui change d'un fichier à un autre c'est le mois (toujours en caractère type "Janvier 2012).

Ouops...je ne sais pas comment on joint un fichier à ce post...savez vous comment faire ? merci
 

tototiti2008

XLDnaute Barbatruc
Re : Modifier les liaisons entre Excel et Power Point par code

Bonjour maxwellou,

Quand tu réponds à la discussion, cliques sur "Aller en mode avancé"
Là, il y a un trombone pour joindre un fichier
Si le fichier pptx ne passe pas, zippe le et envoie le zip
Tu as essayé le dernier code que j'ai proposé ?
 

Discussions similaires

Statistiques des forums

Discussions
312 347
Messages
2 087 499
Membres
103 562
dernier inscrit
soso21