Copier-coller Excel vers Powerpoint (tableaux)

nat54

XLDnaute Barbatruc
Bonjour,

Voilà mon « problème ».
Un fichier Excel avec environ 30 onglets formatés de façon identique
Je dois copier-coller les cellules de B2 à I37 de chaque onglet
Le but : un slide powerpoint par onglet excel

J’ai vu sur le site pour copier-coller des graphes mais pas de simples tableaux …

Merci de m’aider à automatiser cela en VBA, je gagnerais un temps fou

Dans ma besace excel j’avais cela au ca où ca vous aide…

Code:
[/SIZE][/FONT]
[FONT=Arial][I][SIZE=3]ort_Ppt()[/SIZE][/I][/FONT]
[COLOR=teal][FONT=Arial][I][SIZE=3]    'necessite d'activer la reference Microsoft Powerpoint Object Library[/SIZE][/I][/FONT][/COLOR]
[FONT=Arial][I][SIZE=3]    Dim PPT As PowerPoint.Application[/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    Dim PptDoc As PowerPoint.Presentation[/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    Dim NbShpe As Byte[/SIZE][/I][/FONT]
[SIZE=3][FONT=Arial][I]    [/I][/FONT][FONT=Arial][I]Dim NumMois As String[/I][/FONT][/SIZE]
[FONT=Arial][I][SIZE=3]    Dim Rep As String[/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]        [/SIZE][/I][/FONT]
[SIZE=3][FONT=Arial][I]    [/I][/FONT][FONT=Arial][I]Sheets("Page de Garde").Select[/I][/FONT][/SIZE]
[FONT=Arial][I][SIZE=3]    NumMois = Range("D14")[/SIZE][/I][/FONT]
[SIZE=3][FONT=Arial][I]    [/I][/FONT][FONT=Arial][I]Rep = Range("D16")[/I][/FONT][/SIZE]
[FONT=Arial][I][SIZE=3]    [/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    Set PPT = CreateObject("Powerpoint.Application") 'creation session PowerPoint[/SIZE][/I][/FONT]
[SIZE=3][FONT=Arial][I]    [/I][/FONT][FONT=Arial][I]PPT.Visible = True [/I][/FONT][COLOR=teal][FONT=Arial][I]'l'application sera visible[/I][/FONT][/COLOR][FONT=Arial][I][/I][/FONT][/SIZE]
[SIZE=3][FONT=Arial][I]    [/I][/FONT][FONT=Arial][I]Set PptDoc = PPT.Presentations.Open("J:\Services\Finance Division CCF\Reporting-SIDEL\2006\" & Rep & "\Sales report\CCF Division turnover " & NumMois & "-06 Sales Report.ppt") [/I][/FONT][COLOR=teal][FONT=Arial][I]'ouverture fichier ppt[/I][/FONT][/COLOR][FONT=Arial][I][/I][/FONT][/SIZE]
[FONT=Arial][I][SIZE=3]    [/SIZE][/I][/FONT]
[COLOR=teal][FONT=Arial][I][SIZE=3]    ''''''' GRAPHIQUE 30[/SIZE][/I][/FONT][/COLOR]
[FONT=Arial][I][SIZE=3]    Sheets("Division Global Sales").Select[/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    ActiveSheet.Shapes("Group 30").Copy[/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    [/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    PptDoc.Slides(2).Shapes.PasteSpecial ppPasteEnhancedMetafile [/SIZE][/I][/FONT]
[SIZE=3][COLOR=teal][FONT=Arial][I] [/I][/FONT][/COLOR][COLOR=teal][FONT=Arial][I]'collage image metafichier windows dans le Slide3 du document Power Point[/I][/FONT][/COLOR][/SIZE]
[FONT=Arial][I][SIZE=3]    [/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3] [/SIZE][/I][/FONT]
[SIZE=3][FONT=Arial][I]    [/I][/FONT][COLOR=teal][FONT=Arial][I]    'compte le nombre de shapes dans le 3eme slide ; le dernier objet inséré correspond à l'index le plus élevé[/I][/FONT][/COLOR][/SIZE]
[SIZE=3][FONT=Arial][I]    [/I][/FONT][FONT=Arial][I]NbShpe = PptDoc.Slides(2).Shapes.Count[/I][/FONT][/SIZE]
[FONT=Arial][I][SIZE=3]    [/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    With PptDoc.Slides(2).Shapes(NbShpe)[/SIZE][/I][/FONT]
[SIZE=3][FONT=Arial][I]        [/I][/FONT][FONT=Arial][I]'.Name = "monGraph[/I][/FONT][FONT=Arial][I]"                [COLOR=teal]'personnaliser le nom de l'image insérée[/COLOR][/I][/FONT][FONT=Arial][I][/I][/FONT][/SIZE]
[SIZE=3][FONT=Arial][I]        .Left = 100                                  [/I][/FONT][COLOR=teal][FONT=Arial][I]'position horizontale dans le slide[/I][/FONT][/COLOR][FONT=Arial][I][/I][/FONT][/SIZE]
[SIZE=3][FONT=Arial][I]        .Top = 50                               [/I][/FONT][FONT=Arial][I]'[COLOR=teal]position verticale dans le slide[/COLOR][/I][/FONT][FONT=Arial][I][/I][/FONT][/SIZE]
[SIZE=3][FONT=Arial][I]        [/I][/FONT][FONT=Arial][I].Height = 400                             [/I][/FONT][COLOR=teal][FONT=Arial][I]'hauteur image[/I][/FONT][/COLOR][FONT=Arial][I][/I][/FONT][/SIZE]
[SIZE=3][FONT=Arial][I]        .Width = 600                             [/I][/FONT][COLOR=teal][FONT=Arial][I]'largeur image[/I][/FONT][/COLOR][FONT=Arial][I][/I][/FONT][/SIZE]
[FONT=Arial][I][SIZE=3]    End With[/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    [/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]    [/SIZE][/I][/FONT]
[SIZE=3][FONT=Arial][I]    [/I][/FONT][FONT=Arial][I]PptDoc.Save         [/I][/FONT][COLOR=teal][FONT=Arial][I]'sauvegarder les modifications[/I][/FONT][/COLOR][FONT=Arial][I][/I][/FONT][/SIZE]
[SIZE=3][FONT=Arial][I]    'PptDoc.Close          [/I][/FONT][COLOR=teal][FONT=Arial][I]'fermer le document ppt[/I][/FONT][/COLOR][FONT=Arial][I][/I][/FONT][/SIZE]
[SIZE=3][FONT=Arial][I]    'PPT.Quit '              [/I][/FONT][COLOR=teal][FONT=Arial][I]fermer l'application powerPoint[/I][/FONT][/COLOR][FONT=Arial][I][/I][/FONT][/SIZE]
[FONT=Arial][I][SIZE=3] [/SIZE][/I][/FONT]
[FONT=Arial][I][SIZE=3]End Sub
[/I]
 

nat54

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Bonjour

J'ai lancé le code suiant

Code:
Sub Test_WS()
   'nécessite d'activer la référence Microsoft Powerpoint Object Library
    Dim PPT As PowerPoint.Application
    Dim PptDoc As PowerPoint.Presentation
    Dim NbShpe As Byte
    Dim i As Integer
    Dim WS As Worksheet
 
    
 
    Set PPT = CreateObject("Powerpoint.Application")
    PPT.Visible = True 'l'application sera visible
    Set PptDoc = PPT.Presentations.Open("I:\DRH\EFFECTIF\Pôles-DRH\Test.ppt")
 
    'Les plages de cellules des 3 premières feuilles
     
     For Each WS In ThisWorkbook.Worksheets
        If WS.Name <> "Absenteisme-LD-LM" And WS.Name <> "Compteurs-82-83" And WS.Name <> "Mensus-2007-2008" And WS.Name <> "Type_poles" And WS.Name <> "MENU" Then
        i = VS.CodeName
        ThisWorkbook.Worksheets(i).Range("B2:I37").Copy
        PptDoc.Slides(i).Shapes.Paste ppPasteEnhancedMetafile
        NbShpe = PptDoc.Slides(i).Shapes.Count
        With PptDoc.Slides(i).Shapes(NbShpe)
            '.Name = "NomForme"
            .Left = 100
            .Top = 50
            .Height = 200
            .Width = 350
        End With
    Next
    
 
    'PptDoc.Save 'sauvegarder les modifications
    'PptDoc.Close 'fermer le document ppt
    'PPT.Quit 'fermer l'application powerPoint
 
End Sub

Toujours l'erreur "next sans for".....
 

Pierrot93

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Bonjour Nat

pas suivi tout le fil, mais modifies peut être comme suit :

Code:
     For Each WS In ThisWorkbook.Worksheets
        If WS.Name <> "Absenteisme-LD-LM" And WS.Name <> "Compteurs-82-83" And WS.Name <> "Mensus-2007-2008" And _
                WS.Name <> "Type_poles" And WS.Name <> "MENU" Then
            i = VS.CodeName
            ThisWorkbook.Worksheets(i).Range("B2:I37").Copy
            PptDoc.Slides(i).Shapes.Paste ppPasteEnhancedMetafile
            NbShpe = PptDoc.Slides(i).Shapes.Count
            With PptDoc.Slides(i).Shapes(NbShpe)
                '.Name = "NomForme"
                .Left = 100
                .Top = 50
                .Height = 200
                .Width = 350
            End With
        [COLOR="Red"][B]End If[/B][/COLOR]
    Next

bonne soirée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Bonjour Nat

remplace peut être
Code:
i = VS.CodeName

par :
Code:
i = [COLOR="Red"][B]W[/B][/COLOR]S.CodeName

mais cela risque de bogguer encore, i est déclaré en "integer" et la propriété "codename" renverra du texte ("string"), enfin me semble t il...

bonne journée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Re

à la re-lecture, tu peux sans doute remplacer :

Code:
If WS.Name <> "Absenteisme-LD-LM" And WS.Name <> "Compteurs-82-83" And WS.Name <> "Mensus-2007-2008" And WS.Name <> "Type_poles" And WS.Name <> "MENU" Then
        i = VS.CodeName
        ThisWorkbook.Worksheets(i).Range("B2:I37").Copy

par :

Code:
If WS.Name <> "Absenteisme-LD-LM" And WS.Name <> "Compteurs-82-83" And WS.Name <> "Mensus-2007-2008" And WS.Name <> "Type_poles" And WS.Name <> "MENU" Then
        WS.Range("B2:I37").Copy

@+
 

nat54

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Code:
Sub Test_WS()
   'nécessite d'activer la référence Microsoft Powerpoint Object Library
    Dim PPT As PowerPoint.Application
    Dim PptDoc As PowerPoint.Presentation
    Dim NbShpe As Byte
    Dim i As Integer
    Dim WS As Worksheet
 
    
 
    Set PPT = CreateObject("Powerpoint.Application")
    PPT.Visible = True 'l'application sera visible
    Set PptDoc = PPT.Presentations.Open("I:\DRH\EFFECTIF\Pôles-DRH\Test.ppt")
 
    'Les plages de cellules des 3 premières feuilles
     
     For Each WS In ThisWorkbook.Worksheets
                If WS.Name <> "Absenteisme-LD-LM" And WS.Name <> "Compteurs-82-83" And WS.Name <> "Mensus-2007-2008" And WS.Name <> "Type_poles" And WS.Name <> "MENU" Then
        WS.Range("B2:I37").Copy
        PptDoc.Slides(i).Shapes.Paste ppPasteEnhancedMetafile
        NbShpe = PptDoc.Slides(i).Shapes.Count
        With PptDoc.Slides(i).Shapes(NbShpe)
            '.Name = "NomForme"
            .Left = 100
            .Top = 50
            .Height = 200
            .Width = 350
        End With
        End If
    Next
    
 
    'PptDoc.Save 'sauvegarder les modifications
    'PptDoc.Close 'fermer le document ppt
    'PPT.Quit 'fermer l'application powerPoint
 
End Sub

Pierrot,

Là le code ne fait plus rien mais c'est normal car plus de i dans la boucle..
 

Pierrot93

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Re

remplaces :

Code:
PptDoc.Slides(i).Shapes.Paste ppPasteEnhancedMetafile
        NbShpe = PptDoc.Slides(i).Shapes.Count
        With PptDoc.Slides(i).Shapes(NbShpe)

par :

Code:
PptDoc.Slides(WS.CodeName).Shapes.Paste ppPasteEnhancedMetafile
        NbShpe = PptDoc.Slides(WS.CodeName).Shapes.Count
        With PptDoc.Slides(WS.CodeName).Shapes(NbShpe)

@+
 

nat54

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

J'ai bien du mal ...

Erreur d'exécution 13
Incompatibilité de type
sur la ligne i = WS.CodeName


j'ai fait F8 pour un pas à pas
les if marchent mais dès qu'il arrive sur un "bon" onglet ca me met cette erreur
 

Pierrot93

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Re,

oui, normal, reprends mon post de 8h15... En principe avec les dernières modifs tu ne devrais plus avoir besoin de cette variable. Supprimes cette ligne, cela devrait fonctionner puisque j'avais remplacé les "i" par "WS.CodeName".

bon après midi
@+
 

nat54

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Merci de ton aide, je suis complètement perdue..
Le code actuel

Code:
Sub Test_WS()
   'nécessite d'activer la référence Microsoft Powerpoint Object Library
    Dim PPT As PowerPoint.Application
    Dim PptDoc As PowerPoint.Presentation
    Dim NbShpe As Byte
    Dim i As Integer
    Dim WS As Worksheet
 
    
 
    Set PPT = CreateObject("Powerpoint.Application")
    PPT.Visible = True 'l'application sera visible
    Set PptDoc = PPT.Presentations.Open("I:\DRH\EFFECTIF\Pôles-DRH\Test.ppt")
 
    'Les plages de cellules des 3 premières feuilles
     
     For Each WS In ThisWorkbook.Worksheets
               If WS.Name <> "Absenteisme-LD-LM" And WS.Name <> "Compteurs-82-83" And WS.Name <> "Mensus-2007-2008" And WS.Name <> "Type_poles" And WS.Name <> "MENU" Then
        WS.Range("B2:I37").Copy
        PptDoc.Slides(WS.CodeName).Shapes.Paste ppPasteEnhancedMetafile
        NbShpe = PptDoc.Slides(WS.CodeName).Shapes.Count
        With PptDoc.Slides(WS.CodeName).Shapes(NbShpe)
            '.Name = "NomForme"
            .Left = 100
            .Top = 50
            .Height = 200
            .Width = 350
        End With
        End If
    Next
    
 
    'PptDoc.Save 'sauvegarder les modifications
    'PptDoc.Close 'fermer le document ppt
    'PPT.Quit 'fermer l'application powerPoint
 
End Sub

Au lancement, il s'arrête sur
PptDoc.Slides(WS.CodeName).Shapes.Paste ppPasteEnhancedMetafile
Item feuil39 not found in the slide collection
 

Pierrot93

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Re

comprenais pas trop le "i = ws.codename", le nom de tes slides dans powerpoint est identique au codename de tes feuilles excel ??? Et comment faire le parallèle de tes feuilles et de tes slides ? si c'est le numéro d'index l'utilisation de la variable "i" devrait suffire... Sinon mets 2 fichiers un ppt et un xls en pièce jointe, avec 2 feuilles excel et 2 slides ainsi que le code et le résultat attendu, car là en l'état ne sait quoi te dire...
 

nat54

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Justement je ne sais pas trop comment exprimer ce lien

On peut donner une table de correspondance ?
Feuil_x = slide 3.. ou pas ?
Ca me faciliterait grandement, peu importe s'il n'y a plus de boucle...


Ci-joint 2 fichiers "bidons" : l'excel, le ppt de destination

MERCI !!
 

Pièces jointes

  • TdB_1.zip
    24.9 KB · Affichages: 64
  • TdB_2.zip
    3.4 KB · Affichages: 59

Pierrot93

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Re,

regarde le code ci dessous, à fonctionné chez moi, à noter que la présentation ppt était ouverte, le premier collage s'effectue sur le slide 2 :

Code:
Sub Test_WS()
   'nécessite d'activer la référence Microsoft Powerpoint Object Library
    Dim PPT As PowerPoint.Application, PptDoc As PowerPoint.Presentation
    Dim NbShpe As Byte, i As Integer, WS As Worksheet
    
    Set PPT = CreateObject("Powerpoint.Application")
    PPT.Visible = True 'l'application sera visible
    Set PptDoc = PPT.ActivePresentation ' PPT.Presentations.Open("I:\DRH\EFFECTIF\Pôles-DRH\Test.ppt")
 
    'Les plages de cellules des 3 premières feuilles
     i = 1
     For Each WS In ThisWorkbook.Worksheets
     If WS.Name <> "Absenteisme-LD-LM" And WS.Name <> "Compteurs-82-83" And WS.Name <> "Mensus-2007-2008" And WS.Name <> "Type_poles" And WS.Name <> "MENU" Then
        WS.Range("B2:I37").Copy
        PptDoc.Slides(i + 1).Shapes.Paste ppPasteEnhancedMetafile
        NbShpe = PptDoc.Slides(i + 1).Shapes.Count
        With PptDoc.Slides(i + 1).Shapes(NbShpe)
            '.Name = "NomForme"
            .Left = 100
            .Top = 50
            .Height = 200
            .Width = 350
        End With
        i = i + 1
        End If
    Next WS
    'PptDoc.Save 'sauvegarder les modifications
    'PptDoc.Close 'fermer le document ppt
    'PPT.Quit 'fermer l'application powerPoint
 End Sub

@+
 

nat54

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Bonjour

Désolée, toujours pas ..

J'ouvre mon excel, mon ppt, le lance
Il mouline, me colle en slide 2 le menu alors que c'est une des feuilles que je ne veux pas puis bug sur

PptDoc.Slides(i + 1).Shapes.Paste ppPasteEnhancedMetafile
(je regarde et le i est toujours à 1)

Shape range
bad argument type
Expected collection index (string or integer)
 

Pierrot93

XLDnaute Barbatruc
Re : Copier-coller Excel vers Powerpoint (tableaux)

Bonjour Nat

comprends plus, chez moi le code donné hier soir fonctionnait (Excel et power2003). La feuille Excel "MENU" n'était pas traité et la variable "i" était initialisée normalement.... Peut être problème de version, pas d'autre solution...

bonne journée
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 430
Membres
103 207
dernier inscrit
Michel67