Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 09h07   #1
Invité de passage
 
Inscription : juin 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 48
Points : 4
Points : 4
Par défaut copier un graphique vers le bas

Bonjour,

J'ai un tableau excel avec des chiffre mois par mois par client et je souhaite transformer ces chiffre sous forme de graphique. J'y arrive mais ce que je veux faire c'est de copier ce graphique pour toute les lignes. Et bien sur quand je copie mon graphique de ligne en ligne il garde comme donnée celle de la première ligne.

Je joint le tableau avec le 1er graphique.

Merci
Fichiers attachés
Type de fichier : xls EXEMPLE.xls (44,5 Ko, 3 affichages)
fabien114 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 13h13   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Essaie :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub test()
    Application.ScreenUpdating = False
    With ActiveSheet
        Set Modele = ActiveSheet.Shapes(1)
        ctr = 0
        Do While [J2].Offset(ctr + 1, -1) <> ""
            Modele.Copy
            .Paste
            Set s = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
            ctr = ctr + 1
            s.Top = [J2].Offset(ctr).Top
            s.Left = [J2].Offset(ctr).Left
            With .ChartObjects(.ChartObjects.Count).Chart.SeriesCollection(1)
                .Formula = Application.Substitute(.Formula, "$2", "$" & (ctr + 2))
                .Name = Application.Substitute(.Name, "$2", "$" & (ctr + 2))
            End With
        Loop
    End With
    Application.ScreenUpdating = True
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 13h58   #3
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Les graphiques sont créés pour chaque ligne et non copiés (je les ai paramétrés par rapport à ton graphique exemple, qu'il faut d'ailleurs supprimer avant de tester mon code, ce qui peut être fait sur une copie du classeur). Il te faut adapter à tes besoins :
Code :
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
 
Sub Graphique()
 
    Dim Graph As Shape
    Dim Fe As Worksheet
    Dim S As Shape
    Dim DerL As Long
    Dim I As Long
 
    Set Fe = ActiveSheet
 
    'supprime les graphs existants (à voir si nécessaire ?)
    For Each S In Fe.Shapes
 
        If InStr(S.Name, "Graph") <> 0 Then
 
            S.Delete
 
        End If
 
    Next S
 
    'recherche la dernière ligne
    With Fe
 
        DerL = .Cells(.Rows.Count, 1).End(xlUp).Row
 
    End With
 
    'largeur de la colonne J à 68
    Fe.Columns("J").ColumnWidth = 68
 
    For I = 2 To DerL
 
        'hauteur des différentes lignes à 92
        Fe.Rows(I).RowHeight = 92
 
        'permet d'acceder à Excel durant la création
        'des graphiques
        DoEvents
 
        'ajoute le graphique en cours
        Set Graph = Fe.Shapes.AddChart
 
        'paramètre le graphique
        With Graph.Chart
 
            .SetSourceData Fe.Range("A" & I & ":I" & I)
            .ChartType = xlLineMarkers
            .Legend.Delete
            .ApplyDataLabels
 
        End With
 
        'renomme le graphique au nom du client (en colonne I) préfixé de "Graph_"
        Fe.Shapes(Graph.Name).Name = "Graph_" & Range("I" & I)
 
        'dimensionne et positionne le graphique dans les cellules de la colonne J
        With Fe.Shapes("Graph_" & Range("I" & I))
 
            .Width = Fe.Range("J" & I).Width
            .Height = Fe.Range("J" & I).Height
            .Top = Fe.Range("J" & I).Top
            .Left = Fe.Range("J" & I).Left
 
        End With
 
    Next I
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 11h12   #4
Invité de passage
 
Inscription : juin 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 48
Points : 4
Points : 4
Merci beaucoup pour vos 2 réponses. Les 2 fonctionnent très bien .

L'avantage de celle de Daniel, c'est qu'il copie le modèle de graphique éxistant, donc je récupère toute la mise en forme (taille police, pas de titre, etc).

L'avantage de celle de Theze, est que les graphique remplissent parfaitement les cellules de la colonne J est que je peux modifier dans le code la largeur et hauteur.

Bref, un grand merci à vous deux pour vos réponses. Cela m'aide grandement.
fabien114 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h04.


 
 
 
 
Partenaires

Hébergement Web