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

VBA PowerPoint Discussion :

Remplacement de contenu [PPT-2010]


Sujet :

VBA PowerPoint

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2012
    Messages : 31
    Points : 19
    Points
    19
    Par défaut Remplacement de contenu
    Bonjour à tous,

    Je suis actuellement en train de développer un module de création automatique de PPT, cependant je rencontre pas mal de difficultés à générer mon code.

    Le fonctionnement de mon script est en fait de se baser sur un document PowerPoint (modèle type) existant et de venir remplacer le contenu de chacun des éléments (texte, contenu d'un tableau, chemin d'images, ...).

    La plus grosse difficultés que je rencontre est de savoir comment atteindre les bons éléments et les bonnes propriétés et avec l'absence de l'enregistreur de macro depuis les dernières versions et ma recherche non fluctuante, je m'en remets aux spécialistes que vous êtes pour m'aiguiller.

    J'ai déjà réussi à trouver une propriété changeant le texte d'un label simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = "Test"
    Est-il possible par la même occasion, de m'indiquer également comment bien "préparer" le fichier PPT qui servira de modèle ? (Je pense notamment à comment bien nommé les éléments ou même les slides)

    Merci d'avance

    NhyKoLa

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Je te conseille vivement de nommer toutes les formes que tu devras modifier. Perso, je n'ai jamais trouvé comment faire avec l'IHM. J'ai donc fait une procédure :
    • tu dois d'abord sélectionner la forme à renommer
    • puis lancer la procédure
    • et répondre aux invites.


    Ce code prévoit de nommer des graphs et des étiquettes, mais tu pourras ajouter d'autres formes dont tu aurais besoin.
    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
    '****************************************************************************************************************
    '***********************************  Procédure utilisateur   ***************************************************
    '* Cette procédure est déclenchée manuellement par l'opérateur après sélection d'une forme, graph ou étiquette **
    '****************************************************************************************************************
    Sub subNewName()
    Dim oshpR As PowerPoint.ShapeRange
    Dim oShp As PowerPoint.Shape
    Dim s As String
     
    Set oshpR = ActiveWindow.Selection.ShapeRange
    s = oshpR.Name
    Set oShp = ActiveWindow.Selection.SlideRange.Shapes(s)
     
    If oShp.HasChart = msoTrue Then
     
        oShp.Chart.Select
        If MsgBox(cstText001 & oShp.Chart.Name & cstText002, vbYesNo) = vbYes Then
            s = InputBox(cstText003 & oShp.Chart.Name & "." & vbCrLf & cstText004, cstText005, oShp.Chart.Name)
            If s <> vbNullString Then oShp.Chart.Name = s
            MsgBox cstText006 & oShp.Chart.Name
        Else
            MsgBox cstText007
        End If
     
    ElseIf oShp.Type = msoTextBox Then
     
        If MsgBox(cstText001 & oShp.Name & cstText002, vbYesNo) = vbYes Then
            s = InputBox(cstText003 & oShp.Name & "." & vbCrLf & cstText008, cstText009, oShp.Name)
            If s <> vbNullString Then oShp.Name = s
            MsgBox cstText010 & oShp.Name
        Else
            MsgBox cstText011
        End If
    Else
     
        MsgBox cstText012
    End If
     
    Set oshpR = Nothing
    Set oShp = Nothing
     
    End Sub
    Ce code marche avec des constantes de texte, en Fr ou en En. Voici les constantes
    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
    'Private Const cstText001 As String = "Le nom est : "
    Private Const cstText001 As String = "Name is : "
     
    'Private Const cstText002 As String = ". Voulez-vous le changer ?"
    Private Const cstText002 As String = ". Would you like to change the name ?"
     
    'Private Const cstText003 As String = "Nom actuel :"
    Private Const cstText003 As String = "Current graph name : "
     
    'Private Const cstText004 As String = "Nouveau nom du graph ?"
    Private Const cstText004 As String = "New graph name ?"
     
    'Private Const cstText005 As String = "Nom de graph."
    Private Const cstText005 As String = "Graph name."
     
    'Private Const cstText006 As String = "Le graph sélectionné est nommé : "
    Private Const cstText006 As String = "The selected graph is nammed : "
     
    'Private Const cstText007 As String = "Le nom du graph sélectionné n'a pas été modifié."
    Private Const cstText007 As String = "The name of the selected graph has not been modified."
     
    'Private Const cstText008 As String = "Nouveau nom d'etiquette?"
    Private Const cstText008 As String = "New label name ?"
     
    'Private Const cstText009 As String = "Nom de l'etiquette."
    Private Const cstText009 As String = "Label name."
     
    'Private Const cstText010 As String = "L'etiquette modele est nommee : "
    Private Const cstText010 As String = "The model label is nammed : "
     
    'Private Const cstText011 As String = "Le nom de la zone de texte sélectionnée n'a pas été modifié."
    Private Const cstText011 As String = "The name of the selected text box has not been modified."
     
    'Private Const cstText012 As String = "Pas de graph ni zone de texte sélectionné."
    Private Const cstText012 As String = "No graph or text box selected."
    Une fois que tes formes sont nommées, tu peux les "récupérer" facilement quand tu crées les présentations, par les noms des formes !

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2012
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Merci pour cette petite routine, celle-ci va considérablement améliorer mon approche du développement !!

    Je parviens désormais renommer et accéder au contenu de mes éléments, je n'arrive pourtant pas à venir "remplacer" une image. Je ne trouve pas la ligne de commande. j'ai bien essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call oshp.Fill.UserPicture("C:\Users\NhyKoLa\Desktop\logo.png")
    Mais cette commande superpose ma nouvelle image avec l'ancienne ....

    Pouvez-vous m'aider sur une telle commande ?

    Merci d'avance

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Je ne suis pas sûr, mais tu peux essayer de commencer par avant d'insérer la nouvelle image.

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2012
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    C'est j'ai pu trouver comment remplacer une image tout en laisse la même hauteur d'image que la précédente ! Je partage mon code si ça peut servir à quelqu'un d'autre ...

    Merci pour tout !

    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
    Sub modifImage(page As Integer, label As String, newPicture As String)
        Dim shp As Shape
        Dim l As Single
        Dim t As Single
        Dim h As Single
        Dim w As Single
        Dim strName As String
        Dim cheminImage As String
     
        cheminImage = dossierExportHTML & newPicture
     
        l = ActivePresentation.Slides(page).Shapes(label).Left
        t = ActivePresentation.Slides(page).Shapes(label).Top
        h = ActivePresentation.Slides(page).Shapes(label).Height
        w = ActivePresentation.Slides(page).Shapes(label).Width
        strName = ActivePresentation.Slides(page).Shapes(label).Name
        ActivePresentation.Slides(page).Shapes(label).Delete
     
        Set shp = ActivePresentation.Slides(page).Shapes.AddPicture(cheminImage, msoFalse, msoCTrue, l, t, w, h)
        shp.LockAspectRatio = msoTrue
        shp.ScaleHeight 1, msoTrue
        shp.Height = h
        shp.Left = l + w / 2 - shp.Width / 2
        shp.Top = t
        shp.Name = strName
    End Sub

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

Discussions similaires

  1. [RegEx] Remplacement du contenu d'une balise HTML
    Par Tchupacabra dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2008, 23h51
  2. Remplacer le contenu d'un champ
    Par Hamdi dans le forum VBA Access
    Réponses: 5
    Dernier message: 15/07/2008, 16h45
  3. Remplacer le contenu des cellules de destination
    Par cyraile dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/11/2006, 08h23
  4. [XSLT] remplacer le contenu d'un noeud
    Par casgr1 dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 29/06/2006, 09h50
  5. Remplacer le contenu d'un div par un autre
    Par prgasp77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/10/2004, 23h48

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