VBA/PPT remplacer des données

VBA/PPT remplacer des données - VB/VBA/VBS - Programmation

Marsh Posté le 20-09-2013 à 01:58:33    

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:
http://img849.imageshack.us/img849/7397/uf4a.jpg

 


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:
http://img818.imageshack.us/img818/6996/1v2e.jpg

 

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 :
  1. Sub ReplaceText()
  2.    
  3.     Dim oSld As Slide
  4.     Dim oShp As Shape
  5.     Dim oTxtRng As TextRange
  6.     Dim oTmpRng As TextRange
  7.     Dim strWhatReplace As String, strReplaceText As String
  8.    
  9.     Dim eApp As Excel.Application
  10.     Dim eWb As Excel.Workbook
  11. Set eApp = CreateObject("Excel.Application" )    ' appeler excel
  12. Set eWb = eApp.Workbooks.Open("C:\...\liste.xls" )  ' chemin vers fichier excel
  13. eApp.Visible = True   ' rendre visible l'ouverture d'excel par la macro
  14.    
  15.     k = 2 ' Parcourir
  16.    
  17.     While eWb.Sheets(1).Cells(k, 1) <> "" ' tant que la cellule n'est pas vide
  18.    
  19.     strWhatReplace = eWb.Sheets(1).Cells(k, 1)  ' mettre la valeur à remplacer dans la variable
  20.     strReplaceText = eWb.Sheets(1).Cells(k, 2)  ' mettre la valeur de remplacement dans l'autre variable
  21.    
  22.    
  23.     For Each oSld In ActivePresentation.Slides  ' parcourir les slides
  24.      
  25.         For Each oShp In oSld.Shapes    ' parcourir les shapes et textrange
  26.            
  27.     On Error Resume Next    ' replace in TextFrame
  28.    
  29.             Set oTxtRng = oShp.TextFrame.TextRange()
  30.             Set oTmpRng = oTxtRng.Replace( _
  31.             FindWhat:=strWhatReplace, _
  32.             Replacewhat:=strReplaceText, _
  33.             WholeWords:=True)
  34.            
  35.             Do While Not oTmpRng Is Nothing
  36.                
  37.                 Set oTxtRng = oTxtRng.Characters _
  38.                 (oTmpRng.Start + oTmpRng.Length, oTxtRng.Length)
  39.                 Set oTmpRng = oTxtRng.Replace( _
  40.                 FindWhat:=strWhatReplace, _
  41.                 Replacewhat:=strReplaceText, _
  42.                 WholeWords:=True)
  43.             Loop
  44.         Next oShp
  45.     Next oSld
  46.    
  47.     k = k + 1
  48.     Wend
  49.    
  50. eApp.Quit
  51. Set eApp = Nothing
  52. Set eWb = Nothing
  53.    
  54. 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
Reply

Marsh Posté le 20-09-2013 à 01:58:33   

Reply

Marsh Posté le 20-09-2013 à 10:03:46    

 
           Bonjour,
 
           si c'est un problème de paramètres :
 
           ►  repérer un échec de remplacement.
 
           ►  Le faire manuellement via Rechercher / Remplacer en notant si les cases sont cochées ou pas.
 
           ►  Comparer dans le code les arguments de  Replace  devant correspondre aux cases.
 
                Si une case est cochée, l'argument correspondant doit être à  True,  sinon à  False  ou ne pas apparaitre dans le code.
 
           Dans le code, placer le curseur sur  Replace  puis appuyer sur la touche http://www.developpez.net/forums/images/smilies/f1.gif pour accéder à l'aide intégrée !
 
 
           PS :  je n'ai jamais codé en VBA PPT …


Message édité par Marc L le 20-09-2013 à 10:06:53
Reply

Marsh Posté le 22-09-2013 à 10:53:51    

Ca ne serait pas plus simple de faire des liaisons avec Excel ?
 
Menu Insertion > Objet > A partir d'un fichier > MS Excel et cocher "Liaison".


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 23-09-2013 à 16:47:26    

@ Marc L:
Tu parles de "repérer un échec de remplacement" et de cases cochées ou non... j'ai du mal à te comprendre ici, pourrais-tu m'expliquer s'il te plait?
 
@otobox:
Pareil je ne comprend pas, je fais ça dans ppt?
Quel est le résultat de faire des liaison?
J'ai pas trouvé le 'cochage de liaisons'
 
 
 

Reply

Marsh Posté le 23-09-2013 à 17:22:15    

 
           Mon message précédent est justement l'explication  !   Suffit de lire le contenu de la fenêtre Rechercher / Remplacer …  :sarcastic:  
 

Reply

Marsh Posté le 23-09-2013 à 18:09:13    

tiber33 a écrit :

@ Marc L:
Tu parles de "repérer un échec de remplacement" et de cases cochées ou non... j'ai du mal à te comprendre ici, pourrais-tu m'expliquer s'il te plait?
 
@otobox:
Pareil je ne comprend pas, je fais ça dans ppt?
Quel est le résultat de faire des liaison?
J'ai pas trouvé le 'cochage de liaisons'


Ben les liaisons, c'est tu mets à jour ton classeur Excel et ta présentation PP se met à jour automatiquement. Ca t'évite de devoir le faire manuellement en lançant une macro...


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 24-09-2013 à 21:06:56    

OK, mais le truc c'est que de mon côté le tableau excel n'est là que ponctuellement pour faire le remplacement (il n'a pas lieu d'exister en dehors de ça).
Et par ailleurs, je ne veux que remplacer les données dans les cellules (pas d'autres présents dans des tableaux du même ppt), ce que fait déjà la macro, mais pas pour tous les contenus de cellules (l'histoire des --, des espaces et des / qui ne sont pas lus...), d'où l'idée que j'aurai du fait que c'est un problème de définition de paramètres, mais je ne trouve nul part de doc vba sous ppt...

Reply

Marsh Posté le 25-09-2013 à 07:25:02    

Avec les liaison, il n'y a pas de problème si tu ne veux remplacer que quelques cellules... il suffit de lier seulement celles que tu as besoin de mettre à jour.
Mais si le classeur Excel n'a pas besoin d'exister autrement, c'est effectivement dommage d'en créer un spécialement pour ça.

 

Et puis le vba pour PP, je confirme, c'est très dur de trouver de la documentation, j'avais cherché il y a quelques années, je n'avais pas trouvé grand chose, hormis rajouter une feuille et quelques trucs simples comme ça.
As tu essayé ici ? http://www.developpez.net/forums/f [...] owerpoint/


Message édité par otobox le 25-09-2013 à 07:26:13

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 25-09-2013 à 15:52:55    

 
           Normalement il y a juste à corriger un argument de  Replace  …  :sarcastic:  
 

Reply

Marsh Posté le 25-09-2013 à 16:50:06    

OOOkay ! Ca marche !
 
Merci à votre aide Otobox et Marc L.
Le problème était en effet simple, c'est ta solution que j'ai utilisé du coup Marc, m'évitant également d'avoir à changer mon mode opératoire pour le changement.
 
La solution c'était de mettre 'WholeWords:=False' ... c'est tout con, mais ça à l'air de marcher maintenant !
 
Je vais vérifier si la macro est bonne dans toutes les circonstances mais cela semble correct.
 
Encore merci pour l'aide apportée !

Reply

Marsh Posté le 25-09-2013 à 16:50:06   

Reply

Marsh Posté le 25-09-2013 à 17:24:48    

 
           Et en le supprimant carrément du code cela marche aussi …
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed