Bonjour à tous,

Petit nouveau que je suis...je suis en train de faire mes premiers pas dans le language VBA, et je vous avoue je me m'amuse bien ! Je rencontre néammoins un problème dû à mon manque de connaissance. C'est donc aprés avoir chercher sans trouver de réponse que je me retourne vers vous amis du Forum

Explication Macro : Je viens d'arranger cette macro (voir ci-dessous). Elle consiste a copier-coller des graphiques depuis un tableau pivot dans excel vers un powerpoint, pour faire des présentations minutes. J'ai une variable qui change pour chaque graphique "NOM ENTREPRISE" et qui me permet de changer le filtre pour copier-coller plusieurs différents graphiques dans mon power point.

Où j'ai besoin d'aide : Ayant possiblement 50 graphiques à copier-coller je voudrais faire une boucle, qui me changerais cette variable selon une colonne où je rentrerais ma liste d'entreprises dont je veux copier-coller les graphiques. Et même encore mieux, avoir une fenêtre de dialogue qui s'ouvre au début de ma macro et où je peux choisir dans la liste du filtre les entreprises dont je veux les graphiques.

Ce à quoi j'ai pensé : Pour l'instant la meilleure option que j#ai trouvé serais de faire une boucle "Do Loop" sur la liste de nom, comme expliquer dans ce Tuto : http://silkyroad.developpez.com/vba/boucles/#LIV , mais je n'arrive pas appliquer à ma macro...

Je ne m'attend pas (et je ne veux pas vraiment) avoir une réponse toute faite, mais plutôt des directions à prendre pour arriver à mon but car je souhaite apprendre avant tout.

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Sub NouvellePresentation()
Dim PptApp As PowerPoint.Application
Dim PptDoc As PowerPoint.Presentation
Dim Diapo As PowerPoint.Slide
Dim Sh As PowerPoint.Shape
Dim Cs1 As ColorScheme
Dim NbShpe As Integer
 
Set PptApp = CreateObject("Powerpoint.Application")
Set PptDoc = PptApp.Presentations.Add
 
With PptDoc
 
    '--- Ajoute un Slide
    .Slides.Add Index:=1, Layout:=ppLayoutBlank
    
    '--- Ajoute un nouveau slide et le positionner en 2eme position
    Set Diapo = .Slides.Add(Index:=2, Layout:=ppLayoutBlank)
    
    '--- Premier changement
    ActiveSheet.PivotTables("PivotTable1").PivotFields("retailer_name").ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("retailer_name").CurrentPage = "NOM ENTREPRISE"

 
    'copie le 1er graphique contenu dans la feuille Excel active
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
    'collage dans la 2eme diapositive
    PptDoc.Slides(2).Shapes.Paste
    
 
    'Compte le nombre de shapes dans la diapositive:
    'le dernier objet inséré correspond à l'index le plus élevé
    NbShpe = Diapo.Shapes.Count
 
    'Renomme et met en forme l'objet collé
    With Diapo.Shapes(NbShpe)
        .Name = "monGraph" 'personnalise le nom
        .Left = 150 'définit la position horizontale dans le slide
        .Top = 100 'définit la position verticale dans le slide
        .Height = 300 'hauteur
        .Width = 400 'largeur
    End With


    
    '--- Ajoute un nouveau slide et le positionner en 2eme position
    Set Diapo = .Slides.Add(Index:=2, Layout:=ppLayoutBlank)
    
    '--- Premier changement
    ActiveSheet.PivotTables("PivotTable1").PivotFields("retailer_name").ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("retailer_name").CurrentPage = "NOM ENTREPRISE"

 
    'copie le 1er graphique contenu dans la feuille Excel active
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
    'collage dans la 2eme diapositive
    PptDoc.Slides(2).Shapes.Paste

 
    'Compte le nombre de shapes dans la diapositive:
    'le dernier objet inséré correspond à l'index le plus élevé
    NbShpe = Diapo.Shapes.Count
 
    'Renomme et met en forme l'objet collé
    With Diapo.Shapes(NbShpe)
        .Name = "monGraph" 'personnalise le nom
        .Left = 150 'définit la position horizontale dans le slide
        .Top = 100 'définit la position verticale dans le slide
        .Height = 300 'hauteur
        .Width = 400 'largeur
    End With
 
 
    
End With
 
 
'Sauvegarde la présentation
'dans le meme répertoire que le classeur excel contenant la macro.
PptDoc.SaveAs Filename:=ThisWorkbook.Path & "\" & "NouvellePresentation.ppt"
'ferme la presentation
PptDoc.Close
'ferme powerpoint
PptApp.Quit
 
MsgBox "Opération terminée."
End Sub