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

Powerpoint Discussion :

Problème VBA PowerPoint [PPT-2016]


Sujet :

Powerpoint

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable Marketing
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable Marketing
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Par défaut Problème VBA PowerPoint
    Bonjour à tous,

    Tout d'abord, veuillez m'excuser pour cette demande qui va peut-être paraître évidente pour bon nombre d'entre vous, mais pour ma part, mes connaissances en PowerPoint sont limitées (honte à moi ..) et j'avoue que les tâches que je dois y effectuer me donnent du fil à retordre ..

    Alors, pour expliquer clairement ma situation, nous réalisons 2 fois par semaine des réunions dans ma société, dans lesquelles nous utilisons un support PowerPoint pour exposer à tout le monde de nombreuses données, quasiment toutes intégrées dans le diaporama par Copier-Coller (car nous réalisons une capture d'écran depuis une page professionnelle qui ne peut pas être exportée).

    Une fois toutes les données intégrées, nous arrivons en général à une présentation d'environ 50 diapos pour les réunions les plus courtes, et jusqu'à 150/200 diapos pour les plus complexes.

    Niveau intégration des données, aucun problème particulier, mais niveau mise en forme, cela dure une ETERNITE simplement pour modifier la taille et centrer les données que nous intégrons via Copier-Coller ..
    Je suis sûr que le temps de mise en forme peut largement être réduit si seulement j'étais un peu plus compétent sur ce logiciel !

    D'ailleurs, à force de recherches, j'ai trouvé un code VBA que j'ai pu appliquer à mon PowerPoint qui permet de modifier la taille et de centrer les diapos où l'on utilise seulement une image, j'en suis déjà très satisfait !
    Problème : La majorité des diapos que nous utilisons contiennent 2 images, et donc le code VBA que j'ai trouvé est totalement inefficace pour ce genre de situations ..

    Alors j'en fais appel à vous, professionnels de PowerPoint, auriez-vous un moyen de me sortir de cette situation ? Peut-être un code qui permet de modifier la mise en forme de 2 documents intégrés sur une même diapositive ? Peut-il se cumuler au code VBA déjà existant qui permet de gérer la mise en forme des diapos ne contenant que 1 seule image ?

    Si tel était le cas, vous me sauveriez la vie !

    Merci d'avance, bonne journée à tous !

  2. #2
    Membre chevronné
    Inscrit en
    Avril 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 273
    Par défaut
    Bonjour LeMoldu, le forum,

    Ci-dessous une procédure qui permet de positionner les formes sur un slide.
    Les constantes permettant de gérer les espacements peuvent être adaptées.
    Dans un premier temps (et si besoin) les formes sont réduites une par une si elles sont trop hautes.
    Dans un second temps, si l'ensemble est trop large, les formes sont toutes réduites du même ratio.
    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
    Public Sub PlaceShapes(p_o_collShapes As Object, p_o_slide As Slide)
    Const c_d_space_left As Double = 25
    Const c_d_space_right As Double = 25
    Const c_d_space_between As Double = 25
    Const c_d_space_top As Double = 80
    Const c_d_space_bottom As Double = 65
    Dim l_o_shp As Shape
    Dim l_d_maxHeight As Double
    Dim l_d_widthSum As Double
    Dim l_d_mawWidth As Double
    Dim l_d_ratio As Double
    Dim l_d_leftOffset As Double
    Dim l_d_left As Double
    Dim l_d_top As Double
     
        'réduire les shapes si elles sont trop hautes et calculer le cumul des largeurs
        l_d_maxHeight = p_o_slide.Master.Height - c_d_space_top - c_d_space_bottom
        For Each l_o_shp In p_o_collShapes
            If Not l_o_shp.Parent Is p_o_slide Then Stop    '''' si arrêt ici, c'est que une des formes à positionner n'est pas sur la slide passée en paramètre
            l_o_shp.LockAspectRatio = True
            If l_o_shp.Height > l_d_maxHeight Then l_o_shp.Height = l_d_maxHeight
            l_d_widthSum = l_d_widthSum + l_o_shp.Width
        Next l_o_shp
     
        'réduire les shapes si elles sont trop larges
        l_d_mawWidth = p_o_slide.Master.Width - (p_o_collShapes.Count - 1) * c_d_space_between - c_d_space_left - c_d_space_right
        l_d_ratio = l_d_mawWidth / l_d_widthSum
        If l_d_ratio < 1 Then
            For Each l_o_shp In p_o_collShapes
                l_o_shp.Height = l_o_shp.Height * l_d_ratio
            Next l_o_shp
            l_d_widthSum = l_d_mawWidth
        End If
     
        'positionne les formes
        l_d_leftOffset = (l_d_mawWidth - l_d_widthSum) / p_o_collShapes.Count / 2
        l_d_left = c_d_space_left
        For Each l_o_shp In p_o_collShapes
            l_d_left = l_d_left + l_d_leftOffset
            l_d_top = c_d_space_top + (l_d_maxHeight - l_o_shp.Height) / 2
            l_o_shp.Left = l_d_left
            l_o_shp.Top = l_d_top
            l_d_left = l_d_left + l_o_shp.Width + l_d_leftOffset + c_d_space_between
        Next l_o_shp
    End Sub
    Et ci-dessous, un code utilisant cette procédure pour arranger le placement de toutes les formes de toutes les slides de la présentation active :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim l_o_slide As PowerPoint.Slide
        For Each l_o_slide In ActivePresentation.Slides
            PlaceShapes l_o_slide.Shapes, l_o_slide
        Next l_o_slide
    End Sub
    A+

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable Marketing
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable Marketing
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Par défaut
    'réduire les shapes si elles sont trop larges
    l_d_mawWidth = p_o_slide.Master.Width - (p_o_collShapes.Count - 1) * c_d_space_between - c_d_space_left - c_d_space_right
    l_d_ratio = l_d_mawWidth / l_d_widthSum
    If l_d_ratio < 1 Then
    For Each l_o_shp In p_o_collShapes
    l_o_shp.Height = l_o_shp.Height * l_d_ratio
    Next l_o_shp
    l_d_widthSum = l_d_mawWidth
    End If


    Salut MRomain !

    Tout d'abord, merci beaucoup d'avoir pris le temps de me répondre ! (Et désolé pour mon temps de réponse ...)

    Cependant, après avoir essayé d'intégrer ton code dans mon PowerPoint, j'ai rencontré un problème à ce niveau là :
    l_d_ratio = l_d_mawWidth / l_d_widthSum
    If l_d_ratio < 1 Then


    Aurais-tu une idée d'où cela pourrait venir ?

    Encore merci !

    Bonne journée !

  4. #4
    Membre chevronné
    Inscrit en
    Avril 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 273
    Par défaut
    Bonjour LeMoldu, le forum,


    J'ai réussi à reproduire l'erreur. Elle se déclenche quant aucune forme n'est présente sur un slide.

    J'ai retouché la procédure Test pour palier à ce problème. J'ai également profité de retoucher cette procédure pour ignorer les emplacements réservés (venant des dispositions des diapositives).
    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
    Public Sub Test()
    Dim l_o_sld As PowerPoint.Slide
    Dim l_o_shp As PowerPoint.Shape
    Dim l_o_collShape As VBA.Collection
     
        'boucler sur tous les slides de la présentation
        For Each l_o_sld In ActivePresentation.Slides
            Set l_o_collShape = New VBA.Collection
            'boucler sur toutes les formes de la slide
            For Each l_o_shp In l_o_sld.Shapes
                'si la forme n'est pas un emplacement réservé, l'ajouter à la collection
                If l_o_shp.Type <> msoPlaceholder Then l_o_collShape.Add l_o_shp
            Next l_o_shp
            'replacer les formes
            If l_o_collShape.Count > 0 Then PlaceShapes l_o_collShape, l_o_sld
        Next l_o_sld
     
    End Sub
    Tu trouveras un exemple ci-joint : Exemple.zip.

    A+

  5. #5
    Candidat au Club
    Homme Profil pro
    Responsable Marketing
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable Marketing
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Par défaut
    Salut MRomain,

    Je viens de tester et ça marche parfaitement bien !!
    Même encore mieux que ce que je pouvais imaginer, merci beaucoup !

    Tu n'imagines même pas à quel point ton code va me simplifier la vie aha !

    Bravo et encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème présentation Powerpoint à partir de VBA Excel
    Par Thresh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2017, 17h59
  2. [VBA-Powerpoint] Agrandir une image
    Par marsupilami34 dans le forum VBA PowerPoint
    Réponses: 15
    Dernier message: 06/09/2009, 00h58
  3. Problème sous powerpoint via VBA
    Par seb_de_quimper dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 02/04/2007, 14h58
  4. [VBA-P] Problème liaisons powerpoint-Excel
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/07/2006, 15h07
  5. Probléme VBA Word et SQL server
    Par andrau dans le forum VBA Word
    Réponses: 2
    Dernier message: 12/10/2005, 11h52

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