Problème ordre diapositive

Y compris Power BI, Power Query et toute autre question en lien avec Excel
A
Adrien2A
Jeune membre
Jeune membre
Messages : 17
Inscrit le : 9 mai 2018
Version d'Excel : Mac 2011

Message par Adrien2A » 12 juin 2019, 14:43

Bonjour à tous, j'utilise un code qui permet de pouvoir copier des parties d'une feuille Excel vers un powerpoint en format image. J'ai en grande partie utiliser le code présenté dans la vidéo suivante : https://www.youtube.com/watch?v=91ySaeKguSA

Le souci est que quand je l'active, la macro fonctionne mais l'ordre des diapositives dans mon ppt est inversé (la première devient la dernière et vice-versa) ::o . Je voudrais savoir si quelqu'un avait une idée pour remédier à ce problème et faire en sorte que les diapo soient rangées dans le bon ordre :wink:

Voici mon code :
Sub ExporterVersPpt()
    ' 1 récupérer les adresses des pages d'impression
    
    Dim Plages As String: Plages = ""
    
    Application.CutCopyMode = False 'vide le presse papier
    
    
    With ActiveSheet.HPageBreaks
    
        If .Count = 0 Then
            Plages = ActiveSheet.UsedRange.Address
                    
        Else
            
            Debut = 1
            
            For i = 1 To .Count
                LigneSaut = .Item(i).Location.Row
                DerniereColonne = ActiveSheet.UsedRange.Columns.Count
                Plages = Plages & Range(ActiveSheet.Cells(Debut, 1), ActiveSheet.Cells(LigneSaut - 1, DerniereColonne)).Address & "-"
                Debut = LigneSaut
            
            Next
            
            LigneFin = ActiveSheet.UsedRange.Rows.Count
            Plages = Plages & Range(ActiveSheet.Cells(Debut, 1), ActiveSheet.Cells(LigneFin - 1, DerniereColonne)).Address & "-"
            Plages = Left(Plages, Len(Plages) - 1)
            
        End If
    
    End With

    ' 2  exporter vers PowerPoint
    
    Dim oPowerPoint As Object
    Set oPowerPoint = CreateObject("Powerpoint.Application")
    
    Dim oDiaporama As Object
    Set oDiaporama = oPowerPoint.Presentations.Add
    
    oDiaporama.PageSetup.SlideSize = 3
    
    Dim idDiapo As Integer
    idDiapo = 1
        
    For Each Plage In Split(Plages, "-")
        Dim oDiapositive As Object
        
        Set oDiapositive = oDiaporama.Slides.Add(Index:=idDiapo, Layout:=ppLayoutBlank)
    
        ActiveSheet.Range(Plage).Copy
        oDiaporama.Slides(idDiapo).Shapes.PasteSpecial DataType:=2
        
    'Mettre l'image à la dimension de la page
    
oDiaporama.Slides(idDiapo).Shapes(1).ScaleWidth 1, msoTrue, msoScaleFromMiddle
oDiaporama.Slides(idDiapo).Shapes(1).ScaleHeight 1, msoTrue, msoScaleFromMiddle

' calcul du coefficient d'agrandissement

Dim agrandissement As Double
If oDiaporama.Slides(idDiapo).Shapes(1).Height > oDiaporama.Slides(idDiapo).Shapes(1).Width Then
        agrandissement = oDiaporama.PageSetup.SlideHeight / oDiaporama.Slides(idDiapo).Shapes(1).Height
    Else
        agrandissement = oDiaporama.PageSetup.SlideWidth / oDiaporama.Slides(idDiapo).Shapes(1).Width
End If

' Mise-à-l'échelle de l'image

oDiaporama.Slides(idDiapo).Shapes(1).ScaleWidth agrandissement, msoTrue, msoScaleFromMiddle
oDiaporama.Slides(idDiapo).Shapes(1).ScaleHeight agrandissement, msoTrue, msoScaleFromMiddle

        
        idDiapo = iDiapo + 1
        
    Next
            
    Application.CutCopyMode = False 'vide le presse papier
        
End Sub
G
Gli73
Membre fidèle
Membre fidèle
Messages : 293
Appréciations reçues : 37
Inscrit le : 12 avril 2019
Version d'Excel : PC 2013
Contact :

Message par Gli73 » 14 juin 2019, 10:30

Bonjour

Présente ton diaporama en commençant par la fin ! :lol: :lol:

Non plus sérieusement, regarde ton code au niveau de
    For Each Plage In Split(Plages, "-")
Il faut trouver le moyen d'inverser cette boucle !
Excelement Vôtre
Cogito ergo Excel
Per espera ad Excel

Développeur Indépendant sur Excel et 40 ans d'expérience informatique, je peux vous aider à apporter une touche "pro" à vos réalisations !
A
Adrien2A
Jeune membre
Jeune membre
Messages : 17
Inscrit le : 9 mai 2018
Version d'Excel : Mac 2011

Message par Adrien2A » 14 juin 2019, 15:32

Merci de ta réponse Gli73 :), j'ai essayé de faire ce que tu dis et de modifier la boucle for each en changeant idDiapo (qui est ici égale a 1) et de mettre le nombre de diapo à la base (c'est simple puisque à ce niveau là je les comptes, donc j'avais juste à le rentrer dans une variable)
With ActiveSheet.HPageBreaks
If .Count = 0 Then
Et après à la fin d'avancer à rebours en faisant :
idDiapo = idDiapo - 1 
Mais ça marche pas :/
G
Gli73
Membre fidèle
Membre fidèle
Messages : 293
Appréciations reçues : 37
Inscrit le : 12 avril 2019
Version d'Excel : PC 2013
Contact :

Message par Gli73 » 14 juin 2019, 17:31

Bonjour

A ma connaissance la boucle For Each/Next ne permet de compter à rebours !
Cependant tu peux le faire avec une boucle For/Next "classique" de cette manière
For compteurRebours = 10 To 1 [color=#0000FF][u]Step -1
[/u][/color]'...code utile
Next
Le "complément" STEP permet de régler le "pas" de la boucle ET il peut être négatif, donc pour compter à rebours !
à adapter à ton cas !
Excelement Vôtre
Cogito ergo Excel
Per espera ad Excel

Développeur Indépendant sur Excel et 40 ans d'expérience informatique, je peux vous aider à apporter une touche "pro" à vos réalisations !
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message