Automatiser le passage d'excel à powerpoint par vba

Grupinette

XLDnaute Nouveau
Bonjour à tous,

J'ai un fichier excel contenant 14 onglets et je souhaiterai pouvoir créer un fichier powerpoint reprenant 1 onglet excel par diapo.

J'ai suivi ce qui est donné ici https://www.excel-downloads.com/threads/fichier-excel-vers-powerpoint-a-plusieurs-onglets.141381/ par JNP, j'ai copié le code et changé le nom du fichier par le mien.
Lorsque je lance la macro power point s'ouvre mais seulement 4 diapos sont créées et tout n'est pas copié, seulement les quelques formes (flèche, bouton...) présentes sur mes pages excel...

Auriez-vous une idée de ce qu'il faut modifier pour que tout soit recopié ?

Merci d'avance.
 

Grupinette

XLDnaute Nouveau
Re : Automatiser le passage d'excel à powerpoint par vba

Merci beaucoup :)
Alors j'ai changé le code pour un des onglets, j'ai copié-collé le feu associé sur la page qui m'intéresse et quand je veux bouger la scroll bar pour changer la couleur du feu j'ai l'erreur suivante :
 

Pièces jointes

  • erreur.jpg
    erreur.jpg
    38.6 KB · Affichages: 94
  • erreur.jpg
    erreur.jpg
    38.6 KB · Affichages: 84
  • erreur.jpg
    erreur.jpg
    38.6 KB · Affichages: 74

Grupinette

XLDnaute Nouveau
Re : Automatiser le passage d'excel à powerpoint par vba

aaaah ! ^^

Alors si je comprends bien, je voudrais que mes feux qui sont sur mes onglets apparaissent tous sur la "Feuil1".
Je dois donc créer autant de modules que d'onglets :
Pour ma "Feuil2" je dois écrire :
Code:
Sub Récap()
With Sheets("Feuil1")
.Shapes("Ellipse 3").Visible = Sheets("Feuil2").Shapes("Ellipse 3").Visible
.Shapes("Ellipse 2").Visible = Sheets("Feuil2").Shapes("Ellipse 2").Visible
.Shapes("Ellipse 1").Visible = Sheets("Feuil2").Shapes("Ellipse 1").Visible
End With
End Sub
et nommer mes 3 ellipses 1, 2 et 3 dans mon feu de la Feuil2 et celui correspondant sur la Feuil1.

Pour ma "Feuil3" j'écris dans un autre module :
Code:
Sub Récap()
With Sheets("Feuil1")
.Shapes("Ellipse 4").Visible = Sheets("Feuil3").Shapes("Ellipse 4").Visible
.Shapes("Ellipse 5").Visible = Sheets("Feuil3").Shapes("Ellipse 5").Visible
.Shapes("Ellipse 6").Visible = Sheets("Feuil3").Shapes("Ellipse 6").Visible
End With
End Sub
et renommer mes 3 ellipses 4, 5 et 6 dans mon feu de la Feuil3 et celui correspondant sur la Feuil1.

Etc pour mes 26 onglets ?

J'ai tout compris ? :)

Merci beaucoup.
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Automatiser le passage d'excel à powerpoint par vba

Tu vas donc modifier la sub Récap ainsi :
Code:
Sub Récap(NomFeuille As String, Numéro As Integer)
With Sheets("Feuil2")
.Shapes("Ellipse " & (Numéro + 2)).Visible = Sheets(NomFeuille).Shapes("Ellipse 3").Visible
.Shapes("Ellipse " & (Numéro + 1)).Visible = Sheets(NomFeuille).Shapes("Ellipse 2").Visible
.Shapes("Ellipse " & Numéro).Visible = Sheets(NomFeuille).Shapes("Ellipse 1").Visible
End With
End Sub
et derrière tes feuilles,
Code:
Private Sub ScrollBar1_Change()
Select Case ScrollBar1.Value
Case 0
Shapes("Ellipse 3").Visible = msoTrue
Shapes("Ellipse 2").Visible = msoFalse
Shapes("Ellipse 1").Visible = msoFalse
Case 1
Shapes("Ellipse 3").Visible = msoFalse
Shapes("Ellipse 2").Visible = msoTrue
Shapes("Ellipse 1").Visible = msoFalse
Case 2
Shapes("Ellipse 3").Visible = msoFalse
Shapes("Ellipse 2").Visible = msoFalse
Shapes("Ellipse 1").Visible = msoTrue
End Select
Récap Me.Name, 1
End Sub
en faisant pour la suivante 4, 5 et 6 et Récap Me.Name, 4 :D
Bon courage :)
 

Grupinette

XLDnaute Nouveau
Re : Automatiser le passage d'excel à powerpoint par vba

Oulala ça devient compliqué ^^

Déjà j'ai essayé de le faire pour mon 1er onglet. Alors il s'appelle "Evolution glob de l'eff", je veux que mon feu se reporte sur "Feuil3" et mes ellipses s'appelle 1, 2 et 3 pour mes 2 feux.

J'ai donc écrit le code
Code:
Private Sub ScrollBar1_Change()
Select Case ScrollBar1.value
Case 0
Shapes("Ellipse 1").Visible = msoTrue
Shapes("Ellipse 2").Visible = msoFalse
Shapes("Ellipse 3").Visible = msoFalse
Case 1
Shapes("Ellipse 1").Visible = msoFalse
Shapes("Ellipse 2").Visible = msoTrue
Shapes("Ellipse 3").Visible = msoFalse
Case 2
Shapes("Ellipse 1").Visible = msoFalse
Shapes("Ellipse 2").Visible = msoFalse
Shapes("Ellipse 3").Visible = msoTrue
End Select
Récap
End Sub
sur la feuille correspondant à mon onglet et dans le module j'ai mis :
Code:
Sub Récap()
With Sheets("Feuil3")
.Shapes("Ellipse 3").Visible = Sheets("Evolution glob de l'eff").Shapes("Ellipse 3").Visible
.Shapes("Ellipse 2").Visible = Sheets("Evolution glob de l'eff").Shapes("Ellipse 2").Visible
.Shapes("Ellipse 1").Visible = Sheets("Evolution glob de l'eff").Shapes("Ellipse 1").Visible
End With
End Sub

Ca marche niquel pour le vert et le orange mais pas pour le rouge, le feu reste noir !
Voyez-vous déjà d'où peut venir ce problème avant que je me lance dans la suite ?

Merci infiniment !
 

JNP

XLDnaute Barbatruc
Re : Automatiser le passage d'excel à powerpoint par vba

Non, ça marchera pas vu que tu ne peux pas avoir 2 "récap", par contre j'avais fait une petite erreur tout à l'heure, j'ai corrigé dans le fichier joint :)
Tu trouveras aussi une sub ToutVisible à exécuter pour que toutes les ellipses soient visibles, sinon, c'est un peu dur de les sélectionner pour changer leur nom... :rolleyes:
Ajout : Il est possible qu'une forme change de nom au copier/coller, vérifie que le feu de contrôle a bien les mêmes N° d'ellipse...
 

Pièces jointes

Grupinette

XLDnaute Nouveau
Re : Automatiser le passage d'excel à powerpoint par vba

Bonjour,
Merci beaucoup pour toutes ses explications, j'ai fait le test pour les 3 premiers onglets ça marche niquel, enfin presque... Niquel pour mes onglets 2 et 3 mais pour le 1er j'ai un problème avec le feu rouge sur la feuille de report, il reste toujours "allumé" quelque soit la valeur du curseur sur l'onglet correspondant...
Le code que j'ai mis est
Code:
Private Sub ScrollBar1_Change()
Select Case ScrollBar1.value
Case 0
Shapes("Ellipse 1").Visible = msoTrue
Shapes("Ellipse 2").Visible = msoFalse
Shapes("Ellipse 3").Visible = msoFalse
Case 1
Shapes("Ellipse 1").Visible = msoFalse
Shapes("Ellipse 2").Visible = msoTrue
Shapes("Ellipse 3").Visible = msoFalse
Case 2
Shapes("Ellipse 1").Visible = msoFalse
Shapes("Ellipse 2").Visible = msoFalse
Shapes("Ellipse 3").Visible = msoTrue
End Select
Récap Me.Name, 1
End Sub
j'ai bien nommé mes ellipses 1, 2 et 3 sur mes 2 feux. J'ai essayé de copier-coller le feu de l'onglet vu que celui là fonctionne, de copier un autre feu qui fonctionne et de changer les noms des ellipses, refaire un nouveau feu etc, bref rien ne fonctionne pour mon 1er feu le rouge est toujours là...

Merci d'avance si vous voyez mon erreur et bonne journée !
 

JNP

XLDnaute Barbatruc
Re : Automatiser le passage d'excel à powerpoint par vba

Bonjour :),
Hum si ça fonctionne pour les 2 autres, je ne vois qu'une seule possibilité, une erreur dans le nom des ellipses... un espace derrière, un espace oublié... Ou 2 ellipses superposées...
Bon courage :)
 

Grupinette

XLDnaute Nouveau
Re : Automatiser le passage d'excel à powerpoint par vba

Effectivement, le bouton créée pour lancer la macro vers ppt s'appelait Ellipse 1 d'où le bug !
Tout semble fonctionner comme attendu, merci beaucoup pour votre aide !

Une dernière question pour la route... Je l'ai posée dans un autre poste pour ne pas encore vous déranger mais personne n'y a encore répondu, je vous la repose ici si jamais vous avez une idée ! Cette étape n'est pas indispensable donc si c'est long/compliqué/ch*ant etc je pourrais m'en passer :)

Donc à la fin de manip pour copier mes onglets excel dans powerpoint je voudrai qu'un message apparaisse et me demande si je veux voir la présentation ppt ou pas.
J'ai écrit la ligne :
Code:
MsgBox "Voulez-vous afficher la présentation ?", vbYesNo
Jusque là pas de problème le message s'affiche avec oui ou non.
Maintenant je voudrais que quand on clique sur "oui" la présentation ppt reste à l'écran mais que pour "non" le fichier se ferme.
J'ai tenté (trouvé sur un forum):
Code:
rep = MsgBox("Voulez-vous afficher la présentation ?", vbYesNo)
If rep = vbYes Then
    Workbooks("Présentation1.ppt").Close True
        End If
mais ça ne fonctionne pas...
Je voudrai aussi que le msg s'affiche directement à l'écran, c'est à dire devant tout le reste, qu'on ne soit pas obligé d'aller le chercher, et que si on clique sur oui ce soit la présentation ppt qui passe devant tout le reste !

Merci encore pour mes feux et pour la suite !
 

JNP

XLDnaute Barbatruc
Re : Automatiser le passage d'excel à powerpoint par vba

Re,
J'ai été obligé de changer pas mal de choses... Entre autres créer un document plutôt qu'en ouvrir 1, et ruser en fermant tout pour mieux le rouvrir pour revenir à la fenêtre Excel... :rolleyes:
Code:
Sub Export_Ppt()
'necessite d'activer la reference Microsoft Powerpoint Object Library
Dim PPT As PowerPoint.Application
Dim PptDoc As PowerPoint.Presentation
Dim NbShpe As Byte
Dim Rep As Byte
Set PPT = CreateObject("Powerpoint.Application") 'creation session PowerPoint
Set PptDoc = PPT.Presentations.Add 'Création fichier pptx
Dim Feuille As Worksheet, I As Integer, J As Integer, NbreGraphiques As Integer
I = 1
For Each Feuille In ThisWorkbook.Worksheets
    NbreGraphiques = Feuille.Shapes.Count
    For J = 1 To NbreGraphiques
        If Feuille.Shapes(J).Name <> "Scroll Bar 1" And Feuille.Shapes(J).Name <> "Oval 9" Then
            PptDoc.Slides.Add I, ppLayoutBlank
            Feuille.Shapes(J).Copy
            With PptDoc.Slides(I).Shapes
                .Paste
                .Range.Align msoAlignCenters, msoTrue
                .Range.Align msoAlignMiddles, msoTrue
            End With
            I = I + 1
        End If
    Next J
Next Feuille
PptDoc.SaveAs ThisWorkbook.Path & "/Présentation1.pptx", ppSaveAsOpenXMLPresentation 'sauvegarder le nouveau fichier
PptDoc.Close
Set PptDoc = Nothing
PPT.Quit
Set PPT = Nothing
ThisWorkbook.Activate
Rep = MsgBox("Voulez-vous afficher la présentation ?", vbYesNo)
If Rep = vbYes Then
Set PPT = CreateObject("Powerpoint.Application") 'creation session PowerPoint
Set PptDoc = PPT.Presentations.Open(ThisWorkbook.Path & "/Présentation1.pptx") 'ouverture fichier ppt
End If
End Sub
Du coup, tu n'as plus besoin de supprimer la première diapo :)
Bonne suite, bises, et tu peux aussi répondre aux MP :p
 

Grupinette

XLDnaute Nouveau
Re : Automatiser le passage d'excel à powerpoint par vba

Merci, c'est effectivement mieux que le ppt se crée tout seul, aucun soucis au niveau de la mise en page du nouveau ppt, par contre quand je clique sur oui pour afficher la présentation j'ai un message d'erreur (en PJ).

Merci beaucoup !
 

Pièces jointes

  • msg erreur.JPG
    msg erreur.JPG
    11.9 KB · Affichages: 26
  • débogage.jpg
    débogage.jpg
    65.9 KB · Affichages: 40
  • débogage.jpg
    débogage.jpg
    65.9 KB · Affichages: 39
  • débogage.jpg
    débogage.jpg
    65.9 KB · Affichages: 38

Membres actuellement en ligne

Statistiques des forums

Discussions
315 283
Messages
2 118 013
Membres
113 408
dernier inscrit
lausablk