Ne pas afficher le message de demande de mise à jour des liaisons

Résolu
Airone1CF03 Messages postés 24 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 27 juin 2012 - 27 sept. 2010 à 16:56
Airone1CF03 Messages postés 24 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 27 juin 2012 - 6 oct. 2010 à 18:38
Bonjour à tous,



Avant de commencer, je précise que je travaille sous VBA avec Excel 2003 et PowerPoint 2003.



J'ai un petit problème. J'ai réalisé une macro dans Excel qui permet l'ouverture d'un fichier PowerPoint. Or, pour les fichier PowerPoint contenant des liaisons, un message de demande de mise à jour des liaisons s'affiche (voir ci-dessous).





Ce message s'affiche car la mise à jour des liaisons a été déclarée " Automatique" par l'utilisateur (c'est même le paramétrage par défaut, l'autre choix étant "Manuel").



Je sais bien qu'en définissant toutes les liaisons en mise à jour "Manuelle" je n'obtiendrais pas ce message. Cependant, cette macro est sensée ouvrir n'importe quel fichier, et doit s'adapter au fichier PowerPoint à ouvrir et non l'inverse.



Il faut savoir qu'ouvrir un fichier PowerPoint nécessite du code Powerpoint. L'ouverture sans mise à jour des liaisons d'un fichier Excel (UpdateLinks = False) n'est pas applicable ici, puisque l'ouverture d'un fichier PowerPoint s'effectue avec la fonction Open (voir ci-dessous) qui ne permet pas de déclarer l'ouverture du fichier PPT sans mettre à jour ou pas les liaisons.

expression.Open(FileName, ReadOnly, Untitled, WithWindow, OpenConflictDocument)



Voilà, je pense avoir été le plus clair possible.


Si quelqu'un a une solution, cela me serait fort utile...


Merci d'avance à tous.

3 réponses

Airone1CF03 Messages postés 24 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 27 juin 2012
6 oct. 2010 à 18:38
Bonsoir à tous,


Désolé pour ce retard. Merci bigfish_le vrai pour ta réponse.



Voici donc mon code finalisé pour ouvrir un fichier PowerPoint depuis Excel, sans faire apparaître le message de demande de mise à jour des liaisons :



Sub M_OUVERTURE_FIC_PPT()


' Déclaration des variables
Dim Nom_Fic_Macro As String
Dim Path_Fic_Macro As String
Dim TitreMsg As String

Dim PPT_App As Object
Dim PPT_Doc As Object
Dim PPT_Doc_ouvert As Object

Dim Path_Fic_PPT As Variant

Dim Cpt_bs As Integer


' Initialisation de l'écran, non-affichage des alertes et non-demande de mise à jour des liaisons (pour Excel)
Application.ScreenUpdating = True
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False



' Acquisition du nom et du chemin d'accès du fichier Excel où est présente la macro
Nom_Fic_Macro = ThisWorkbook.Name
Path_Fic_Macro = ThisWorkbook.Path



' Attribution du titre des messages affichés
TitreMsg = Left(Nom_Fic_Macro, Len(Nom_Fic_Macro) - 4)



' Sélection du fichier PowerPoint qui contient les objets liés
' Si aucun fichier n'est sélectionné, la macro est quittée
With Application.FileDialog(msoFileDialogFilePicker)
    
    .Title = "Sélectionnez le fichier PowerPoint contenant les objets liés"
    .InitialFileName = Path_Fic_Macro
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "Fichiers PowerPoint (*.ppt)", "*.ppt"
    .InitialView = msoFileDialogViewDetails
    .ButtonName = "Sélectionner"
    .Show
    
    If .SelectedItems.Count = 0 Then
            Exit Sub
    
    Else
            
            Path_Fic_PPT = .SelectedItems(1)
        
            For Cpt_bs = Len(Path_Fic_PPT) To 1 Step -1
                    If Mid(Path_Fic_PPT, Cpt_bs, 1) = "" Then
                            Nom_Fic_PPT = Right(Path_Fic_PPT, Len(Path_Fic_PPT) - Cpt_bs)
                            Exit For
                    End If
            Next Cpt_bs
            
    End If
            
            
End With



' Création de l'objet PowerPoint, objet invisible, et non-affichage des alertes dans PowerPoint
' PPT_App.DisplayAlerts 1 -> 1 valeur de ppAlertsNone (argument propre à Powerpoint)
Set PPT_App = CreateObject("PowerPoint.Application")
PPT_App.DisplayAlerts = 1




' Si le fichier PowerPoint défini par l'utilisateur est ouvert,
' il est fermé par la macro, avec une demande de sauvegarde
For Each PPT_Doc_ouvert In PPT_App.Presentations
        If PPT_Doc_ouvert.FullName = Path_Fic_PPT Then
                If MsgBox("Le fichier PowerPoint que vous avez sélectionnez est déjà ouvert." & Chr(10) & _
                           "Il va être fermé." & Chr(10) & Chr(10) & _
                           "Souhaitez-vous l'enregistrer ?", vbYesNo + vbQuestion, TitreMsg) = vbYes Then
                        PPT_Doc_ouvert.Save
                End If
                PPT_Doc_ouvert.Close
        End If
Next PPT_Doc_ouvert



' Ouverture du fichier PowerPoint sans afficher la fenêtre PowerPoint
Set PPT_Doc = PPT_App.Presentations.Open(Path_Fic_PPT, WithWindow:=msoFalse)




' Initialisation de l'écran, affichage des alertes et demande de mise à jour des liaisons (pour Excel)
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True



End Sub




La ligne qui m'évite d'avoir le message de demande de mise à jour des liaisons est la suivante :
PPT_App.DisplayAlerts = 1
3
rv83toulon Messages postés 68 Date d'inscription mercredi 2 mars 2011 Statut Membre Dernière intervention 25 avril 2013
29 sept. 2010 à 13:50
Salut,
as-tu essayé de mettre en Début de macro :
Application.DisplayAlerts = False

et en fin de code :
Application.DisplayAlerts = True


Exemple de l'aide de Excel :
Cet exemple montre comment fermer le classeur Book1.xls sans inviter l'utilisateur à enregistrer les modifications. Les modifications apportées à Book1.xls ne sont pas enregistrées.

Application.DisplayAlerts = False
Workbooks("BOOK1.XLS").Close
Application.DisplayAlerts = True

@+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
29 sept. 2010 à 14:04
Salut,

comment tu fais pour ouvrir ton fichier depuis excel ?

Parce que de mon cote j'ai pas de problème si j'ouvre par macro un fichier qui contient des liaisons.

Dim PPTAppli As Object, PresentationPath As String, MaPresentation As Object
Set PPTAppli = GetObject(, "PowerPoint.Application")
PresentationPath = "D:\temp\Présentation1.ppt"
If Nothing Is PPTAppli Then Set PPTAppli = CreateObject("PowerPoint.Application")
Set MaPresentation = PPTAppli.Presentations.Open(PresentationPath)


Cette methode ne me demande rien !

Mais peut être passes tu par le referencement de Powerpoint(Microsoft PowerPoint 11.0 Object Library) dans le vba d'excel et que dans ce cas le probleme existe ?


A+
0
Rejoignez-nous