Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1921 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA/PPT remplacer des données

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA/PPT remplacer des données

n°2203551
tiber33
Posté le 20-09-2013 à 01:58:33  profilanswer
 

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
mood
Publicité
Posté le 20-09-2013 à 01:58:33  profilanswer
 

n°2203568
Marc L
Posté le 20-09-2013 à 10:03:46  profilanswer
 

 
           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
n°2203755
otobox
Maison fondée en 2005
Posté le 22-09-2013 à 10:53:51  profilanswer
 

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
n°2203831
tiber33
Posté le 23-09-2013 à 16:47:26  profilanswer
 

@ 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'
 
 
 

n°2203840
Marc L
Posté le 23-09-2013 à 17:22:15  profilanswer
 

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

n°2203845
otobox
Maison fondée en 2005
Posté le 23-09-2013 à 18:09:13  profilanswer
 

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
n°2204020
tiber33
Posté le 24-09-2013 à 21:06:56  profilanswer
 

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...

n°2204071
otobox
Maison fondée en 2005
Posté le 25-09-2013 à 07:25:02  profilanswer
 

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
n°2204134
Marc L
Posté le 25-09-2013 à 15:52:55  profilanswer
 

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

n°2204168
tiber33
Posté le 25-09-2013 à 16:50:06  profilanswer
 

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 !

mood
Publicité
Posté le 25-09-2013 à 16:50:06  profilanswer
 

n°2204175
Marc L
Posté le 25-09-2013 à 17:24:48  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA/PPT remplacer des données

 

Sujets relatifs
Help, Algorithme de tri sélectif VBAl'échange des données entre une application c++ et application java
VBA - Copier données entre deux feuilles et restructuration[VBA] Remplacer une formule dans plusieurs feuilles du classeur
Passage de données sans rafraichir la pageProblème reception données port serie
distribution des données dans une base des donnéesApres "free(a)", ca pointe toujours vers les données
Plus de sujets relatifs à : VBA/PPT remplacer des données


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR