ERREUR 429 Un composant ActiveX ne peut pas créer d’Objet

michel90

XLDnaute Nouveau
Bonjour,
j'ai un problème que je n'arrive pas à résoudre depuis 2 mois.

j'ai un fichier excel qui alimente un PowerPoint avec une macro.
dans cette macro tout fonction sauf cette ligne de code

VB:
ActivePresentation.ExportAsFixedFormat ActivePresentation.Path & "\sortie\carte\" & Format(Date, "ddmmyyyy") & "_" & "Situation Relais" & ".pdf", ppFixedFormatTypePDF, ppFixedFormatIntentPrint

En effet, ce code permet de prendre le PowerPoint ouvert, il fait une copie, il transforme en PDF et il exporte vers un dossier nommé "carte"
quand le programme s’exécute et dès qu'il arrive a cette ligne, il génère une erreur.

(ERREUR 429 Un composant ActiveX ne peut pas créer d’Objet)

j'ai essayé toutes les référence Microsoft ActiveX mais toujours la même erreur.

Pouvez vous m'aider SVP, je suis vraiment perdu :(
 

michel90

XLDnaute Nouveau
Bonjour Lone-wolf,
je ne te cache que je commence a désespéré, car hier j'ai essayé un nouveau truc. j'ai écrit cette ligne de code dans un le PowerPoint comme une macro que j'exécute à l'aide d'un bouton lorsque le PPT a fait la mise a jour donc il est ouvert. Résultat j'arrive a exporter le PDF sans aucune erreur.

alors la j'avoue que je ne comprend plus rien. pourquoi ce code ne marche pas dans le 1e programme mais il marche en tant que macro dans le PPT.
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Dans PowerPoint, oui, il y a probablement un truc qui s'appelle ActivePresentation.
Dans Excel il y a bien ActiveWorkbook et ActiveSheet. Sûrement pas dans PowerPoint. Mais vous pourriez peut être quand même, différemment, y manipuler des entités Excel à travers des objets As Excel.Workbook et As Excel.Worksheet
 

michel90

XLDnaute Nouveau
Bonjour,
dans ce cas je cherche un moyen d'exécuter la macro qui se trouve dans le PPT depuis mon code principale(fichier excel).
auriez un vous une idée comment le faire.

je vous donne juste un exemple :. j'ai un fichier excel avec extension ".xla" j'ai écris dans ce fichier tout mon code qui permet d'alimenter le PPT et le mettre a jour. je veux écrire un autre bout de code qui permet tout de même de déclencher la macro qui se trouve dans le PPT une fois ouvert.

pouvez vous m'aider avec un code de ce genre. car en ce moment j'ai tout essayer. Merci par avance
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous paraissiez pourtant avoir réussi à échanger des choses avec une présentation PowerPoint depuis Excel.
Le truc c'est juste de ne pas prendre subitement ActivePresentation, qui n'existe pas, au lieu de l'objet presentation avec lequel vous avez travaillé !
 

michel90

XLDnaute Nouveau
Bonjour,
honnêtement, je ne comprend pas ce que vous vouliez dire à la fin du commentaire. Mais sache que oui j'arrive a ouvrir le PPT et le mettre a jour, sauf que comme je l'avais dis, la commande ActivePresentaion génère l'erreur 429 au moment de son exécution. ce qui me laisse pas exporter le PPT en PDF.
 

Dranreb

XLDnaute Barbatruc
Je n'ai jamais travaillé avec PowerPoint. Mais par curiosité j'ai activé la référence Microsoft PowerPoint 16.0 Object Library dans un nouveau classeur et j'ai pu faire tourner ça :
VB:
Sub t()
Dim APP As New PowerPoint.Application, Pré As PowerPoint.Presentation
APP.Presentations.Add
Set Pré = APP.Presentations(1)
MsgBox Pré.Name
End Sub
 

michel90

XLDnaute Nouveau
cette librairie est bien bien coché des les référence. le problème ne vient pas du powerpoint !mais vient d'un commande qui peut s'éxcuter en tant que un macro a part mais pas comme une simple ligne du code. je me demande si je ne sais pas où placé ce code.
 

Dranreb

XLDnaute Barbatruc
Je ne peux pas vous le dire: vous n'avez jamais montré votre code.
Tout ce que je vous demande c'est d'essayer d'appliquer la méthode ExportAsFixedFormat à l'objet Presentation avec lequel vous avez travaillé et pas à ActivePresentation.
 

Dranreb

XLDnaute Barbatruc
J'ai du nouveau. J'ai réussi à reproduire l'erreur et je crois même d'ailleurs savoir comment l'éviter. Mais je ne veux pas que vous fassiez comme ça.
Vous partez, je suppose, d'une présentation existante, n'est-ce pas. Or je viens de voir que la méthode Open renvoie un objet Presentation. Il suffit donc en principe de le récupérer au passage :
VB:
Dim PPApp As New PowerPoint.Application, Chemin As String, NomFic As String, Présen As PowerPoint.Presentation
…
Set Présen = PPApp.Presentations.Open(Chemin & "\" & NomFic)
Comme ça vous pourrez faire votre Présen.ExportAsFixedFormat Présen.Path & "\sortie\carte\" & Format(Date, "ddmmyyyy") & "_" & "Situation Relais" & ".pdf", ppFixedFormatTypePDF, ppFixedFormatIntentPrint
 
Dernière édition:

michel90

XLDnaute Nouveau
oui exactement je part d'un PowerPoint existant, les slides contiennent des chiffres et des commentaires. du coup avec le code ça me permet de mettre a jour les slides. voici l'intégralité du code.


VB:
Sub saveExcel()
Dim fichier As String
On Error Resume Next
ChDir "Y:\Pré-op\SOPP et relais\Relais\Situation Relais Sans Macro\sortie\Excel"
If Err Then MkDir "Y:\Pré-op\SOPP et relais\Relais\Situation Relais Sans Macro\sortie\Excel" 'pour le créer
On Error GoTo 0
Application.DisplayAlerts = False
[A1] = Now
Workbooks.Open Filename:="Y:\Pré-op\SOPP et relais\Relais\Situation Relais Sans Macro\SITUATION RELAIS BIS.xlsm"
ActiveSheet.Copy
fichier = "Y:\Pré-op\SOPP et relais\Relais\Situation Relais Sans Macro\sortie\Excel\" & Format(Date, "ddmmyyyy") & "_" & "Situation Relais" & ".xlsx"
ActiveWorkbook.SaveAs fichier 'enregitrer les mises à jour sur ce fichier esporté
ActiveWorkbook.Close SaveChanges:=False
Call import
Workbooks("SITUATION RELAIS BIS.XLSM").Close SaveChanges:=False 'fermer le fichier situation relais bis
Application.DisplayAlerts = True

End Sub
Private Sub import()
'ce programme  sert a ouvrir le powerpoint cartes support relais et mettre a jour les slide c'est a dire les commentaire ainsi ETAT des relais.

Dim PptApp As PowerPoint.Application
'Dim PptDoc As PowerPoint.Presentation
Dim sld As PowerPoint.Slide
Dim Shp As PowerPoint.Shape
'Dim Cs1 As ColorScheme
'Dim NbShpe As Integer
Set PptApp = CreateObject("Powerpoint.Application")


Dim FichierPpt, pwpt, presppt
Set pwpt = CreateObject("PowerPoint.Application")
pwpt.Visible = True '


Set presppt = PptApp.Presentations.Open(Filename:="Y:\Pré-op\SOPP et relais\Relais\Situation Relais Sans Macro\cartes support relais.pptm")

pwpt.Visible = True
pwpt.ActivePresentation.UpdateLinks
With presppt
    '--- Ajoute un Slide
  ' .Slides.Add Index:=1, Layout:=ppLayoutBlank
   'Crée une zone de texte (AddLabel)
   ' affectation à l'objet slide la première diapositive de la présentation en cours.
    ' création de la zone de texte
    Set Shp = .Slides(2).Shapes.AddTextbox(msoTextOrientationHorizontal, 70, 320, 600, 50)

    'insère la valeur de la Cellule E3 dans une zone de texte
   If Range("E3") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E3")

    'Modifie la couleur du texte
   Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)

    'Compte le nombre de shapes dans la diapositive:
   'le dernier objet inséré correspond à l'index le plus élevé
   'NbShpe = sld.Shapes.Count
 
'--------com1-SOMAIN
Set Shp = .Slides(2).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 240, 350, 50)
     If Range("E53") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E53")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com2
Set Shp = .Slides(2).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 220, 350, 50)
     If Range("E52") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E52")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com3
Set Shp = .Slides(2).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 200, 350, 50)
     If Range("E51") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E51")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com4
Set Shp = .Slides(2).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 180, 350, 50)
     If Range("E50") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E50")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com5
Set Shp = .Slides(2).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 160, 350, 50)
     If Range("E49") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E49")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com6
Set Shp = .Slides(2).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 140, 350, 50)
      If Range("E48") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E48")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
    End With
'-------------------------------------------------------------------------------------------
With presppt
 
    Set Shp = .Slides(3).Shapes.AddTextbox(msoTextOrientationHorizontal, 70, 320, 600, 50)
    'insère la valeur de la Cellule E4 dans une zone de texte
   If Range("E4") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E4")
    'Modifie la couleur du texte
   Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
  '-------------Com1-CULMONT CHALANDRY
   Set Shp = .Slides(3).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 240, 350, 50)
     If Range("E61") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E61")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com2
Set Shp = .Slides(3).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 220, 350, 50)
     If Range("E60") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E60")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com3
Set Shp = .Slides(3).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 200, 350, 50)
     If Range("E59") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E59")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com4
Set Shp = .Slides(3).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 180, 350, 50)
     If Range("E58") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E58")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com5
Set Shp = .Slides(3).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 160, 350, 50)
     If Range("E57") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E57")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com6
Set Shp = .Slides(3).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 140, 350, 50)
      If Range("E56") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E56")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
    End With

With presppt
    ' création de la zone de texte
 
    Set Shp = .Slides(4).Shapes.AddTextbox(msoTextOrientationHorizontal, 70, 320, 600, 50)
    'insère la valeur de la Cellule E5 dans une zone de texte
   If Range("E5") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E5")
    'Modifie la couleur du texte
   Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
'------------com1-HAUSBERGEN
Set Shp = .Slides(4).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 240, 350, 50)
     If Range("E69") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E69")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com2
Set Shp = .Slides(4).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 220, 350, 50)
     If Range("E68") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E68")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com3
Set Shp = .Slides(4).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 200, 350, 50)
     If Range("E67") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E67")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com4
Set Shp = .Slides(4).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 180, 350, 50)
     If Range("E66") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E66")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com5
Set Shp = .Slides(4).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 160, 350, 50)
     If Range("E65") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E65")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
     '--------com6
Set Shp = .Slides(4).Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 140, 350, 50)
      If Range("E64") <> 0 Then Shp.TextFrame.TextRange.Text = Range("E64")
     Shp.TextFrame.TextRange.Font.Color = RGB(3, 34, 76)
    End With
presppt.ExportAsFixedFormat presppt.Path & "\sortie\carte\" & Format(Date, "ddmmyyyy") & "_" & "Situation Relais" & ".pdf", ppFixedFormatTypePDF, ppFixedFormatIntentPrint
End Sub
 
Dernière édition:

michel90

XLDnaute Nouveau
alleluia !!! je viens de le réussir. ça marche a la perfection
En effet, le problème c'est que je devais déclarer Dim Presppt As Powerpoint.presentation
En suite remplacer Activepresentation par presppt
Le tour est joué. Un Grand Merci pour votre aide. vraiment je suis soulager maintenant, je peux attaquer la mise en forme du projet.
 

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 191
Membres
103 152
dernier inscrit
Karibu