IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

creation dynamique de ppt


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 11
    Par défaut creation dynamique de ppt
    Bonjour a tous,

    j'ai créé une macro qui permet de generer un ppt à partir d'excel.

    dans l'esprit je fais une capture de la zone voulue sous excel, je fais une image, et je la mets dans mon ppt. Le probleme c'est quand mon tableau excel comporte trop de ligne, a ce moment la je ne sais pas comment le faire sur 2 slides.

    Si quelqu'un a des idees .....

    Je joins mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Sub ajouterSlidePpt(fichier As String, onglet As String, index As Integer, zoneFin As String)
     
            Dim PptApp As PowerPoint.Application
            Dim PptDoc As PowerPoint.Presentation
            Dim Diapo As PowerPoint.Slide
            'Dim Cs1 As ColorScheme
            Dim Sh As PowerPoint.Shape
            Dim Shdate As PowerPoint.Shape
     
            'fonction permettant de vider le presse papier
            VidePP
     
            Set PptApp = CreateObject("Powerpoint.Application")
            Set PptDoc = PptApp.Presentations.Open(fichier)
     
            With PptDoc
     
                Set Diapo = .Slides.Add(index:=index, Layout:=ppLayoutBlank) 
     
                Set Sh = .Slides(index).Shapes.AddLabel(Orientation:=msoTextOrientationHorizontal, _
                    Left:=100, Top:=20, Width:=150, Height:=60)
                    Sh.TextFrame.TextRange.Text = "toto"
     
                Sh.TextFrame.TextRange.Font.Color = RGB(255, 255, 255)
                Sh.TextFrame.TextRange.Font.Size = 24
                Sh.TextFrame.TextRange.Font.Bold = True
     
                Set Shdate = .Slides(index).Shapes.AddLabel(Orientation:=msoTextOrientationHorizontal, _
                    Left:=300, Top:=500, Width:=150, Height:=60)
                    Shdate.TextFrame.TextRange.Text = Format(Date, "dd/mm/yyyy")
                    Shdate.TextFrame.TextRange.Font.Size = 9
                    Shdate.TextFrame.TextRange.Font.Color = RGB(0, 0, 102)
     
               Sheets(onglet).Range("A1:" & zoneFin).CopyPicture xlScreen, xlBitmap
                Diapo.Shapes.Paste
                .Save
     
            End With
     
            PptDoc.Close
            PptApp.Quit
     
    End Sub
    Merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une idée à creuser, puisque tu fait des PrintScreen, en déplaçant la fenêtre de haut en bas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
        Dim NBLignes As Integer
        Dim NBColonnes As Integer
        Dim LigneDebut As Integer
        Dim ColonneDebut As Integer
        Dim I As Integer
     
        'monte la feuille tout en haut de la fenêtre pour le début du PrintScreen
        ActiveWindow.ScrollRow = 1
     
        'fait une boucle ici 2 fois pour le test, à adapter
        For I = 1 To 2
     
            'ligne la plus en haut et colonne la plus à gauche de la fenêtre
            LigneDebut = ActiveWindow.VisibleRange.Row
            ColonneDebut = ActiveWindow.VisibleRange.Column
     
            'nombre de lignes et colonnes visibles dans la fenêtre (le total est pour l'adresse du range)
            NBLignes = ActiveWindow.VisibleRange.Rows.Count + LigneDebut
            NBColonnes = ActiveWindow.VisibleRange.Columns.Count + ColonneDebut
     
            'ajoute la diapo (dans le test, 2)
            Set Diapo = .Slides.Add(index:=I, Layout:=ppLayoutBlank)
     
            Sheets("Feuil1").Range(Cells(LigneDebut, ColonneDebut), Cells(NBLignes, NBColonnes)).CopyPicture xlScreen, xlBitmap
            Diapo.Shapes.Paste
     
            'déplace la fenêtre afin de faire le PrintScreen suivant
            ActiveWindow.ScrollRow = NBLignes - 1
     
       Next I
    En l'intégrant dans ton code (index est à remplacer par I et zoneFin doit être utilisé pour connaître combien de fois il faudra Scroller pour tout récupérer). Pour tester, essai d'allerger au maximum ton code pour voir le résultat de l'exemple que je te donne (c'est ce que j'ai fait, voir code plus bas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    Sub ajouterSlidePpt(fichier As String, onglet As String, index As Integer, zoneFin As String)
     
            Dim PptApp As PowerPoint.Application
            Dim PptDoc As PowerPoint.Presentation
            Dim Diapo As PowerPoint.Slide
            'Dim Cs1 As ColorScheme
            Dim Sh As PowerPoint.Shape
            Dim Shdate As PowerPoint.Shape
     
            Dim NBLignes As Integer
            Dim NBColonnes As Integer
            Dim LigneDebut As Integer
            Dim ColonneDebut As Integer
            Dim I As Integer
     
            'fonction permettant de vider le presse papier
            VidePP
     
            Set PptApp = CreateObject("Powerpoint.Application")
            Set PptDoc = PptApp.Presentations.Open(fichier)
     
            With PptDoc
     
                Set Diapo = .Slides.Add(index:=index, Layout:=ppLayoutBlank)
     
                Set Sh = .Slides(index).Shapes.AddLabel(Orientation:=msoTextOrientationHorizontal, _
                    Left:=100, Top:=20, Width:=150, Height:=60)
                    Sh.TextFrame.TextRange.Text = "toto"
     
                Sh.TextFrame.TextRange.Font.Color = RGB(255, 255, 255)
                Sh.TextFrame.TextRange.Font.Size = 24
                Sh.TextFrame.TextRange.Font.Bold = True
     
                Set Shdate = .Slides(index).Shapes.AddLabel(Orientation:=msoTextOrientationHorizontal, _
                    Left:=300, Top:=500, Width:=150, Height:=60)
                    Shdate.TextFrame.TextRange.Text = Format(Date, "dd/mm/yyyy")
                    Shdate.TextFrame.TextRange.Font.Size = 9
                    Shdate.TextFrame.TextRange.Font.Color = RGB(0, 0, 102)
     
                '>>>>> voir pour la plage ???
               'Sheets(onglet).Range("A1:" & zoneFin).CopyPicture xlScreen, xlBitmap
     
                 'monte la feuille tout en haut de la fenêtre pour le début du PrintScreen
                 ActiveWindow.ScrollRow = 1
     
                 'fait une boucle ici 2 fois pour le test, à adapter
                 For I = 1 To 2
     
                     'ligne la plus en haut et colonne la plus à gauche de la fenêtre
                     LigneDebut = ActiveWindow.VisibleRange.Row
                     ColonneDebut = ActiveWindow.VisibleRange.Column
     
                     'nombre de lignes et colonnes visibles dans la fenêtre (le total est pour l'adresse du range)
                     NBLignes = ActiveWindow.VisibleRange.Rows.Count + LigneDebut
                     NBColonnes = ActiveWindow.VisibleRange.Columns.Count + ColonneDebut
     
                     'ajoute la diapo (dans le test, 2)
                     Set Diapo = .Slides.Add(index:=I, Layout:=ppLayoutBlank)
     
                     Sheets("Feuil1").Range(Cells(LigneDebut, ColonneDebut), Cells(NBLignes, NBColonnes)).CopyPicture xlScreen, xlBitmap
                     Diapo.Shapes.Paste
     
                     'déplace la fenêtre afin de faire le PrintScreen suivant
                     ActiveWindow.ScrollRow = NBLignes - 1
     
                Next I
     
                .Save
     
            End With
     
            PptDoc.Close
            PptApp.Quit
     
    End Sub
    Ce avec quoi j'ai fait un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Sub ajouterSlidePpt()
     
        Dim PptApp As PowerPoint.Application
        Dim PptDoc As PowerPoint.Presentation
        Dim Diapo As PowerPoint.Slide
        'Dim Cs1 As ColorScheme
        Dim Sh As PowerPoint.Shape
        Dim Shdate As PowerPoint.Shape
        Dim NBLignes As Integer
        Dim NBColonnes As Integer
        Dim LigneDebut As Integer
        Dim ColonneDebut As Integer
        Dim I As Integer
     
        'fonction permettant de vider le presse papier
        Application.CutCopyMode = False
     
        Set PptApp = New PowerPoint.Application
        Set PptDoc = PptApp.Presentations.Add '<< ici un fichier est ajouté !!!
     
        PptApp.Visible = True
     
        With PptDoc
     
            'monte la feuille tout en haut de la fenêtre pour le début du PrintScreen
            ActiveWindow.ScrollRow = 1
     
            'fait une boucle ici 2 fois pour le test, à adapter
            For I = 1 To 2
     
                'ligne la plus en haut et colonne la plus à gauche de la fenêtre
                LigneDebut = ActiveWindow.VisibleRange.Row
                ColonneDebut = ActiveWindow.VisibleRange.Column
     
                'nombre de lignes et colonnes visibles dans la fenêtre (le total est pour l'adresse du range)
                NBLignes = ActiveWindow.VisibleRange.Rows.Count + LigneDebut
                NBColonnes = ActiveWindow.VisibleRange.Columns.Count + ColonneDebut
     
                'ajoute la diapo (dans le test, 2)
                Set Diapo = .Slides.Add(index:=I, Layout:=ppLayoutBlank)
     
                Sheets("Feuil1").Range(Cells(LigneDebut, ColonneDebut), Cells(NBLignes, NBColonnes)).CopyPicture xlScreen, xlBitmap
                Diapo.Shapes.Paste
     
                'déplace la fenêtre afin de faire le PrintScreen suivant
                ActiveWindow.ScrollRow = NBLignes - 1
     
            Next I
     
        End With
     
    End Sub
    Hervé.

Discussions similaires

  1. [FLASH MX2004] Creation dynamique d'occurences
    Par WinBernardo dans le forum Flash
    Réponses: 2
    Dernier message: 21/08/2004, 17h05
  2. [en C]creation dynamique d'interface
    Par ronan99999 dans le forum Windows
    Réponses: 3
    Dernier message: 19/08/2004, 12h53
  3. [VB.NET] Erreur sur la creation dynamique d'une texbox
    Par headcooper dans le forum ASP.NET
    Réponses: 4
    Dernier message: 01/07/2004, 19h34
  4. Réponses: 8
    Dernier message: 04/09/2003, 16h07
  5. Creation dynamique d'un objet
    Par Tom_sawyer13 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 06/08/2003, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo