Pb Macro dans powerpoint

Résolu/Fermé
Doville42 Messages postés 3 Date d'inscription mercredi 4 septembre 2019 Statut Membre Dernière intervention 8 septembre 2019 - Modifié le 4 sept. 2019 à 21:34
Doville42 Messages postés 3 Date d'inscription mercredi 4 septembre 2019 Statut Membre Dernière intervention 8 septembre 2019 - 8 sept. 2019 à 13:45
Bonjour à tous et merci d'avance pour votre aide.

Je suis en train de créer un jeu avec powerpoint et j'ai besoin de remplacer les questions et les réponses.

Les questions et les réponses seront à changer toutes semaines.

Pour simplifier le remplacement, je veux utiliser une macro trouvé sur le net qui marche très bien.

Par contre, dès qu'il y a une zone texte avec une image, la macro se plante à la ligne :

Set oTxtRng = oShp.TextFrame.TextRange


Avez vous un avis sur le pb?

Voici la première partie de la macro qui devrait remplacer plus de 75 zones de textes une fois que le pb sera résolu.


Merci d'avance pour votre aide



Sub ReplaceText()


Dim LastSlide, NumSlide As Integer

LastSlide = Application.ActivePresentation.Slides.Count

Dim oSld As Slide
Dim oShp As Shape
Dim oTxtRng As TextRange
Dim oTmpRng As TextRange
Dim strWhatReplace As String, strReplaceText As String

' texte à trouver
strWhatReplace = "Question 01?"
' à remplacer par
strReplaceText = "Question 01????"



' A faire sur toutes les diapos
For NumSlide = 1 To LastSlide
'For Each oSld In ActivePresentation.Slides
' go during each shapes and textRanges
For Each oShp In ActivePresentation.Slides(NumSlide).Shapes
' replace in TextFrame
Set oTxtRng = oShp.TextFrame.TextRange
Set oTmpRng = oTxtRng.Replace(FindWhat:=strWhatReplace, Replacewhat:=strReplaceText, WholeWords:=False)

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:=False)
Loop
Next oShp
Next NumSlide

'*********************
' texte à trouver
strWhatReplace = "Q01 Réponse A"

' à remplacer par
strReplaceText = "Q01 Réponse AAA"




' A faire sur toutes les diapos
For NumSlide = 1 To LastSlide
'For Each oSld In ActivePresentation.Slides
' go during each shapes and textRanges
For Each oShp In ActivePresentation.Slides(NumSlide).Shapes
' replace in TextFrame
Set oTxtRng = oShp.TextFrame.TextRange
Set oTmpRng = oTxtRng.Replace(FindWhat:=strWhatReplace, Replacewhat:=strReplaceText, WholeWords:=False)

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:=False)
Loop
Next oShp
Next NumSlide



'*********************
' texte à trouver
strWhatReplace = "Q01 Réponse B"

' à remplacer par
strReplaceText = "Q01 Réponse BBB"




' A faire sur toutes les diapos
For NumSlide = 1 To LastSlide
'For Each oSld In ActivePresentation.Slides
' go during each shapes and textRanges
For Each oShp In ActivePresentation.Slides(NumSlide).Shapes
' replace in TextFrame
Set oTxtRng = oShp.TextFrame.TextRange
Set oTmpRng = oTxtRng.Replace(FindWhat:=strWhatReplace, Replacewhat:=strReplaceText, WholeWords:=False)

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:=False)
Loop
Next oShp
Next NumSlide



'*********************
' texte à trouver
strWhatReplace = "Q01 Réponse C"

' à remplacer par
strReplaceText = "Q01 Réponse CCC"




' A faire sur toutes les diapos
For NumSlide = 1 To LastSlide
'For Each oSld In ActivePresentation.Slides
' go during each shapes and textRanges
For Each oShp In ActivePresentation.Slides(NumSlide).Shapes
' replace in TextFrame
Set oTxtRng = oShp.TextFrame.TextRange
Set oTmpRng = oTxtRng.Replace(FindWhat:=strWhatReplace, Replacewhat:=strReplaceText, WholeWords:=False)

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:=False)
Loop
Next oShp
Next NumSlide





End Sub
A voir également:

1 réponse

m@rina Messages postés 20072 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 avril 2024 11 271
5 sept. 2019 à 16:09
Bonjour

Qu'appelles-tu "une zone de texte avec une image" ? Comment est faite cette zone de texte ?

m@rina
0
Doville42 Messages postés 3 Date d'inscription mercredi 4 septembre 2019 Statut Membre Dernière intervention 8 septembre 2019
5 sept. 2019 à 22:33
Excuses moi pour l'explication, ce n'est pas une zone texte avec une image mais une image.

Cette image est insérée sur le document à partir du menu -> insertion -> image

dès que la macro rencontre une page avec une image, la macro se bloque


voici un lien pour récupérer le powerpoint avec la macro.

https://fromsmash.com/U.VrHq41~E-c0?e=ZG9taW5pcXVlLnZpbGxlbWFnbmVAZ21haWwuY29t

Merci pour ton aide.
0
m@rina Messages postés 20072 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 avril 2024 11 271
6 sept. 2019 à 00:06
Ah donc ce n'est pas une zone de texte.

C'est normal car ta macro part du principe que tous les objets (shapes) sont des zones pouvant recevoir du texte. Donc, sur une image pas de texte, donc erreur.

Comme la définition de la variable revient à plusieurs endroits de la macro, il faut tester à chaque fois, et pour chaque objet, si ce dernier a un TextFrame. Si oui, on peut définir la variable, si non on passe à l'objet suivant.

Donc après chaque début de boucle
For each
, il faut ajouter :
If oShp.HasTextFrame Then

et terminer le test par
End If

avant la fin de la boucle (
Next oShp
)
0
Doville42 Messages postés 3 Date d'inscription mercredi 4 septembre 2019 Statut Membre Dernière intervention 8 septembre 2019
8 sept. 2019 à 13:45
Bonjour m@rina,

inutile de te dire que ça marche tu le sais déjà.

Par contre, un grand merci pour ton aide, pour ta réactivité et une réponse très claire.

c'est génial

encore merci
0