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 :

erreur d'excution '91' pour envoyer des graphes sur powerpoint


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut erreur d'excution '91' pour envoyer des graphes sur powerpoint
    Bonjour,

    Tout d'abord j'espère être dans la bonne section du forum.
    Je suis sur un post professionel Xp, avec Virtual Basic 6.3 et j'essaie d'envoyer des graphes d'excel directement sur une présentation power point.
    Et je coince sur le copier coller de l'un à l'autre.
    Voici 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
     
    Public Sub ExportPpt(i As Integer)
    Dim ppApp As PowerPoint.Application
    Dim objPres As PowerPoint.Presentation
    Dim objSlide As PowerPoint.Slide
    Dim Sh As PowerPoint.Shape
    Dim j%
     
    If i = 2 Then
        'Au premier i (i=2 pour moi) je crée mon présentation et mes pages
        Set ppApp = CreateObject("PowerPoint.Application")
        ppApp.Visible = True
        ' Create a new PowerPoint presentation.
        Set objPres = ppApp.Presentations.Add
        For j = 1 To 10
        Set objSlide = objPres.Slides.Add(j, ppLayoutBlank)
        Next j
        objPres.SaveAs Filename:=Workbooks(i).Path & "\" & Workbooks(1).Worksheets(1).Cells(2, 1).Value
    End If
     
    'Je copie mon graphe excel...
    Excel.Application.Workbooks(i).ActiveChart.ChartArea.Copy
    'Et je le colle dans ma 2e slide...
    If i = 2 Then
        MsgBox (2) 'La pour le test
    objPres.Slides(2).Shapes.Paste
    End If
    'Ou dans ma 3e pour le graphe suivant
    If i = 3 Then
        MsgBox (3)
    objPres.Slides(3).Shapes.Paste
    End If
    End Sub

    Mon problème : Ca marche pour le premier i, mais pour le second "passage", j'ai ça :

    Erreur d'execution '91' Variable objet ou variable de bloc with non définie.

    Quelqu'un aurait il une idée pour m'aider ?

    Merci beaucoup !

  2. #2
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    Le problème vient du fait que les objets référençant Powerpoint (ppApp, objPres, objSlide, Sh) sont déclarés en local de ta procédure, mais initialisés seulement quand i vaut 2.
    Lorsque ta procédure est appelée avec i=3, ces objets ne contiennent plus rien.
    Il faudrait soit mettre une boucle dans la procédure et ne l'appeler qu'une seule fois, soit déclarer les objets POwerpoint en public pour garder leur contenu entre deux appels...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour tedo01 et merci beaucoup pour ta réponse

    Je vois bien le soucis maintenant. cependant je n'arrive pas à le régler.
    J'ai tenté de remplacer l'initialisation par
    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
     
    MsgBox (cmpt)
    If cmpt = 0 Then
        MsgBox (cmpt)
        Set ppApp = CreateObject("PowerPoint.Application")
        ppApp.Visible = True
        ' Create a new PowerPoint presentation.
        Set objPres = ppApp.Presentations.Add
        For j = 1 To 10
        Set objSlide = objPres.Slides.Add(j, ppLayoutBlank)
        Next j
        objPres.SaveAs Filename:=Workbooks(i).Path & "\" & Workbooks(1).Worksheets(1).Cells(2, 1).Value
        cmpt = cmpt + 1
    End If
     
    MsgBox(cmpt)
    De sorte que dès le 2e coup l'initialisation ne s'exécute pas, mais le compteur cmpt revient à 0 quand il passe au i suivant, et ça se lance de nouveau.
    je ne vois pas bien comment faire autrement pour qu'il ne s'exécute qu'un seule fois.. Ou bien existe t il une fonction pour tester si un fichier est déjà ouvert ?

    Encore merci de ton aide !

  4. #4
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re,
    Maintenant, où sont déclarées tes variables ? Si elles sont en public, tu n'as pas besoin de changer ton premier code.
    Pour savoir si un objet est initialisé ou pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If objPres Is Nothing Then
    ...
    Ce test renvoie vrai si l'objet n'a pas encore été initialisé.

Discussions similaires

  1. [SWT] Api pour faire des graph ?
    Par bawan dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 05/09/2005, 14h13
  2. Réponses: 4
    Dernier message: 28/03/2005, 20h42
  3. Utiliser hylafax pour envoyer des fax
    Par ggnore dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 08/07/2004, 22h57
  4. configurer sql pour envoyer des mails
    Par arwen dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 29/07/2003, 16h28
  5. Script pour envoyer des info a mysql
    Par rhum1 dans le forum Linux
    Réponses: 6
    Dernier message: 15/04/2003, 17h19

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