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 :

Copie de graphiques [XL-2003]


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
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut Copie de graphiques
    Bonjour à tous !

    J'utilise un classeur Excel composé d'une dizaine de feuilles. Sur chaque feuille "s'empilent" verticalement un nombre plus ou moins important de graphiques.

    J'ai créé une procédure VB qui se charge de parcourir chaque feuille du classeur, et de copier/coller chaque graphique sur un document Powerpoint (1 graphique = 1 diapo). Mon code semble fonctionner relativement bien, mais je rencontre un problème pour certains graphiques présents sur des feuilles qui en contiennent beaucoup.

    Ainsi, l'une des feuilles du classeur (qui n'est pas la dernière parcourue dans la procédure) contient 101 graphiques, et dans l'exécution de la procédure, les 33 derniers (en partant du haut de la feuille) semblent être copiés dans Powerpoint, mais y apparaissent sous la forme d'une image vide (je procède à un collage spécial). Les graphiques des feuilles suivantes se copient correctement.

    Je rajouterai que parmi les graphiques de la feuille en question, le dernier copié avant ceux qui donnent des images vides n'est pas copié correctement non plus. Seule la partie haute du graphique apparaît dans l'image résultante de la copie sur Powerpoint.

    Voici un extrait du code VBA utilisé :

    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
     
     
    ' Déclarations
    Dim PptApp As PowerPoint.Application
    Dim PptDoc As PowerPoint.Presentation
    Dim PptSlide As PowerPoint.Slide
    Dim PptShape As PowerPoint.Shape
     
    ' Ouverture Powerpoint
    Set PptApp = New PowerPoint.Application
    PptApp.Visible = True
     
    ' Ouverture du document powerpoint à modifier
    Set PptDoc = PptApp.Presentations.Open(nom_fichier)
     
    ' Initialisation de l'index diapo qui marque le début de la copie dans Powerpoint
    index_diapo = x
     
    ' Pour chaque feuille du classeur
    For i = 0 nb_feuilles
     
            ' Sélection de la feuille
            Sheets(i).Select
     
            ' Pour chaque graphique de la feuille
            For Each graphique In ActiveSheet.ChartObjects
     
               ' Copie le graphique
                graphique.Activate
                ActiveChart.ChartArea.Select
                ActiveChart.ChartArea.Copy
     
                ' Création d'une nouvelle diapo dans Powerpoint
                PptApp.Activate
                PptApp.ActiveWindow.ViewType = ppViewSlide
                Set PptSlide = PptDoc.Slides.Add(index_diapo, ppLayoutLargeObject)
     
                ' Sélection de la zone de la diapo destinée à recevoir le graphique
                PptSlide.Select
                PptSlide.Shapes(1).Select
     
                ' Collage du graphique dans la nouvelle diapo
                PptApp.ActiveWindow.View.PasteSpecial (ppPasteMetafilePicture)
     
                ' Incrémentation de l'index diapo
                index_diapo = index_diapo + 1
     
           Next
     
    Next
    Ma principale piste pour le moment est un éventuel problème de presse-papier (je copie au total environ 260 graphiques). Lorsque je limite l'exécution de la procédure au parcours de la feuille qui pose problème, tout se passe bien lors de la copie pour les graphiques qui posaient problème précédemment.
    Néanmoins, j'ai du mal à comprendre pourquoi l'exécution complète peut poser problème sur les 33 dernières copies d'une feuille alors qu'elle ne rencontre aucun souci pour les feuilles qui suivent.

    Dans le sens d'un problème de presse-papier, j'ai tenté de le vider avant chaque copie de graphique avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    OpenClipboard 0
    EmptyClipboard
    CloseClipboard
    (source)

    J'ai également tenté avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.cutcopymode=false
    Tout ceci sans succès

    J'espère avoir été clair, et bien sûr désolé si cette question a déjà été évoquée ici.

  2. #2
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour Halzard le forum peut être comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    On Error Resume Next
    Application.CommandBars("clipboard").Controls(4).Execute

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Salut laetitia et merci pour ta réponse. Je viens de tester en plaçant cette instruction au début de la boucle de parcours des graphiques, mais le résultat obtenu est le même.

    PS : Sans le "on error resume next", VB me signale un problème d'indice (4).

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re peut être le mettre juste avant ton premier next

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     ' Collage du graphique dans la nouvelle diapo
                PptApp.ActiveWindow.View.PasteSpecial (ppPasteMetafilePicture)
     
                ' Incrémentation de l'index diapo
                index_diapo = index_diapo + 1
    On Error Resume Next
    Application.CommandBars("clipboard").Controls(4).Execute
    next
    next

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Ca ne marche pas non plus malheureusement

    C'est sensé faire quoi au juste ?

  6. #6
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re normalement vider le presse papier il faut peut être faire une boucle specifique pour la feuille qui pose probleme

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

Discussions similaires

  1. Copie de graphique (incohérence ?)
    Par Uranne-jimmy dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/01/2014, 09h19
  2. Copie d'un graphique vers Excel/Word
    Par DieselBrother dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 31/07/2007, 07h53
  3. Simple copie du texte d'une cellule excel dans le titre d'un graphique chart
    Par pinto_armindo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2007, 10h59
  4. [VBA-E]Copie graphique de excel vers word
    Par conconbrr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/02/2006, 10h49
  5. [VBA] Copie d'une feuille (avec graphique)
    Par ed_dexia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/10/2005, 09h56

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