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

Air1

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

sousou

XLDnaute Barbatruc
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Bonjour Air1
Sans savoir exactement comment tu fais,
Voici la méthode qui te permet d'ouvri un document à partir d'excel et de prendre le contrôle de power point à partir d'excel.
Ici le fichier à ouvrir est z.ppt et il se trouve dans le répertoire du fichier excel
Ajoute à l'instruction open tous les éléments utiles qui seront interprétés par Power point.


Sub deb()
Set pw = CreateObject("powerpoint.application")
pw.Visible = True
'ici tu es dans powerpoint----
pw.presentations.Open (ThisWorkbook.Path & "\z.ppt")
End Sub
 

JNP

XLDnaute Barbatruc
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Bonjour :),
A priori, sous PowerPoint, le DisplayAlert existe aussi, mais pas avec des booléens. Peux-tu tester
Code:
Application.DisplayAlerts = ppAlertsNone
Bon courage :cool:
 

Air1

XLDnaute Nouveau
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Merci de vos réponses.


Pour répondre à sousou, voici le code qui me permet d'ouvrir un fichier PowerPoint à partir d'Excel :


VB:
' Déclaration des variables
Dim APPt as Object
DIM DOCPPT as Object
Dim Path_Fic_PPT As Variant


' Ouverture d'un fenêtre pour aller chercher le fichier PowerPoint à ouvrir
Path_Fic_PPT = Application.GetOpenFilename _
               (FileFilter:="Fichiers PowerPoint (*.ppt),*.ppt", Title:="Sélectionnez le fichier PowerPoint contenant les objets liés")


' Arrêt de la macro si le fichier PowerPoint n'a pas été sélectionné
If Path_Fic_PPT = False Then
        Exit Sub
End If



' Création de l'objet PowerPoint et ouverture du fichier PPT
Set APPT = CreateObject("PowerPoint.Application")
APPT.Quit
Application.Wait Now + TimeValue("00:00:01")
Set APPT = CreateObject("PowerPoint.Application")
APPT.Visible = True
Set DOCPPT = APPT.Presentations.Open(Path_Fic_PPT, WithWindow:=msoTrue)



Concernant la réponse de JNP, il s'agit d'un programme écrit en VBA Excel qui permet de gérer PowerPoint : autrement dit, pilotage de Powerpoint à partir d'Excel.


Hors, le code
VB:
Application.DisplayAlerts = ppAlertsNone
est a priori un code appartenant à VBA PowerPoint. J'ai essayé de l'intégrer dans ma macro (présente ci-dessus), mais cela ne change rien : le message de demande de mise à jour des liaisons s'affiche toujours.



Si vous avez d'autres idées, merci d'avance de les communiquer...



Bonne journée à tous.
 
Dernière édition:

sousou

XLDnaute Barbatruc
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Bonjour
La proposition de JNP doit être applicable de cette manière dans ton code

appt.DisplayAlerts = ppAlertsNone

Sinon quels type de liaison dans ton fichier ?
 

JNP

XLDnaute Barbatruc
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Re :),
Concernant la réponse de JNP, il s'agit d'un programme écrit en VBA Excel qui permet de gérer PowerPoint : autrement dit, pilotage de Powerpoint à partir d'Excel.
Hors, le code
Code:
Application.DisplayAlerts = ppAlertsNone
est a priori un code appartenant à VBA PowerPoint. J'ai essayé de l'intégrer dans ma macro (présente ci-dessus), mais cela ne change rien : le message de demande de mise à jour des liaisons s'affiche toujours.
As-tu essayé
Code:
APPT.DisplayAlerts = ppAlertsNone
D'autre part, je ne comprends pas
Code:
[COLOR=red][B]Set APPT = CreateObject("PowerPoint.Application")[/B][/COLOR]
[B][COLOR=red]APPT.Quit[/COLOR][/B]
[B][COLOR=red]Application.Wait Now + TimeValue("00:00:01")[/COLOR][/B]
Set APPT = CreateObject("PowerPoint.Application")
A quoi sert de créer une application, la quitter, attendre, avant de la recréer :confused:
Bonne journée :cool:
 

Air1

XLDnaute Nouveau
Re : Ne pas afficher le message de demande de mise à jour des liaisons

D'autre part, je ne comprends pas
Code:
[COLOR=red][B]Set APPT = CreateObject("PowerPoint.Application")[/B][/COLOR]
[B][COLOR=red]APPT.Quit[/COLOR][/B]
[B][COLOR=red]Application.Wait Now + TimeValue("00:00:01")[/COLOR][/B]
Set APPT = CreateObject("PowerPoint.Application")
A quoi sert de créer une application, la quitter, attendre, avant de la recréer :confused:
Bonne journée :cool:

En fait, c'est le moyen, pour moi, de quitter sans sauvegarder tous les documents PowerPoint ouverts. Peut-être as-tu un code "moins sauvage" que le mieux ?



Bonjour
La proposition de JNP doit être applicable de cette manière dans ton code

appt.DisplayAlerts = ppAlertsNone

Sinon quels type de liaison dans ton fichier ?

Re :),As-tu essayé
Code:
APPT.DisplayAlerts = ppAlertsNone


Il s'agit de liaisons d'Excel vers PowerPoint. Et effectivement, votre proposition de code marche bien et j'aurais du y penser. Néanmoins, il y a un dernier problème dont j'entrevois un début de solution...



Le fait d'utiliser un certain code VBA PowerPoint dans VBA Excel nécessite d'activer la référence Microsoft PowerPoint Object Library (Projet VBA -> Menu "Outils" -> Bouton "Références").


Cette ligne de code
Code:
APPT.DisplayAlerts = ppAlertsNone
ne fonctionne donc pas si cette référence n'est pas activée. Un message d'erreur apparaît : "Erreur de compilation. Variable non définie" (c'est "ppAlertsNone" qui ne passe pas). Ou alors connaissez-vous un moyen de faire marcher ce code sans activer la référence Powerpoint ?



Je veux que ma macro soit utilisable sur n'importe quel poste. Or, il se trouve que la référence "Microsoft PowerPoint Object Library" n'est pas cochée par défaut. S'il n'y a pas d'autres moyens pour faire fonctionner sans utiliser cette fameuse référence, il faut donc l'activer par macro.


J'ai donc trouvé le code qui permet cette activation :
Code:
Application.VBE.ActiveVBProject.References.AddFromFile _
("D:\Program Files\Microsoft Office\OFFICE11\msppt.olb")


La référence s'active donc à partir d'un fichier (ici "msppt.olb"), et ce fichier n'est pas forcément placé au même endroit sur tous les postes. C'est donc le problème que je dois résoudre : comment trouver l'emplacement d'un fichier par macro ?



Encore une fois, merci de faire avancer ma réflexion.



Bonne journée à tous.
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Re :),
En fait, c'est le moyen, pour moi, de quitter sans sauvegarder tous les documents PowerPoint ouverts. Peut-être as-tu un code "moins sauvage" que le mieux ?
Euh non :p... Par contre, tu n'as pas intérêt que sur un poste il soit possible d'ouvrir plusieurs instances de PowerPoint, sinon, ça ne marchera pas ;)...
Je veux que ma macro soit utilisable sur n'importe quel poste. Or, il se trouve que la référence "Microsoft PowerPoint Object Library" n'est pas cochée par défaut. S'il n'y a pas d'autres moyens pour faire fonctionner sans utiliser cette fameuse référence, il faut donc l'activer par macro.
J'ai donc trouvé le code qui permet cette activation :
Code:
Application.VBE.ActiveVBProject.References.AddFromFile _
("D:\Program Files\Microsoft Office\OFFICE11\msppt.olb")
La référence s'active donc à partir d'un fichier (ici "msppt.olb"), et ce fichier n'est pas forcément placé au même endroit sur tous les postes. C'est donc le problème que je dois résoudre : comment trouver l'emplacement d'un fichier par macro ?
Qu'est-ce qui change ? La lettre de lecteur ou autre chose ?
A + :cool:
 

mromain

XLDnaute Barbatruc
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Bonjour à tous,

Air1 :
Pour ton dernier problème, tu peux remplacer ppAlertsNone par 1. Tu devrai du coup ne plus avoir besoin de cocher la référence PowerPoint.

ppAlertsNone est une constante présente dans la référence PowerPoint qui a pour valeur 1. Pour connaitre sa valeur, j'ai activé la référence PowerPoint, et dans la fenêtre d'exécution, j'ai saisi ?ppAlertsNone puis <Entrée>.

Pour le fond du problème : un fil très intéressant de @+Thierry.

Edit: salut tototiti
a+
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Bonjour Air1, Bonjour JNP, Bonjour sousou,

ppAlertsNone est une constante qui vaut 1
pour éviter d'avoir à activer les références, il suffit de remplacer

Code:
appt.DisplayAlerts = ppAlertsNone

par

Code:
appt.DisplayAlerts = 1

Edit : Bonjour mromain, même idée
 

Air1

XLDnaute Nouveau
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Bonsoir à tous,


Désolé pour ce retard. Merci à tous ceux qui ont contribué à m'aider, en l'occurrence sousou, JNP, mromain et tototiti2008.



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 :


VB:
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 ' NON-AFFICHAGE DU MESSAGE DE DEMANDE DE MAJ DES LIAISONS




' 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
 
Dernière édition:

Air1

XLDnaute Nouveau
Re : Ne pas afficher le message de demande de mise à jour des liaisons

2 dernières remarques et une dernière question vis-à-vis de la réponse de JNP.


Qu'est-ce qui change ? La lettre de lecteur ou autre chose ?
A + :cool:
La ligne de code trouvée m'évite donc de définir par macro la référence relative à Microsoft PowerPoint en allant chercher un fichier.


Re :),Euh non :p... Par contre, tu n'as pas intérêt que sur un poste il soit possible d'ouvrir plusieurs instances de PowerPoint, sinon, ça ne marchera pas ;)...

Je n'ai jamais connu ce problème donc pour l'instant, ça va.

Question : Est-il possible de tester, TOUJOURS VIA EXCEL, que l'application PowerPoint est ouverte, et d'attribuer cette application à une variable SANS REOUVRIR un autre application (pour éviter le problème décrit par JNP) ?



Merci d'avance de vos réponses.
 

tototiti2008

XLDnaute Barbatruc
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Bonjour à tous,

Question : Est-il possible de tester, TOUJOURS VIA EXCEL, que l'application PowerPoint est ouverte, et d'attribuer cette application à une variable SANS REOUVRIR un autre application (pour éviter le problème décrit par JNP) ?

un essai

VB:
Sub test()
Dim PPTApp As Object
    On Error Resume Next
    Set PPTApp = GetObject(, "PowerPoint.Application")
    On Error GoTo 0
    If PPTApp Is Nothing Then Set PPTApp = CreateObject("PowerPoint.Application")
End Sub

Après je te laisse gérer s'il y a déjà une présentation ouverte dans le Powerpoint... ;)
 

Air1

XLDnaute Nouveau
Re : Ne pas afficher le message de demande de mise à jour des liaisons

Merci tototiti2008 pour ta réponse.


VB:
Sub test()

On Error Resume Next
Set PPT_App = GetObject(, "PowerPoint.Application")
On Error GoTo 0
If PPT_App Is Nothing Then Set PPT_App = CreateObject("PowerPoint.Application")


PPT_App.DisplayAlerts = 1
PPT_App.Visible = True


' En réalite, "Path_Fic_PPT" est obtenu suite à la sélection du fichier PPT via une fenêtre
Path_Fic_PPT = "D:\Test.ppt"


' Ouverture du fichier PowerPoint en affichant la fenêtre PowerPoint
Set PPT_Doc = PPT_App.Presentations.Open(Path_Fic_PPT, WithWindow:=msoTrue)


End Sub


Voici donc le code qui me permet d'ouvrir une instance PowerPoint si aucune instance n'est ouverte ("CreateObject" = CREER l'objet), ou d'associer à la variable "PPT_App" l'instance déjà ouverte ("GetObject" = CAPTER l'objet).



Petite remarque, si le gestionnaire d'erreur est désactivé et qu'aucune instance PowerPoint n'est ouverte, la ligne de code :
VB:
Set PPT_App = GetObject(, "PowerPoint.Application")
va poser problème, et l'erreur renvoyée sera "Erreur d'exécution '429' : Un composant ActiveX ne peut pas créer d'objet". D'où la nécessité d'avoir le gestionnaire d'erreur.



Bonne journée à tous.




PS : J'oubliais. le code présenté par mes soins ouvre PowerPoint sans afficher l'application. Voici la partie du code modifiée pour pouvoir visualiser le fichier :


VB:
' Création de l'objet PowerPoint, objet visible, 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
PPT_App.Visible = True



' Ouverture du fichier PowerPoint en affichant la fenêtre PowerPoint
Set PPT_Doc = PPT_App.Presentations.Open(Path_Fic_PPT, WithWindow:=msoTrue)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 868
dernier inscrit
pierreselo33