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 :

Modification Graphique PowerPoint (potm) via Excel VBA


Sujet :

VBA PowerPoint

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut Modification Graphique PowerPoint (potm) via Excel VBA
    Bonjour le forum,

    Commençons par poser le contexte de mon problème. Je travaille sur une macro existante qui, à partir de données et de modèles de graphiques stockés dans un fichier .potm, crée plusieurs fichiers .ppt et tout une batterie de graphiques.
    Cette macro fonctionnait parfaitement sous Excel 2010, mais certaines méthodes ne fonctionnent plus sous Excel 2016. Je suis en train de mettre à jour cette macro, mais un bug résiste toujours, et malgré plusieurs heures dessus, je ne me l'explique toujours pas...

    Le bug exact retourné est : La méthode Top de l'objet PlotArea a échoué.

    Et voici les lignes de code concernées :

    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
     
    Dim Mychart As PowerPoint.Chart
     
    Set oPPTapp = CreateObject("PowerPoint.Application")
     
    Set Mychart = oPPTapp.ActivePresentation.Slides(ID_Slide).Shapes(Nom_shape_Graphe).Chart
     
    Mychart.SetSourceData Source:="='Feuil1'!" & Range("$A$1:$B$" & WS.Range("A10000").End(xlUp).Row).Address, PlotBy:=xlColumns
     
    Temporis 7000
    Mychart.Refresh
    Temporis 5000
    Mychart.PlotArea.Select
    Temporis 20000
    Mychart.PlotArea.Top = 7
    Mychart.PlotArea.Height = 307
    Mychart.Refresh
    ...qui bug donc sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mychart.PlotArea.Top = 7
    Après vérif sur le site de Microsoft, la méthode existe toujours bien sous 2016, je la retrouve via l'enregistreur de macro, j'ai testé différentes options que j'ai glané ci et là sur le net, ... mais rien n'y fait.
    Je me pencherais plus vers la définition ou la déclaration de certains objets ? Mais si c'est le cas, une subtilité m'échappe...

    Merci de votre aide !! :)

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Je me permets un UP de ce sujet, n'ayant toujours pas résolu ce problème....

    Merci !

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Mis a part la fonction temporis que mon Excel ne reconnait pas, j'ai testé ta macro sur un fichier de test et elle fonctionne
    Du coup que fait ta fonction temporis ? es-tu sur qu'elle n'interfère pas avec la définition de mychart ?
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Merci pour ce premier retour,
    Je ne suis pas le créateur initial de cette macro, donc je n'en connais pas tous les détails.
    Mais cette fonction Temporis est une fonction fleuve utilisée pour laisser du temps à Excel d'effectuer tous les traitements nécessaire.

    Si cela marche de ton coté, est-ce que cela veut dire que je dois plutôt regarder du coté du fichier potm ?

    EDIT : J'ai testé sans cette fonction Temporis, mais cela ne fonctionne toujours pas...

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Mychart = oPPTapp.ActivePresentation.Slides(ID_Slide).Shapes(Nom_shape_Graphe).Chart
    Dans le code que tu as posté il n'y a pas les affectations de tes variables ID_Slide et Nom_shape_Graphe, quels sont leur valeur au moment de l'erreur ? est-ce bien que tu attendais?
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Oui de ce côté là, tout est ok.

    Lorsque je teste ces lignes seules sur le fichier .potm d'origine, cela fonctionne bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub autochart()
    Dim Mychart As PowerPoint.Chart
     
    Set oPPTapp = CreateObject("PowerPoint.Application")
     
    Set Mychart = oPPTapp.ActivePresentation.Slides(8).Shapes("GRAPHE_01").Chart
     
    With Mychart.PlotArea
        .Select
        .Top = 7
    End With
     
    End Sub

    Le code complet de cette partie est un peu plus long, mais je ne vois pas ce qui pourrait interférer :

    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
     
    If Left(Nom_shape_Graphe, 7) = "GRAPHE_" Then
            Set Mychart = oPPTapp.ActivePresentation.Slides(ID_Slide).Shapes(Nom_shape_Graphe).Chart
     
                Set gChartData = Mychart.ChartData
                Temporis 10000
                gChartData.Activate
                Set gWorkBook = gChartData.Workbook
                Set gWorkSheet = gWorkBook.Worksheets(1)
     
                gWorkSheet.Activate
                gWorkSheet.Range(gWorkSheet.Cells(3, 1), gWorkSheet.Cells(100, 100)).ClearContents
                gWorkSheet.Range(gWorkSheet.Cells(1, 3), gWorkSheet.Cells(50, 100)).ClearContents
     
                For I = 2 To WS.Cells.SpecialCells(xlCellTypeLastCell).Row
                    gWorkSheet.Cells(I, 1) = WS.Cells(I, 1)
                    gWorkSheet.Cells(I, 2) = CDbl(MATRICE_CALC(1, 3, I - 2))
     
                Next I
                gWorkSheet.Activate
                gWorkSheet.ListObjects("Tableau1").Resize Range("$A$1:$B$" & WS.Range("A10000").End(xlUp).Row)
     
                Mychart.SetSourceData Source:="='Feuil1'!" & Range("$A$1:$B$" & WS.Range("A10000").End(xlUp).Row).Address, PlotBy:=xlColumns
     
                'Temporis 7000
                'Mychart.Refresh
                'Temporis 5000
                Mychart.PlotArea.Select
                'Temporis 20000
                Mychart.PlotArea.Top = 7
                Mychart.PlotArea.Height = 307
     
                Mychart.Refresh
     
    End If

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par discus23 Voir le message
    Le code complet de cette partie est un peu plus long, mais je ne vois pas ce qui pourrait interférer :
    Moi non plus.
    A ta place j'essayerais de mettre la ligne Mychart.PlotArea.Top = 7 à différents endroit de la macro pour essayer de voir où se trouve le problème.
    Notamment avant et après cette ligne (23ème): Mychart.SetSourceData vu que tu y modifie la source du graphique.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Je me permets un nouveau UP sur ce sujet car ni je ne comprends pourquoi cela bug en l'état, ni je n'ai la moindre piste de solution en vue...après des jours et de jours de recherche!

Discussions similaires

  1. Tracer des graphiques à la chaîne avec Excel/VBA
    Par mouletabille dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/08/2008, 10h39
  2. Comment écrire dans une base de données ODBC via Excel (VBA)
    Par Shark777 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/04/2008, 04h56
  3. Supprimer un tableau Powerpoint (PPT) depuis Excel VBA
    Par pontoise dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/03/2008, 19h01
  4. Outlook via excel vba
    Par joss56 dans le forum Outlook
    Réponses: 3
    Dernier message: 09/01/2008, 22h03
  5. Limites Création table tempo Access par ADOX via Excel VBA.
    Par botakelymg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/11/2007, 09h45

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