Lien depuis cellule Excel

F60lebaladinverni Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   -  
m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai une présentation PowerPoint.
Est-ce que je peux écrire le nom du dossier dans la cellule A1 d'un fichier Excel et que ça se change automatiquement dans mon PowerPoint et que je puisse choisir la mise en forme dans le PPT ?

6 réponses

  1. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
     
    Bonjour,

    Peux-tu être plus clair ? Je n'ai pas compris ce que tu veux faire...

    m@rina
    0
    1. F60lebaladinverni
       
      Bonjour,

      J’écris « test » dans la cellule A1 d’un fichier Excel.
      J’ai un PPT avec une zone de texte.
      Est ce que la zone de texte peut prendre automatiquement la valeur de la cellule A1 (« test ») ?
      0
  2. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
     
    Bonjour,

    Sans macroter, il faut que tu copies ta cellule et tu la colles avec lien (onglet Accueil, bouton Coller => Collage spécial => Coller le lien). La mise à jour est automatique.

    Pour la mise en form;e, c'est limité avec PowerPoint... Tu pourras mettre un contour, avec la couleur et l'épaisseur de ton choix. Si ta cellule Excel n'a pas de fond de couleur, tu pourras en mettre un dans PowerPoint (Format de la forme). En revanche, tu ne pourras pas changer la police, mais tu pourras agrandir la forme, et la police s'agrandira également.

    Tes modifs de mise en forme resteront après mise à jour.

    m@rina
    0
    1. F60lebaladinverni Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   2
       
      Bonjour et merci pour ta réponse.

      Je connais déjà cette version mais comme tu dis, la mise en forme est limitée...
      voici en photo ce que ça fait : j'ai collé "avec lien" par dessus une zone de texte bleu.
      Je n'arrive pas à retirer le contour même si dans Excel, je mets "sans contour".

      Avez-vous une solution peut-être avec macro ? je connais un peu avec Excel et je pense que je saurai adapter :)
      Merci
      0
      1. F60lebaladinverni Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   2 > F60lebaladinverni Messages postés 125 Date d'inscription   Statut Membre Dernière intervention  
         
        Pour le VBA, j'ai trouvé ce code sur le web que j'ai mis dans la macro sur PPT
        Sub ModifierPresentationExistante()
        Dim PptApp As PowerPoint.Application
        Dim PptDoc As PowerPoint.Presentation
         
        Set PptApp = CreateObject("Powerpoint.Application")
        PptApp.Visible = True
        Set PptDoc = PptApp.Presentations.Open("C:\Users\flavien\Desktop\Restitution_type_v2.ppt")
         
        With PptDoc
            'insère le contenu de la cellule A1 dans la deuxième zone de texte,
            'du 3eme slide
            .Slides(1).Shapes(1).TextFrame.TextRange.Text = Range("A1")
        
         
            'sauvegarde la présentation
            .Save
        End With
         
        'ferme la présentation
        PptDoc.Close
        'ferme powerpoint
        PptApp.Quit
         
        End Sub


        J'ai par contre une erreur sur cette ligne :
        .Slides(1).Shapes(1).TextFrame.TextRange.Text = Range("A1")


        Après je trouve ça normal car il ne sait pas dans quel classeur Excel chercher l'information.
        0
  3. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
     
    Bonjour,

    Je ne pense pas que l'erreur se situe au niveau de Range.
    Vérifie dans ta présentation PPT ce qu'est Slides(1).Shapes(1)...
    Dans PowerPoint, tout est Shape. Si le Shapes(1) est une photo par exemple, ça va provoquer une erreur.

    Par ailleurs, si tu veux que la màj se fasse automatique dans ton PowerPoint dès que tu modifies la cellule, il faut faire une macro événementielle.

    Essaie de mettre ça dans la feuille en question et non pas dans un module. La macro se lancera automatiquement lorsque tu modfieras la valeur de la cellule A1.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim PptDoc As Object
    Dim texte As String
    Set PptDoc = GetObject("C:\xxxx\yyyy.pptx")
    texte = Range("A1")
    With PptDoc
    .Slides(1).Shapes(1).TextFrame.TextRange.Text = texte
    .Save
    End With
    End Sub


    Tu remarqueras que je n'utilise pas Open mais GetObject qui n'ouvre pas la présentation car a priori tu n'en n'as pas besoin car tu l'ouvres, et tu la fermes...
    Par ailleurs, avec Open, au cas où la présentation serait ouverte, ça posera problème car PowerPoint ouvrirait une deuxième fois la présentation qui serait alors en lecture seule.

    m@rina

    0
  4. F60lebaladinverni
     
    Merci m@rina pour ta réponse détaillée :)

    Alors par contre, je ne pourrai pas faire de test avant lundi car c’est sur mon ordinateur pro désolé... mais j’ai hâte d’essayer :)

    Effectivement je te rejoins avec Open à chaque fois ça ouvre en double et en lecture seule ce qui n’est pas terrible.

    D’autre part, comme savoir le numéro de ma zone de texte pour le « shapes(x) ? J’ai cherché un paramètre mais je n’ai pas trouvé.
    Ou est-ce que je vérifie ce qu’est Shapes(1) 2, 3 etc ... ?

    Je pense que tu m’as bien orienté :) hâte de faire le test lundi, je te tiendrai au courant.

    Bon week-end
    0
    1. F60lebaladinverni
       
      A oui, autre question qui me vient : quand c’est écrit dans le code « = Range(«A1») », a aucun moment on précise à quel classeur Excel ça fait référence ... comment le code vba le saurait ?
      Où il faut « lier » ce classeur Excel à la présentation power point au préalable ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
     
    Bonsoir,

    Alors pour Range("A1") : à partir du moment où tu mets le code dans la page du classeur, il n'y a pas de doute, car c'est une macro événementielle qui va se déclencher lorsque la cellule A1 de cette page de ce classeur sera modifiée. Tu peux faire clic droit sur l'onglet de la feuille => Visualiser le code et c'est à que tu mets ton code.

    Tu ne lies pas, puisque (je me répète) c'est juste une macro événementielle.

    m@rina
    0
  7. F60lebaladinverni Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   2
     
    Bonjour m@rina,

    J'ai fait le test et il est concluant !! :)
    Tant sur la macro événementielle que sur la Shapes. D'ailleurs à ce propos, je les ai renommé et mon rectangle bleu je l'ai appelé "titre" et et du coup dans ma macro j'ai ceci :
    titre = Range("A1")
    plan = Range("A2")
    With PptDoc
        .Slides(1).Shapes("titre").TextFrame.TextRange.Text = titre
        .Slides(1).Shapes("plan").TextFrame.TextRange.Text = plan
        .Save
    End With

    Merci beaucoup pour ton aide

    Dernière question avant de clore le sujet si c'est possible :
    Dans ma zone de texte je veux écrire :
    "NOM DU DOSSIER" (à la ligne)
    Compte rendu de notre audit" comme indiqué sur la photo
    Y a t il moyen de n'écrire que le nom du dossier dans la cellule A1 et que cela se concatène avec "compte rendu de notre audit" qui est déjà écrit dans le PPT ? Du coup j'ai essayé en écrivant ceci directement dans le code :
    With PptDoc
        .Slides(1).Shapes("titre").TextFrame.TextRange.Text = titre & "Compte rendu de notre audit"
        .Save
    End With

    ça fonctionne mais bon ...
    Je te remercie d'avance.

    0
    1. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
       
      Bonjour,

      Je ne comprends pas ton "mais bon..." :))
      Ton code est bon à partir du moment où le texte est toujours ce texte. Il faut juste ajouter un retour paragraphe après le nom du dossier :
      .Slides(1).Shapes("titre").TextFrame.TextRange.Text = titre & chr(13) & "Compte rendu de notre audit"


      Bien sûr tu pourrais récupérer dans la macro ce texte mais ce serait intéressant seulement si ce texte changeait. Auquel cas :

      With PptDoc.Slides(1).Shapes("titre").TextFrame.TextRange
      textppt = .Paragraphs(2) 'récup du 2e para
      .Text = titre & Chr(13) & textppt
      End With


      Mais, là, c'est moi qui dis "mais bon..." ! :)

      m@rina
      0