Le code posté par Leonardo est simple et généralement efficace, mais il n'affectera pas les Shape
dans les groupes. Un code plus générique utilise la récursivité pour gérer ce cas également (légèrement modifié à partir d' ici, qui se trouve dans le même fil que le code de Leonardo) :
Fonction privée ChangeLangOfAllText_caller()
'ChangeLangOfAllText (msoLanguageIDEnglishUS)
ChangeLangOfAllText (msoLanguageIDSpanishArgentina)
Fin Fonction
Fonction privée ChangeLangOfAllText(ByVal LangID As Long)
Dim MySlide As Slide
Dim MyShape As Shape
Dim MyD As Design
Dim MyHeaderFooter As HeaderFooter
Dim i, nbs As Integer
''''' D'abord traiter les diapositives maîtresses
Pour Chaque MyD Dans ActivePresentation.Designs
Pour Chaque MyShape Dans MyD.SlideMaster.Shapes
ProcessShapes MyShape, LangID
Suivant MyShape
Suivant MyD
''''' Maintenant traiter les diapositives
' Activer ceci pour le débogage
'Debug.Print "Fichier " & ActivePresentation.Name & _
": travailler avec " & ActivePresentation.Slides.Count & " diapositives"
Pour Chaque MySlide Dans ActivePresentation.Slides
' Activer ceci pour le débogage
'Debug.Print " Index de la diapositive " & MySlide.SlideIndex & ", Numéro de diapositive " & MySlide.SlideNumber & _
": travailler avec " & MySlide.Shapes.Count & " formes"
Pour Chaque MyShape Dans MySlide.Shapes
ProcessShapes MyShape, LangID
Suivant MyShape
''''' Maintenant traiter les notes
Pour Chaque MyShape Dans MySlide.NotesPage.Shapes
ProcessShapes MyShape, LangID
Suivant MyShape
''''' Maintenant traiter la maître ' ne semble pas fonctionner, il faut essayer autre chose
Pour Chaque MyShape Dans MySlide.Master.Shapes
ProcessShapes MyShape, LangID
Suivant MyShape
Suivant MySlide
Fin Fonction
Fonction privée ProcessShapes(MyShape As Shape, ByVal LangID As Long)
Dim i As Integer
Si ((MyShape.Type = msoGroup) Ou (MyShape.Type = msoTable)) Alors
En cas d'erreur Reprendre
Pour i = 1 à MyShape.GroupItems.Count
''' L'astuce est de récursivité !
ProcessShapes MyShape.GroupItems.Item(i), LangID
Suivant i
Autrement
ChangeLang MyShape, LangID
Fin Si
Fin Fonction
Fonction privée ChangeLang(MyShape As Shape, ByVal LangID As Long)
Dim i As Integer
Si (MyShape.HasTextFrame) Alors
' Activer ceci pour le débogage
'Debug.Print " Forme " & MyShape.ZOrderPosition & ", type : " & MyShape.Type & _
", a un cadre de texte : " & MyShape.HasTextFrame & ", a du texte : " & MyShape.TextFrame.HasText & _
", texte alternatif : " & MyShape.AlternativeText
MyShape.TextFrame.TextRange.LanguageID = LangID
Fin Si
Fin Fonction