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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    Invité
    Invité(e)
    Par défaut
    Bonjour

    En théorie, le RGB te renvoie une donnée de type Long.

    Essayes ce code de la FAQ Access pour trouver le RGB : Comment retrouver les composantes rouge, verte, bleue d'un code couleur de type Long ?

    Philippe

  8. #8
    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
    Merci Philippe, je n'en attendais pas moins de toi
    Donc, traduit en bon français pour que n'importe qui puisse le comprendre et l'appliquer sans trop de difficultés :
    La fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function testcouleur(couleur As Long) As String
    Dim Rouge, vert, bleu
     
        red = &HFF& And couleur
        green = (&HFF00& And couleur) \ 256
        blue = (&HFF0000 And couleur) \ 65536
        testcouleur = "Rouge" & vbTab & "vert" & vbTab & "bleu" & vbCr & red & " " & vbTab & green & " " & vbTab & blue
     
    End Function
    L'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim Truc As Shape
        For Each Truc In ActiveWindow.Selection.SlideRange.Shapes
            Truc.Select
            MsgBox testcouleur(ActiveWindow.Selection.ShapeRange.Fill.ForeColor.RGB)
        Next
    End Sub
    alex, tu devrais pouvoir te débrouiller avec ça

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour tous,
    A quoi correspond la valeur obtenue (10027008 dans mon test)
    Est-ce un produit ? Comment peut-on le décortiquer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        'Ré initialiser la valeur en décimale
         TaCouleur = Rouge + (Vert * 256) + (Bleu * 65536)
        MsgBox "La couleur   " & TaCouleur & Chr(13) _
        & "ou en Hex :  &h" & Hex(TaCouleur), , "Retrouver couleur"
    A+

  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
    Merci l'homme des bois mais je pense que le code que j'ai mis montre que j'avais compris...
    Mais c'est effectivement mieux en le disant pour comprendre le code

  11. #11
    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
    Je suis tout à fait d'accord avec ce que vous avez dit.
    Toutefois, je pense qu'il faudrait utiliser le RGB tel que renvoyé sans le transformer... enfin s'il est possible de faire une telle comparaison.

    Par exemple, si je souhaite savoir si le fond de la shape est noire, je souhaiterais pouvoir faire cette comparaison :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ma_shape.Fill.ForeColor.RGB = RGB(0, 0, 0) Then
    Toutefois, quand la shape est noire:
    * ma_shape.Fill.ForeColor.RGB renvoie le fameux long 16777215
    * et RGB(0, 0, 0) renvoie 0

    Donc forcément le test ne marche jamais... peut être une conversion à faire?

    Edit... je me suis gourré dans mon test
    je testais le noir au lieu de tester le blanc!
    brefça marche parfaitement en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ma_shape.Fill.ForeColor.RGB = RGB(0, 0, 0) Then

  12. #12
    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
    Chez moi, pour le noir j'ai bien un triple zéro (0, 0, 0)
    Teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Dim Truc As Shape
        For Each Truc In ActiveWindow.Selection.SlideRange.Shapes
            Truc.Select
            ActiveWindow.Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
            MsgBox testcouleur(ActiveWindow.Selection.ShapeRange.Fill.ForeColor.RGB)
        Next
    End Sub
    Pour l'exploitation j'ai une idée. Je reviens

  13. #13
    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
    Ca marche nickel

    Qu'entends tu "pour l'exploitation"?

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, 16h43
  2. Réponses: 2
    Dernier message: 20/03/2014, 10h09
  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, 11h41
  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, 13h56
  5. Réponses: 1
    Dernier message: 27/01/2008, 06h23

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