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 23/01/2012, 09h14   #1
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Par défaut En-tête et Pied de page

Bonjour à tous,

Suite à ce tutoriel j'ai réalisé des en-têtes et pied de pages :

http://fring.developpez.com/vba/excel/entetepiedpage/

Je voudrais des précisions pour améliorer mon code :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
 'En tête et pied de page des feuilles
    For x = 1 To Sheets.Count
        With Sheets(x).PageSetup
            .CenterHeader = "&B&14&""Arial""" & E & Chr(10) & "&12&B&A"    'nom échantillon, nom de la feuille en arial gras 12
            .RightHeader = "&8&""Arial""" & "Masse pastille = " & M & " mg (m&YThéo.&Y=20mg)" & Chr(10) & "PAF échantillon = " & P & " %" & Chr(10) & "Surface pastille = " & S & " mm&X2&X (S&YThéo.&Y=201mm&X2&X)"
            If Com <> "" Then                 'Si pas de commentaire alors pied de page vide
                .LeftFooter = "&10&B&""Arial""" & "Commentaire :&B " & Com
            Else
                .LeftFooter = ""
            End If
        End With
    Next x
Est il possible d'attribuer de la couleur à une partie seulement de l'en tête ?

Pour insérer une image (dont le chemin peut bouger) Comment faire ? (est-il possible de lier directement l'image au classeur excel, si oui comment ?

Merci de votre aide.
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 10h18   #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,

L'enregistreur de de macros donne :

Code :
.LeftHeader = "test &KFFFF00testjaune"
Le premier "test" étant en noir et le second en jaune, "&KFFFF00"correspond à la couleur. Je n'ai pas réussi à faire un lien entre le code couleur et les codes couleur "normaux". Aussi, fais comme moi et sers-toi de l'enregistreur de macros pour récupérer ce code.
__________________
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 23/01/2012, 16h58   #3
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Bonjour merci pour l'aide, je tiens au courant si ça fonctionne.

En attendant voici ce que j'ai pu trouver sur le net par rapport aux codes couleurs :

http://fr.wikipedia.org/wiki/Aide:Couleurs

Encore merci.

sinon des idées pour intégrer l'image au classeur Excel ?

Bon ça semble ne pas fonctionner sous excel 2003. Sous 2007 ou 2010 il est possible que ça fonctionne.
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 20h06   #4
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
Juste, ça ne paraît pas possible avec XL2003.
__________________
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 23/01/2012, 20h44   #5
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 598
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 598
Points : 902
Points : 902
Bonjour

La couleur en en-tête et pied n'est (enfin !) apparu qu'avec 2007...

Concernant l'image je n'ai pas compris la question : qu'entends-tu par "lier directement l'image au classeur excel"
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 21h06   #6
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Merci pour l'info de la couleur.

En fait je souhaiterais insérer le logo de mon entreprise dans l'en-tête à droite. J'ai lu le tuto de Fring : http://fring.developpez.com/vba/excel/entetepiedpage/

qui propose d'insérer une telle image à condition que l'image soit placée à un endroit défini dont on connait le chemin :

Code :
1
2
3
4
5
6
7
8
9
10
11
Sub insertionImage_EntetePage()
 
With ActiveSheet.PageSetup.LeftHeaderPicture
    .Filename = "C:\Documents and Settings\Moi\Dossier\Temp\Image.jpg"
    .Height = 40 '<-- redéfinit la largeur de l'image
    .Width = 80 '<-- redéfinit la hauteur de l'image
End With
 
ActiveSheet.PageSetup.LeftHeader = "&G" '<-- ajout du code &G
 
End Sub
Cependant ma macro doit être installée sur plusieurs postes informatique qui n'ont pas forcément le logo de l'entreprise stockée selon le même chemin (soit pas du tout l'image du logo).

C'est pourquoi je souhaiterais insérer l'image de manière "définitive" un peu comme dans un document word où lorsque l'on colle l'image, elle est accessible même si initialement cette image n'était pas sur le poste informatique.

J'espère avoir été un peu plus clair.

En tout cas merci à tous pour votre aide.
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 21h50   #7
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 598
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 598
Points : 902
Points : 902
Bonjour

A priori non.

Que fait ta macro ?

Une piste :

Il y a moyen de créer un onglet vierge (masqué) dans le classeur avec le bon en-tête (dont l'image déjà insérée) et de le dupliquer par macro pour les nouveaux onglets.

Cela peut se faire de manière relativement transparente si tu captes l'événement d'insertion d'onglet (Workbook_NewSheet)...
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 07h25   #8
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Bonjour,

Citation:
Que fait ta macro ?
Ma macro a pour but le traitement automatisé de données de spectroscopie Infrarouge. Pour ce faire elle réalise plusieurs traitements :

-Importation des données brutes au format DPT =>puis sauvegarde des fichiers au format txt et csv
-Soustraction d'une colonne sur une autre =>puis sauvegarde des fichiers au format txt et csv
-Soustraction d'une ligne à toutes les autres=>puis sauvegarde des fichiers au format txt et csv
-Dérivée première=>puis sauvegarde des fichiers au format txt et csv
-Dérivée seconde=>puis sauvegarde des fichiers au format txt et csv
-Diverses correction par facteurs multiplications=>puis sauvegarde des fichiers au format txt et csv

Et là actuellement je suis en train de réaliser des macros pour insérer des graphes. (si nécessaire je peux fournir le code)

Citation:
Il y a moyen de créer un onglet vierge (masqué) dans le classeur avec le bon en-tête (dont l'image déjà insérée) et de le dupliquer par macro pour les nouveaux onglets.
Ceci me conviendrait parfaitement.

Citation:
Cela peut se faire de manière relativement transparente si tu captes l'événement d'insertion d'onglet (Workbook_NewSheet)...
En revanche je ne maîtrise pas du tout ce que tu indiques (Insertion d'onglet (Workbook_NewSheet) d'autant plus que moi ce serai pour des graphiques (logo en haut à droite des graphiques).

Si tu pouvais me donner un exemple afin de m'expliquer comment réaliser ceci, celà serait parfait !
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 13h36   #9
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 598
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 598
Points : 902
Points : 902
Bonjour

Si les graphs sont sur des onglets graphiques c'est difficilement jouable.

Sinon sur un onglet standard il suffit que tu aies dans le classeur (celui de la macro par exemple) un onglet correctement formaté et, dans ta macro, tu le dupliques à chaque fois que tu dois l'utiliser pour y insérer des données ou un graphique.

Le Workbook_NewSheet ne sert que pour le cas où c'est l'utilisateur qui crée manuellement des onglets dont on veut maîtriser l'aspect ou autre.

Autre piste stocker l'image dans un onglet et la copier coller sur les graphs eux-mêmes mais le positionnement n'est sans doute pas aisé.
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 14h19   #10
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Ok,

Merci pour l'info 78chris.

J'ai une autre piste mais je ne sais pas comment m'y prendre. Je crée manuellement un onglet de type graphe. Dans l'en-tête de ce dernier, j'y insère mon image (de la taille voulue à l'emplacement désiré).

Je trace mon graphe par macro sur cet onglet (au lieu que la macro me crée un nouvel onglet graphique, elle me crée mon graphique dans cet onglet dont l'entête est formaté). Par contre je ne sais pas comment écrire "trace mon graphe dans cet onglet_graphique" ni même si c'est possible ?

Voici le code actuel :

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
Dim G1 As Chart
    Dim ws1 As Worksheet
    Dim PlageDonnees1 As Range
    Dim PlageX1 As Range
    Dim PlageY1 As Range
    Dim MaSerie1 As Series
    Dim Compteur1 As Long
    Dim Col1 As Long
    Dim Lig1 As Long
 
 
 
    Set ws1 = ThisWorkbook.Worksheets("Feuille de données du graphique")
 
    Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
    Col1 = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column - 1 'Recherche la dernière colonne contenant une donnée
 
    Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
 
 
    ws1.[A1] = "Nombre d'onde (cm-1)"
    ws1.[A1].Characters(Start:=18, Length:=2).Font.Superscript = True
 
     Application.ScreenUpdating = False
 
    With ws1
        Set PlageDonnees1 = .Range(.Cells(1, 1), .Cells(Lig1, Col1)) ' Définition de la plage de données
    End With
 
    Set G1 = ThisWorkbook.Charts.Add 'Ajout d'une feuille MonGraphe au classeur
        'G1.Name = "Graphique"
        G1.ChartArea.Clear 'Effacement des données du graphe
        G1.ChartType = xlXYScatter 'Définition du type de graphique (nuage de points)
    Set PlageX1 = PlageDonnees1.Columns(1)
    For Compteur1 = 1 To Col1
    Set PlageY1 = PlageX1.Offset(, Compteur1)
    Set MaSerie1 = G1.SeriesCollection.NewSeries
 
        With MaSerie1 'Formattage des séries de données
            .Values = PlageY1
            .XValues = PlageX1
            .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
            .Border.ColorIndex = 1 'Noir
            .Border.Weight = xlHairline
            .Border.LineStyle = xlContinuous
            .MarkerBackgroundColorIndex = xlNone
            .MarkerForegroundColorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            .MarkerSize = 3
            .Shadow = True
        End With
 
        G1.HasLegend = False
        G1.HasTitle = False
        With G1.Axes(xlCategory) 'axe des abscisses
            .HasTitle = True 'définition du titre des abscisses
            .AxisTitle.Characters.Text = "Nombre d'onde (cm-1)"
            .AxisTitle.Font.ColorIndex = 3
            .AxisTitle.Characters(Start:=18, Length:=2).Font.Superscript = True
            .AxisTitle.Font.Name = "Arial"
            .AxisTitle.Font.FontStyle = "Gras"
            .AxisTitle.Font.Size = 12
            .HasMajorGridlines = True 'Grille principale activée
            .HasMinorGridlines = True 'Grille secondaire activée
            .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
            .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
            .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
            .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
            .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
            .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
            .MinimumScale = 400 'valeur minimale
            .MaximumScale = 4000 'valeur maximale
            .MinorUnit = 50 'unité secondaire
            .MajorUnit = 200 'unité principale
            .Crosses = xlMaximum 'ordonnée à gauche
            .ReversePlotOrder = True 'échelle en ordre inverse
            .ScaleType = xlLinear
            .DisplayUnit = xlNone
            .MajorTickMark = xlCross 'position des unités principales
            .MinorTickMark = xlInside 'position des unités secondaires
            .TickLabelPosition = xlNextToAxis 'position des étiquette de données
            With .Border 'couleur et taille de l'axe
                .ColorIndex = 3 'couleur rouge
                .Weight = xlThin 'épaisseur
                .LineStyle = xlContinuous 'type
            End With
            With .TickLabels.Font 'Formatage des étiquettes de données
                .Name = "Arial" 'Police
                .FontStyle = "Normal" 'formattage
                .Size = 10 'taille
                .Strikethrough = False 'barrée
                .Superscript = False 'exposant
                .Subscript = False 'indice
                .OutlineFont = False '
                .Shadow = False 'transparence
                .Underline = xlUnderlineStyleNone 'souligné
                .ColorIndex = 3 'couleur (3=Rouge)
                .Background = xlAutomatic 'couleur du fond
            End With
        End With
 
        With G1.Axes(xlValue) 'axe des  ordonnées
            .HasTitle = True 'définition du titre des ordonnées
            .AxisTitle.Characters.Text = "Absorbance (U.A.)"
            .AxisTitle.Font.ColorIndex = 3
            .AxisTitle.Font.Name = "Arial"
            .AxisTitle.Font.FontStyle = "Gras"
            .AxisTitle.Font.Size = 12
            .HasMajorGridlines = True
            .HasMinorGridlines = True
            .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
            .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
            .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
            .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
            .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
            .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
            .MinimumScale = 0 'valeur minimale
            .MaximumScale = 3.5 'valeur maximale
            .MinorUnit = 0.1 'unité secondaire
            .MajorUnit = 0.5 'unité principale
            .Crosses = xlCustom 'Défini à quelle valeur l'axe X coupe l'axe Y
            .CrossesAt = 0 'Défini à quelle valeur l'axe X coupe l'axe Y
            .ReversePlotOrder = False 'échelle en ordre inverse
            .ScaleType = xlLinear
            .DisplayUnit = xlNonne
            .MajorTickMark = xlCross 'position des unités principales
            .MinorTickMark = xlInside 'position des unités secondaires
            .TickLabelPosition = xlNextToAxis 'position des étiquette de données
            With .Border 'couleur et taille de l'axe
                .ColorIndex = 3 'couleur rouge
                .Weight = xlThin 'épaisseur
                .LineStyle = xlContinuous 'type
            End With
            With .TickLabels.Font 'Formatage des étiquettes de données
                .Name = "Arial" 'Police
                .FontStyle = "Normal" 'formattage
                .Size = 10 'taille
                .Strikethrough = False 'barrée
                .Superscript = False 'exposant
                .Subscript = False 'indice
                .OutlineFont = False '
                .Shadow = False 'transparence
                .Underline = xlUnderlineStyleNone 'souligné
                .ColorIndex = 3 'couleur (3=Rouge)
                .Background = xlAutomatic 'couleur du fond
            End With
        End With
    Next Compteur1
 
    For Each MaSerie1 In G1.SeriesCollection
        MaSerie1.FormulaR1C1Local = Replace(MaSerie1.FormulaR1C1Local, "L1C", "L2C")
    Next MaSerie1
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h48   #11
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 598
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 598
Points : 902
Points : 902
Bonjour

J'avais regardé cette piste : on peut insérer un onglet graphique vide et lorsqu'on crée un graphique le placer sur cet onglet (dont il faudrait garder une copie au chaud

(code de l'enregistreur :
Code :
1
2
3
4
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Range("Feuil1!$C$2:$C$5")
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Graph1"
Mais le souci reste la taille et le positionnement : le graphique n'occupe pas tout l'espace. Il y a sans doute une commande qui le permet mais je ne connais pas...

Re

J'ai trouvé

Code :
1
2
3
4
5
6
7
8
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Range("Feuil1!$C$2:$C$5")
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Graph1"
    With ActiveSheet.ChartObjects(1)
        .Height = ActiveSheet.ChartArea.Height
        .Width = ActiveSheet.ChartArea.Width
    End With
78chris est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/01/2012, 17h09   #12
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Merci 78chris pour ces infos. Je vais regarder si j'arrive à adapter le code. Par contre étant un simple initié (et auto-formé) je risque de galérer. Sans pour autant faire le travail à ma place pourrais tu m'indiquer si le code suivant va être compatible avec le code que tu m'as fourni ?

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
Dim G1 As Chart
    Dim ws1 As Worksheet
    Dim PlageDonnees1 As Range
    Dim PlageX1 As Range
    Dim PlageY1 As Range
    Dim MaSerie1 As Series
    Dim Compteur1 As Long
    Dim Col1 As Long
    Dim Lig1 As Long
 
 
 
    Set ws1 = ThisWorkbook.Worksheets("Feuille de données du graphique")
 
    Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
    Col1 = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column - 1 'Recherche la dernière colonne contenant une donnée
 
    Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
 
 
    ws1.[A1] = "Nombre d'onde (cm-1)"
    ws1.[A1].Characters(Start:=18, Length:=2).Font.Superscript = True
 
     Application.ScreenUpdating = False
 
    With ws1
        Set PlageDonnees1 = .Range(.Cells(1, 1), .Cells(Lig1, Col1)) ' Définition de la plage de données
    End With
 
    Set G1 = ThisWorkbook.Charts.Add 'Ajout d'une feuille MonGraphe au classeur
        'G1.Name = "Graphique"
        G1.ChartArea.Clear 'Effacement des données du graphe
        G1.ChartType = xlXYScatter 'Définition du type de graphique (nuage de points)
    Set PlageX1 = PlageDonnees1.Columns(1)
    For Compteur1 = 1 To Col1
    Set PlageY1 = PlageX1.Offset(, Compteur1)
    Set MaSerie1 = G1.SeriesCollection.NewSeries
 
        With MaSerie1 'Formattage des séries de données
            .Values = PlageY1
            .XValues = PlageX1
            .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
            .Border.ColorIndex = 1 'Noir
            .Border.Weight = xlHairline
            .Border.LineStyle = xlContinuous
            .MarkerBackgroundColorIndex = xlNone
            .MarkerForegroundColorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            .MarkerSize = 3
            .Shadow = True
        End With
 
        G1.HasLegend = False
        G1.HasTitle = False
        With G1.Axes(xlCategory) 'axe des abscisses
            .HasTitle = True 'définition du titre des abscisses
            .AxisTitle.Characters.Text = "Nombre d'onde (cm-1)"
            .AxisTitle.Font.ColorIndex = 3
            .AxisTitle.Characters(Start:=18, Length:=2).Font.Superscript = True
            .AxisTitle.Font.Name = "Arial"
            .AxisTitle.Font.FontStyle = "Gras"
            .AxisTitle.Font.Size = 12
            .HasMajorGridlines = True 'Grille principale activée
            .HasMinorGridlines = True 'Grille secondaire activée
            .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
            .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
            .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
            .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
            .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
            .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
            .MinimumScale = 400 'valeur minimale
            .MaximumScale = 4000 'valeur maximale
            .MinorUnit = 50 'unité secondaire
            .MajorUnit = 200 'unité principale
            .Crosses = xlMaximum 'ordonnée à gauche
            .ReversePlotOrder = True 'échelle en ordre inverse
            .ScaleType = xlLinear
            .DisplayUnit = xlNone
            .MajorTickMark = xlCross 'position des unités principales
            .MinorTickMark = xlInside 'position des unités secondaires
            .TickLabelPosition = xlNextToAxis 'position des étiquette de données
            With .Border 'couleur et taille de l'axe
                .ColorIndex = 3 'couleur rouge
                .Weight = xlThin 'épaisseur
                .LineStyle = xlContinuous 'type
            End With
            With .TickLabels.Font 'Formatage des étiquettes de données
                .Name = "Arial" 'Police
                .FontStyle = "Normal" 'formattage
                .Size = 10 'taille
                .Strikethrough = False 'barrée
                .Superscript = False 'exposant
                .Subscript = False 'indice
                .OutlineFont = False '
                .Shadow = False 'transparence
                .Underline = xlUnderlineStyleNone 'souligné
                .ColorIndex = 3 'couleur (3=Rouge)
                .Background = xlAutomatic 'couleur du fond
            End With
        End With
 
        With G1.Axes(xlValue) 'axe des  ordonnées
            .HasTitle = True 'définition du titre des ordonnées
            .AxisTitle.Characters.Text = "Absorbance (U.A.)"
            .AxisTitle.Font.ColorIndex = 3
            .AxisTitle.Font.Name = "Arial"
            .AxisTitle.Font.FontStyle = "Gras"
            .AxisTitle.Font.Size = 12
            .HasMajorGridlines = True
            .HasMinorGridlines = True
            .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
            .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
            .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
            .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
            .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
            .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
            .MinimumScale = 0 'valeur minimale
            .MaximumScale = 3.5 'valeur maximale
            .MinorUnit = 0.1 'unité secondaire
            .MajorUnit = 0.5 'unité principale
            .Crosses = xlCustom 'Défini à quelle valeur l'axe X coupe l'axe Y
            .CrossesAt = 0 'Défini à quelle valeur l'axe X coupe l'axe Y
            .ReversePlotOrder = False 'échelle en ordre inverse
            .ScaleType = xlLinear
            .DisplayUnit = xlNonne
            .MajorTickMark = xlCross 'position des unités principales
            .MinorTickMark = xlInside 'position des unités secondaires
            .TickLabelPosition = xlNextToAxis 'position des étiquette de données
            With .Border 'couleur et taille de l'axe
                .ColorIndex = 3 'couleur rouge
                .Weight = xlThin 'épaisseur
                .LineStyle = xlContinuous 'type
            End With
            With .TickLabels.Font 'Formatage des étiquettes de données
                .Name = "Arial" 'Police
                .FontStyle = "Normal" 'formattage
                .Size = 10 'taille
                .Strikethrough = False 'barrée
                .Superscript = False 'exposant
                .Subscript = False 'indice
                .OutlineFont = False '
                .Shadow = False 'transparence
                .Underline = xlUnderlineStyleNone 'souligné
                .ColorIndex = 3 'couleur (3=Rouge)
                .Background = xlAutomatic 'couleur du fond
            End With
        End With
    Next Compteur1
 
    For Each MaSerie1 In G1.SeriesCollection
        MaSerie1.FormulaR1C1Local = Replace(MaSerie1.FormulaR1C1Local, "L1C", "L2C")
    Next MaSerie1
Il est entendu que je supprimerai les lignes suivantes :

Code :
1
2
 Set G1 = ThisWorkbook.Charts.Add 'Ajout d'une feuille MonGraphe au classeur
        'G1.Name = "Graphique"
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 19h50   #13
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 598
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 598
Points : 902
Points : 902
Bonjour

A priori le code ci-dessous fonctionne : une feuille graphique (sans graphique mais avec les en-têtes bien paramétrées) et nommée Graph_type sert de modèle.
Attention j'ai commenté certaines de tes lignes avec 3'''
Voir les parties colorées.
Je n'ai pas retesté, on peut sans doute placer le dimensionnement à la suite de l'autre modification...

La copie du modèle est nommée GRaph_toto : a adapter bien sûr

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
Dim G1 As Chart
    Dim ws1 As Worksheet
    Dim PlageDonnees1 As Range
    Dim PlageX1 As Range
    Dim PlageY1 As Range
    Dim MaSerie1 As Series
    Dim Compteur1 As Long
    Dim Col1 As Long
    Dim Lig1 As Long
 
 
 
    Set ws1 = ThisWorkbook.Worksheets("Feuille de données du graphique")
 
    Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
    Col1 = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column - 1 'Recherche la dernière colonne contenant une donnée
 
    Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
 
 
    ws1.[A1] = "Nombre d'onde (cm-1)"
    ws1.[A1].Characters(Start:=18, Length:=2).Font.Superscript = True
 
     Application.ScreenUpdating = False
 
    With ws1
        Set PlageDonnees1 = .Range(.Cells(1, 1), .Cells(Lig1, Col1)) ' Définition de la plage de données
    End With
 
    Sheets("Graph_type").Copy Before:=Sheets(2) 'Duplique le modèle
    Sheets("Graph_type (2)").Name = "Graph_toto" 'Renomme la copie
    Sheets("Graph_toto").Shapes.AddChart.Select 'Y place un graphique décrit ci-desous
    Set G1 = ActiveChart
    G1.ChartType = xlXYScatter 'Définition du type de graphique (nuage de points)
    G1.SetSourceData Source:=ws1.Range(PlageDonnees1.Address)
    G1.Location Where:=xlLocationAsObject, Name:="Graph_toto" 'Fin création de la base du graphique sur la copie de l'onglet modèle
    
    ''''Set G1 = ThisWorkbook.Charts.Add 'Ajout d'une feuille MonGraphe au classeur
        'G1.Name = "Graphique"
     '''G1.ChartArea.Clear 'Effacement des données du graphe
    
    Set PlageX1 = PlageDonnees1.Columns(1)
    For Compteur1 = 1 To Col1
    Set PlageY1 = PlageX1.Offset(, Compteur1)
    Set MaSerie1 = G1.SeriesCollection.NewSeries
 
        With MaSerie1 'Formattage des séries de données
            .Values = PlageY1
            .XValues = PlageX1
            .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
            .Border.ColorIndex = 1 'Noir
            .Border.Weight = xlHairline
            .Border.LineStyle = xlContinuous
            .MarkerBackgroundColorIndex = xlNone
            .MarkerForegroundColorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            .MarkerSize = 3
            .Shadow = True
        End With
 
        G1.HasLegend = False
        G1.HasTitle = False
        With G1.Axes(xlCategory) 'axe des abscisses
            .HasTitle = True 'définition du titre des abscisses
            .AxisTitle.Characters.Text = "Nombre d'onde (cm-1)"
            .AxisTitle.Font.ColorIndex = 3
            .AxisTitle.Characters(Start:=18, Length:=2).Font.Superscript = True
            .AxisTitle.Font.Name = "Arial"
            .AxisTitle.Font.FontStyle = "Gras"
            .AxisTitle.Font.Size = 12
            .HasMajorGridlines = True 'Grille principale activée
            .HasMinorGridlines = True 'Grille secondaire activée
            .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
            .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
            .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
            .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
            .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
            .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
            .MinimumScale = 400 'valeur minimale
            .MaximumScale = 4000 'valeur maximale
            .MinorUnit = 50 'unité secondaire
            .MajorUnit = 200 'unité principale
            .Crosses = xlMaximum 'ordonnée à gauche
            .ReversePlotOrder = True 'échelle en ordre inverse
            .ScaleType = xlLinear
            .DisplayUnit = xlNone
            .MajorTickMark = xlCross 'position des unités principales
            .MinorTickMark = xlInside 'position des unités secondaires
            .TickLabelPosition = xlNextToAxis 'position des étiquette de données
            With .Border 'couleur et taille de l'axe
                .ColorIndex = 3 'couleur rouge
                .Weight = xlThin 'épaisseur
                .LineStyle = xlContinuous 'type
            End With
            With .TickLabels.Font 'Formatage des étiquettes de données
                .Name = "Arial" 'Police
                .FontStyle = "Normal" 'formattage
                .Size = 10 'taille
                .Strikethrough = False 'barrée
                .Superscript = False 'exposant
                .Subscript = False 'indice
                .OutlineFont = False '
                .Shadow = False 'transparence
                .Underline = xlUnderlineStyleNone 'souligné
                .ColorIndex = 3 'couleur (3=Rouge)
                .Background = xlAutomatic 'couleur du fond
            End With
        End With
 
        With G1.Axes(xlValue) 'axe des  ordonnées
            .HasTitle = True 'définition du titre des ordonnées
            .AxisTitle.Characters.Text = "Absorbance (U.A.)"
            .AxisTitle.Font.ColorIndex = 3
            .AxisTitle.Font.Name = "Arial"
            .AxisTitle.Font.FontStyle = "Gras"
            .AxisTitle.Font.Size = 12
            .HasMajorGridlines = True
            .HasMinorGridlines = True
            .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
            .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
            .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
            .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
            .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
            .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
            .MinimumScale = 0 'valeur minimale
            .MaximumScale = 3.5 'valeur maximale
            .MinorUnit = 0.1 'unité secondaire
            .MajorUnit = 0.5 'unité principale
            .Crosses = xlCustom 'Défini à quelle valeur l'axe X coupe l'axe Y
            .CrossesAt = 0 'Défini à quelle valeur l'axe X coupe l'axe Y
            .ReversePlotOrder = False 'échelle en ordre inverse
            .ScaleType = xlLinear
            .DisplayUnit = xlNonne
            .MajorTickMark = xlCross 'position des unités principales
            .MinorTickMark = xlInside 'position des unités secondaires
            .TickLabelPosition = xlNextToAxis 'position des étiquette de données
            With .Border 'couleur et taille de l'axe
                .ColorIndex = 3 'couleur rouge
                .Weight = xlThin 'épaisseur
                .LineStyle = xlContinuous 'type
            End With
            With .TickLabels.Font 'Formatage des étiquettes de données
                .Name = "Arial" 'Police
                .FontStyle = "Normal" 'formattage
                .Size = 10 'taille
                .Strikethrough = False 'barrée
                .Superscript = False 'exposant
                .Subscript = False 'indice
                .OutlineFont = False '
                .Shadow = False 'transparence
                .Underline = xlUnderlineStyleNone 'souligné
                .ColorIndex = 3 'couleur (3=Rouge)
                .Background = xlAutomatic 'couleur du fond
            End With
        End With
    Next Compteur1
 
    For Each MaSerie1 In G1.SeriesCollection
        MaSerie1.FormulaR1C1Local = Replace(MaSerie1.FormulaR1C1Local, "L1C", "L2C")
    Next MaSerie1
'Dimensionnement
    With ActiveSheet.ChartObjects(1)
        .Height = ActiveSheet.ChartArea.Height
        .Width = ActiveSheet.ChartArea.Width
    End With
    ActiveSheet.ChartArea.Select 'déselectionne le graphique pour imprimer correctement l'en-tête
78chris est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/01/2012, 20h17   #14
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Merci beaucoup 78chris,

Ta macro fonctionne presque correctement. Je m'explique tout fonctionne bien sauf ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
With MaSerie1 'Formattage des séries de données
            .Values = PlageY1
            .XValues = PlageX1
            .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
            .Border.ColorIndex = 1 'Noir
            .Border.Weight = xlHairline
            .Border.LineStyle = xlContinuous
            .MarkerBackgroundColorIndex = xlNone
            .MarkerForegroundColorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            .MarkerSize = 3
            .Shadow = True
        End With
Je suis persuadé que c'est à cause d'un détail, mais impossible de trouver lequel !
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 20h38   #15
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 598
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 598
Points : 902
Points : 902
Bonjour

J'ai testé sans rencontrer d'erreur. Mes données étant bidon et sans doute pas comme les tiennes le graph ne montre pas grand chose mais il se construit jusqu'au bout...

Quelle erreur rencontres-tu et sur quelle ligne ?

As-tu bien mis en commentaires les lignes que j'ai indiquées

As-tu vérifié les noms ? Testé en debug ?
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 21h01   #16
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
En réalité ce n'est pas une erreur, le code tourne correctement, mais le formatage demandé pour les séries (trait fin sans marqueur et couleur noire) ne s'applique pas. Sinon le code fonctionne comme il faut, sans renvoyer d'erreur (j'ai bien une feuille toto qui contient mon graphe correctement (mais sans le formatage , désiré et spécifier dan sla macro)).
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 22h12   #17
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 598
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 598
Points : 902
Points : 902
Re

A priori cela venait du fait que mon code crée des séries et le tiens en ajoute.

J'ai ajouté un test pour éviter ce surplus de séries.

J'ai aussi terminé la boucle des séries avant le traitement des axes et autres : sauf si un élément dépend d'une valeur de série (ce qui ne semble pas être le cas mais je n'ai pas tout décortiquer) il est inutile de répéter cette partie.

Ceci devrait donc fonctionner

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
Dim G1 As Chart
    Dim ws1 As Worksheet
    Dim PlageDonnees1 As Range
    Dim PlageX1 As Range
    Dim PlageY1 As Range
    Dim MaSerie1 As Series
    Dim Compteur1 As Long
    Dim Col1 As Long
    Dim Lig1 As Long
 
 
 
    Set ws1 = ThisWorkbook.Worksheets("Feuil1")
 
    Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
    Col1 = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column - 1 'Recherche la dernière colonne contenant une donnée
 
    Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
 
 
    ws1.[A1] = "Nombre d'onde (cm-1)"
    ws1.[A1].Characters(Start:=18, Length:=2).Font.Superscript = True
 
     Application.ScreenUpdating = False
 
    With ws1
        Set PlageDonnees1 = .Range(.Cells(1, 1), .Cells(Lig1, Col1)) ' Définition de la plage de données
    End With
 
    Sheets("Graph_type").Copy Before:=Sheets(2)
    Sheets("Graph_type (2)").Name = "Graph_toto"
    Sheets("Graph_toto").Shapes.AddChart.Select
    Set G1 = ActiveChart
    G1.ChartType = xlXYScatter 'Définition du type de graphique (nuage de points)
    G1.SetSourceData Source:=ws1.Range(PlageDonnees1.Address)
    G1.Location Where:=xlLocationAsObject, Name:="Graph_toto"
    With ActiveSheet.ChartObjects(1)
        .Height = ActiveSheet.ChartArea.Height
        .Width = ActiveSheet.ChartArea.Width
    End With
    ActiveSheet.ChartArea.Select
 
    Set PlageX1 = PlageDonnees1.Columns(1)
    For Compteur1 = 1 To Col1
    Set PlageY1 = PlageX1.Offset(, Compteur1)
    If G1.SeriesCollection.Count >= Compteur1 Then
        Set MaSerie1 = G1.SeriesCollection(Compteur1)
    Else
        Set MaSerie1 = G1.SeriesCollection.NewSeries
    End If
 
        With MaSerie1 'Formattage des séries de données
            .Values = PlageY1
            .XValues = PlageX1
            .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
            .Border.ColorIndex = 1 'Noir
            .Border.Weight = xlHairline
            .Border.LineStyle = xlContinuous
            .MarkerBackgroundColorIndex = xlNone
            .MarkerForegroundColorIndex = xlNone
            .MarkerStyle = xlNone
            .Smooth = False
            '.MarkerSize = 3
            .Shadow = True
        End With
    Next Compteur1
 
        G1.HasLegend = False
        G1.HasTitle = False
        With G1.Axes(xlCategory) 'axe des abscisses
            .HasTitle = True 'définition du titre des abscisses
            .AxisTitle.Characters.Text = "Nombre d'onde (cm-1)"
            .AxisTitle.Font.ColorIndex = 3
            .AxisTitle.Characters(Start:=18, Length:=2).Font.Superscript = True
            .AxisTitle.Font.Name = "Arial"
            .AxisTitle.Font.FontStyle = "Gras"
            .AxisTitle.Font.Size = 12
            .HasMajorGridlines = True 'Grille principale activée
            .HasMinorGridlines = True 'Grille secondaire activée
            .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
            .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
            .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
            .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
            .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
            .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
            .MinimumScale = 400 'valeur minimale
            .MaximumScale = 4000 'valeur maximale
            .MinorUnit = 50 'unité secondaire
            .MajorUnit = 200 'unité principale
            .Crosses = xlMaximum 'ordonnée à gauche
            .ReversePlotOrder = True 'échelle en ordre inverse
            .ScaleType = xlLinear
            .DisplayUnit = xlNone
            .MajorTickMark = xlCross 'position des unités principales
            .MinorTickMark = xlInside 'position des unités secondaires
            .TickLabelPosition = xlNextToAxis 'position des étiquette de données
            With .Border 'couleur et taille de l'axe
                .ColorIndex = 3 'couleur rouge
                .Weight = xlThin 'épaisseur
                .LineStyle = xlContinuous 'type
            End With
            With .TickLabels.Font 'Formatage des étiquettes de données
                .Name = "Arial" 'Police
                .FontStyle = "Normal" 'formattage
                .Size = 10 'taille
                .Strikethrough = False 'barrée
                .Superscript = False 'exposant
                .Subscript = False 'indice
                .OutlineFont = False '
                .Shadow = False 'transparence
                .Underline = xlUnderlineStyleNone 'souligné
                .ColorIndex = 3 'couleur (3=Rouge)
                .Background = xlAutomatic 'couleur du fond
            End With
        End With
 
        With G1.Axes(xlValue) 'axe des  ordonnées
            .HasTitle = True 'définition du titre des ordonnées
            .AxisTitle.Characters.Text = "Absorbance (U.A.)"
            .AxisTitle.Font.ColorIndex = 3
            .AxisTitle.Font.Name = "Arial"
            .AxisTitle.Font.FontStyle = "Gras"
            .AxisTitle.Font.Size = 12
            .HasMajorGridlines = True
            .HasMinorGridlines = True
            .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
            .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
            .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
            .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
            .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
            .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
            .MinimumScale = 0 'valeur minimale
            .MaximumScale = 3.5 'valeur maximale
            .MinorUnit = 0.1 'unité secondaire
            .MajorUnit = 0.5 'unité principale
            .Crosses = xlCustom 'Défini à quelle valeur l'axe X coupe l'axe Y
            .CrossesAt = 0 'Défini à quelle valeur l'axe X coupe l'axe Y
            .ReversePlotOrder = False 'échelle en ordre inverse
            .ScaleType = xlLinear
            .DisplayUnit = xlNonne
            .MajorTickMark = xlCross 'position des unités principales
            .MinorTickMark = xlInside 'position des unités secondaires
            .TickLabelPosition = xlNextToAxis 'position des étiquette de données
            With .Border 'couleur et taille de l'axe
                .ColorIndex = 3 'couleur rouge
                .Weight = xlThin 'épaisseur
                .LineStyle = xlContinuous 'type
            End With
            With .TickLabels.Font 'Formatage des étiquettes de données
                .Name = "Arial" 'Police
                .FontStyle = "Normal" 'formattage
                .Size = 10 'taille
                .Strikethrough = False 'barrée
                .Superscript = False 'exposant
                .Subscript = False 'indice
                .OutlineFont = False '
                .Shadow = False 'transparence
                .Underline = xlUnderlineStyleNone 'souligné
                .ColorIndex = 3 'couleur (3=Rouge)
                .Background = xlAutomatic 'couleur du fond
            End With
        End With
 
    For Each MaSerie1 In G1.SeriesCollection
        MaSerie1.FormulaR1C1Local = Replace(MaSerie1.FormulaR1C1Local, "L1C", "L2C")
    Next MaSerie1
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 08h04   #18
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Bonjour,

Encore une fois merci pour ton aide 78chris.

Je rencontre un problème que je ne rencontrais pas hier soir !

5hier soir j'utilisais Excel 2007 et ce matin Excel 2003). Est ce que le code proposé serait incompatible avec Excel 2003 ?

Voici l'erreur 438 :

"Propriété ou méthode non gérée par cet objet"

Avec la ligne ci-dessous surlignée en jaune

Code :
Sheets("Graph_toto").Shapes.AddChart.Select 'Y place un graphique décrit ci-desous
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 13h58   #19
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Bon j'ai supprimé des lignes et ça semble fonctionner comme je le veux.

J'y suis presque !

Le seul inconvénient qu'il me reste est le raffraichissement de la page : A la fin de ma macro, la zone graphique parait vide (tout est blanc !). Cependant quand je clique sur aperçu avant impression mon graphique, dans le format désiré apparaît de manière optimale ! et lorsque je quitte le mode aperçu mon graphique apparaît normalement à l'écran.

La question est :

Comment faire pour que le graphique apparaisse normalement à l'écran sans faire au préalable un aperçu avant impression du graphique en question.

Voici mon code

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
'Graphique données brutes
        Lig1 = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 'Recherche la dernière ligne contenant une donnée
        Col1 = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column - 1 'Recherche la dernière colonne contenant une donnée
        With ws1
            Set PlageDonnees1 = .Range(.Cells(1, 1), .Cells(Lig1, Col1)) ' Définition de la plage de données
        End With
            Set G1 = W.Sheets("Spectre total") 'Insertion d'un graphe sur la feuille
            G1.ChartArea.Clear 'Effacement des données du graphe
            G1.ChartType = xlXYScatter 'Définition du type de graphique (nuage de points)
            G1.SetSourceData Source:=ws1.Range(PlageDonnees1.Address)
        Set PlageX1 = PlageDonnees1.Columns(1)
 
        For Compteur1 = 1 To Col1
            Set PlageY1 = PlageX1.Offset(, Compteur1)
 
        If G1.SeriesCollection.Count >= Compteur1 Then
            Set MaSerie1 = G1.SeriesCollection(Compteur1)
        Else
            Set MaSerie1 = G1.SeriesCollection.NewSeries
        End If
 
        If Compteur1 = 1 Then
            With MaSerie1 'Formattage des séries de données
                .Values = PlageY1
                .XValues = PlageX1
                .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
                .Border.ColorIndex = 8 'Vert IFP
                .Border.Weight = xlHairline
                .Border.LineStyle = xlContinuous
                .MarkerBackgroundColorIndex = xlNone
                .MarkerForegroundColorIndex = xlNone
                .MarkerStyle = xlNone
                .Smooth = False
                .Shadow = True
            End With
        End If
        If Compteur1 = 2 Then
            With MaSerie1 'Formattage des séries de données
                .Values = PlageY1
                .XValues = PlageX1
                .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
                .Border.ColorIndex = 6 'Violet IFP
                .Border.Weight = xlHairline
                .Border.LineStyle = xlContinuous
                .MarkerBackgroundColorIndex = xlNone
                .MarkerForegroundColorIndex = xlNone
                .MarkerStyle = xlNone
                .Smooth = False
                .Shadow = True
            End With
        End If
        If Compteur1 = Col1 Then
            With MaSerie1 'Formattage des séries de données
                .Values = PlageY1
                .XValues = PlageX1
                .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
                .Border.ColorIndex = 5 'Bleu IFP
                .Border.Weight = xlHairline
                .Border.LineStyle = xlContinuous
                .MarkerBackgroundColorIndex = xlNone
                .MarkerForegroundColorIndex = xlNone
                .MarkerStyle = xlNone
                .Smooth = False
                .Shadow = True
            End With
        End If
        If Compteur1 <> 1 And Compteur1 <> 2 And Compteur1 <> Col1 Then
            With MaSerie1 'Formattage des séries de données
                .Values = PlageY1
                .XValues = PlageX1
                .Name = PlageDonnees1.Cells(1, 1).Offset(, Compteur1)
                .Border.ColorIndex = 1 'Noir
                .Border.Weight = xlHairline
                .Border.LineStyle = xlContinuous
                .MarkerBackgroundColorIndex = xlNone
                .MarkerForegroundColorIndex = xlNone
                .MarkerStyle = xlNone
                .Smooth = False
                .Shadow = True
            End With
        End If
            G1.HasLegend = False
            G1.HasTitle = False
            With G1.Axes(xlCategory) 'axe des abscisses
                .HasTitle = True 'définition du titre des abscisses
                .AxisTitle.Characters.Text = "Nombre d'onde (cm-1)"
                .AxisTitle.Font.ColorIndex = 3
                .AxisTitle.Characters(Start:=18, Length:=2).Font.Superscript = True
                .AxisTitle.Font.Name = "Arial"
                .AxisTitle.Font.FontStyle = "Gras"
                .AxisTitle.Font.Size = 12
                .HasMajorGridlines = True 'Grille principale activée
                .HasMinorGridlines = True 'Grille secondaire activée
                .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
                .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
                .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
                .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
                .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
                .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
                .MinimumScale = 400 'valeur minimale
                .MaximumScale = 4000 'valeur maximale
                .MinorUnit = 50 'unité secondaire
                .MajorUnit = 200 'unité principale
                .Crosses = xlMaximum 'ordonnée à gauche
                .ReversePlotOrder = True 'échelle en ordre inverse
                .ScaleType = xlLinear
                .DisplayUnit = xlNone
                .MajorTickMark = xlCross 'position des unités principales
                .MinorTickMark = xlInside 'position des unités secondaires
                .TickLabelPosition = xlNextToAxis 'position des étiquette de données
                With .Border 'couleur et taille de l'axe
                    .ColorIndex = 3 'couleur rouge
                    .Weight = xlThin 'épaisseur
                    .LineStyle = xlContinuous 'type
                End With
                With .TickLabels.Font 'Formatage des étiquettes de données
                    .Name = "Arial" 'Police
                    .FontStyle = "Normal" 'formattage
                    .Size = 10 'taille
                    .Strikethrough = False 'barrée
                    .Superscript = False 'exposant
                    .Subscript = False 'indice
                    .OutlineFont = False '
                    .Shadow = False 'transparence
                    .Underline = xlUnderlineStyleNone 'souligné
                    .ColorIndex = 3 'couleur (3=Rouge)
                    .Background = xlAutomatic 'couleur du fond
                End With
            End With
            With G1.Axes(xlValue) 'axe des  ordonnées
                .HasTitle = True 'définition du titre des ordonnées
                .AxisTitle.Characters.Text = "Absorbance (U.A.)"
                .AxisTitle.Font.ColorIndex = 3
                .AxisTitle.Font.Name = "Arial"
                .AxisTitle.Font.FontStyle = "Gras"
                .AxisTitle.Font.Size = 12
                .HasMajorGridlines = True
                .HasMinorGridlines = True
                .MajorGridlines.Border.ColorIndex = 16 'couleur de la grille principale
                .MajorGridlines.Border.Weight = xlHairline 'taille du trait de la grille principale
                .MajorGridlines.Border.LineStyle = xlDash 'type de trait de la grille principale
                .MinorGridlines.Border.ColorIndex = 15 'couleur de la grille secondaire
                .MinorGridlines.Border.Weight = xlHairline 'taille du trait de la grille secondaire
                .MinorGridlines.Border.LineStyle = xlDot 'type de trait de la grille secondaire
                .MinimumScale = 0 'valeur minimale
                .MaximumScale = 3.5 'valeur maximale
                .MinorUnit = 0.1 'unité secondaire
                .MajorUnit = 0.5 'unité principale
                .Crosses = xlCustom 'Défini à quelle valeur l'axe X coupe l'axe Y
                .CrossesAt = 0 'Défini à quelle valeur l'axe X coupe l'axe Y
                .ReversePlotOrder = False 'échelle en ordre inverse
                .ScaleType = xlLinear
                .DisplayUnit = xlNonne
                .MajorTickMark = xlCross 'position des unités principales
                .MinorTickMark = xlInside 'position des unités secondaires
                .TickLabelPosition = xlNextToAxis 'position des étiquette de données
                With .Border 'couleur et taille de l'axe
                    .ColorIndex = 3 'couleur rouge
                    .Weight = xlThin 'épaisseur
                    .LineStyle = xlContinuous 'type
                End With
                With .TickLabels.Font 'Formatage des étiquettes de données
                    .Name = "Arial" 'Police
                    .FontStyle = "Normal" 'formattage
                    .Size = 10 'taille
                    .Strikethrough = False 'barrée
                    .Superscript = False 'exposant
                    .Subscript = False 'indice
                    .OutlineFont = False '
                    .Shadow = False 'transparence
                    .Underline = xlUnderlineStyleNone 'souligné
                    .ColorIndex = 3 'couleur (3=Rouge)
                    .Background = xlAutomatic 'couleur du fond
                End With
            End With
        Next Compteur1
        For Each MaSerie1 In G1.SeriesCollection
            MaSerie1.FormulaR1C1Local = Replace(MaSerie1.FormulaR1C1Local, "L1C", "L2C")
        Next MaSerie1
Voici ce que j'ai essayé, mais qui ne fonctionne pas :

Code :
1
2
3
4
'Rafraichissement de l'écran
    For x = 1 To Sheets.Count
        Application.ScreenUpdating = True
    Next x
Merci pour votre aide
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 08h13   #20
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Je mets résolu car le programme tourne correctement; Je pense que le nombre de données à traiter est trop important et c'est pour cette raison qu'il a du mal à afficher les pages du premier coup.

Encore merci !
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 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 16h43.


 
 
 
 
Partenaires

Hébergement Web