Knowledge base KB0209

Je ne peux pas réparer mon fichier PowerPoint avec PowerPoint 2013 & 2016

Problème

PowerPoint ne parvient pas à réparer un fichier PowerPoint corrompu.

Explication

La réparation des fichiers PowerPoint échoue si vous réalisez une tâche de programmation sur les diapositives avant que PowerPoint ne les ait réparées. Toutefois, think-cell, et probablement d'autres modules, doivent accéder aux diapositives lorsque le fichier est ouvert, et il est impossible pour un module de savoir qu'un fichier est corrompu.

Nous avons déposé une requête auprès de Microsoft, mais aucune décision n'a encore été prise concernant la résolution de ce problème. Si votre société possède un contrat auprès de l'Assistance Microsoft Office, vous pouvez contacter Microsoft pour demander un correctif en leur mentionnant le numéro de dossier 115040112590053. L'erreur est reproductible sans think-cell.

Reproduction de l'erreur sans think-cell

L'erreur peut être reproduite sans think-cell si un code est appliqué aux diapositives corrompues avant que la réparation ne soit terminée. Dans la reproduction suivante, le gestionnaire d'événements PresentationOpen fait appel à un code accédant à toutes les diapositives lorsque le fichier s'ouvre, c'est-à-dire avant la réparation.

  1. Ouvrez PowerPoint 2013 ou 2016 avec un nouveau fichier vide.
  2. Dans PowerPoint, rendez-vous sur Insertionthink-cellPlusDésactiver think-cell.
  3. Appuyez sur Alt+F11 pour ouvrir la fenêtre Microsoft Visual Basic for Applications.
  4. Ajoutez ce code en tant que Module de classe et nommez-le cEventClass :

    Public WithEvents PPTEvent As Application
    
    Private Sub Class_Initialize()
        MsgBox "EventHandler is now active."
    End Sub
    
    Private Sub PPTEvent_PresentationOpen(ByVal pres As Presentation)
        On Error GoTo errHandle:
        
        Debug.Print "open file: " & pres.Name
        Dim i As Integer
        
        For i = 1 To pres.Slides.Count
            Debug.Print "Slide " & pres.Slides.Item(i).SlideNumber; " / " _ 
    	& pres.Slides.Count
        Next i
        
        Exit Sub
        
    errHandle:
        Debug.Print ("VBA Error: " & Err.Number & " " & Err.Description) & vbCrLf
    End Sub
  5. Ajoutez ce code en tant que Module :

    Dim cPPTObject As New cEventClass
    
    Sub Initialize_Eventhandler()
        Set cPPTObject.PPTEvent = Application
        Debug.Print "**** EventHandler active ****"
    End Sub
  6. Dans la fenêtre de présentation de PowerPoint, appuyez sur Alt+F8 pour ouvrir la fenêtre Macro.
  7. Lancez la macro Initialize_Eventhandler.
  8. Ouvrez maintenant le fichier PowerPoint corrompu et essayez de le réparer.

Ce problème ne survient pas avec Microsoft Office 2010.

Solution

Tant que Microsoft n'aura pas réparé ce bogue, vous pouvez désactiver temporairement think-cell à titre de solution provisoire :

  1. Désactiver think-cell dans PowerPoint : Insertionthink-cellPlusDésactiver think-cell
  2. Ouvrez votre fichier corrompu et réparez-le
  3. Réactiver think-cell dans PowerPoint : Insertionthink-cellActiver