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 :

Alimentation d'un fichier Excel à partir de données Powerpoint


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut Alimentation d'un fichier Excel à partir de données Powerpoint
    Bonjour à tous,

    Je suis en train de réfléchir à une façon d'alimenter automatiquement un tableau récapitulatif sous Excel à partir de données formatés dans des Powerpoint.

    Je m'explique, je souhaiterais à partir de mon fichier Excel, cliquer sur un bouton "Ajouter" qui ouvrirait une pop-up parcourir. Je sélectionne alors un document powerpoint (1 seule page suivant tjs le même modèle: un client, un résumé et un chiffre d'affaires).
    Je souhaiterais que mon programme récupère les informations du Powerpoint et alimente automatiquement mon tableau Excel en créant une nouvelle ligne.

    Est-ce possible de faire qqch de ce genre? Si oui, je veux bien des infos, pistes ou exemples qui pourraient m'aider à développer ce programme

    Je vous remercie pour votre aide tjs aussi précieuse sur ce type de sujet
    Alex

  2. #2
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    oui, c'est possible et je l'ai déjà réalisé.
    Il faut commencer par ajouter la référence aux objets Powerpoint, puis de trouver le moyen d'accéder au texte de ton slide pour le rappatrier dans Excel.

    Un petit commencement pour ouvrir une pres' en mode caché
    strPath est le chemin complet de ton ppt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim pp As PowerPoint.Application
    Dim pres As Presentation
    Set pp = New PowerPoint.Application
    Set pres = pp.Presentations.Open(strPath, msoCTrue, msoFalse, msoFalse)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    Yes ça a l'air pas mal tout ça!
    Je me demande juste comment tu fais pour pouvoir identifier telle ou telle zone du texte.

    Merci beaucoup

  4. #4
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    ça va dépendre, est-ce du texte ? est-ce une image ? un objet excel ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    Sur chaque powerpoint, il y a 3 zones de texte (3 insert de texte différent) et un logo.

    Il n'y a pas d'objet externe.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Voici un petite exemple à adapter à ton cas

    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
    Public Sub ParcourZoneTexte()
        ' déclaration des variables
        Dim sld As Slide
        Dim shp As Shape
     
        ' parcours
        For Each sld In ActivePresentation.Slides
            For Each shp In sld.Shapes
                If shp.Type = msoTextBox Then
                    MsgBox shp.TextFrame.TextRange.Text
                End If
            Next shp
        Next sld
     
    End Sub
    Ce code parcours tous les slides de la présentation active et dans chaque slide donne le texte des zones de texte.

    Bien sûr ce n'est qu'un exemple, à adapter.

    Philippe

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    Sur vos conseils, j'ai tenté ce bout de code pour comprendre comment ça marche.

    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
     
            ' déclaration des variables
            Dim pp As PowerPoint.Application
            Dim pres As Presentation
            Dim sld As Slide
            Dim shp As Shape
     
            ' initialisation
            Set pp = New PowerPoint.Application
            Set pres = pp.Presentations.Open(lienHypertexteBrut, msoCTrue, msoFalse, msoFalse)
     
     
            ' affichage du contenu du ppt
            Set sld = pres.Slides(1)
            For Each shp In sld.Shapes
                    If shp.Type = msoTextBox Then
                        MsgBox shp.TextFrame.TextRange.Text
                    End If
             Next shp
    Le problème est que j'ai une erreur à la ligne "For Each shp In sld.Shapes": Erreur d'exécution '13':
    incompatibilité de type

    Je ne comprends pas pourquoi j'ai une telle erreur...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourtant ton code à l'air cohérent. Il se peut que ce soit le temps d'ouverture de la présentation qui gêne.

    Essayes de mettre l'instruction DoEvents avant la boucle For, pour voir (ce n'est qu'une idée).

    Philippe

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    Bonjour Philippe,

    En fait, si je passe l'ouverture en "visible", le ppt s'ouvre bien mais il plante au niveau de l'instruction Shapes... je ne comprends pas pourquoi.

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    As-tu testé ce que t'a dis Philippe ?
    Edit
    Et si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            msgbox pres.Slides.count
    ça donne quoi ?

  11. #11
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    @alex75, vu ton erreur je pense que l'ouverture de la pres' powerpoint a échoué.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    As-tu testé ce que t'a dis Philippe ?
    Edit
    Et si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            msgbox pres.Slides.count
    ça donne quoi ?

    J'ai mis des msgbox avant le for et effectivement elles s'affichent bien.
    pour le pres.Slides.count, j'obtiens 1, ce qui est correct je charge un ppt avec une slide.

    Citation Envoyé par cafeine Voir le message
    Hello,

    @alex75, vu ton erreur je pense que l'ouverture de la pres' powerpoint a échoué.
    Je dirais qu'a priori non car j'ai mis ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            ' initialisation
            Set pp = New PowerPoint.Application
            Set pres = pp.Presentations.Open(lienHypertexteBrut, msoCTrue, msoFalse, msoFalse)
     
            MsgBox "hello"
    et la msgbox Hello s'affiche bien

  13. #13
    Invité
    Invité(e)
    Par défaut
    Re

    As-tu remplacé ta msgbox par DoEvents ?

    Philippe

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    En supprimant la déclaration suivante, le code marche!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            Dim sld As Slide
            Dim shp As Shape
    Quelqu'un a une explication?

    Citation Envoyé par Philippe JOCHMANS Voir le message
    Re

    As-tu remplacé ta msgbox par DoEvents ?

    Philippe
    Exact j'ai essayé mais ça ne fait rien le DoEvents.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Re

    Je pense avoir une explication, de mémoire il existe un objet Shape dans Excel, et donc il y doit y avoir confusion entre le shape de PPT et le shape d'Excel.

    Essayes en déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim sld As PowerPoint.Slide
     Dim shp As PowerPoint.Shape

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    Tout à fait raison
    Maintenant il me reste à trier les données présents dans le powerpoint et récupérer que celle qui m'intéresse... pas facile tout ça

    Comme j'ai pratiquement que des TextBox dans mon Powerpoint, il faudrait que j'arrive à différencier les titres du contenu que je souhaite récupérer.
    J'ai des formes de type msoAutoShape et msoTextBox. Ca ne m'aide pas trop !

    J'ai joint une copie d'écran du slide powerpoint que j'ai et j'ai encadré en rouge toutes les informations que je souhaite récupérer dans mon Excel.

    Est-ce possible de nommer les shapes de powerpoint pour les différencier? Si oui, comment?
    Images attachées Images attachées  

  17. #17
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par alex75 Voir le message

    Est-ce possible de nommer les shapes de powerpoint pour les différencier? Si oui, comment?
    Nous disposons également d'un forum PPT avec une FAQ tu peux y trouver : Comment renommer les objets d'un diaporama ?

    Philippe

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    Philippe tu assures, je vois presque la fin de mon programme ^
    J'utilise la fonction Split pour le titre, qui est toujours sur 2 lignes.
    Je voudrais mettre comme séparation le retour à la ligne.

    J'ai tenté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Split(shp.TextFrame.TextRange.Text, Chr(13))
    mais ça ne marche pas. Comment lui faire prendre en compte le retour chariot comme séparateur?

  19. #19
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par alex75
    J'utilise la fonction Split pour le titre, qui est toujours sur 2 lignes.
    Je voudrais mettre comme séparation le retour à la ligne.

    J'ai tenté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Split(shp.TextFrame.TextRange.Text, Chr(13))
    mais ça ne marche pas. Comment lui faire prendre en compte le retour chariot comme séparateur?
    Tu veux qu'il soit sur deux lignes ou est-il sur deux lignes dans PPT ?
    Si tu veux partager ton titre pour qu'il soit sur deux lignes (ce qui suppose qu'il ne l'est pas dans PPT) tu dois connaître le point d'insertion de vbcrlf ( Retour en début de ligne + saut de ligne - CariageReturn + LineFeed)
    En l'état, ton split donne un tableau des lignes séparées d'un retour chariot dans le shape.
    Si tu as deux lignes (un seul retour chariot) le premier indice est 0 et le second est 1
    Jète un oeil à split dans l'aide en ligne si je ne suis pas assez clair.
    De ton côté explique-nous tout

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 99
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Tu veux qu'il soit sur deux lignes ou est-il sur deux lignes dans PPT ?
    Si tu veux partager ton titre pour qu'il soit sur deux lignes (ce qui suppose qu'il ne l'est pas dans PPT) tu dois connaître le point d'insertion de vbcrlf ( Retour en début de ligne + saut de ligne - CariageReturn + LineFeed)
    En l'état, ton split donne un tableau des lignes séparées d'un retour chariot dans le shape.
    Si tu as deux lignes (un seul retour chariot) le premier indice est 0 et le second est 1
    Jète un oeil à split dans l'aide en ligne si je ne suis pas assez clair.
    De ton côté explique-nous tout

    Le texte récupéré à partir du PPT est bien dans une même textbox et sur 2 lignes.
    J'ai essayé vbcrlf mais ça n'a pas l'air de marcher

    Voilà le code que j'ai testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
               For Each shp In sld.Shapes
                    'If shp.Type <> msoPicture Then
     
                    Select Case shp.Name
                    Case "titre"
                        titre_pp = Split(shp.TextFrame.TextRange.Text, vbCrLf)
     
                        MsgBox titre_pp(0)
    Dans la MsgBox, j'ai le titre complet!!! au lieu d'avoir que la première ligne

    Citation Envoyé par Philippe JOCHMANS Voir le message
    Re



    Nous disposons également d'un forum PPT avec une FAQ tu peux y trouver : Comment renommer les objets d'un diaporama ?

    Philippe
    Philippe, le renommage des objets d'un diaporama passe forcément par du VBA ou est-il possible de le faire via l'interface powerpoint?
    Je te demande car par la même occasion je rédige un "howto" pour des non informaticiens.

Discussions similaires

  1. Créer fichier Excel à partir des données d'un autre
    Par Pimon07 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 02/03/2015, 17h43
  2. Réponses: 2
    Dernier message: 20/03/2014, 11h09
  3. [AC-2003] Exporter plusieurs fichiers excel à partir des données d'une requête
    Par Daphnoxbow dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/10/2009, 12h41
  4. Créer un fichier texte à partir de données Excel
    Par Olorin56 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/01/2008, 14h56
  5. Réponses: 1
    Dernier message: 27/01/2008, 07h23

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