[Catégorie modifiée .Net -> VBA] macro qui fontionne bien en mode pas à pas, mai

cs_sisco27 Messages postés 20 Date d'inscription mardi 17 janvier 2012 Statut Membre Dernière intervention 31 mai 2013 - 4 févr. 2013 à 11:34
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 4 févr. 2013 à 12:44
Bonjour,

je fonctionne (enfin presque) avec office 2010.
Je suis en train de faire une macro qui va me copier des cellules et des images dans les feuilles d'un classeur (à partir de la feuille9)
vers un fichier powerpoint existant.

La macro fonctionne en mode pas à pas, mais pas en l'executant directement.

pouvez vous m'aider?

merci

voici le code :

Sub presentation_auto2()
'necessite d'activer la reference Microsoft Powerpoint Object Library
Dim PPT As PowerPoint.Application
Dim PptDoc As PowerPoint.Presentation
Dim NbShpe As Byte
Set PPT = CreateObject("Powerpoint.Application") 'creation session PowerPoint
PPT.Visible = True 'l'application sera visible
'Set PptDoc = PPT.Presentations.Add 'ouverture fichier ppt
Set pow = GetObject(Class:="Powerpoint.Application")
Dim Feuille As Worksheet, I As Integer, J As Integer, Page As Integer, Photo As Integer
I = 1
Dim Cible
Cible = Shell("POWERPNT.EXE ""C:\Presentations CD\Présentation défauts CD Vierge.pptx""", 1)


'For Each Feuille In ThisWorkbook.Worksheets
Page = ThisWorkbook.Sheets.Count

If Page <= 8 Then
PPT.ActivePresentation.Close
PPT.Quit 'fermer powerpoint
MsgBox "Vous n'avez pas commencé l'analyse"
GoTo 1
End If



For K = 9 To Page
pow.ActivePresentation.Slides.Add I, ppLayoutBlank
ThisWorkbook.Sheets(K).Range("C1:I10").Copy
pow.ActivePresentation.Slides(I).Select
On Error Resume Next
pow.ActivePresentation.Slides(I).Shapes.PasteSpecial(ppPasteDefault, link:=True).Select

Photo = ThisWorkbook.Sheets(K).Pictures.Count
If Photo = 0 Then
GoTo 2
End If
ThisWorkbook.Sheets(K).Pictures.Copy
PptDoc.Slides(I).Shapes.Paste

2
I = I + 1
Next K

1



End Sub

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 févr. 2013 à 12:44
Salut

Pas d'indentation du code (espaces en tête de ligne) pour présenter correctement les boucles et autres cascades de If : Moi, je n'essaye même plus de lire.

Supprime tous les On Error Resume Next de ton code et corrige tes méthodes pour ne pas avoir recours à cette horreur qui masque les défauts qui te permettront, peut être, de découvrir pourquoi ton code ne fonctionne pas.
Ce genre de ligne ne s'utilise que très rarement, sur des cas bien spécifiques et, de toute façon, DOIT être accompagné :
- D'un test du numéro d'erreur immédiatement après
- D'un retour à une gestion d'erreur normale "On Error Goto 0" ensuite

Goto 1 : Bien que les Goto soient à éviter, il serait judicieux d'utiliser des Labels, histoire d'être compréhensible/lisible :
Goto Fin
    ' ...
Fin:
    ' Ca reprend ici
Mais mieux vaut utiliser correctement les If-Then-Else que d'utiliser ces Goto.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
0
Rejoignez-nous