Bonjour,
Je viens vers vous car je fais face à un petit mur, mais obstacle quand même...
En effet, j'aimerais automatiser le remplacement de données dans une feuille ppt par d'autres données, le tout fourni par un tableur excel servant de base de données.
Des images valent mieux qu'un long discours, voici ce que j'aimerai que la macro fasse:

Dans mon cas, j'ai initialement les données de gauche, et en lançant la macro, ce qu'il y a d'écrit dans les cases est remplacé et on obtient les cases de droite.
Pour la base de données, j'utilise un tableur excel très simple 2 colonnes:
-la première: ce que l'on cherche à remplacer, si on le trouve dans la diapo
-la deuxième: ce par quoi on va le remplacer
Un aperçu:

Pour ce faire, j'utilise la macro suivante (qui balaye le tableur ligne par ligne, et tant qu'une ligne n'est pas vide, récupère la valeur de la première colonne excel, va voir dans ppt si une case contient cette valeur, si oui la remplace par la donnée excel de la 2° colonne, puis on passe à la ligne suivante d'excel et on rebalaye les slides ppt à la recherche de la valeur à remplacer):
Code :
- Sub ReplaceText()
-
- Dim oSld As Slide
- Dim oShp As Shape
- Dim oTxtRng As TextRange
- Dim oTmpRng As TextRange
- Dim strWhatReplace As String, strReplaceText As String
-
- Dim eApp As Excel.Application
- Dim eWb As Excel.Workbook
- Set eApp = CreateObject("Excel.Application" ) ' appeler excel
- Set eWb = eApp.Workbooks.Open("C:\...\liste.xls" ) ' chemin vers fichier excel
- eApp.Visible = True ' rendre visible l'ouverture d'excel par la macro
-
- k = 2 ' Parcourir
-
- While eWb.Sheets(1).Cells(k, 1) <> "" ' tant que la cellule n'est pas vide
-
- strWhatReplace = eWb.Sheets(1).Cells(k, 1) ' mettre la valeur à remplacer dans la variable
- strReplaceText = eWb.Sheets(1).Cells(k, 2) ' mettre la valeur de remplacement dans l'autre variable
-
-
- For Each oSld In ActivePresentation.Slides ' parcourir les slides
-
- For Each oShp In oSld.Shapes ' parcourir les shapes et textrange
-
- On Error Resume Next ' replace in TextFrame
-
- Set oTxtRng = oShp.TextFrame.TextRange()
- Set oTmpRng = oTxtRng.Replace( _
- FindWhat:=strWhatReplace, _
- Replacewhat:=strReplaceText, _
- WholeWords:=True)
-
- Do While Not oTmpRng Is Nothing
-
- Set oTxtRng = oTxtRng.Characters _
- (oTmpRng.Start + oTmpRng.Length, oTxtRng.Length)
- Set oTmpRng = oTxtRng.Replace( _
- FindWhat:=strWhatReplace, _
- Replacewhat:=strReplaceText, _
- WholeWords:=True)
- Loop
- Next oShp
- Next oSld
-
- k = k + 1
- Wend
-
- eApp.Quit
- Set eApp = Nothing
- Set eWb = Nothing
-
- End Sub
|
Ligne 13 le chemin appelant le fichier excel nommé 'liste'.
Voilà, tout est dit, le problème que je rencontre, c'est qu'avec cette macro je n'arrive pas à faire l'opération décrite dans la première visu.
Pourtant, la macro marche quand par exemple je veux remplacer 'jk123' par '147d7--', mais dès que la valeur à remplacer se complexifie (présence d'espaces, de "--" , de "/" ou une combinaison de tout cela) le code ne semble pas reconnaître ces valeurs dans le slide et ne les remplace donc pas.
Je pense que le problème réside dans la définition de certains paramètres, mais j'avoue ne pas être grandiose en programmation, et encore moins en VBA appliqué à ppt, d'où ma requête
Si des gens veulent bien se pencher sur mon problème je leur en serai reconnaissant, en espérant avoir été suffisamment clair.
Je vous remercie,
Tiber
Message édité par tiber33 le 20-09-2013 à 08:37:45