Bonjour à tous,
J'ai pour habitude d'écumer les forums en long, en large et en travers pour régler mes problèmes. Mais dans de rare cas, ça ne suffit pas...
Je me tourne donc vers vous pour mon problème.
Avant d'aller plus loin, je suis débutant en VBA et je ne suis pas développeur alors j'espère que les termes que j'utilise sont les bons. N'hésitez pas si vous ne comprenez pas ou s'il vous manque des infos.
J'ai un fichier Excel contenant quelques centaines de lignes.
OBJECTIF => Créer un .pptx par ligne.
Obligations :
-Faire au plus simple pour l'utilisateur
-Créer les .pptx avec une certaines arborescence.
-Rajouter un lien hypertexte par ligne vers son propre .pptx
-Lors de l'ouverture d'un .pptx, donner la possibilité à l'utilisateur de mettre à jour les données (en les récupérant dans le fichier Excel)
Je bloc sur le dernier point. Voici les solutions que j'ai envisagé :
-Macro avec évenement sur le fichier Excel : Quand une cellule est modifié, le .pptx est généré
=> Impossible. La plupart des cellules sont mise à jours via ODBC donc lors d'une maj, des centaines de cellule sont modifiés. Je pense qu'on peut mieux faire.
-Macro avec évenement lors du clic sur le lien hypertexte pour le mettre à jour avant de l'ouvrir.
=> Impossible, les fichiers .pptx seront souvent ouvert sans passer par le fichier Excel.
-Copie avec liaison lors de la création du .pptx
=> Je pense que c'est la meilleur solution. En passant par le GUI, ca se fait tout seul et ca marche bien. Mais en VBA, je n'y arrive pas.
Structure du fichier Excel :
Feuil1("Données")
...
Feul5("Générer PowerPoint")
Structure du fichier .pptx :
1 Slide avec 2 Shapes (tableaux) côte à côte.
En cherchant, j'ai cru comprendre qu'il fallait utiliser .PasteSpecial pour obtenir le même comportement que le GUI lors d'un collage avec liaisons. Mais je n'arrive pas à l'utiliser pour y parvenir.
Voici le bout de code qui pose problème :
J'ai essayé "ppPasteDefault" = Colle une chaine vide. Comme tout les autres excepté "ppPasteText" et "...RTF" qui colle bien le contenu de la cellule, mais ne crait pas de liaison entre Excel et PowerPoint. (J'entends par la que si je modifie le .xlsx, cela modifiera le .pptx)
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 With PptDoc 'Création du premier tableau (14 lignes pour 2 colonnes) Set Sh = PptDoc.Slides(1).Shapes.AddTable(14, 2, 40, 60, 300, 350) Sh.Name = "Tab1" 'Boucle 14 fois (14 lignes du tableau) For i = 1 To 14 'Première colonne, se sont juste les nom des champs. Pas de soucis içi. With Sh.Table.Cell(i, 1).Shape.TextFrame.TextRange .Text = Sheets(FeuillePPTX).Range("A" & i).Value End With 'Seconde colonne With Sh.Table.Cell(i, 2).Shape.TextFrame.TextRange 'Copie de la cellule. Sheets(FeuilleBDD).Range(Sheets(FeuillePPTX).Range("B" & i).Value & j).Copy 'Collage spéciale .PasteSpecial ppPasteText, link:=True End With Next i 'Ensuite, c'est le second tableau. Si le premier marche, le second marchera.
Quelqu'un a-t-il une idée s'il vous plait ?
La j'ai épuisé toutes les idées que j'ai eu...
Je vous remercie !!
Partager